momentic 3.59.2 → 3.59.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="46992051-dbb9-55ae-9b49-3e50a6c9cf59")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="15fe00cb-0d91-5b70-87cd-9fa7077b6721")}catch(e){}}();
4
4
  import * as mn from 'fs';
5
5
  import mn__default, { statSync, mkdirSync, readFileSync, existsSync, readdir, readdirSync, createReadStream, writeFileSync, appendFileSync, rmSync, unlinkSync, renameSync } from 'fs';
6
6
  import * as bn from 'path';
@@ -177,17 +177,17 @@ What the agent did: ${n}`:t}var YE=Fs.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=cc.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(au(y,void 0,2)," ");i(o(` ${d}.${f}:`,b));continue}i(o(` ${d}.${f}:`,y));}}else typeof m=="object"?(p=au(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=au(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=Cw[t]:this.minLogLevel=t;}setOutputStream(t){this.forcedStream=t;}log(...t){this.logWithLevel(30,cc.reset,...t);}info(...t){this.logWithLevel(30,cc.white,...t);}debug(...t){this.logWithLevel(20,cc.dim,...t);}warn(...t){this.logWithLevel(40,cc.yellow,...t);}error(...t){this.logWithLevel(50,cc.red,...t);}success(...t){this.logWithLevel(30,cc.green,...t);}dimmed(...t){this.logWithLevel(30,cc.dim,...t);}underline(...t){this.logWithLevel(30,cc.underline,...t);}bold(...t){this.logWithLevel(30,cc.bold,...t);}grey(...t){this.logWithLevel(30,cc.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=()=>({})},Ca=new Oj,C=Pj._internalSingleton(),RP={},kj=({logger:e,logKey:t,maxCount:o,intervalMs:n},r,i,...a)=>{let s=RP[t];s?clearTimeout(s.timer):(s={count:0,totalCount:0},RP[t]=s),s.totalCount++,s.count<o&&(s.count++,e.debug(r,i,...a)),s.timer=setTimeout(()=>{let l=RP[t];l?.totalCount!==l?.count&&e.debug({logKey:t,totalCount:l?.totalCount,count:l?.count},`Debug logs were rate-limited for ${t}`),delete RP[t];},n);};var PS=ru.extend({browserType:z.enum(nu).optional(),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(iP).optional(),colorScheme:z.enum(["light","dark"]).optional()}),VX=["extraHeaders","basicAuthorization","localChromeExtensionPaths","proxy"],Mj=z.object({useMemory:z.boolean().optional(),failureRecovery:z.boolean().optional().describe("undefined means inherit org settings")}),Lj=Mj.extend({disableAICaching:z.boolean().optional()}),kUe=z.object({viewport:jm.optional()}),os=kUe.extend(Lj.shape).extend(PS.shape),CP=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()}),IP=z.object({onSuccess:z.boolean().default(false),failureMessage:z.string().optional(),onFailure:z.boolean().default(true),successMessage:z.string().optional()}),MUe=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")}),WX=MUe.array(),LUe=z.object({name:z.string(),value:z.string()}),xP=LUe.array(),qX=z.object({name:z.string(),default:z.boolean().optional(),fixtures:_6.array().optional()});var Gs=Mj.extend({agentConfig:z.record(z.string(),z.string()).optional(),aiFailureAnalysis:z.boolean().optional(),classification:rJ.optional(),healing:qb.optional(),explore:R_.optional(),select:MX.optional(),aiActionVersion:KE.optional()}),NUe=z.object({cliOnly:z.boolean().optional(),moDefault:z.boolean().optional(),neverShowUsageBanner:z.boolean().optional(),hideInternalTraceInfo:z.boolean().optional(),bypassUsageLimits:z.boolean().optional()}),Iw=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()}),DUe=z.object({includePassingRuns:z.boolean().optional(),showFailedTestDetails:z.boolean().optional()}),FUe=z.enum(["flaky_tests","low_test_coverage","frequent_bugs","fix_flaky_tests","migrate_tests","increase_test_coverage","catch_more_bugs"]),BUe=z.enum(["ios","android","web"]),UUe=z.enum(["selenium","playwright","cypress","puppeteer","maestro","appium","detox","manual_qa","nothing_yet","other"]),Dj=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"]),zUe=z.object({helpIntents:z.array(FUe).optional(),helpIntentOtherText:z.string().optional(),deviceTypeIntent:BUe.optional(),currentTestingTool:UUe.optional(),heardAboutSource:Dj.optional(),heardAboutSourceOtherText:z.string().max(200).optional()}),jUe=z.object({discovery:zUe.optional(),needsToCompleteOnboarding:z.boolean().optional(),needsWorkspaceName:z.boolean().optional(),wizardCompletedAt:z.iso.datetime().optional()}),OS=z.object({ai:Gs.optional(),githubAppInstallationId:z.number().nullish(),githubAppSummaryMessageEnabled:z.boolean().nullish(),githubPullRequestComments:DUe.optional(),githubReleaseAppInstallationId:z.number().nullish(),gitlabAppAccessToken:z.string().nullish(),gitlabAppBaseUrl:z.string().nullish(),browser:Jz.optional(),internal:NUe.optional(),advanced:Iw.optional(),onboarding:jUe.optional()}),HUe=5;function KX(e){let t=e,o=[];for(let n=0;n<HUe;n++){let r=OS.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=$Ue(r.error.issues.map(l=>[...l.path]).filter(l=>l.length>0));if(i.length===0)break;let a=structuredClone(t),s=[...i].sort(GUe);for(let l of s)Nj(a,l);if(JSON.stringify(a)===JSON.stringify(t)){for(let l of s)l.length>1&&Nj(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."),OS.parse({})}function $Ue(e){return [...new Map(e.map(o=>[o.join("\0"),o])).values()]}function GUe(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 Nj(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}Nj(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 YX="Evaluating run assertions",_P=z.string();function xw(e){return (e.runAssertions?.length??0)>0}var VUe=z.object({videoName:z.string(),startSeconds:z.number(),endSeconds:z.number().optional()}),Fj=z.discriminatedUnion("type",[z.object({type:z.literal("videoMoment"),moment:VUe})]),Bj=(r=>(r.PASSED="passed",r.FAILED="failed",r.SKIPPED="skipped",r.INCONCLUSIVE="inconclusive",r))(Bj||{}),WUe=z.nativeEnum(Bj),qUe=z.array(z.unknown()).default([]).transform(e=>e.flatMap(t=>{let o=Fj.safeParse(t);return o.success?[o.data]:[]})),KUe=z.object({description:z.string(),status:WUe,reasoning:z.string(),evidence:qUe}),YUe=z.object({attemptNumber:z.number(),evaluations:KUe.array(),durationMs:z.number()});function JX(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 XX=z.object({attempts:YUe.array()}),JUe=/\[\[e(\d+)\]\]/g;function QX(e){return [...e.matchAll(JUe)].map(t=>Number(t[1]))}var El={WEBHOOK:"WEBHOOK",CRON:"CRON",MANUAL:"MANUAL",CLI:"CLI"},$t=(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))($t||{});var kS=(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))(kS||{});var Nf=z.enum(kS).default("NOT_ATTEMPTED"),PP=(o=>(o.BEFORE_ALL="BEFORE_ALL",o.AFTER_ALL="AFTER_ALL",o))(PP||{});var XUe=z.object({attempts:z.int().nonnegative()}),Vn=z.string().pipe(z.coerce.date()).or(z.date()),ns=z.object({id:z.string(),runKey:z.string(),organizationId:z.string(),executionType:$m.optional().default("WEB"),createdAt:Vn,createdBy:z.string(),flake:z.boolean().nullish(),scheduledAt:Vn.or(z.null()),startedAt:Vn.or(z.null()),updatedAt:Vn.nullish(),finishedAt:Vn.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:Vn.nullish(),gitCommitMessage:z.string().nullish(),schemaVersion:z.string().nullish(),cliVersion:z.string().nullish(),section:z.enum(PP).nullish(),status:z.enum($t),healStatus:Nf,healDetails:U6.nullish(),trigger:z.enum(El),attempts:z.number(),runAttempts:z.array(z.object({id:z.string(),status:z.enum($t),startedAt:Vn.or(z.null()),finishedAt:Vn.or(z.null())})).optional(),videos:z.array(z.string()).optional(),failureReason:z.string().nullish(),failureDetails:gJ.nullish(),failureRecoveryDetails:XUe.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:Gs.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:XX.nullish()}),QUe={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=ns.pick({...QUe,test:true}),ZX=ns.omit({failureReason:true,failureDetails:true,test:true}),Uj=ns.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:os.nullish()}).nullish()}).extend(Aj.shape),eQ=e=>e.includes("PASSED")&&e.includes("FAILED");var ZUe=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.")}),tQ=z.object({newrelic:ZUe.optional()}),eze=z.object({category:z.string(),reasoning:z.string(),citations:z.array(Tn).optional()}),tze=z.object({testInputs:z.record(z.string(),z.string()).optional(),envName:z.string().optional(),urlOverride:z.string().optional()}),oze=z.object({reason:z.string().optional(),message:z.string().optional()}),nze=z.object({runId:z.string().optional(),testId:z.string(),testName:z.string(),filePath:z.string(),labels:z.array(z.string()).optional(),status:z.enum($t),startedAt:z.string(),finishedAt:z.string(),durationMs:z.number(),attempts:z.number(),quarantined:z.boolean(),recovered:z.boolean(),parameters:tze.optional(),failure:oze.nullable(),classification:eze.nullable()}),rze=z.object({testId:z.string(),testName:z.string(),filePath:z.string(),labels:z.array(z.string()).optional(),quarantined:z.boolean()}),ize=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()}),oQ=z.object({version:z.literal(1),runGroup:z.object({startedAt:z.string(),finishedAt:z.string(),durationMs:z.number()}),summary:ize,runs:z.array(nze),skipped:z.array(rze)});var nQ=z.enum(["error","warning","passing"]);var rQ=z.enum(["safe_to_merge","confirm_intended_change","investigate_regression","fix_test","resolve_infra","review_coverage"]),sze=rQ.exclude(["review_coverage"]);var lze="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 iQ=z.object({kind:rQ,detail:z.string().min(1).max(280)}),Df=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:iQ.optional()}),aQ=Df.extend({riskLevel:nQ.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(lze),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:iQ.extend({kind:sze.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 dze=z.enum(["SELECTED","RUN_ALL","RUN_NONE","SHADOW"]),_w=z.object({mode:dze,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(wP),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 sQ(e){return uniqWith([...e],isEqual)}var lQ=z.object({id:z.string(),status:z.enum($t),trigger:z.enum(El),createdAt:Vn,startedAt:Vn.nullish(),finishedAt:Vn.nullish(),gitCommitSha:z.string().nullish(),gitCommitShaShort:z.string().nullish(),gitCommitTimestamp:Vn.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:Df.optional(),aiSelect:_w.array().optional(),environments:z.string().array().optional(),executionTypes:$m.array().optional(),localSuiteName:z.string().optional(),suite:z.object({id:z.string(),name:z.string()}).nullish(),runs:z.object({status:z.enum($t)}).array()}),cQ=lQ.pick({id:true,createdAt:true,startedAt:true,finishedAt:true,status:true,trigger:true,suite:true,localSuiteName:true}).extend({runs:OP.array()}),kP=lQ.extend({runs:ns.array()});var mze=z.object({type:z.literal("TARGETING"),name:z.string().optional().describe("Target name to disambiguate for steps with multiple targets"),elementLocationDecisions:wX.array(),pageState:z.string().optional(),targetSource:z.enum(Jc).optional(),targetUpdateTime:z.string().optional()}),pze=z.object({type:z.literal("AI_LOCATION"),matched:z.boolean(),pageState:z.string().optional(),ragUsed:z.boolean().optional(),thoughts:z.string().optional()}),hze=z.object({type:z.literal("ASSERTION"),relevantElementsSerialized:z.string().array().optional(),pageState:z.string().optional(),ragUsed:z.boolean().optional()}),MP=z.discriminatedUnion("type",[mze,pze,hze]);var gze=z.object({id:z.string(),name:z.string()});gze.extend(z.object({createdAt:Vn,createdBy:z.string(),schedule:CP,notification:IP,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 uQ=z.object({id:z.guid(),orgId:z.string(),createdAt:Vn,startedAt:Vn.or(z.null()),finishedAt:Vn.or(z.null()),status:z.enum($t),trigger:z.enum(El),suite:z.object({id:z.string(),name:z.string()}).nullish(),runs:ns.array()});uQ.pick({id:true,createdAt:true,startedAt:true,finishedAt:true,status:true,trigger:true,suite:true});var dQ=uQ.extend({runs:OP.array()});function mQ({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 LP(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 pQ(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 zj=z.object({content:z.string(),ids:z.string().array(),tokenLength:z.number()}),fze=z.object({chunks:zj.array()});z.object({ids:z.string().array(),score:z.number(),tokenLength:z.number()});fze.extend({description:z.string().describe("Input to pass to RAG engine"),tokenLimit:z.number()});var hQ=z.object({ids:z.number().array()}),gQ=z.object({indices:z.number().array()});var wl=(o=>(o.Interactive="interactive",o.Runner="runner",o))(wl||{}),yze=z.enum(wl),Xr=z.object({disableCache:z.boolean().optional(),useMemory:z.boolean().optional(),clientMode:yze.optional(),loggerTags:z.record(z.string(),z.string()).optional(),langfuseSessionId:z.string().optional(),agentConfigVersion:z.string().optional(),effort:bt.optional(),cacheBustReason:z.enum(LE).optional()});Xr.extend({chunks:zj.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 bze=z.object({screenshotBase64AfterCommand:z.string(),urlAfterCommand:z.string(),serializedCommand:z.string(),elementInteracted:z.string().optional(),thoughts:z.string().optional()}),fQ=z.object({goal:z.string(),browserState:z.string(),screenshot:z.string(),source:AX.optional().catch(void 0),markIneligibleElementsInChecks:z.boolean().optional(),isTieBreakerCall:z.boolean().optional(),memory:z.discriminatedUnion("type",[Xc,z.object({type:z.literal("RESOLVED_TRACES"),traces:z.unknown().optional().array()})]).optional(),firstPassModelResults:yP.array().optional(),knowledgeBaseSection:z.string().optional()}),yQ=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()}),bQ=z.object({goal:z.string(),browserState:z.string(),screenshot:z.string().optional(),returnSchema:z.string().optional()}),SQ=z.object({goal:z.string(),emulatorState:z.string(),screenshot:z.string().optional(),returnSchema:z.string().optional()}),jj=z.union([z.literal("NEGATED_CHECK"),z.literal("CONDITIONAL_CHECK")]),TQ=z.object({goal:z.string(),browserState:z.string(),screenshot:z.string(),url:z.string(),contextChoice:_f.optional(),memory:z.discriminatedUnion("type",[Cf,z.object({type:z.literal("RESOLVED_TRACES"),traces:z.unknown().optional().array()})]).optional(),source:jj.optional(),recoveryHint:z.string().optional(),knowledgeBaseSection:z.string().optional()}),vQ=z.object({command:mh}),Hj=z.object({goal:z.string(),browserState:z.string(),startingScreenshot:z.string().optional(),screenshot:z.string(),url:z.string(),history:bze.array(),actionHint:z.string().optional(),lastError:z.string().optional()}),AQ=z.object({results:cP.array(),errorMessage:z.string(),errorStack:z.string().optional()}),EQ=z.object({results:cP.array(),goal:z.string(),errorMessage:z.string()}),wQ=z.object({failedResults:cP.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 RQ=z.object({type:z.string(),browserContext:z.string(),currentStep:z.string(),screenshot:z.string()}),CQ=z.object({description:z.string(),browserState:z.string().optional(),screenshot:z.string()}),IQ=z.object({description:z.string().optional(),screenshot:z.string(),platform:CX}),Sze=z.enum(["locator","assertion"]);z.object({completionType:Sze,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 xQ=z.object({keywords:z.array(z.string())});var su=x__default.object({id:x__default.guid(),envKey:x__default.string().optional(),skipped:x__default.boolean().optional(),retries:x__default.number().optional()});var dc=(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))(dc||{});var Ih=su.extend({type:x__default.literal("MOBILE_CONDITIONAL_STEP")});var Ia=z.object({id:z.string(),name:K_,baseUrl:Y_,description:z.string().optional().nullish(),schemaVersion:z.string(),advanced:os,retries:z.number().optional().nullish(),envs:z.array(qX).nullish(),parameters:WX.nullish(),disabled:z.boolean().optional(),labels:z.array(z.string()).optional().catch([]),runAssertions:_P.array().nullish()}),$j=z.enum(["INHERIT","ENABLED","DISABLED"]);var vze=os.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"]});}),Aze=os.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"]});}),Eze=os.extend({failureRecovery:$j.optional(),geolocation:vze.optional(),proxy:Aze.optional(),slowMoMs:z.union([Yz,z.literal(-1)]).optional(),turbo:$j.optional(),useMemory:$j.optional()});Ia.pick({name:true,description:true,baseUrl:true,retries:true,disabled:true,parameters:true,runAssertions:true}).extend({advanced:Eze});Ia.pick({name:true,description:true,baseUrl:true,retries:true,disabled:true,advanced:true,parameters:true,runAssertions:true});var wze=z.object({labels:z.array(z.string()).optional(),outputs:xP.nullish()}),Zn=Ia.extend(wze.shape),Rze=z.object({createdAt:z.coerce.date(),updatedAt:z.coerce.date(),updatedBy:z.string().nullable(),schedule:CP,notification:IP,createdBy:z.string(),organizationId:z.string(),folderId:z.string().nullable().optional()}),Cze=Ia.extend(Rze.shape);Cze.extend(Tl.shape);var Gj=Ia.extend(Tl.shape);Ia.extend(Lm.shape);var Ize="test",xze="module",_ze="mobile-test",Pze="mobile-module",Oze="test/v2",kze="module/v2",Mze="mobile-test/v2",Lze="mobile-module/v2";var Ue=(l=>(l.TEST=`momentic/${Ize}`,l.MODULE=`momentic/${xze}`,l.TEST_V2=`momentic/${Oze}`,l.MODULE_V2=`momentic/${kze}`,l.MOBILE_TEST=`momentic/${_ze}`,l.MOBILE_MODULE=`momentic/${Pze}`,l.MOBILE_TEST_V2=`momentic/${Mze}`,l.MOBILE_MODULE_V2=`momentic/${Lze}`,l))(Ue||{});Ia.merge(Lm);var Nze=nr.extend({steps:z.array(z.record(z.string(),z.unknown().optional())),schemaVersion:z.string()}),kw=Nze.extend({fileType:z.literal(Ue.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 NP(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(NP);let t={};for(let[o,n]of Object.entries(e))t[o]=NP(n);return t}var Dze=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,_Q=36,ir=z.union([z.guid().max(_Q,"V2 IDs must be 36 characters or fewer"),z.string().max(_Q,"V2 IDs must be 36 characters or fewer").regex(Dze,"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 DP=x.discriminatedUnion("type",[x.object({type:x.literal("SCREEN")}),x.object({type:x.literal("OPEN_APP")}),x.object({type:x.literal("OPEN_WEBVIEW")})]),Gm=x.object({type:x.literal("description"),description:x.string()}),Wj=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")}),FP=x.discriminatedUnion("type",[...DP.options,x.object({type:x.literal("CUSTOM"),target:Gm}),Wj]);function Fze(e){return e.toLowerCase().replaceAll("_"," ")}function qj(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 Fze(e.type);default:{throw new Error("Unreachable")}}}var Bze=x.object({type:x.literal("coordinates"),xPercent:x.number(),yPercent:x.number()}),Uze=x.object({type:x.literal("absolute_percent"),x:x.number(),y:x.number()}),MS=x.discriminatedUnion("type",[Gm,Bze,Uze]);var zze=x.object({x1:x.number(),y1:x.number(),x2:x.number(),y2:x.number(),tolerance:x.nativeEnum(Ds),preciseTolerance:x.boolean().optional()}),jze=x.object({width:x.number(),height:x.number(),tolerance:x.nativeEnum(Ds),preciseTolerance:x.boolean().optional()}),Kj=x.object({requiredText:x.string().optional(),requiredAttributes:x.record(x.string(),x.string()).optional(),requiredBounds:x.boolean().optional(),position:zze.optional(),shape:jze.optional()}),PQ=x.object({xPath:x.string(),requirements:Kj.optional()}),Hze=x.object({type:x.literal("CUSTOM"),target:Gm,cache:x.lazy(()=>OQ).optional()}),$ze=x.object({pixelDelta:x.number().describe("Number of pixels to scroll in the specified direction"),scrollableElement:x.union([DP,Hze,Wj]),direction:x.enum(["up","down"])}),OQ=x.object({type:x.literal("NATIVE"),bounds:x.number().array().optional(),resolvedDescription:x.string().optional(),xPath:x.string().optional(),elementOnlySerializedXml:x.string().optional(),scrollDetails:$ze.optional(),requirements:Kj.optional(),requiredRelatedElements:PQ.array().optional(),memory:Xc.optional()}),Gze=x.object({type:x.literal("WEBVIEW"),resolvedDescription:x.string().optional(),xPath:x.string().optional(),browserCache:Zu.optional(),memory:Xc.optional()}),BP=x.union([OQ,Gze]);var Vze=x.object({left:x.number(),top:x.number(),right:x.number(),bottom:x.number()});x.object({newViewportBounds:Vze});var Wze=x.object({type:x.literal("CUSTOM"),target:Gm,cache:x.lazy(()=>NQ).optional()}),kQ=x.object({pixelDelta:x.number().describe("Number of pixels to scroll in the specified direction"),scrollableElement:x.union([DP,Wze,Wj]),direction:x.enum(["up","down"])}),MQ=(o=>(o.Native="native",o.Appium="appium",o))(MQ||{}),Yj=x.tuple([x.number(),x.number(),x.number(),x.number()]),LQ=PQ.extend({bounds:Yj.optional(),browserCache:Zu.optional()}),NQ=x.object({type:x.literal("NATIVE"),bounds:Yj.optional(),resolvedDescription:x.string().optional(),sourceTree:x.nativeEnum(MQ).optional(),xPath:x.string().optional(),elementOnlySerializedXml:x.string().optional(),scrollDetails:kQ.optional(),requirements:Kj.optional(),requiredRelatedElements:LQ.array().optional(),memory:Xc.optional()}),qze=x.object({type:x.literal("WEBVIEW"),bounds:Yj.optional(),resolvedDescription:x.string().optional(),xPath:x.string().optional(),scrollDetails:kQ.optional(),browserCache:Zu.optional(),requiredRelatedElements:LQ.array().optional(),memory:Xc.optional()}),UP=x.discriminatedUnion("type",[NQ,qze]);var ho=(k=>(k.AI_CHECK="AI_CHECK",k.AI_EXTRACT="AI_EXTRACT",k.TAP="TAP",k.TYPE="TYPE",k.PRESS="PRESS",k.PRESS_KEYBOARD="PRESS_KEYBOARD",k.OPEN_APP="OPEN_APP",k.KILL_APP="KILL_APP",k.OPEN_NOTIFICATION_DRAWER="OPEN_NOTIFICATION_DRAWER",k.SWIPE="SWIPE",k.SCROLL_TO="SCROLL_TO",k.SCREEN_CHECK="SCREEN_CHECK",k.ELEMENT_CHECK="ELEMENT_CHECK",k.VISUAL_DIFF="VISUAL_DIFF",k.DRAG_AND_DROP="DRAG_AND_DROP",k.JAVASCRIPT="JAVASCRIPT",k.REQUEST="REQUEST",k.WAIT="WAIT",k.ADD_FILE="ADD_FILE",k.INSTALL_APP="INSTALL_APP",k.UNINSTALL_APP="UNINSTALL_APP",k.TOGGLE_SETTINGS="TOGGLE_SETTINGS",k.ROTATE_ORIENTATION="ROTATE_ORIENTATION",k.ADB_COMMAND="ADB_COMMAND",k.APPIUM_EXECUTE="APPIUM_EXECUTE",k.SET_CAMERA="SET_CAMERA",k.CLEAR_CAMERA="CLEAR_CAMERA",k.SET_MICROPHONE="SET_MICROPHONE",k.CLEAR_MICROPHONE="CLEAR_MICROPHONE",k.STATE="STATE",k))(ho||{});var ct=x__default.object({id:x__default.guid(),disableCache:x__default.boolean().optional()}),LS=x__default.object({updatedAt:x__default.coerce.date().optional(),updatedAtLoggerTags:x__default.record(x__default.string(),x__default.string()).optional()}),mc=LS.extend({target:BP}),zP=LS.extend({fromTarget:BP,toTarget:BP}),gd=LS.extend({target:UP}),DQ=LS.extend({fromTarget:UP,toTarget:UP}),Vm=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 FQ=ct.extend({type:x__default.literal("ADB_COMMAND"),command:x__default.string(),jsonArgs:x__default.string().optional()});var BQ=ct.extend({type:x__default.literal("OPEN_NOTIFICATION_DRAWER")});var Mw=(r=>(r.AIRPLANE_MODE="AIRPLANE_MODE",r.DATA="DATA",r.WIFI="WIFI",r.LOCATION="LOCATION",r))(Mw||{}),zQ=ct.extend({type:x__default.literal("TOGGLE_SETTINGS"),settingsType:x__default.nativeEnum(Mw)});var HQ=ct.extend({type:x__default.literal("UNINSTALL_APP"),packageName:x__default.string()});var jP=ct.extend({type:x__default.literal("APPIUM_EXECUTE"),command:x__default.string(),jsonArgs:x__default.string().optional()});var $Q=ct.extend({type:x__default.literal("ADD_FILE"),file:x__default.string(),storageLocation:x__default.string()});var Wm=ct.extend({type:x__default.literal("AI_CHECK"),assertion:x__default.string(),timeoutSecs:x__default.number().optional(),contextChoice:_f.optional(),cache:LS.extend({memory:Cf.optional()}).optional()});var GQ=ct.extend({type:x__default.literal("AI_EXTRACT"),goal:x__default.string(),schema:x__default.string().optional()});var WQ=ct.extend({type:x__default.literal("INSTALL_APP"),uri:x__default.string().trim()});var NS=ct.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 qQ=ct.extend({type:x__default.literal("KILL_APP")});var Nw=(o=>(o.HOME="HOME",o.POWER="POWER",o))(Nw||{}),HP=(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))(HP||{}),$P=ct.extend({type:x__default.literal("PRESS"),key:x__default.nativeEnum(Nw),longPress:x__default.boolean().optional()}),KQ=$P.extend({key:x__default.nativeEnum(HP).or(x__default.nativeEnum(Nw))}),YQ=$P;var JQ=ct.extend({type:x__default.literal("REQUEST")}).merge(FE);var oH=(o=>(o.PORTRAIT="PORTRAIT",o.LANDSCAPE="LANDSCAPE",o))(oH||{}),QQ=ct.extend({type:x__default.literal("ROTATE_ORIENTATION"),orientation:x__default.nativeEnum(oH)});var Xze=x__default.object({type:x__default.literal("CONTENT"),negated:x__default.boolean().optional(),value:x__default.string()}),FS=ct.extend({type:x__default.literal("SCREEN_CHECK"),assertion:Xze,timeout:x__default.number().int().min(0).max(id).optional().describe("max seconds to wait for the assertion to be true")});var ZQ=ct.extend({type:x__default.literal("STATE")});var e8=ct.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 o8=ct.extend({type:x__default.literal("WAIT"),timeoutSecs:x__default.number()});var Dw=x__default.discriminatedUnion("type",[ZQ,Wm,GQ,NS,o8,JQ,QQ,FS,e8,$Q,WQ,qQ]);x__default.discriminatedUnion("type",[...Dw.options,$P]);var rH=ct.extend({type:x__default.literal("DRAG_AND_DROP"),fromTarget:Gm,toTarget:Gm,hoverDuration:x__default.number().optional(),dragDuration:x__default.number().optional()}),Fw=rH.extend({cache:zP.optional()}),Bw=rH.extend({cache:DQ.optional()});var iH=ct.extend({type:x__default.literal("ELEMENT_CHECK"),target:MS,assertion:U_,timeout:x__default.number().int().min(0).max(id).optional().describe("max seconds to wait for the assertion to be true")}),Ff=iH.extend({cache:mc.optional()}),Bf=iH.extend({cache:gd.optional()});var Uw=(o=>(o.ENTER="ENTER",o.BACKSPACE="BACKSPACE",o))(Uw||{}),GP=(t=>(t.CLOSE_KEYBOARD="CLOSE_KEYBOARD",t))(GP||{}),i8={repeat:x__default.number().int().min(1).optional(),keyPressDelayMs:x__default.number().min(0).optional()},a8=ct.extend({type:x__default.literal("PRESS_KEYBOARD"),key:x__default.nativeEnum(Uw),...i8}),s8=ct.extend({type:x__default.literal("PRESS_KEYBOARD"),key:x__default.nativeEnum(GP).or(x__default.nativeEnum(Uw)),...i8});var l8=ct.extend({type:x__default.literal("OPEN_APP"),packageName:x__default.string(),activityName:x__default.string().optional(),intentExtras:x__default.string().optional()}),c8=ct.extend({type:x__default.literal("OPEN_APP"),packageName:x__default.string(),intentExtras:x__default.string().optional()});var aH=ct.extend({type:x__default.literal("SCROLL_TO"),target:Gm,direction:x__default.enum(["down","up"]),scrollableElement:FP,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.")}),zw=aH.extend({cache:mc.optional()}),jw=aH.extend({cache:gd.optional()});var sH=ct.extend({type:x__default.literal("SWIPE"),direction:x__default.enum(["up","down","left","right"]),scrollableElement:FP,viewportPercent:x__default.number().optional(),durationMs:x__default.number().optional(),relativePosition:F_.optional()}),Hw=sH.extend({cache:mc.optional()}),$w=sH.extend({cache:gd.optional()});var lH=ct.extend({type:x__default.literal("TAP"),target:MS,longPress:x__default.boolean().optional(),longPressDurationMs:x__default.number().optional(),iterations:x__default.number().optional(),tapDelayMs:x__default.number().optional(),relativePosition:F_.optional(),doubleTap:x__default.boolean().optional(),doubleTapDelayMs:x__default.number().optional()}),Gw=lH.extend({cache:mc.optional()}),Vw=lH.extend({cache:gd.optional()});var Ww=(r=>(r.AUTO="auto",r.PROGRAMMATIC="programmatic",r.LONG_PRESS="long-press",r.BACKSPACE="backspace",r))(Ww||{});var cH=ct.extend({type:x__default.literal("TYPE"),target:MS.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(Ww).optional()});var qw=cH.extend({cache:mc.optional()}),Kw=cH.extend({cache:gd.optional()});var Yw=x__default.discriminatedUnion("type",[...Dw.options,Gw,qw,KQ,s8,HQ,FQ,jP,Fw,BQ,zw,Hw,zQ,Ff,l8]);var d8=ct.extend({type:x__default.literal("SET_CAMERA"),file:x__default.string(),loop:x__default.boolean().optional(),playAudio:x__default.boolean().optional()}),m8=ct.extend({type:x__default.literal("CLEAR_CAMERA")});var p8=ct.extend({type:x__default.literal("SET_MICROPHONE"),file:x__default.string(),once:x__default.boolean().optional()}),h8=ct.extend({type:x__default.literal("CLEAR_MICROPHONE")});var Xw=x__default.discriminatedUnion("type",[...Dw.options,Vw,Kw,YQ,a8,c8,$w,Bw,jw,Bf,jP,d8,m8,p8,h8]);var qm=su.extend({type:x__default.literal("MOBILE_WHILE_LOOP_STEP"),maxIterations:x__default.number().int().positive().optional()});var y8=x__default.union([x__default.string(),x__default.record(x__default.string(),x__default.unknown().optional())]),KP=su.extend({type:x__default.literal("MOBILE_PRESET_STEP"),keyPressDelayMs:x__default.number().optional()}),BS=KP.extend({command:Yw}),US=KP.extend({command:Xw}),zS=x__default.object({moduleId:x__default.string(),inputs:x__default.record(x__default.string(),x__default.string()).optional()}),eR=su.merge(zS.extend({type:x__default.literal("MOBILE_MODULE_STEP")}));zS.extend({steps:x__default.lazy(()=>cu.array())});zS.extend({steps:x__default.lazy(()=>fd.array())});var uH=(o=>(o.V2="2",o.V3="3",o))(uH||{});var b8="3",dH=x__default.nativeEnum(uH),tR=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(Dt),message:x__default.string().optional()}).array(),finalScreenshot:fl.optional()}),Qw=x__default.lazy(()=>x__default.discriminatedUnion("type",[BS,cje])),Zw=x__default.lazy(()=>x__default.discriminatedUnion("type",[US,uje]));var oje=Qu.extend({platform:x__default.literal("ANDROID"),resolvedGoal:x__default.string(),steps:x__default.lazy(()=>Qw.array()),lastSuccessfulRun:tR.optional()}),nje=Qu.extend({platform:x__default.literal("IOS"),resolvedGoal:x__default.string(),steps:x__default.lazy(()=>Zw.array()),lastSuccessfulRun:tR.optional()}),mH=x__default.discriminatedUnion("platform",[oje,nje]),_h=su.extend({type:x__default.literal("MOBILE_AI_ACTION_STEP"),text:x__default.string(),version:dH.optional(),cache:mH.optional(),disableCache:x__default.boolean().optional(),precondition:x__default.string().optional(),postcondition:x__default.string().optional()});var ije=x__default.discriminatedUnion("type",[Wm,FS,Ff,NS]),Ph=KP.extend({command:ije}),aje=x__default.discriminatedUnion("type",[Wm,FS,Bf,NS]),Oh=KP.extend({command:aje}),sje=x__default.object({assertion:Ph,steps:x__default.lazy(()=>cu.array())}),lje=x__default.object({assertion:Oh,steps:x__default.lazy(()=>fd.array())}),cje=Ih.extend({blocks:x__default.lazy(()=>x__default.object({assertion:Ph,steps:Qw.array()}).array()),elseSteps:x__default.lazy(()=>Qw.array()).optional()}),uje=Ih.extend({blocks:x__default.lazy(()=>x__default.object({assertion:Oh,steps:Zw.array()}).array()),elseSteps:x__default.lazy(()=>Zw.array()).optional()}),dje=Ih.extend({blocks:x__default.lazy(()=>sje.array()),elseSteps:x__default.lazy(()=>cu.array()).optional()}),mje=Ih.extend({blocks:x__default.lazy(()=>lje.array()),elseSteps:x__default.lazy(()=>fd.array()).optional()}),pje=qm.extend({condition:Ph.optional(),steps:x__default.lazy(()=>cu.array())}),hje=qm.extend({condition:Oh.optional(),steps:x__default.lazy(()=>fd.array())}),cu=x__default.discriminatedUnion("type",[BS,eR,_h,dje,pje]),fd=x__default.discriminatedUnion("type",[US,eR,_h,mje,hje]);x__default.union([cu.array(),fd.array()]);var pH=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()}),YP=x__default.object({moduleId:ir,name:x__default.string(),description:x__default.string().nullish(),platform:x__default.nativeEnum(lc).optional().default("ANDROID"),parameters:pH.optional(),enabled:x__default.boolean().nullish(),schemaVersion:x__default.string()}),hH=YP.omit({name:true}),gje=hH.extend({steps:y8.array()});x__default.object({fileType:x__default.literal(Ue.MOBILE_MODULE)}).merge(gje);var S8=YP.omit({platform:true,schemaVersion:true});({ANDROID:S8.extend({platform:x__default.literal("ANDROID"),steps:cu.array()}),IOS:S8.extend({platform:x__default.literal("IOS"),steps:fd.array()})});var $f=(t=>(t.MODULE="RESOLVED_MOBILE_MODULE",t))($f||{}),T8=x__default.object({description:x__default.string().optional(),name:x__default.string().describe("name of the module"),parameters:pH.optional()}),v8=zS.merge(T8).extend({platform:x__default.literal("ANDROID"),get steps(){return pc.array()}}),A8=zS.merge(T8).extend({platform:x__default.literal("IOS"),get steps(){return hc.array()}});x__default.discriminatedUnion("platform",[v8,A8]);var gH=su.merge(v8).extend({type:x__default.literal("RESOLVED_MOBILE_MODULE")}),fH=su.merge(A8).extend({type:x__default.literal("RESOLVED_MOBILE_MODULE")});x__default.discriminatedUnion("platform",[gH,fH]);var fje=x__default.object({assertion:Ph,get steps(){return pc.array()}}),yH=Ih.extend({get blocks(){return fje.array()},get elseSteps(){return pc.array().optional()}}),yje=x__default.object({assertion:Oh,get steps(){return hc.array()}}),bH=Ih.extend({get blocks(){return yje.array()},get elseSteps(){return hc.array().optional()}}),bje=qm.extend({condition:Ph.optional(),get steps(){return pc.array()}}),Sje=qm.extend({condition:Oh.optional(),get steps(){return hc.array()}}),pc=x__default.discriminatedUnion("type",[gH,BS,_h,yH,bje]),hc=x__default.discriminatedUnion("type",[fH,US,_h,bH,Sje]);function E8(e){return Object.values($f).includes(e)||Object.values(dc).includes(e)}var w8=(a=>(a.PRECONDITION="PRECONDITION",a.REPLAY="REPLAY",a.GENERATE="GENERATE",a.AUTOHEAL="AUTOHEAL",a.POSTCONDITION="POSTCONDITION",a.GOAL_CHECK="GOAL_CHECK",a))(w8||{}),R8=z.enum(["pending","running","success","failed"]),C8=z.object({type:z.literal("THOUGHT"),text:z.string(),blockId:z.string().optional()}),I8=z.object({type:z.literal("TOOL_CALL"),toolName:z.string()}),x8=z.object({type:z.literal("PHASE"),phase:z.nativeEnum(w8),failureMessage:z.string().optional()}),Tje=z.object({type:z.literal("STEP_UPDATE"),stepIndex:z.number(),step:pc,status:R8,conditionMet:z.boolean().optional(),message:z.string().optional(),afterSnapshotId:z.string().optional()}),vje=z.object({type:z.literal("STEP_UPDATE"),stepIndex:z.number(),step:hc,status:R8,conditionMet:z.boolean().optional(),message:z.string().optional(),afterSnapshotId:z.string().optional()}),_8=z.object({type:z.literal("SCREENSHOT"),stepIndex:z.number(),screenshotId:z.string()}),P8=z.object({type:z.literal("POSTCONDITION_AUTOGENERATED"),postcondition:z.string()}),O8=z.object({type:z.literal("POSTCONDITION_REVISED"),postcondition:z.string(),previousPostcondition:z.string()}),k8=z.object({type:z.literal("GOAL_CHECK"),achieved:z.boolean(),reasoning:z.string(),violatedUserRule:z.boolean().default(false)}),Aje=z.object({type:z.literal("CACHED_STEPS_GENERATED"),cachedSteps:Qw.array(),resolvedGoal:z.string(),lastSuccessfulRun:tR.optional()}),Eje=z.object({type:z.literal("CACHED_STEPS_GENERATED"),cachedSteps:Zw.array(),resolvedGoal:z.string(),lastSuccessfulRun:tR.optional()}),wje=z.discriminatedUnion("type",[C8,I8,x8,Tje,_8,Aje,P8,O8,k8]),Rje=z.discriminatedUnion("type",[C8,I8,x8,vje,_8,Eje,P8,O8,k8]);function M8(e){let t=z.object({version:z.literal(1),events:e.array(),spans:ej.array().optional()});return z.union([t,e.array()]).transform(o=>Array.isArray(o)?{version:1,events:o}:o)}var L8=M8(wje),N8=M8(Rje);var gc=x__default.object({message:x__default.string().optional(),startTime:x__default.number(),endTime:x__default.number(),status:x__default.nativeEnum(Dt),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:wS.optional(),afterTestContext:wS.optional()}),D8=gc.merge(BS).extend({previousAttempts:x__default.lazy(()=>is.array()).optional()}),Cje=gc.merge(eR).extend({steps:x__default.lazy(()=>is.array()),name:x__default.string().optional(),previousAttempts:x__default.lazy(()=>is.array()).optional()}),Ije=gc.merge(_h).extend({steps:x__default.lazy(()=>is.array()),previousAttempts:x__default.lazy(()=>is.array()).optional(),failureRecoveryReason:x__default.string().optional(),trajectory:L8.optional()}),xje=gc.merge(yH).extend({assertionResult:D8.optional(),steps:x__default.lazy(()=>is.array()),previousAttempts:x__default.lazy(()=>is.array()).optional()}),_je=gc.merge(qm).extend({condition:Ph.optional(),steps:x__default.lazy(()=>is.array()),iterationCount:x__default.number().optional(),iterationResultCounts:x__default.number().array().optional(),firstIterationConditionSkipped:x__default.boolean().optional(),previousAttempts:x__default.lazy(()=>is.array()).optional()}),is=x__default.discriminatedUnion("type",[D8,Cje,Ije,xje,_je]),F8=gc.merge(US).extend({previousAttempts:x__default.lazy(()=>as.array()).optional()}),Pje=gc.merge(eR).extend({steps:x__default.lazy(()=>as.array()),name:x__default.string().optional(),previousAttempts:x__default.lazy(()=>as.array()).optional()}),Oje=gc.merge(_h).extend({steps:x__default.lazy(()=>as.array()),previousAttempts:x__default.lazy(()=>as.array()).optional(),failureRecoveryReason:x__default.string().optional(),trajectory:N8.optional()}),kje=gc.merge(bH).extend({assertionResult:F8.optional(),steps:x__default.lazy(()=>as.array()),previousAttempts:x__default.lazy(()=>as.array()).optional()}),Mje=gc.merge(qm).extend({condition:Oh.optional(),steps:x__default.lazy(()=>as.array()),iterationCount:x__default.number().optional(),iterationResultCounts:x__default.number().array().optional(),firstIterationConditionSkipped:x__default.boolean().optional(),previousAttempts:x__default.lazy(()=>as.array()).optional()}),as=x__default.discriminatedUnion("type",[F8,Pje,Oje,kje,Mje]);var Lje=gc.extend({index:x__default.number().optional(),userFacingStepReference:x__default.string().optional(),description:x__default.string()}),B8=Lje.extend({beforeScreenshot:x__default.string().optional(),afterScreenshot:x__default.string().optional()});var U8=z.object({attributesRequired:z.array(z.string()).optional(),textRequired:z.boolean().optional(),boundsRequired:z.boolean().optional(),positionSpecificity:z.enum(Ds).optional(),shapeSpecificity:z.enum(Ds).optional()}),Nje=z.object({id:z.number(),requirements:U8}).array();z.object({thoughts:z.string(),id:z.number(),updatedMemory:kE.optional(),inWebview:z.boolean().optional(),requirements:U8.optional(),additionalElements:Nje.optional()});var Dje=z.literal("SCROLL_TO"),z8=z.object({description:z.string(),screenXml:z.string(),screenshot:z.string(),source:Dje.optional(),memory:z.discriminatedUnion("type",[Xc,z.object({type:z.literal("RESOLVED_TRACES"),traces:z.unknown().optional().array()})]).optional()}),j8=z.object({assertion:z.string(),screenXml:z.string(),screenshot:z.string(),contextChoice:_f.optional(),knowledgeBaseSection:z.string().optional(),memory:z.discriminatedUnion("type",[Cf,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:ME.optional(),citations:Tn.array().optional()});var H8=z.object({failedResults:B8.array(),nextStepsSerialized:z.string().array(),currentScreenXml:z.string(),currentScreenshot:z.string(),testDescription:z.string()}),$8=(n=>(n.LEGITIMATE="LEGITIMATE",n.RECOVERABLE="RECOVERABLE",n.INELIGIBLE="INELIGIBLE",n))($8||{});z.object({thoughts:z.string(),scenario:z.enum($8),instructions:z.string().nullish(),reasonSummary:z.string().nullish()});z.looseObject({type:z.literal("response.create")});var G8=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 Gf="1",V8=z.enum(["GENERATED","CACHE"]),SH=V8.enum,W8=z.enum(["PULL_REQUEST","DIRECT_COMMIT","PATCH","LOCAL_CHANGES","OWNER_PULL_REQUEST","ALREADY_FIXED_ELSEWHERE"]),Km=W8.enum,Fje=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()}),Bje=z.object({applicationId:z.uuid(),patchId:z.uuid(),sourceRunId:z.string().min(1).optional(),source:V8,delivery:W8,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(Fje).max(1e3),applications:z.array(Bje).max(1e3)});var Uje=200,zje=50,jje=z.object({testId:z.string().min(1),patchIds:z.array(z.string().min(1)).max(zje).min(1)});z.object({repository:z.string().min(1),baseBranch:z.string().min(1),excludeHeadBranch:z.string().min(1).optional(),failures:z.array(jje).min(1).max(Uje)});var q8=z.object({existingFixes:z.array(gz)});var K8="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 Hje=z.object({testId:z.string(),name:z.string(),relativeFilePath:z.string(),coverage:z.string(),note:z.string().optional()}),$je=z.object({name:z.string(),summary:z.string(),status:z.string().optional(),existingCoverage:z.array(Hje).default([])}),Gje=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()}),Vje=z.object({testPlanName:z.string(),status:z.string(),testPath:z.string().optional(),summary:z.string(),notes:z.array(z.string()).optional()}),Wje=z.object({status:z.string(),builtTests:z.array(Vje).default([]),summary:z.string().optional(),notes:z.string().optional()}),qje=z.object({control:z.string(),status:z.string(),result:z.string()}),Kje=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(qje).default([]),customAttributes:z.record(z.string(),z.unknown()).optional()}),Yje=z.object({status:z.string(),planReports:z.array(Kje).default([]),summary:z.string().optional(),notes:z.string().optional()});z.object({summary:z.string().optional(),changedJourneys:z.array($je).default([]),testPlans:z.array(Gje).default([]),buildSummary:Wje.optional(),bugbashSummary:Yje.optional()});var Jje=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:Jje.optional()});function Y8(e){return [...new Map(e.map(t=>[t.name,t])).values()]}var Vf=(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))(Vf||{}),kh=(r=>(r.Select="select",r.Classify="classify",r.Triage="triage",r.Mo="mo",r))(kh||{}),jS=(r=>(r.Fixed="fixed",r.CannotFix="cannot-fix",r.NoFixNeeded="no-fix-needed",r.Error="error",r))(jS||{}),_a=(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))(_a||{}),J8="sessionId";var Xje=3;function Qje(e){return e==="MODULE"||e==="CONDITIONAL"||e==="WHILE_LOOP"||e==="SECTION"||e==="RESOLVED_MODULE"}function X8(e){if(!Qje(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 JP(e){switch(e.type){case "AI_EXTRACT":case "AI_ASSERTION":return Xje;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 TH=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 XP(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=TH.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 tHe=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()}),oHe=z.object({entries:z.record(z.string(),z.array(z.tuple([z.unknown().optional(),z.unknown().optional()]))),version:z.number().optional()}),QP=z.object({cookies:TH.array().optional(),origins:tHe.array().optional(),idb:z.record(z.string(),oHe).optional().describe("key is db name")});function Q8(e,t){let o=[];return e.cloneSync()?.serializeSync()?.cookies.forEach(n=>{let r=TH.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 Vs={type:true,cache:true},Z8=[Wm.pick(Vs),Ff.pick(Vs),Gw.pick(Vs),qw.pick(Vs),Hw.pick(Vs),zw.pick(Vs),Fw.pick(Vs)],vH=x__default.discriminatedUnion("type",Z8),e9=[Wm.pick(Vs),Bf.pick(Vs),Vw.pick(Vs),Kw.pick(Vs),$w.pick(Vs),Bw.pick(Vs),jw.pick(Vs)],AH=x__default.discriminatedUnion("type",e9);Object.values(ho).filter(e=>Z8.some(t=>t.shape.type.safeParse(e).success));Object.values(ho).filter(e=>e9.some(t=>t.shape.type.safeParse(e).success));var EH=x__default.object({type:x__default.literal("MOBILE_AI_ACTION_STEP"),cache:mH}),ZP=x__default.union([vH,EH]),eO=x__default.union([AH,EH]);var wH=(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))(wH||{}),tO=(n=>(n.US="us",n.EU="eu",n.AS="as",n))(tO||{}),t9=(t=>(t.LOCAL="local",t))(t9||{}),nR=x__default.nativeEnum(tO),RH=x__default.nativeEnum(wH).or(x__default.nativeEnum(tO)),CH=x__default.nativeEnum(wH).or(x__default.nativeEnum(tO)).or(x__default.nativeEnum(t9)),rHe="closest";CH.or(x__default.literal(rHe));var $S=(o=>(o.ANDROID_14="14",o.ANDROID_15="15",o))($S||{});var oO=(t=>(t.IOS_26="26",t))(oO||{});var iHe=["1.56.1-lim.1","1.60.0-lim.1"],o9=x__default.enum(iHe);var n9=x__default.nativeEnum($S).or(x__default.nativeEnum(oO));var aHe=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.")}),sHe="avdId",lHe="iosDeviceType",cHe="iosVersion",uHe="localEmulatorStartTimeout",r9=x__default.number().int().positive(),dHe=x__default.object({downloadKbps:r9.optional().describe("Maximum download bandwidth in kilobits per second."),uploadKbps:r9.optional().describe("Maximum upload bandwidth in kilobits per second.")}),IH=aHe.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:CH.optional().describe('Where the emulator runs: "local" for an emulator on your machine, or a region for hosted emulators. Defaults to hosted emulators.'),jurisdiction:nR.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($S).optional()}).optional(),localEmulatorSettings:x__default.object({[sHe]:_S,[lHe]:_S,[cHe]:_S}).optional(),[uHe]: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:dHe.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(id).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 rR=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:_S.describe("APK to install when using the emulator in the local region."),defaultAppFilePath:_S.describe("App file (e.g. .app or .ipa) to install when using the emulator in the local region."),emulator:IH.optional().describe("Emulator configuration for local or remote mobile execution, including region and local emulator overrides."),ai:Lj.optional().describe("AI behavior overrides for this mobile test, such as memory and failure recovery settings.")}),i9=x__default.object({id:ir,description:x__default.string(),schemaVersion:x__default.string(),settings:rR.optional(),disabled:x__default.boolean().optional(),labels:x__default.array(x__default.string()).optional()}),GS=i9.extend({platform:x__default.literal("ANDROID").optional().default("ANDROID")}),VS=i9.extend({platform:x__default.literal("IOS")}),a9=x__default.discriminatedUnion("platform",[GS,VS]),s9=x__default.object({fileType:x__default.literal(Ue.MOBILE_TEST)}),l9=s9.merge(GS),c9=s9.merge(VS);x__default.discriminatedUnion("platform",[l9,c9]);var u9=GS.merge(x__default.object({steps:x__default.array(cu)})),d9=VS.merge(x__default.object({steps:x__default.array(fd)}));x__default.discriminatedUnion("platform",[u9,d9]);var mHe=l9.merge(u9),pHe=c9.merge(d9);x__default.discriminatedUnion("platform",[mHe,pHe]);x__default.object({name:x__default.string(),steps:x__default.array(cu).optional(),settings:rR.optional()});var m9=GS.extend({steps:pc.array(),beforeSteps:pc.array().optional(),afterSteps:pc.array().optional()}),p9=VS.extend({steps:hc.array(),beforeSteps:hc.array().optional(),afterSteps:hc.array().optional()});x__default.discriminatedUnion("platform",[m9,p9]);var hHe=m9.extend({name:x__default.string()}),gHe=p9.extend({name:x__default.string()});x__default.discriminatedUnion("platform",[hHe,gHe]);var Ni=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(()=>MHe.array())});var iR=Ni.extend({type:x__default.literal("SECTION"),name:x__default.string()}),fHe=Ni.extend({type:x__default.literal("GET_PAGE_STATE")}),yHe=Ni.extend({type:x__default.literal("GET_PAGE_SCREENSHOT")}),bHe=Ni.extend({type:x__default.literal("SMART_WAITING")}),SHe=Ni.extend({type:x__default.literal("SCROLL_ELEMENT_INTO_VIEW")}),THe=Ni.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:Tn.array().optional()}).optional()}),vHe=Ni.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:Tn.array().optional()}).optional()}),AHe=Ni.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()}),EHe=Ni.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()}),wHe=Ni.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()}),RHe=Ni.extend({type:x__default.literal("CACHE_RESOLUTION"),resolutionMethod:x__default.string().optional(),cacheMissReason:x__default.nativeEnum(Xb).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()}),CHe=Ni.extend({type:x__default.literal("TARGET_RESOLUTION"),elementScreenshotSnapshotId:x__default.string().optional(),result:x__default.object({serializedElement:x__default.string()}).optional()}),IHe=Ni.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()}),xHe=Ni.extend({type:x__default.literal("WAIT_FOR_STABILITY")}),_He=Ni.extend({type:x__default.literal("GENERIC"),name:x__default.string()}),PHe=Ni.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()}),OHe=Ni.extend({type:x__default.literal("AUTO_FOLLOW_NEW_TABS"),result:x__default.object({followed:x__default.boolean()}).optional()}),kHe=Ni.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 h9(e){return e.type==="CACHE_RESOLUTION"||e.type==="TARGET_RESOLUTION"}var MHe=x__default.discriminatedUnion("type",[iR,fHe,yHe,bHe,SHe,THe,vHe,AHe,EHe,wHe,CHe,RHe,IHe,xHe,PHe,kHe,_He,OHe]);z.object({testId:z.string(),sessionId:z.string()});var g9=z.object({uploadUrl:z.string(),id:z.string()});new Set(Object.values(hn));var Qo={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 LHe=z.string().refine(e=>Rp.valid(e),{error:"must be a valid semver string"});function xH(e){return Rp.parse(e)||void 0}function aR(e){if(e!==void 0)return e===true||e==="true"||e==="1"}function y9(e){if(e!=="true"&&e!=="false")throw new de(`Expected true or false, got "${e}".`);return e==="true"}var b9="on-fail";function _H(e){return e==="on-fail"?"on-fail":e==="false"?false:!!e}var S9=(o=>(o.CLI="cli",o.MobileCLI="mobile-cli",o))(S9||{}),NHe=z.nativeEnum(S9),T9=(n=>(n.Error="error",n.Warn="warn",n.Info="info",n))(T9||{}),DHe=z.nativeEnum(T9),FHe=z.object({id:z.string(),level:DHe,versionRange:z.string(),announcement:z.string()});z.object({cliType:NHe,version:LHe});var v9=z.object({announcements:z.array(FHe)});var sR=55555,nO="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 BHe=z.union([z.string(),z.date()]).transform(e=>e instanceof Date?e:new Date(e)),A9=z.object({phoneNumber:z.string(),expiresAt:BHe,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 E9=z.object({email:z.string(),prefix:z.string(),expiresAt:z.coerce.date()}),rO=(o=>(o.RAW="RAW",o.RESPONSE="RESPONSE",o))(rO||{}),w9=z.object({body:z.string().nullish(),status:z.number().optional(),headers:z.array(z.tuple([z.string(),z.string()])).optional()}),UHe=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(),zHe=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(),R9=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:UHe,response:zHe,additionalBindings:z.record(z.string(),z.unknown().optional()).optional()}),timeoutMs:z.number().optional(),disallowVariableUpdates:z.boolean().optional(),responseSerialization:z.enum(rO).optional()});var Mh=9e4;function C9({orgId:e,timestamp:t}){return `${e}:${t}`}var jHe=x.object({url:x.string(),lineNumber:x.number(),columnNumber:x.number()}),I9=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:jHe.optional()}),x9=I9.array(),lR=x9.array();var cR=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 HHe=z.object({name:z.string(),version:z.string(),comment:z.string().optional()}),$He=z.object({name:z.string(),version:z.string(),comment:z.string().optional()}),GHe=z.object({onContentLoad:z.number().optional(),onLoad:z.number().optional(),comment:z.string().optional()}),uR=z.object({startedDateTime:z.string(),id:z.string(),title:z.string().optional(),pageTimings:GHe,comment:z.string().optional()}),VHe=z.array(uR),WHe=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()}),P9=z.array(WHe),qHe=z.object({name:z.string(),value:z.string(),comment:z.string().optional()}),O9=z.array(qHe),KHe=z.object({name:z.string(),value:z.string(),comment:z.string().optional()}),YHe=z.array(KHe),JHe=z.object({name:z.string(),value:z.string().optional(),fileName:z.string().optional(),contentType:z.string().optional(),comment:z.string().optional()}),XHe=z.array(JHe),QHe=z.object({mimeType:z.string(),params:XHe,text:z.string(),comment:z.string().optional(),_redactedReason:z.string().optional()}),ZHe=z.object({method:z.string(),url:z.string(),httpVersion:z.string().optional(),cookies:P9,headers:O9,queryString:YHe,postData:QHe.optional(),headersSize:z.number().optional(),bodySize:z.number().optional(),comment:z.string().optional()}),e$e=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()}),t$e=z.object({status:z.number(),statusText:z.string(),httpVersion:z.string().optional(),cookies:P9,headers:O9,content:e$e,redirectURL:z.string().optional(),headersSize:z.number().optional(),bodySize:z.number().optional(),comment:z.string().optional(),_mocked:z.boolean().optional()}),_9=z.object({expires:z.string().optional(),lastAccess:z.string(),eTag:z.string(),hitCount:z.number(),comment:z.string().optional()}),o$e=z.object({beforeRequest:_9.optional(),afterRequest:_9.optional(),comment:z.string().optional()}),n$e=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()}),Ym=z.object({pageref:z.string().optional(),startedDateTime:z.string(),time:z.number().optional(),request:ZHe,response:t$e.optional(),cache:o$e.optional(),timings:n$e,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 PH(e){return e._responseState?e._responseState==="finished"||e._responseState==="failed":!!e.response}var r$e=z.array(Ym),i$e=z.object({version:z.string().default("1.1"),creator:HHe.optional(),browser:$He.optional(),pages:VHe.optional(),entries:r$e,comment:z.string().optional()}),OH=z.object({log:i$e});z.record(z.string(),uR);z.record(z.string(),Ym);function kH(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 k9=3,M9=z.object({failureCount:z.number().int().nonnegative(),lastSuccess:z.object({actionSummary:z.string().min(1),recordedAt:z.coerce.date()}).optional()}),a$e=z.object({stepId:z.string().min(1),baseTestFileHash:z.string().min(1),branchName:z.string().min(1).optional(),environment:z.string().min(1).optional()}),s$e={runId:z.string().min(1).optional()},l$e=a$e.extend(s$e);l$e.extend({succeeded:z.boolean(),actionSummary:z.string().min(1).optional()});var iO=(Z=>(Z.DisableClickhouseCaches="disable_clickhouse_caches",Z.ShowZeroOpacityElements="show_zero_opacity_elements",Z.VisualActions="visual_actions",Z.RagV2="rag_v2",Z.DisableSecondaryCacheResolution="disable_secondary_cache_resolution",Z.GlobalLocatorRedirect="global_locator_redirect",Z.FakerConstantSeed="faker_constant_seed",Z.AutoExpandIframes="auto_expand_iframes",Z.MobileNewAiActionStepsUseV3="mobile_new_ai_action_steps_use_v3",Z.PerformanceInsights="performance_insights",Z.ShowKnowledgeBase="show_knowledge_base",Z.AppGraphBackend="app_graph_backend",Z.AppGraphUI="app_graph_ui",Z.ClassificationUI="classification_ui",Z.HealingUI="healing_ui",Z.ExploreUI="explore_ui",Z.SlackNotifications="slack_notifications",Z.SlackNotificationDms="slack_notification_dms",Z.NotificationFailedTestTable="notification_failed_test_table",Z.HealTraceUI="heal_trace_ui",Z.ExploreTraceUI="explore_trace_ui",Z.LinearIntegration="linear_integration",Z.AtlassianIntegration="atlassian_integration",Z.PosthogIntegration="posthog_integration",Z.QaseIntegration="qase_integration",Z.HostingIntegrations="hosting_integrations",Z.TestinyIntegration="testiny_integration",Z.TestRailIntegration="testrail_integration",Z.RunAssertions="run_assertions",Z.Mo="mo",Z.MoSignupCredits="mo_signup_credits",Z.MoMobile="mo_mobile",Z))(iO||{});var Lh=z.union([z.string(),z.number(),z.boolean(),z.null(),z.record(z.string(),z.lazy(()=>Lh)),z.array(z.lazy(()=>Lh))]),Wf=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(iO).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 dR={".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"},N9=[".sh",".exe",".app",".bat",".cmd",".msi",".apk",".jar",".py",".js",".cron",".php",".asp"];var F9=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)})]),c$e=z.object({baseSha:z.string().min(1),headSha:z.string().min(1)}),u$e=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()}),d$e=5,m$e=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(d$e).optional(),draft:z.boolean().optional()});u$e.extend(m$e.shape).extend({changes:z.array(F9).min(1),coAuthorRange:c$e.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 B9=z.object({pullRequestUrl:z.url(),pullRequestNumber:z.number(),headBranch:z.string(),commitSha:z.string(),created:z.boolean(),authors:z.array(SE).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(F9).min(1)});var U9=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 z9=z.object({usernamesWithMergeAccess:z.array(z.string())}),j9=z.object({shas:z.array(z.string().min(1)).min(1).max(20)}),H9=z.object({authorsBySha:z.record(z.string(),z.array(SE)),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 LH=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()}),$9=z.object({pullRequests:z.array(LH),scanned:z.number(),truncated:z.boolean()}),G9=z.object({authorLogin:z.string().min(1).optional(),authorIsBot:z.boolean().optional(),humanAssigneeLogins:z.array(z.string().min(1)).optional()}),V9=G9.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 W9(e){return e.authorLogin&&e.authorIsBot===false?e.authorLogin:e.humanAssigneeLogins?.[0]}G9.extend({number:z.number(),htmlUrl:z.url()});var NH=100;z.object({path:z.string().min(1),ref:z.string().min(1),limit:z.coerce.number().int().min(1).max(NH)});var p$e=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()}),q9=z.object({sha:z.string().min(1),author:z.string().optional(),email:z.string().optional(),date:z.string().optional(),message:z.string()}),K9=z.object({mergeBaseSha:z.string().min(1),totalCommits:z.number(),commits:z.array(q9),files:z.array(p$e)}),Y9=z.object({commits:z.array(q9)}),J9=z.object({content:z.string().nullable()}),X9=z.object({name:z.string().min(1),protected:z.boolean()}),Q9=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()}),h$e=z.object({name:z.string(),path:z.string(),body:z.string()}),eZ=z.object({template:h$e});function sO({githubRepository:e,gitlabProjectPath:t,gitOriginUrl:o}){let n=g$e(o);return e?MH(n?.host??"github.com",e):t?MH(n?.host??"gitlab.com",t):n?MH(n.host,n.repositoryPath):void 0}function mR(e){let t=e?.trim();if(!t)return;let o="refs/heads/";return t.startsWith(o)?t.slice(o.length):t}function g$e(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 ar(e){let[t,o,...n]=e.split("/");if(!(!t||!o||n.length>0))return {owner:t,repo:o}}function MH(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.${aO}`)o=aO,n[0]?.toLowerCase()==="v3"&&(n=n.slice(1));else if(o.endsWith(D9)){let i=o.slice(0,-D9.length);if(!i)return;o=aO,n=[i,...n];}o===aO&&(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 tZ(e){let t=ar(e);if(t)return t;throw new Wt(`Invalid GitHub repository string: ${e}. Expected format "owner/repo".`)}var aO="dev.azure.com",D9=".visualstudio.com",f$e=/^co-authored-by:\s*.*?<([^>]+)>\s*$/gim,y$e=/^(?:\d+\+)?([^@]+)@users\.noreply\.github\.com$/i;function DH(e){return e.match(y$e)?.[1]}function b$e(e){let t=[];for(let o of e.matchAll(f$e)){let n=o[1]?.trim();n&&t.push({email:n,githubLogin:DH(n)});}return t}function oZ(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:DH(i)}),s.push(...b$e(a)),t.push(s);}return t}function S$e(e){return (e.githubLogin??(e.email?DH(e.email):void 0))?.toLowerCase().endsWith("[bot]")??false}function nZ(e){return e.filter(t=>!S$e(t))}var rZ="https://static.momentic.ai";function pR(e,t){return {light:`${rZ}/${e}.svg`,dark:`${rZ}/${e}-dark.svg`,alt:t}}var hR={runGroup:pR("run-group-button","View run group"),basePr:pR("view-base-pr-button","View base PR"),branch:pR("view-branch-button","View branch"),commit:pR("view-commit-button","View commit")};function gR({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 Nh=z.object({limit:z.number().min(1).max(100).optional(),page:z.number().min(1).optional()}),FH=z.object({page:z.number(),pageSize:z.number(),pageCount:z.number()});var BH=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 T$e=z.array(BH.extend({id:z.string(),name:z.string(),description:z.string().optional(),labels:z.string().array().optional()})),v$e=BH.extend({id:z.string(),name:z.string(),description:z.string().optional(),content:q_}),A$e=z.array(v$e);z.object({tests:T$e,modules:A$e,labels:z.string().array()});z.string().array();var iZ=z.object({pathSegments:z.string().array()});Gj.merge(Zn);var aZ=z.object({schemaVersion:z.string(),stepLists:Tl}),sZ=Zn.partial().merge(Ia.pick({id:true})),Kf="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(Kf),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(nu).optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),viewport:jm.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.")},lZ=z.object(UH);Gj.extend(z.object({relativeFilePath:z.string().describe("relative to project root")}).shape);var cZ=z.object({name:z.string()});z.object({relativeFilePath:z.string()});var uZ=z.object({name:z.string(),sourceModuleContent:q_});z.object({relativeFilePath:z.string()});var dZ=z.object({name:z.string(),description:z.string(),enabled:z.boolean(),steps:z.lazy(()=>po.array()),testFilePath:z.string().describe("relative to the project root"),folderPath:z.string().optional().describe("user selected folder path")}),mZ=z.object({name:z.string(),description:z.string(),enabled:z.boolean()}).partial(),pZ=z.object({folderPath:z.string()}),hZ=z.object({folderPath:z.string()});z.array(hw);var gZ=z.object({defaultEnv:z.string().optional().describe("name of the default env, or undefined to unset")}),fZ=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 zH=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()}),yZ=z.object({pathSegments:z.array(z.string()),directoriesOnly:z.boolean().optional()});z.object({absolutePath:z.string(),pathSegments:z.array(z.string()),contents:z.array(zH)});var bZ=z.object({sourceDirectoryPath:z.string().optional(),value:z.string(),allowedExtensions:z.array(z.string()).optional()}),E$e=z.object({name:z.string(),value:z.string(),isDirectory:z.boolean()});z.object({suggestions:z.array(E$e)});var SZ=z.object({pathSegments:z.array(z.string())}),TZ=z.object({pathSegments:z.array(z.string()),newPathSegments:z.array(z.string())}),vZ=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 AZ=typeof process<"u"&&true&&true,lO=58889,qS=24*60*60*1e3;var EZ=z.record(z.string(),z.string()),w$e=z.object({type:z.literal("stdio").optional(),command:z.string().min(1),args:z.array(z.string()).optional(),env:EZ.optional(),cwd:z.string().optional()}),R$e=z.object({type:z.enum(["http","sse"]).optional(),url:z.string().min(1),headers:EZ.optional()}),C$e=z.union([w$e,R$e]),wZ=z.record(z.string().min(1),C$e);var RZ=z.string().trim().min(1).max(255).regex(/^[^/\\]+$/).refine(e=>e!=="."&&e!=="..");z.object({source:z.string().trim().min(1).max(500).refine(e=>RZ.safeParse(e.split("/").at(-1)).success)});var CZ=z.object({filename:RZ,downloadUrl:z.url()});z.object({filename:z.string().trim().min(1),destination:z.string().trim().min(1).optional()});var IZ=z.object({destination:z.string(),uploadUrl:z.url()});var yR=(n=>(n.DARWIN="darwin",n.LINUX="linux",n.WINDOWS="win32",n))(yR||{}),xZ=z.enum(yR),bR=(r=>(r.AZURE="AZURE",r.KERNEL="KERNEL",r.BROWSERBASE="BROWSERBASE",r.SELF_HOSTED="SELF_HOSTED",r))(bR||{}),cO=z.enum(bR);z.object({azureRegion:z.string().optional(),azureWorkspaceId:z.string().optional()});z.object({});z.object({});var I$e=z.enum(["us-west-2","us-east-1","eu-central-1","ap-southeast-1"]);z.object({region:I$e.optional()});var jH=(t=>(t.TEST_REVIEW="TEST_REVIEW",t))(jH||{});var x$e=z.object({type:z.literal("DESCRIPTION_UPDATE"),thoughts:z.string()}),uO=z.discriminatedUnion("type",[x$e]),_$e=z.object({testId:z.string(),name:z.string(),orgId:z.string(),runId:z.string(),steps:po.array(),purpose:z.enum(jH),details:uO.or(uO.array()).optional()});_$e.pick({name:true,orgId:true});var P$e=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(jH),details:uO.or(uO.array()).optional(),applied:z.boolean().nullish(),appliedAt:z.coerce.date().nullish()}),_Z=P$e.extend({steps:po.array()});var PZ=z.enum(["v1","v2"]);var k$e=z.enum(["element","content","attribute","tag_name","style"]),dO=z.enum(["exists","visible","enabled","editable","focused","contains","equals","starts_with"]);[...RJ,...wJ].forEach(e=>{if(!dO.options.includes(e.toLowerCase()))throw new Error(`V2CheckConditionSchema is missing option: ${e}`)});var HH={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}},MZ={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"}},LZ={ELEMENT_EXISTENCE:"element",ELEMENT_CONTENT:"content",ELEMENT_ATTRIBUTE:"attribute",ELEMENT_NAME:"tag_name",ELEMENT_STYLE:"style"};function OZ(e){return {alias:$H(e),subject:e.subject,condition:e.condition,negated:e.negated,assertionType:HH[e.subject].assertionType,requiresName:HH[e.subject].requiresName,requiresValue:e.subject!=="element"&&e.condition!=="exists"}}function $H(e){let t=HH[e.subject],o=MZ[e.condition];if(!NZ(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 NZ(e,t){let o=MZ[t],n=o.elementCondition,r=o.contentOperation;return e==="element"?n!==void 0:r!==void 0}var M$e=k$e.options.flatMap(e=>dO.options.flatMap(t=>NZ(e,t)?[OZ({subject:e,condition:t,negated:false}),OZ({subject:e,condition:t,negated:true})]:[])),mO=new Map(M$e.map(e=>[e.alias,e]));var L$e=z.enum(nd),N$e=z.enum(yl);function us(e){return mO.get(e)}function FZ(e){let t=LZ[e.type],o=e.type==="ELEMENT_EXISTENCE"?e.condition:e.operation;return $H({subject:t,condition:D$e(o),negated:e.negated})}function BZ(e){return L$e.parse(e.toUpperCase())}function SR(e){return N$e.parse(e.toUpperCase())}function D$e(e){return dO.parse(e.toLowerCase())}var YS=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."),At={saveAs:z.string().optional(),retries:z.number().optional(),skipped:z.boolean().optional(),comment:z.string().optional()};z.object(At);var JS=Object.keys(At);function st(e){return z.union([z.strictObject({[e.key]:e.simplified}),z.strictObject({[e.key]:e.detailed})])}function jn(e){return z.strictObject({[e.key]:e.detailed})}function F$e(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 UZ(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-F$e(o,a)/s;l>r&&(r=l,n=i);}return n}var zZ='Coordinates must be "x, y" pixel values, e.g. "100, 200"',XS=z.union([ed,z.string().regex(/^\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*$/,zZ)],{error:zZ});z.union([z.string(),ed]);var Ws={css:z.string().optional(),coords:XS.optional(),x:z.union([z.number(),z.string()]).optional(),y:z.union([z.number(),z.string()]).optional()},VH={on:z.string().optional(),...Ws},xl={...At,effort:bt.optional(),useSelector:z.boolean().optional(),force:z.boolean().optional(),DANGEROUS_FORCE_DYNAMIC:z.boolean().optional(),iframe:z.string().optional()},ZS={...xl,offset:XS.optional()};function Pa({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 B$e=Pa({descriptionKey:"on",schema:z.strictObject({...VH,...ZS,times:z.int().min(1).optional(),rightClick:z.boolean().optional(),waitForDownload:z.boolean().optional(),delay:z.number().optional(),downloadTimeout:z.number().optional()})}),U$e=Pa({descriptionKey:"on",schema:z.strictObject({...VH,...ZS,rightClick:z.boolean().optional(),waitForDownload:z.boolean().optional(),delay:z.number().optional(),downloadTimeout:z.number().optional()})}),z$e=Pa({descriptionKey:"on",schema:z.strictObject({...VH,...ZS,times:z.int().min(1).optional(),waitForDownload:z.boolean().optional(),delay:z.number().optional(),downloadTimeout:z.number().optional()})}),jZ=st({key:"click",simplified:z.string(),detailed:B$e}),HZ=st({key:"doubleClick",simplified:z.string(),detailed:U$e}),$Z=st({key:"rightClick",simplified:z.string(),detailed:z$e}),j$e=Pa({descriptionKey:"into",required:false,schema:z.strictObject({text:z.string(),into:z.string().optional(),...Ws,...ZS,pressEnter:z.boolean().optional(),clear:z.union([z.literal("inputs"),z.literal("always"),z.literal("never"),z.boolean()]).optional(),delay:z.number().optional()})}),GZ=st({key:"type",simplified:z.string(),detailed:j$e}),H$e=Pa({descriptionKey:"into",required:false,schema:z.strictObject({text:z.string(),into:z.string().optional(),...Ws,...ZS,pressEnter:z.boolean().optional()})}),VZ=st({key:"fill",simplified:z.string(),detailed:H$e}),WZ=jn({key:"select",detailed:Pa({descriptionKey:"from",schema:z.strictObject({from:z.string().optional(),...Ws,label:z.string().optional(),value:z.string().optional(),index:z.union([z.string(),z.number()]).optional(),...xl})}).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"});})}),qZ=st({key:"hover",simplified:z.string(),detailed:Pa({descriptionKey:"on",schema:z.strictObject({on:z.string().optional(),...Ws,...ZS})})}),KZ=jn({key:"blur",detailed:Pa({descriptionKey:"on",required:false,schema:z.strictObject({on:z.string().optional(),...Ws,...xl})})}),YZ=st({key:"focus",simplified:z.string(),detailed:Pa({descriptionKey:"on",schema:z.strictObject({on:z.string().optional(),...Ws,...xl})})}),JZ=jn({key:"dragAndDrop",detailed:z.strictObject({from:z.string().optional(),to:z.string().optional(),fromCss:z.string().optional(),toCss:z.string().optional(),fromCoords:XS.optional(),toCoords:XS.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(),...xl}).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."});})}),XZ=z.union([z.strictObject({mouseDrag:XS}),z.strictObject({mouseDrag:Pa({descriptionKey:"from",required:false,schema:z.strictObject({from:z.string().optional(),...Ws,delta:XS,steps:z.number().optional(),...xl})})})]),QZ=st({key:"press",simplified:z.string(),detailed:z.strictObject({key:z.string(),repeat:z.number().optional(),delay:z.number().optional(),convertMeta:z.boolean().optional(),...At,effort:bt.optional()})}),ZZ=st({key:"keyDown",simplified:z.string(),detailed:z.strictObject({key:z.string(),convertMeta:z.boolean().optional(),...At,effort:bt.optional()})}),e7=st({key:"keyUp",simplified:z.string(),detailed:z.strictObject({key:z.string(),convertMeta:z.boolean().optional(),...At,effort:bt.optional()})}),QS=z.number().int().min(0).max(6e4).multipleOf(1e3),t7=st({key:"navigate",simplified:z.string(),detailed:z.strictObject({url:z.string(),timeout:QS.optional(),...At,effort:bt.optional()})}),o7=st({key:"newTab",simplified:z.string(),detailed:z.strictObject({url:z.string(),timeout:QS.optional(),...At,effort:bt.optional()})}),n7=st({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:QS.optional(),loadTimeout:QS.optional(),...At,effort:bt.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"});})}),r7=jn({key:"closeTab",detailed:z.strictObject({substring:z.string().optional(),regex:z.string().optional(),index:z.union([z.string(),z.number()]).optional(),timeout:QS.optional(),...At,effort:bt.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"});})}),i7=jn({key:"goBack",detailed:z.strictObject({...At,effort:bt.optional()})}),a7=jn({key:"goForward",detailed:z.strictObject({...At,effort:bt.optional()})}),s7=jn({key:"refresh",detailed:z.strictObject({timeout:QS.optional(),...At,effort:bt.optional()})}),Yf=z.enum(["goBack","goForward","refresh","paste","authSave","offline","online","blur","visualDiff","captcha","closeTab"]),l7=st({key:"scrollUp",simplified:z.number().nonnegative(),detailed:Pa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Ws,...xl})})}),c7=st({key:"scrollDown",simplified:z.number().nonnegative(),detailed:Pa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Ws,...xl})})}),u7=st({key:"scrollLeft",simplified:z.number().nonnegative(),detailed:Pa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Ws,...xl})})}),d7=st({key:"scrollRight",simplified:z.number().nonnegative(),detailed:Pa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Ws,...xl})})}),m7=st({key:"wait",simplified:z.number(),detailed:z.strictObject({ms:z.number(),...At,effort:bt.optional()})}),$$e=st({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(),...At,effort:bt.optional()})}),G$e=st({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(),...At,effort:bt.optional()})}),pO=$$e,hO=G$e,p7=st({key:"checkPageContains",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),iframe:z.string().optional(),...At,effort:bt.optional()})}),h7=st({key:"checkPageDoesNotContain",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),iframe:z.string().optional(),...At,effort:bt.optional()})}),WH=z.union([p7,h7]),V$e=z.record(z.string(),z.unknown().optional()),gO=V$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=us(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=Pa({descriptionKey:"element",schema:z.looseObject({element:z.string().optional(),...Ws,...xl,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"]});}),g7=st({key:"extract",simplified:z.string(),detailed:z.strictObject({goal:z.string(),schema:Lh.optional(),DANGEROUS_FORCE_DYNAMIC:z.boolean().optional(),iframe:z.string().optional(),...At,effort:bt.optional()})}),f7=st({key:"cookie",simplified:z.string(),detailed:z.strictObject({value:z.string(),...At,effort:bt.optional()})}),y7=jn({key:"localStorage",detailed:z.strictObject({key:z.string(),value:z.string(),...At,effort:bt.optional()})}),b7=st({key:"request",simplified:z.string(),detailed:z.strictObject({url:z.string(),method:Om.optional(),headers:z.record(z.string(),z.string()).optional(),params:z.record(z.string(),z.string()).optional(),body:Lh.optional(),contentType:z.enum(rd).optional(),timeout:z.number().optional(),...At,effort:bt.optional()})}),S7=jn({key:"graphqlRequest",detailed:z.strictObject({url:z.string(),query:z.string(),variables:Lh.optional(),headers:z.record(z.string(),z.string()).optional(),timeout:z.number().optional(),...At,effort:bt.optional()})}),fO=st({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(),...At,effort:bt.optional()})}),eT={substring:z.string().optional(),glob:z.string().optional(),regex:z.string().optional(),domain:z.string().optional()};function W$e(e){return [e.substring,e.glob,e.regex,e.domain].filter(t=>t!==void 0).length}function tT(e){let t=W$e(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 T7=jn({key:"header",detailed:z.strictObject({name:z.string(),value:z.string(),...eT,method:z.string().optional(),...At,effort:bt.optional()}).superRefine((e,t)=>{tT({payload:e,ctx:t,required:false});})}),v7=jn({key:"mock",detailed:z.strictObject({...eT,method:z.string().optional(),responseGenerator:z.string(),fetchOriginalResponse:z.boolean().optional(),key:z.string().optional(),...At,effort:bt.optional()}).superRefine((e,t)=>{tT({payload:e,ctx:t,required:true});})}),A7=st({key:"removeRouteMock",simplified:z.string(),detailed:z.strictObject({key:z.string().optional(),...At,effort:bt.optional()})}),E7=st({key:"waitForUrl",simplified:z.string(),detailed:z.strictObject({...eT,caseInsensitive:z.boolean().optional(),timeout:z.number().optional(),...At,effort:bt.optional()}).superRefine((e,t)=>{tT({payload:e,ctx:t,required:true});})}),w7=st({key:"waitForUrlNotToMatch",simplified:z.string(),detailed:z.strictObject({...eT,caseInsensitive:z.boolean().optional(),timeout:z.number().optional(),...At,effort:bt.optional()}).superRefine((e,t)=>{tT({payload:e,ctx:t,required:true});})}),q$e=z.union([E7,w7]),R7=st({key:"dialog",simplified:z.enum(["ACCEPT","DISMISS"]),detailed:z.strictObject({action:z.enum(["ACCEPT","DISMISS"]),...At,effort:bt.optional()})}),C7=st({key:"fileUpload",simplified:z.string(),detailed:z.strictObject({path:z.string(),name:z.string().optional(),...At,effort:bt.optional()})}),I7=st({key:"copy",simplified:z.union([z.string(),z.boolean(),z.null()]),detailed:z.strictObject({value:z.union([z.string(),z.boolean(),z.null()]),...At,effort:bt.optional()})}),x7=jn({key:"paste",detailed:z.strictObject({...At,effort:bt.optional()})}),_7=jn({key:"captcha",detailed:z.strictObject({...xl})}),K$e=z.strictObject({data:z.union([z.string(),fl]),width:z.number(),height:z.number()}),P7=st({key:"visualDiff",simplified:z.string(),detailed:Pa({descriptionKey:"on",required:false,schema:z.strictObject({on:z.string().optional(),...Ws,threshold:z.number().optional(),screenshot:K$e.optional(),...xl})})}),O7=jn({key:"offline",detailed:z.strictObject({...At,effort:bt.optional()})}),k7=jn({key:"online",detailed:z.strictObject({...At,effort:bt.optional()})}),M7=jn({key:"registerRequestListener",detailed:z.strictObject({...eT,key:z.string(),method:z.string().optional(),...At,effort:bt.optional()}).superRefine((e,t)=>{tT({payload:e,ctx:t,required:true});})}),L7=st({key:"awaitListener",simplified:z.string(),detailed:z.strictObject({key:z.string(),timeout:z.number().optional(),...At,effort:bt.optional()})}),N7=jn({key:"recordRequests",detailed:z.strictObject({...eT,key:z.string(),method:z.string().optional(),...At,effort:bt.optional()}).superRefine((e,t)=>{tT({payload:e,ctx:t,required:true});})}),D7=st({key:"getRecordedRequests",simplified:z.string(),detailed:z.strictObject({key:z.string(),...At,effort:bt.optional()})}),F7=st({key:"authLoad",simplified:z.string(),detailed:z.strictObject({path:z.string(),...At,effort:bt.optional()})}),B7=st({key:"authSave",simplified:z.string(),detailed:z.strictObject({path:z.string().optional(),...At,effort:bt.optional()})});z.union([jZ,HZ,$Z,n7,r7,GZ,VZ,WZ,qZ,KZ,YZ,JZ,XZ,QZ,ZZ,e7,t7,o7,i7,a7,s7,l7,c7,u7,d7,m7,pO,hO,WH,g7,f7,y7,b7,S7,fO,T7,v7,A7,q$e,R7,C7,I7,x7,_7,P7,O7,k7,M7,L7,N7,D7,F7,B7,gO]);var U7=new Map([["click",jZ],["doubleClick",HZ],["rightClick",$Z],["switchTab",n7],["closeTab",r7],["type",GZ],["fill",VZ],["select",WZ],["hover",qZ],["blur",KZ],["focus",YZ],["dragAndDrop",JZ],["mouseDrag",XZ],["press",QZ],["keyDown",ZZ],["keyUp",e7],["navigate",t7],["newTab",o7],["goBack",i7],["goForward",a7],["refresh",s7],["scrollUp",l7],["scrollDown",c7],["scrollLeft",u7],["scrollRight",d7],["wait",m7],["assert",pO],["assertVisually",hO],["checkPageContains",p7],["checkPageDoesNotContain",h7],["extract",g7],["cookie",f7],["localStorage",y7],["request",b7],["graphqlRequest",S7],["javascript",fO],["header",T7],["mock",v7],["removeRouteMock",A7],["waitForUrl",E7],["waitForUrlNotToMatch",w7],["dialog",R7],["fileUpload",C7],["copy",I7],["paste",x7],["captcha",_7],["visualDiff",P7],["offline",O7],["online",k7],["registerRequestListener",M7],["awaitListener",L7],["recordRequests",N7],["getRecordedRequests",D7],["authLoad",F7],["authSave",B7]]),qH=Object.freeze([...U7.keys()]),Y$e=[...qH,...mO.keys()],vd=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=U7.get(n)??(us(n)?gO:void 0);if(!r){let a=UZ(n,Y$e);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=J$e(i.error.issues,n);a.length>0&&z7(t,a);}});function J$e(e,t){return X$e(e).filter(o=>!Q$e(o,t))}function z7(e,t){for(let o of t){if(o.code==="invalid_union"){z7(e,KH(o));continue}e.addIssue({...o});}}function X$e(e){let t=[];for(let o of e){if(o.code==="invalid_union"){t.push(...KH(o));continue}t.push(o);}return t}function Q$e(e,t){return e.code!=="unrecognized_keys"?false:t===void 0?e.path.length===0:e.path.length===1&&e.path[0]===t}function KH(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(KH(o)):0;return t+o.path.length+n},0)}var j7=z.strictObject({string:z.string()}),Z$e=z.strictObject({javascript:z.string()}),H7=z.union([j7,Z$e]),eGe=z.union([z.strictObject({name:z.string(),required:z.boolean().optional(),default:j7.optional()}),z.strictObject({name:z.string(),required:z.boolean().optional(),defaultValue:z.string()})]),$7=eGe.array(),tGe=z.strictObject({name:z.string(),default:H7.optional(),enum:z.array(z.string()).optional()}),G7=tGe.array(),TR=z.union([H7,z.string()]),V7=z.record(z.string(),TR);var oGe=z.preprocess(e=>typeof e=="number"?String(e):e,KE),yO=z.looseObject({goal:z.string(),version:oGe.optional(),cache:z.literal(false).optional(),...At}),nGe=z.union([z.strictObject({act:z.string()}),z.strictObject({act:yO})]),YH=z.looseObject({path:z.string(),inputs:z.record(z.string(),TR).optional(),...At}),rGe=z.union([z.strictObject({module:z.string()}),z.strictObject({module:YH})]),Xm=z.union([pO,hO,WH,fO,gO]),iGe=new Set(["then","effort",...JS]),aGe=z.looseObject({then:z.lazy(()=>uu.array()),effort:bt.optional(),...At}).superRefine((e,t)=>{Object.entries(e).filter(([n,r])=>!iGe.has(n)&&Xm.safeParse({[n]:r}).success).length!==1&&t.addIssue({code:"custom",message:"Conditional steps require exactly one assertion condition at the top level."});}),sGe=z.strictObject({if:aGe}),lGe=new Set(["do","maxIterations","effort",...JS]),cGe=z.looseObject({do:z.lazy(()=>uu.array()),maxIterations:z.number().int().positive().optional(),effort:bt.optional(),...At}).superRefine((e,t)=>{let o=Object.entries(e).filter(([n,r])=>!lGe.has(n)&&Xm.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."});}),uGe=z.strictObject({while:cGe}),uu=z.lazy(()=>z.union([Yf,YS,nGe,rGe,sGe,uGe,vd]));z.object({before:uu.array().optional(),steps:uu.array(),after:uu.array().optional()});var dGe=z.union([jm,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 jm.safeParse({width:Number(o),height:Number(n)}).success},"Viewport must be two numeric values, e.g. 1920, 1080")]),mGe=os.omit({viewport:true}).extend({viewport:dGe.optional()}),JH=z.object({id:ir,version:z.string().optional(),url:Y_.optional(),description:z.string().optional(),retries:z.number().optional(),defaultEnv:z.string().optional(),parameters:$7.optional(),outputs:xP.optional(),disabled:z.boolean().optional(),labels:z.array(z.string()).optional(),runAssertions:_P.array().optional()}).extend(mGe.shape),pGe=z.looseObject({fileType:z.literal(Ue.TEST_V2)}).extend(JH.shape).extend({before:uu.array().optional(),steps:uu.array(),after:uu.array().optional()}),Fh=pGe.superRefine(gGe),hGe={beforeSteps:"before",afterSteps:"after"};function gGe(e,t){for(let[o,n]of Object.entries(hGe))o in e&&t.addIssue({code:"custom",message:`v2 tests must use ${n}, not ${o}`,path:[o]});}var fGe=z.array(z.string()),yGe=z.union([z.string(),z.record(z.string(),z.unknown().optional())]),bO=nr.omit({moduleId:true,name:true,parameters:true,defaultParameters:true,parameterEnums:true}).extend({id:ir,version:z.string().optional(),name:z.string().optional(),parameters:z.union([G7,fGe]).optional(),defaultParameters:z.record(z.string(),z.string()).optional(),parameterEnums:z.record(z.string(),z.array(z.string())).optional()}),SO=z.looseObject(bO.extend({fileType:z.literal(Ue.MODULE_V2),steps:yGe.array().optional()}).shape).superRefine(q7),TO=z.looseObject(bO.extend({fileType:z.literal(Ue.MODULE_V2),steps:uu.array().optional()}).shape).superRefine(q7);function W7(e){return e.steps??[]}function q7(e,t){"main"in e&&t.addIssue({code:"custom",message:"v2 modules must use steps, not main",path:["main"]});}var XH=(o=>(o.TEST="TEST",o.MODULE="MODULE",o))(XH||{}),bGe=z.enum(XH),K7=z.object({orgId:z.string(),entityType:bGe,entityId:z.string()}),QH=K7.extend({entityType:z.literal("TEST"),stepLists:tu}),ZH=K7.extend({entityType:z.literal("MODULE"),steps:mo.array()});z.discriminatedUnion("entityType",[QH,ZH]);var Y7=(n=>(n.WEB="web",n.ANDROID="android",n.IOS="ios",n))(Y7||{}),e$=z.nativeEnum(Y7);var J7=z.object({entity_type:z.string(),value:z.string(),schema_version:z.string().optional()}),X7=bw(J7),Q7=J7.extend({cache_key:z.string()});function vR({entityType:e,entityId:t}){return `${e}:${t}`}var Xf=z.string();var Z7='Coordinates must be "x, y" pixel values, e.g. "100, 200"',nee=z.union([ed,z.string().regex(/^\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*$/,Z7)],{error:Z7}),eee='Percent must be a number or a percent string, e.g. 90 or "90%"',ree=z.union([z.number(),z.string().regex(/^-?\d+(?:\.\d+)?%$/,eee)],{error:eee}).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"})),SGe=z.strictObject({x:z.number(),y:z.number(),delta:z.number()}),iee=z.union([z.string(),SGe]),Zo={...At,DANGEROUS_FORCE_DYNAMIC:z.boolean().optional()},TGe=["home","power","back","app_switcher","search","volume_up","volume_down","volume_mute"],vGe=["enter","backspace","close_keyboard"],tee=["airplane_mode","data","wifi","location"],oee=["portrait","landscape"],AGe=z.strictObject({on:Xf.optional(),longPress:z.boolean().optional(),longPressDuration:z.number().optional(),iterations:z.number().optional(),tapDelay:z.number().optional(),offset:nee.optional(),...Zo}),aee=st({key:"tap",simplified:Xf,detailed:AGe}),EGe=z.strictObject({text:z.string(),into:Xf.optional(),clearContent:z.boolean().optional(),forceClearContent:z.boolean().optional(),delay:z.number().optional(),waitForKeyboardSettle:z.boolean().optional(),replaceStrategy:z.nativeEnum(Ww).optional(),keyPressDelay:z.number().optional(),...Zo}),see=st({key:"type",simplified:z.string(),detailed:EGe}),lee=z.enum(TGe),wGe=z.strictObject({key:lee,longPress:z.boolean().optional(),...Zo}),cee=st({key:"press",simplified:lee,detailed:wGe}),uee=z.enum(vGe),RGe=z.strictObject({key:uee,repeat:z.number().optional(),delay:z.number().optional(),keyPressDelay:z.number().optional(),...Zo}),dee=st({key:"pressKey",simplified:uee,detailed:RGe}),CGe=z.strictObject({package:z.string(),activity:z.string().optional(),intentExtras:z.string().optional(),...Zo}),mee=st({key:"openApp",simplified:z.string(),detailed:CGe}),pee=jn({key:"killApp",detailed:z.strictObject(Zo)}),hee=jn({key:"openNotifications",detailed:z.strictObject(Zo)}),gee=z.enum(["up","down","left","right"]),IGe=z.strictObject({direction:gee,in:iee.optional(),viewportPercent:ree.optional(),duration:z.number().optional(),offset:nee.optional(),...Zo}),fee=st({key:"swipe",simplified:gee,detailed:IGe}),xGe=z.enum(["up","down"]),_Ge=z.strictObject({on:Xf,direction:xGe.optional(),in:iee.optional(),scrollStepPercent:ree.optional(),maxScrollAttempts:z.number().optional(),...Zo}),yee=st({key:"scrollTo",simplified:z.string(),detailed:_Ge}),t$=st({key:"assert",simplified:z.string(),detailed:z.strictObject({that:z.string(),timeout:z.number().optional(),...Zo})}),o$=st({key:"assertVisually",simplified:z.string(),detailed:z.strictObject({that:z.string(),timeout:z.number().optional(),...Zo})}),bee=st({key:"extract",simplified:z.string(),detailed:z.strictObject({goal:z.string(),schema:Lh.optional(),...Zo})}),See=st({key:"checkScreenContains",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),...Zo})}),Tee=st({key:"checkScreenDoesNotContain",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),...Zo})}),vee=z.union([See,Tee]),PGe=z.record(z.string(),z.unknown().optional()),n$=PGe.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=us(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:Xf.optional(),timeout:z.number().optional(),name:z.string().optional(),value:z.string().optional(),...Zo}).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"]});}),OGe=z.strictObject({from:Xf,to:Xf,hoverDuration:z.number().optional(),dragDuration:z.number().optional(),...Zo}),Aee=jn({key:"dragAndDrop",detailed:OGe}),r$=st({key:"javascript",simplified:z.string(),detailed:z.strictObject({code:z.string(),timeout:z.number().optional(),...Zo})}),Eee=st({key:"request",simplified:z.string(),detailed:z.strictObject({url:z.string(),method:Om.optional(),headers:z.record(z.string(),z.string()).optional(),params:z.record(z.string(),z.string()).optional(),body:z.string().optional(),bodyType:z.nativeEnum(rd).optional(),timeout:z.number().optional(),...Zo})}),wee=st({key:"wait",simplified:z.number(),detailed:z.strictObject({ms:z.number(),...Zo})}),Ree=st({key:"visualDiff",simplified:z.string(),detailed:z.strictObject({path:z.string(),threshold:z.number().min(0).max(1).optional(),...Zo})}),Cee=jn({key:"addFile",detailed:z.strictObject({path:z.string(),location:z.string(),...Zo})}),Iee=st({key:"setCamera",simplified:z.string(),detailed:z.strictObject({path:z.string(),loop:z.boolean().optional(),playAudio:z.boolean().optional(),...Zo})}),xee=jn({key:"clearCamera",detailed:z.strictObject(Zo)}),_ee=st({key:"setMicrophone",simplified:z.string(),detailed:z.strictObject({path:z.string(),once:z.boolean().optional(),...Zo})}),Pee=jn({key:"clearMicrophone",detailed:z.strictObject(Zo)}),Oee=st({key:"installApp",simplified:z.string(),detailed:z.strictObject({path:z.string(),...Zo})}),kee=st({key:"uninstallApp",simplified:z.string(),detailed:z.strictObject({package:z.string(),...Zo})}),Mee=st({key:"toggleSettings",simplified:z.enum(tee),detailed:z.strictObject({setting:z.enum(tee),...Zo})}),Lee=st({key:"rotate",simplified:z.enum(oee),detailed:z.strictObject({orientation:z.enum(oee),...Zo})}),Nee=st({key:"adb",simplified:z.string(),detailed:z.strictObject({command:z.string(),args:z.string().optional(),...Zo})}),Dee=jn({key:"appium",detailed:z.strictObject({script:z.string(),args:z.string().optional(),...Zo})}),Fee=jn({key:"debugState",detailed:z.strictObject(Zo)}),Bee=z.enum(["killApp","openNotifications","debugState","clearCamera","clearMicrophone"]);z.union([aee,see,cee,dee,mee,pee,hee,fee,yee,t$,o$,bee,vee,Aee,r$,Eee,wee,Ree,Cee,Iee,xee,_ee,Pee,Oee,kee,Mee,Lee,Nee,Dee,Fee,n$]);var Uee=new Map([["tap",aee],["type",see],["press",cee],["pressKey",dee],["openApp",mee],["killApp",pee],["openNotifications",hee],["swipe",fee],["scrollTo",yee],["assert",t$],["assertVisually",o$],["extract",bee],["checkScreenContains",See],["checkScreenDoesNotContain",Tee],["dragAndDrop",Aee],["javascript",r$],["request",Eee],["wait",wee],["visualDiff",Ree],["addFile",Cee],["setCamera",Iee],["clearCamera",xee],["setMicrophone",_ee],["clearMicrophone",Pee],["installApp",Oee],["uninstallApp",kee],["toggleSettings",Mee],["rotate",Lee],["adb",Nee],["appium",Dee],["debugState",Fee]]);Object.freeze([...Uee.keys()]);var zee=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=Uee.get(n)??(us(n)?n$: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});}),i$=z.union([t$,o$,vee,r$,n$]);var kGe=z.preprocess(e=>typeof e=="number"?String(e):e,dH),MGe=z.looseObject({goal:z.string(),version:kGe.optional(),cache:z.literal(false).optional(),precondition:z.string().optional(),postcondition:z.string().optional(),...At}),LGe=z.union([z.strictObject({act:z.string()}),z.strictObject({act:MGe})]),NGe=z.looseObject({path:z.string(),inputs:z.record(z.string(),TR).optional(),...At}),DGe=z.union([z.strictObject({module:z.string()}),z.strictObject({module:NGe})]),FGe=new Set(["then",...JS]),BGe=z.looseObject({then:z.lazy(()=>du.array()),...At}).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])=>!FGe.has(n)&&i$.safeParse({[n]:r}).success).length!==1&&t.addIssue({code:"custom",message:"v2 mobile conditional steps require exactly one assertion condition at the top level."});}),UGe=z.strictObject({if:BGe}),zGe=new Set(["do","maxIterations",...JS]),jGe=z.looseObject({do:z.lazy(()=>du.array()),maxIterations:z.number().int().positive().optional(),...At}).superRefine((e,t)=>{let o=Object.entries(e).filter(([n,r])=>!zGe.has(n)&&i$.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."});}),HGe=z.strictObject({while:jGe}),du=z.lazy(()=>z.union([Bee,YS,LGe,DGe,UGe,HGe,zee]));z.object({before:du.array().optional(),steps:du.array(),after:du.array().optional()});var $Ge=z.literal("android"),GGe=z.literal("ios");function vO(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 jee=GS.omit({schemaVersion:true,settings:true,platform:true}).extend({version:z.string().optional(),platform:$Ge,...rR.shape}),Hee=VS.omit({schemaVersion:true,settings:true,platform:true}).extend({version:z.string().optional(),platform:GGe,...rR.shape}),VGe=z.discriminatedUnion("platform",[jee,Hee]),$ee=z.preprocess(vO,VGe),Gee={before:du.array().optional(),steps:du.array(),after:du.array().optional()},Vee=z.looseObject({fileType:z.literal(Ue.MOBILE_TEST_V2)}).extend(jee.shape).extend(Gee);z.preprocess(vO,Vee);var Wee=z.looseObject({fileType:z.literal(Ue.MOBILE_TEST_V2)}).extend(Hee.shape).extend(Gee);z.preprocess(vO,Wee);var WGe=z.discriminatedUnion("platform",[Vee,Wee]);z.preprocess(vO,WGe);var qGe=z.preprocess(e=>typeof e=="string"?e.toLowerCase():e,z.enum(SP).optional().default("android")),AO=YP.omit({moduleId:true,name:true,schemaVersion:true,platform:true}).extend({id:ir,name:z.string().optional(),version:z.string().optional(),platform:qGe});z.looseObject(AO.extend({fileType:z.literal(Ue.MOBILE_MODULE_V2),steps:z.array(z.record(z.string(),z.unknown().optional())).optional()}).shape);z.looseObject(AO.extend({fileType:z.literal(Ue.MOBILE_MODULE_V2),steps:du.array().optional()}).shape);var EO="x-momentic-cli-version",Kee="x-momentic-client-mode",wO="x-momentic-runner",Yee="x-momentic-cli-type",RO="x-momentic-logger-tags",a$="x-momentic-effective-ai-effort",KGe="x-momentic-main-branch-name",YGe="x-momentic-branch-name",JGe="x-momentic-commit-timestamp",XGe="x-momentic-last-commit-on-main",QGe="x-momentic-last-commit-on-main-timestamp",ZGe="x-momentic-merged-branch-name",Jee="x-momentic-session-id",Xee=529,Qee="x-momentic-parent-trace-id";x.object({error:x.boolean(),reason:x.string(),message:x.string()});Xr.merge(Hj);var Zee=$_;Xr.merge(Hj);Xr.merge(TQ).extend({useConsensus:x.boolean().optional(),attemptNumber:x.number().optional()});var s$=EJ;Xr.merge(vQ);var ete=pX;Xr.merge(fQ);var tte=yP;Xr.merge(V6);Xr.merge(yQ);var ote=uX;Xr.merge(bQ);Xr.merge(SQ);Xr.merge(RQ);Xr.merge(CQ);Xr.merge(IQ);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 nte=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 e1e=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."))}),rte=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:e1e.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.")}),t1e=x.object({test:x.string().describe("test YAML"),modules:x.record(x.string().describe("moduleId"),x.string().describe("module YAML"))});t1e.array();x.object({testId:x.string(),schemaVersion:x.string()}).merge(Lm);function CO(e){let{gitMainBranch:t,gitBranchName:o,gitCommitTimestamp:n,lastCommitOnMainSha:r,lastCommitOnMainTimestamp:i}=e,a={};return t&&(a[KGe]=encodeURIComponent(t)),o&&(a[YGe]=encodeURIComponent(o)),n&&(a[JGe]=n.toISOString()),r&&(a[XGe]=encodeURIComponent(r)),i&&(a[QGe]=i.toISOString()),e.mergedGitBranchName&&(a[ZGe]=encodeURIComponent(e.mergedGitBranchName)),a}x.object({entries:x.array(Y6)});x.object({platform:e$.optional(),entries:x.array(X7)});x.object({testId:x.string(),environment:x.string().optional(),platform:e$.optional()});x.object({testId:x.string(),key:x.string(),environment:x.string().optional()});function ite(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 ate=ite(J6),ste=Q7.array();function qee(e){return ite(Sw(e))}var lte={ANDROID:e=>qee(ZP).parse(e),IOS:e=>qee(eO).parse(e)},o1e=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(Tn).optional()}),n1e=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(Tn).optional()});x.object({completionType:x.string(),traceIds:x.string().array()});var l$=x.union([o1e,n1e]).array(),cte=x.object({trigger:x.nativeEnum(El),status:x.nativeEnum($t),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 ute=x.object({status:x.nativeEnum($t),updatedAt:x.coerce.date().optional(),finishedAt:x.coerce.date().optional()});x.object({summary:Df,githubRepository:x.string().optional(),gitBranchName:x.string().optional()});var r1e=x.object({runId:x.string(),healStatus:Nf,healDetails:wh.optional()});x.object({updates:r1e.array()});var dte=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(El),schemaVersion:x.string().optional(),section:x.nativeEnum(PP).optional(),resolvedInputs:x.record(x.string(),x.string()).optional(),quarantined:x.boolean().optional().default(false),quarantinedReason:x.string().optional(),aiSettings:Gs.optional()});x.object({id:x.string()});var i1e=Uj.pick({id:true,status:true,healStatus:true,healDetails:true,testName:true,testId:true,test:true,failureReason:true,failureDetails:true}),mte=i1e.array(),pte=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 IO=x.object({run:ns.omit({runAttempts:true}),attemptZipUrls:x.array(x.string().url().nullish())}),hte=x.object({status:x.nativeEnum($t),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 gte=x.object({key:x.string()}),fte=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()}),yte=x.object({blocked:x.boolean()}),bte=x.array(P6),Ste=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 Tte=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()}),vte=x.object({error:x.literal("multiple_organizations"),organizations:x.array(x.object({id:x.string(),name:x.string()}))}),a1e=80,s1e=x.string().trim().min(1).max(a1e);x.object({name:s1e});var l1e=["web","ios","android"];x.object({platforms:x.array(x.enum(l1e)),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:Dj.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 Ate=x.object({suiteRunIds:x.string().array(),runGroupIds:x.string().array()});x.object({suiteRunIds:x.string().array()});dQ.array();x.object({runGroupIds:x.string().array()});var xO=x.object({uploadUrl:x.string()});Xr.merge(AQ);Xr.merge(wQ);Xr.merge(EQ);var _O=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(_a).optional(),aiFeature:x.nativeEnum(kh).optional(),cached:x.boolean().optional(),outcome:x.nativeEnum(jS).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(),[J8]:x.string().optional(),agentInvocationId:x.string().optional(),moRuntimeSecondsUsed:x.number().nonnegative().optional(),moSpend: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(_a).optional()});var c1e=x.object({transactionId:x.string(),timestamp:x.string(),event:x.nativeEnum(Vf),properties:_O});c1e.array();var Ete=_Z.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:Vn.optional(),end:Vn.optional(),gitBranchName:x.string().optional(),status:x.nativeEnum($t).optional()});var wte=ZX.array(),Rte=ns.array(),AR=Nh.extend({executionType:$m.array().min(1).optional(),testId:ir.optional(),gitBranchName:x.string().optional(),gitCommitSha:x.string().optional(),status:x.nativeEnum($t).optional(),label:x.string().array().optional(),start:Vn.optional(),end:Vn.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()});AR.extend({orgId:x.string().optional(),testId:fi(ir),status:fi(x.nativeEnum($t)),gitBranchName:fi(x.string()),label:fi(x.string()),testName:x.string().optional(),trigger:fi(x.nativeEnum(El)),executionType:fi($m),cliVersion:fi(x.string()),githubRepository:fi(x.string()),gitlabProjectPath:fi(x.string()),environment:fi(x.string()),directory:fi(x.string()),failureCategory:fi(x.string()),exclude:fi(x.string()),healed:x.boolean().optional()});var u1e=ns.omit({test:true}),Cte=FH.extend({runs:u1e.array(),executionTypeFilterApplied:x.boolean().optional()});x.object({applied:x.boolean().optional(),appliedAt:x.coerce.date().optional()});var Ite=xO.extend({id:x.string()}),d1e=x.object({resultType:x.literal("run").optional().default("run"),runGroupId:x.guid().optional(),persist:x.boolean().optional()}),m1e=x.object({resultType:x.literal("explore"),exploreRunId:x.guid(),persist:x.boolean().optional()});x.discriminatedUnion("resultType",[d1e,m1e]);var xte=x.object({runGroupId:x.guid()}),p1e=x.object({status:Nf,runId:x.string(),rootCause:x.string().nullable().optional(),solution:x.string().nullable().optional(),verificationNotes:x.string().nullable().optional(),markedAt:x.string()}),_te=x.object({quarantined:x.object({testId:ir,quarantinedAt:x.coerce.date(),quarantinedBy:x.string().optional(),quarantinedReason:x.string(),verdict:p1e.nullish().default(null)}).array()}),c$=Nh.extend({limit:Nh.shape.limit.describe("Max number of quarantined tests to return per page."),page:Nh.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.")}),h1e=x.object({id:x.string(),status:x.literal("FAILED"),startedAt:Vn,finishedAt:Vn,failureReason:x.string().nullish(),healStatus:Nf,healDetails:wh.nullish()}),Pte=FH.extend({quarantinedTests:x.array(x.object({testId:ir,testName:x.string().nullish(),quarantinedAt:Vn,quarantineReason:x.string(),latestFailedRun:h1e.nullable()}))}),Ote=x.object({gitLocalUsername:x.string().optional(),gitLocalEmail:x.string().optional(),gitLocalName:x.string().optional()});x.object({testId:ir,testName:x.string().optional(),reason:x.string()}).merge(Ote);x.object({testName:x.string().optional(),reason:x.string().optional()}).merge(Ote);Xr.merge(z8);Xr.merge(j8);Xr.merge(H8);x.object({apkToInstall:x.object({channel:x.string(),tag:x.string().optional()}).optional(),hostname:x.string().optional(),region:RH.optional(),jurisdiction:nR.optional(),osVersion:x.nativeEnum($S).optional(),sessionId:x.string().optional(),runId:x.string().optional(),testId:x.string().optional(),playwrightVersion:o9.optional()});var kte=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:RH.optional(),jurisdiction:nR.optional(),osVersion:x.nativeEnum(oO).optional(),sessionId:x.string().optional(),runId:x.string().optional(),testId:x.string().optional(),installAppOnClient:x.boolean().optional()});var Mte=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()!==vw,{message:`"${vw}" 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()!==vw,{message:`"${vw}" is a reserved alias and cannot be assigned when uploading an asset.`}).optional(),md5:x.string()});var Lte=x.object({id:x.string(),tag:x.string().optional(),alias:x.string().optional(),uploadUrl:x.string().optional(),downloadUrl:x.string(),md5:x.string().optional()}),g1e=x.object({channel:x.string(),tag:x.string(),md5:x.string(),platform:x.nativeEnum(lc).default("ANDROID"),createdAt:x.number().describe("Unix timestamp in milliseconds")}),f1e=x.object({channel:x.string(),alias:x.string(),platform:x.nativeEnum(lc).default("ANDROID"),tag:x.string()}),Nte=x.object({assets:x.array(g1e),aliases:x.array(f1e).default([])}),Dte=x.object({downloadUrl:x.string()}),PO=(o=>(o.PLAYWRIGHT="PLAYWRIGHT",o.CDP="CDP",o))(PO||{}),y1e=x.nativeEnum(PO),Fte=x.string().trim().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,79}$/);x.object({access:Fte.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(cO).optional(),localhostTunnel:x.boolean().optional()});var b1e=x.object({access:Fte.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()});b1e.extend({attemptedProviders:x.array(cO).max(Object.values(bR).length).default([])}).strict();var S1e=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()]),Bte=x.object({accessToken:x.string().min(1),expiresAt:x.iso.datetime(),fleetApiUrl:x.url(),provider:x.literal("SELF_HOSTED"),tokenType:x.literal("Bearer")}),T1e=Bte.extend({network:S1e}).strict(),Ute=x.union([T1e,Bte.strict()]),v1e=x.object({hostname:x.string(),lease:x.string(),server:x.object({host:x.string(),port:x.number().int().positive()})}),zte=x.object({wsEndpoint:x.string(),accessToken:x.string().optional(),endpointType:y1e.optional(),provider:cO.optional(),operatingSystem:xZ.optional(),tunnel:v1e.optional()});var A1e=200,E1e=2e3,ER=z.string().trim().min(1).max(A1e),Bh=z.string().trim().min(1).max(E1e),nT=z.array(Bh),w1e=z.enum(["verified","issues_found","blocked"]),OO=z.object({name:ER,summary:Bh,preconditions:nT,outline:nT,acceptanceCriteria:nT}),R1e=z.object({startedAt:z.number(),finishedAt:z.number(),agentId:z.string().optional(),windowId:z.string().optional(),artifactId:z.string().optional()}),C1e=z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\.(?:jpg|png)$/),I1e=z.object({artifactId:C1e,mediaType:z.enum(["image/jpeg","image/png"])}).refine(({artifactId:e,mediaType:t})=>e.endsWith(t==="image/png"?".png":".jpg"),"Screenshot filename extension must match its media type"),x1e=z.enum(["bug","flag"]),kO=z.object({kind:x1e.default("bug"),name:ER,summary:Bh,expected:Bh,actual:Bh,reproSteps:nT,recording:R1e.nullish(),screenshot:I1e.nullish()}),Hte=z.object({name:ER.describe("The name of the bug to retract."),reason:z.enum(["duplicate","invalid"]).describe("Why the bug report is being retracted.")}),u$=z.enum(["checked","failed","partial","out_of_scope"]),d$=z.object({control:ER,status:u$,result:Bh}),m$=z.object({status:w1e,summary:Bh,verified:nT,gaps:nT});z.object({entry:OO});z.object({entry:kO});z.object({entry:d$});z.object({report:m$});z.object({entries:z.array(OO)});z.object({entries:z.array(kO)});z.object({entries:z.array(d$)});z.object({report:m$.nullable()});var p$=z.object({agent:z.string().nullable(),conversationId:z.string().nullable(),createdAt:z.iso.datetime(),updatedAt:z.iso.datetime()}),_1e=OO.extend({...p$.shape,blockedReason:z.string().nullable()}),P1e=kO.extend({...p$.shape,investigatorAgent:z.string().nullable(),investigatorConversationId:z.string().nullable(),reviewedAt:z.iso.datetime().nullable()});d$.extend({agent:z.string(),conversationId:z.string()});var O1e=m$.extend({testCaseName:z.string().nullable(),...p$.shape}),h$=z.enum(["OPEN","ACCEPTED","DUPLICATE","WORKS_AS_INTENDED","CANNOT_REPRODUCE"]);z.object({bugName:z.string(),status:h$,knowledgeItemId:z.string().nullable(),updatedByUserId:z.string().nullable(),updatedAt:z.iso.datetime()});z.object({chatId:z.string().min(1),bugName:ER,status:h$,reviewedKnowledgeItemIds:z.array(z.string().min(1)).optional(),reviewedKnowledgeItemStatus:IX.optional(),linkedKnowledgeItemId:z.string().min(1).nullable().optional()});z.object({entries:z.array(_1e)});z.object({entries:z.array(P1e)});z.object({entries:z.array(O1e)});var jte=z.object({testCases:z.number(),issuesFound:z.number(),blocked:z.number(),bugs:z.number(),bugsByTriage:z.record(h$,z.number())});z.union([jte.extend({passed:z.number()}),jte.extend({verified:z.number()}).transform(({verified:e,...t})=>({...t,passed:e}))]);z.object({entry:OO});z.object({retracted:z.boolean(),conflict:z.string().optional()});z.object({entry:kO,reporterAgent:z.string().min(1).optional(),reporterConversationId:z.string().min(1).optional()}).superRefine((e,t)=>{e.entry.kind!=="flag"||e.entry.screenshot||t.addIssue({code:"custom",message:"Flags require a screenshot",path:["entry","screenshot"]});}).refine(e=>e.reporterAgent===void 0==(e.reporterConversationId===void 0),"reporterAgent and reporterConversationId must be provided together");z.object({reason:Bh});var $te=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:Mz.nullish()});$te.extend({steps:z.lazy(()=>mo.array())});var Gte=5*60*1e3,wR=nr.extend($te.omit({id:true,createdAt:true,createdBy:true,organizationId:true,enabled:true}).shape);var k1e="org_01HMJTX4GT1KG94KZRCT8MZ6YB",M1e="org_01HMSCJQBCCG51M2ZF65YC5B8W",L1e="org_01JPR6MGFQSHF3W234R3XJDPMB",N1e=[k1e,M1e,L1e];function Qf(e){return N1e.includes(e)}var Vte=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:Vte.nullable()});var Wte=z.object({updates:Vte.array()});z.object({repositoriesIndexed:z.boolean(),indexingInProgress:z.boolean(),indexesOutdated:z.boolean()});var qte=(a=>(a.Queued="queued",a.InProgress="in_progress",a.Completed="completed",a.Waiting="waiting",a.Requested="requested",a.Pending="pending",a))(qte||{}),Kte=(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))(Kte||{});z.object({name:z.string(),status:z.enum(qte),conclusion:z.enum(Kte).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()})}),g$=z.object({mergedBranch:z.string().optional()});var Yte=z.object({orgId:z.string(),cacheKeys:z.string().array()});z.object({keyParams:Yte,clientMetadata:z.string(),lockAcquisitionTimeoutMs:z.number().optional()});var Jte=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()}),Yte]);var D1e=z.object({remainingTtlMs:z.number(),value:z.string().nullish()});z.object({results:z.record(z.string(),D1e),activeLocks:z.string().array()});var Xte=0,Qte=5*60*1e3;var Zte=z.object({cacheEntryId:z.string().uuid(),category:z.string().min(1)}),eoe={isManualOverride:z.boolean().optional(),manualOverrideOf:Zte.optional()},toe=vE.extend({identityVersion:z.literal(gl),cacheEntryId:z.string().uuid().optional(),runId:z.string().min(1).optional(),executionFailureReason:z.string().min(1).optional(),classification:b_,healDetails:lj.optional(),...eoe}),ooe=Gb.extend({identityVersion:z.literal(Ef).optional(),cacheEntryId:z.string().uuid().optional(),runId:z.string().min(1).optional(),testId:z.string().min(1),executionFailureReason:z.string().min(1).optional(),classification:b_,healDetails:lj.optional()}),F1e=z.union([toe,ooe]),noe={overriddenBy:Zte.optional(),createdAt:z.coerce.date(),updatedAt:z.coerce.date()},B1e=toe.extend({cacheEntryId:z.string().uuid(),...noe}),U1e=ooe.extend({...eoe,...noe}),z1e=U1e.transform(e=>({...e,identityVersion:Ef})),roe=z.union([B1e,z1e]);function CR(e){return !e.branchName&&AE(e.classification.category)}var j1e=vE.extend({mainBranchName:z.string().min(1).optional()}),H1e=Gb.extend({mainBranchName:z.string().min(1).optional(),testId:z.never().optional()}).transform(({testId:e,...t})=>t);z.union([j1e,H1e]);var ioe=roe.array();z.object({entries:F1e.array()});var $1e=vE.extend({cacheEntryId:z.string().uuid(),runId:z.string().min(1),category:z.string().min(1)}),G1e=Gb.extend({testId:z.never().optional(),runId:z.string().min(1),cacheEntryId:z.string().uuid(),category:z.string().min(1)}).transform(({testId:e,...t})=>t);z.union([$1e,G1e]);z.object({status:z.enum(["evicted","not_found","run_mismatch"]),entry:roe.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 MO=z.object({skip:z.boolean(),failed:z.number(),total:z.number()}),V1e=.8;function aoe({failed:e,completed:t,minCompletedRuns:o}){return t>=o&&e/t>=V1e}function rT(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 W1e=z.object({version:z.string(),json:z.record(z.string(),z.unknown().optional()),hash:z.string()}),soe=z.record(z.string(),z.unknown().optional());z.object({newSvgs:z.array(W1e),metadata:soe.optional()});var q1e=z.object({version:z.string(),json:z.record(z.string(),z.unknown().optional()).nullish(),hash:z.string(),description:z.string().nullish(),metadata:soe.nullish()}),loe=z.record(z.string().describe("icon hash"),q1e);var f$="metadata.json",y$="test.yaml",coe=".snapshot.zip",b$=Zn.extend(Tl.shape),K1e=z.object({envName:z.string().optional(),baseUrl:z.string(),variables:z.record(z.string(),z.unknown().optional()),resolvedEnv:hw.optional()}),uoe=z.object({browser:ru.optional(),ai:Gs.optional(),advanced:Iw.optional(),retries:z.number().optional()});z.object({momenticVersion:z.string(),schemaVersion:z.string(),createdAt:z.string(),relativeFilePath:z.string(),environment:K1e,config:uoe});var doe=z.object({variables:z.record(z.string(),z.unknown().optional()),resolvedEnv:hw.optional()}),Y1e=z.object({envName:z.string().optional(),baseUrl:z.string(),encryptedSecrets:z.string()}),moe=z.object({momenticVersion:z.string(),schemaVersion:z.string(),createdAt:z.string(),relativeFilePath:z.string(),environment:Y1e,config:uoe});var J1e=z.looseObject({type:z.number(),data:z.record(z.string(),z.unknown()),timestamp:z.number()}),poe=z.custom(e=>J1e.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:u$}),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 hoe(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 goe=e=>{e.extraHeaders&&(e.extraHeaders=Object.fromEntries(Object.entries(e.extraHeaders).filter(([t,o])=>t.trim()&&o.trim())));};var LO=class{async prepareGoldenScreenshotForComparison(t,o,n){return n}};var NO=class{async resolveStepCacheEntries(){return {}}async saveStepCacheEntries(){}async saveSnapshotCacheEntries(){}async deleteStepCacheEntry(){}};function Q1e(e){return e.map(t=>({...t,environment:void 0}))}function S$(e,t){return t?e:Q1e(e)}var v$="browser-crash-dump.zip",T$=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 T$}flushResults(t){}};var ft="metadata.json",ds="assets",Mn="runs",A$=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:A$,videoAssets:z.string().array().optional()});var foe=z.object({uploadUrl:z.string(),videoUploadUrls:z.record(z.string(),z.string()).optional()}),Z1e=z.object({step:po,status:z.enum(Dt),startedAt:z.coerce.date(),finishedAt:z.coerce.date().optional(),healMetadata:z.object({healType:z.enum(Tw).or(z.literal("AI")),healedAt:z.coerce.date()}).optional(),beforeSnapshotId:z.guid().optional(),afterSnapshotId:z.guid().optional(),message:z.string().optional()}),e2e=Z1e.extend({finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});e2e.extend({step:z.unknown().optional()});var E$=z.object({avdId:z.string().optional(),channel:z.string().optional(),tag:z.string().optional(),region:z.string().optional(),osVersion:n9.optional()}),yoe="1.0.0",boe=hte.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:E$.optional(),viewport:jm.optional(),activeVideos:z.array(z.object({videoName:z.string(),timestamp:z.coerce.date()})).optional()}),xR=boe.extend({assetDetails:E$.optional(),finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});boe.extend(Ej.shape);var Soe=xR.extend(Ej.shape),t2e=z.object({results:z.array(is),beforeResults:z.array(is).optional(),afterResults:z.array(is).optional()});xR.extend(t2e.shape);var o2e=z.object({results:z.array(as),beforeResults:z.array(as).optional(),afterResults:z.array(as).optional()});xR.extend(o2e.shape);var Toe=pte.merge(dte).extend({executionType:$m.optional().default("WEB"),testId:ir,testDescription:z.string().optional(),directory:z.string().optional(),runGroupId:z.guid(),status:z.enum($t),healStatus:Nf,testBundleHash:z.string().optional(),startedAt:z.coerce.date(),schemaVersion:z.string().nullish(),attempts:z.number(),failureRecoveryDetails:z.object({attempts:z.number()}).optional(),aiSettings:Gs.optional(),avgCpuUsage:z.number().optional(),avgMemoryUsage:z.number().optional()}),n2e=Toe.extend(E$.shape),Uh=Toe.extend({finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});n2e.extend({finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});var DO=1e4,r2e=cte.merge(ute).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:Gs.optional(),browser:ru.optional(),sourceRunGroupIds:z.array(z.guid()).max(DO).optional(),mergedAt:z.coerce.date().optional(),aiSelect:z.union([_w.transform(e=>[e]),z.array(_w)]).optional()}),Sc=r2e.extend({healRiskSummary:Df.optional(),updatedAt:z.coerce.date().optional().transform(e=>e??new Date),finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});var i2e=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"]),a2e=new Set(["MODULE","RESOLVED_MODULE"]);function voe(e){return e.type!=="PRESET_ACTION"?e.type:e.command.type}function Aoe(e){return a2e.has(e.type)?false:e.type!=="PRESET_ACTION"?true:!i2e.has(e.command.type)}var Eoe="progress.json",woe="1.0.0",s2e=z.object({runId:z.string(),testId:z.string().optional(),testName:z.string().optional(),directory:z.string().optional(),status:z.nativeEnum($t),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($t),totalRuns:z.number(),completedRuns:z.number(),completedSteps:z.number(),totalSteps:z.number(),startedAt:z.coerce.date(),updatedAt:z.coerce.date(),runs:s2e.array()});function Roe(e,t){let o=bn__default.relative(t,e);return o!==""&&o!==".."&&!o.startsWith(`..${bn__default.sep}`)&&!bn__default.isAbsolute(o)}function Coe(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 Ioe="CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih",iT="https://us-west.metrics.momentic.ai",aT="c60c6a0f-60da-41a7-a61b-07969a0aa303",ms=!!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 g2e=new Set(["exit","quit"]),Poe=(()=>{try{return statSync("/.dockerenv"),!0}catch{return false}})(),f2e=ms||Poe||!process.stdin.isTTY;async function ei(e){if(ms||Poe)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 R$(e){let t=dirname(e);return Coe(t)?existsSync(e)?ei(`File '${xoe(e)}' already exists. Overwrite existing content?`):true:await ei(`Directory '${xoe(t)}' doesn't exist. Create it now?`)?(mkdirSync(t,{recursive:true}),true):false}function xoe(e){return e.replace(/(\s+)/g,"\\$1")}async function Ooe(e,t){return f2e?t:(await input({message:e,default:t})).trim()||t}async function C$(){let e;try{e=(await input({message:"ask"})).trim();}catch(t){if(t instanceof Error&&t.name==="ExitPromptError"){C.info("");return}throw t}if(!g2e.has(e.toLowerCase()))return e}var sT=new Map,Noe=new Set;function I2e(e){Noe.add(e);}function Doe(e){I2e(t=>{e({category:"cli",level:t.severity_text==="ERROR"?"error":t.severity_text==="WARN"?"warning":"info",message:t.body,timestamp:t.timestamp/1e9});});}var Moe="Log throttle exceeded",_2e=100,P2e=5e3,O2e=2e4,k2e=A2e(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 M2e({app:e,hostname:t,environment:o,serviceVersion:n}){return {host:t,env:o,[ATTR_SERVICE_NAME]:e,...n?{[ATTR_SERVICE_VERSION]:n}:{}}}var L2e=`${iT}/logs/json`,I$=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 k2e(L2e,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":Ioe,"x-momentic-metrics-api-key":aT},body:au(t),signal:AbortSignal.timeout(O2e)});if(!o.ok)throw new Error(`Got error status (${o.statusText}) from SigNoz`)}catch{}}},x$=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??Qm.hostname(),this.disableConsoleLogs=n,this.bindingAttributes={...t,env:"production"},this.flushIntervalMs=r??5e3,this.maxBatchSize=i??10,this.buffer=a??new I$(this.flushIntervalMs,this.maxBatchSize);let s={base:this.bindingAttributes,errorKey:"err",level:"debug"};this.consoleLogger=koe(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===Moe)return true;let o=Date.now();return o-this.lastWindowStart>P2e&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,Moe),this.droppedLogsInWindow=false,this.lastWindowStart=o),this.logsInCurrentWindow<_2e?(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(Cw[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=C2e.err(o.err));let i={...this.bindingAttributes,...o&&typeof o=="object"?o:{},...r.length>0?{args:r}:{}},a=M2e({app:this.bindingAttributes.app,hostname:this.hostname,environment:this.bindingAttributes.env,serviceVersion:this.bindingAttributes.cliVersion??"3.59.2"}),s=N2e();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:$X({message:n||"",...i})};this.buffer.push(l);for(let c of Noe)try{c(l);}catch{}}setApp(t){let o=this.bindingAttributes.app;this.bindingAttributes.app=t,sT.set("app",this),sT.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=GX[t]):(this.minLevelValue=Cw[t],this.consoleLogger.level=t);}enableConsoleLogs(){this.disableConsoleLogs=false;}},lT=({app:e,hostname:t,disableConsoleLogs:o})=>(sT.has(e)||sT.set(e,new x$({bindings:{app:e},hostname:t,disableConsoleLogs:o})),sT.get(e));function N2e(){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 FO(){await Promise.all([...sT.values()].map(e=>e.flush()));}var oa=class extends Error{callSiteStack;constructor(t){super(t),this.name="TimeoutError";}};var Foe=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(Foe(p));u=()=>{d(),c(Foe(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 oa(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 Tc({signal:e,timeoutMs:t}){let o=AbortSignal.timeout(t);return e?AbortSignal.any([e,o]):o}var BO="organization";function UO(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:{[BO]: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:BO,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 Boe(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:{[BO]: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 zO=class e extends Wf{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 Boe(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 Boe(this.client,this.orgId,this.userId);this.flags=o,this.payloads=n;}};var jO="/proc",Uoe="/sys/fs/cgroup",z2e="/sys/fs/cgroup/memory",zoe=8,j2e=1024;function $O(){let e;return ()=>{if(process.platform!=="linux")return;let t=W2e();if(!t)return;let o=q2e({current:t,previous:e});return e=t,o}}function joe(){if(process.platform!=="linux")return;let e=_$(`${Uoe}/memory.stat`);if(e){let o=_$(`${Uoe}/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=_$(`${z2e}/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 H2e(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:DH(i)}),s.push(...b$e(a)),t.push(s);}return t}function S$e(e){return (e.githubLogin??(e.email?DH(e.email):void 0))?.toLowerCase().endsWith("[bot]")??false}function nZ(e){return e.filter(t=>!S$e(t))}var rZ="https://static.momentic.ai";function pR(e,t){return {light:`${rZ}/${e}.svg`,dark:`${rZ}/${e}-dark.svg`,alt:t}}var hR={runGroup:pR("run-group-button","View run group"),basePr:pR("view-base-pr-button","View base PR"),branch:pR("view-branch-button","View branch"),commit:pR("view-commit-button","View commit")};function gR({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 Nh=z.object({limit:z.number().min(1).max(100).optional(),page:z.number().min(1).optional()}),FH=z.object({page:z.number(),pageSize:z.number(),pageCount:z.number()});var BH=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 T$e=z.array(BH.extend({id:z.string(),name:z.string(),description:z.string().optional(),labels:z.string().array().optional()})),v$e=BH.extend({id:z.string(),name:z.string(),description:z.string().optional(),content:q_}),A$e=z.array(v$e);z.object({tests:T$e,modules:A$e,labels:z.string().array()});z.string().array();var iZ=z.object({pathSegments:z.string().array()});Gj.merge(Zn);var aZ=z.object({schemaVersion:z.string(),stepLists:Tl}),sZ=Zn.partial().merge(Ia.pick({id:true})),Kf="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(Kf),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(nu).optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),viewport:jm.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.")},lZ=z.object(UH);Gj.extend(z.object({relativeFilePath:z.string().describe("relative to project root")}).shape);var cZ=z.object({name:z.string()});z.object({relativeFilePath:z.string()});var uZ=z.object({name:z.string(),sourceModuleContent:q_});z.object({relativeFilePath:z.string()});var dZ=z.object({name:z.string(),description:z.string(),enabled:z.boolean(),steps:z.lazy(()=>po.array()),testFilePath:z.string().describe("relative to the project root"),folderPath:z.string().optional().describe("user selected folder path")}),mZ=z.object({name:z.string(),description:z.string(),enabled:z.boolean()}).partial(),pZ=z.object({folderPath:z.string()}),hZ=z.object({folderPath:z.string()});z.array(hw);var gZ=z.object({defaultEnv:z.string().optional().describe("name of the default env, or undefined to unset")}),fZ=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 zH=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()}),yZ=z.object({pathSegments:z.array(z.string()),directoriesOnly:z.boolean().optional()});z.object({absolutePath:z.string(),pathSegments:z.array(z.string()),contents:z.array(zH)});var bZ=z.object({sourceDirectoryPath:z.string().optional(),value:z.string(),allowedExtensions:z.array(z.string()).optional()}),E$e=z.object({name:z.string(),value:z.string(),isDirectory:z.boolean()});z.object({suggestions:z.array(E$e)});var SZ=z.object({pathSegments:z.array(z.string())}),TZ=z.object({pathSegments:z.array(z.string()),newPathSegments:z.array(z.string())}),vZ=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 AZ=typeof process<"u"&&true&&true,lO=58889,qS=24*60*60*1e3;var EZ=z.record(z.string(),z.string()),w$e=z.object({type:z.literal("stdio").optional(),command:z.string().min(1),args:z.array(z.string()).optional(),env:EZ.optional(),cwd:z.string().optional()}),R$e=z.object({type:z.enum(["http","sse"]).optional(),url:z.string().min(1),headers:EZ.optional()}),C$e=z.union([w$e,R$e]),wZ=z.record(z.string().min(1),C$e);var RZ=z.string().trim().min(1).max(255).regex(/^[^/\\]+$/).refine(e=>e!=="."&&e!=="..");z.object({source:z.string().trim().min(1).max(500).refine(e=>RZ.safeParse(e.split("/").at(-1)).success)});var CZ=z.object({filename:RZ,downloadUrl:z.url()});z.object({filename:z.string().trim().min(1),destination:z.string().trim().min(1).optional()});var IZ=z.object({destination:z.string(),uploadUrl:z.url()});var yR=(n=>(n.DARWIN="darwin",n.LINUX="linux",n.WINDOWS="win32",n))(yR||{}),xZ=z.enum(yR),bR=(r=>(r.AZURE="AZURE",r.KERNEL="KERNEL",r.BROWSERBASE="BROWSERBASE",r.SELF_HOSTED="SELF_HOSTED",r))(bR||{}),cO=z.enum(bR);z.object({azureRegion:z.string().optional(),azureWorkspaceId:z.string().optional()});z.object({});z.object({});var I$e=z.enum(["us-west-2","us-east-1","eu-central-1","ap-southeast-1"]);z.object({region:I$e.optional()});var jH=(t=>(t.TEST_REVIEW="TEST_REVIEW",t))(jH||{});var x$e=z.object({type:z.literal("DESCRIPTION_UPDATE"),thoughts:z.string()}),uO=z.discriminatedUnion("type",[x$e]),_$e=z.object({testId:z.string(),name:z.string(),orgId:z.string(),runId:z.string(),steps:po.array(),purpose:z.enum(jH),details:uO.or(uO.array()).optional()});_$e.pick({name:true,orgId:true});var P$e=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(jH),details:uO.or(uO.array()).optional(),applied:z.boolean().nullish(),appliedAt:z.coerce.date().nullish()}),_Z=P$e.extend({steps:po.array()});var PZ=z.enum(["v1","v2"]);var k$e=z.enum(["element","content","attribute","tag_name","style"]),dO=z.enum(["exists","visible","enabled","editable","focused","contains","equals","starts_with"]);[...RJ,...wJ].forEach(e=>{if(!dO.options.includes(e.toLowerCase()))throw new Error(`V2CheckConditionSchema is missing option: ${e}`)});var HH={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}},MZ={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"}},LZ={ELEMENT_EXISTENCE:"element",ELEMENT_CONTENT:"content",ELEMENT_ATTRIBUTE:"attribute",ELEMENT_NAME:"tag_name",ELEMENT_STYLE:"style"};function OZ(e){return {alias:$H(e),subject:e.subject,condition:e.condition,negated:e.negated,assertionType:HH[e.subject].assertionType,requiresName:HH[e.subject].requiresName,requiresValue:e.subject!=="element"&&e.condition!=="exists"}}function $H(e){let t=HH[e.subject],o=MZ[e.condition];if(!NZ(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 NZ(e,t){let o=MZ[t],n=o.elementCondition,r=o.contentOperation;return e==="element"?n!==void 0:r!==void 0}var M$e=k$e.options.flatMap(e=>dO.options.flatMap(t=>NZ(e,t)?[OZ({subject:e,condition:t,negated:false}),OZ({subject:e,condition:t,negated:true})]:[])),mO=new Map(M$e.map(e=>[e.alias,e]));var L$e=z.enum(nd),N$e=z.enum(yl);function us(e){return mO.get(e)}function FZ(e){let t=LZ[e.type],o=e.type==="ELEMENT_EXISTENCE"?e.condition:e.operation;return $H({subject:t,condition:D$e(o),negated:e.negated})}function BZ(e){return L$e.parse(e.toUpperCase())}function SR(e){return N$e.parse(e.toUpperCase())}function D$e(e){return dO.parse(e.toLowerCase())}var YS=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."),At={saveAs:z.string().optional(),retries:z.number().optional(),skipped:z.boolean().optional(),comment:z.string().optional()};z.object(At);var JS=Object.keys(At);function st(e){return z.union([z.strictObject({[e.key]:e.simplified}),z.strictObject({[e.key]:e.detailed})])}function jn(e){return z.strictObject({[e.key]:e.detailed})}function F$e(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 UZ(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-F$e(o,a)/s;l>r&&(r=l,n=i);}return n}var zZ='Coordinates must be "x, y" pixel values, e.g. "100, 200"',XS=z.union([ed,z.string().regex(/^\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*$/,zZ)],{error:zZ});z.union([z.string(),ed]);var Ws={css:z.string().optional(),coords:XS.optional(),x:z.union([z.number(),z.string()]).optional(),y:z.union([z.number(),z.string()]).optional()},VH={on:z.string().optional(),...Ws},xl={...At,effort:bt.optional(),useSelector:z.boolean().optional(),force:z.boolean().optional(),DANGEROUS_FORCE_DYNAMIC:z.boolean().optional(),iframe:z.string().optional()},ZS={...xl,offset:XS.optional()};function Pa({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 B$e=Pa({descriptionKey:"on",schema:z.strictObject({...VH,...ZS,times:z.int().min(1).optional(),rightClick:z.boolean().optional(),waitForDownload:z.boolean().optional(),delay:z.number().optional(),downloadTimeout:z.number().optional()})}),U$e=Pa({descriptionKey:"on",schema:z.strictObject({...VH,...ZS,rightClick:z.boolean().optional(),waitForDownload:z.boolean().optional(),delay:z.number().optional(),downloadTimeout:z.number().optional()})}),z$e=Pa({descriptionKey:"on",schema:z.strictObject({...VH,...ZS,times:z.int().min(1).optional(),waitForDownload:z.boolean().optional(),delay:z.number().optional(),downloadTimeout:z.number().optional()})}),jZ=st({key:"click",simplified:z.string(),detailed:B$e}),HZ=st({key:"doubleClick",simplified:z.string(),detailed:U$e}),$Z=st({key:"rightClick",simplified:z.string(),detailed:z$e}),j$e=Pa({descriptionKey:"into",required:false,schema:z.strictObject({text:z.string(),into:z.string().optional(),...Ws,...ZS,pressEnter:z.boolean().optional(),clear:z.union([z.literal("inputs"),z.literal("always"),z.literal("never"),z.boolean()]).optional(),delay:z.number().optional()})}),GZ=st({key:"type",simplified:z.string(),detailed:j$e}),H$e=Pa({descriptionKey:"into",required:false,schema:z.strictObject({text:z.string(),into:z.string().optional(),...Ws,...ZS,pressEnter:z.boolean().optional()})}),VZ=st({key:"fill",simplified:z.string(),detailed:H$e}),WZ=jn({key:"select",detailed:Pa({descriptionKey:"from",schema:z.strictObject({from:z.string().optional(),...Ws,label:z.string().optional(),value:z.string().optional(),index:z.union([z.string(),z.number()]).optional(),...xl})}).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"});})}),qZ=st({key:"hover",simplified:z.string(),detailed:Pa({descriptionKey:"on",schema:z.strictObject({on:z.string().optional(),...Ws,...ZS})})}),KZ=jn({key:"blur",detailed:Pa({descriptionKey:"on",required:false,schema:z.strictObject({on:z.string().optional(),...Ws,...xl})})}),YZ=st({key:"focus",simplified:z.string(),detailed:Pa({descriptionKey:"on",schema:z.strictObject({on:z.string().optional(),...Ws,...xl})})}),JZ=jn({key:"dragAndDrop",detailed:z.strictObject({from:z.string().optional(),to:z.string().optional(),fromCss:z.string().optional(),toCss:z.string().optional(),fromCoords:XS.optional(),toCoords:XS.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(),...xl}).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."});})}),XZ=z.union([z.strictObject({mouseDrag:XS}),z.strictObject({mouseDrag:Pa({descriptionKey:"from",required:false,schema:z.strictObject({from:z.string().optional(),...Ws,delta:XS,steps:z.number().optional(),...xl})})})]),QZ=st({key:"press",simplified:z.string(),detailed:z.strictObject({key:z.string(),repeat:z.number().optional(),delay:z.number().optional(),convertMeta:z.boolean().optional(),...At,effort:bt.optional()})}),ZZ=st({key:"keyDown",simplified:z.string(),detailed:z.strictObject({key:z.string(),convertMeta:z.boolean().optional(),...At,effort:bt.optional()})}),e7=st({key:"keyUp",simplified:z.string(),detailed:z.strictObject({key:z.string(),convertMeta:z.boolean().optional(),...At,effort:bt.optional()})}),QS=z.number().int().min(0).max(6e4).multipleOf(1e3),t7=st({key:"navigate",simplified:z.string(),detailed:z.strictObject({url:z.string(),timeout:QS.optional(),...At,effort:bt.optional()})}),o7=st({key:"newTab",simplified:z.string(),detailed:z.strictObject({url:z.string(),timeout:QS.optional(),...At,effort:bt.optional()})}),n7=st({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:QS.optional(),loadTimeout:QS.optional(),...At,effort:bt.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"});})}),r7=jn({key:"closeTab",detailed:z.strictObject({substring:z.string().optional(),regex:z.string().optional(),index:z.union([z.string(),z.number()]).optional(),timeout:QS.optional(),...At,effort:bt.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"});})}),i7=jn({key:"goBack",detailed:z.strictObject({...At,effort:bt.optional()})}),a7=jn({key:"goForward",detailed:z.strictObject({...At,effort:bt.optional()})}),s7=jn({key:"refresh",detailed:z.strictObject({timeout:QS.optional(),...At,effort:bt.optional()})}),Yf=z.enum(["goBack","goForward","refresh","paste","authSave","offline","online","blur","visualDiff","captcha","closeTab"]),l7=st({key:"scrollUp",simplified:z.number().nonnegative(),detailed:Pa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Ws,...xl})})}),c7=st({key:"scrollDown",simplified:z.number().nonnegative(),detailed:Pa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Ws,...xl})})}),u7=st({key:"scrollLeft",simplified:z.number().nonnegative(),detailed:Pa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Ws,...xl})})}),d7=st({key:"scrollRight",simplified:z.number().nonnegative(),detailed:Pa({descriptionKey:"in",required:false,schema:z.strictObject({pixels:z.number().nonnegative().optional(),in:z.string().optional(),...Ws,...xl})})}),m7=st({key:"wait",simplified:z.number(),detailed:z.strictObject({ms:z.number(),...At,effort:bt.optional()})}),$$e=st({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(),...At,effort:bt.optional()})}),G$e=st({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(),...At,effort:bt.optional()})}),pO=$$e,hO=G$e,p7=st({key:"checkPageContains",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),iframe:z.string().optional(),...At,effort:bt.optional()})}),h7=st({key:"checkPageDoesNotContain",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),iframe:z.string().optional(),...At,effort:bt.optional()})}),WH=z.union([p7,h7]),V$e=z.record(z.string(),z.unknown().optional()),gO=V$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=us(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=Pa({descriptionKey:"element",schema:z.looseObject({element:z.string().optional(),...Ws,...xl,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"]});}),g7=st({key:"extract",simplified:z.string(),detailed:z.strictObject({goal:z.string(),schema:Lh.optional(),DANGEROUS_FORCE_DYNAMIC:z.boolean().optional(),iframe:z.string().optional(),...At,effort:bt.optional()})}),f7=st({key:"cookie",simplified:z.string(),detailed:z.strictObject({value:z.string(),...At,effort:bt.optional()})}),y7=jn({key:"localStorage",detailed:z.strictObject({key:z.string(),value:z.string(),...At,effort:bt.optional()})}),b7=st({key:"request",simplified:z.string(),detailed:z.strictObject({url:z.string(),method:Om.optional(),headers:z.record(z.string(),z.string()).optional(),params:z.record(z.string(),z.string()).optional(),body:Lh.optional(),contentType:z.enum(rd).optional(),timeout:z.number().optional(),...At,effort:bt.optional()})}),S7=jn({key:"graphqlRequest",detailed:z.strictObject({url:z.string(),query:z.string(),variables:Lh.optional(),headers:z.record(z.string(),z.string()).optional(),timeout:z.number().optional(),...At,effort:bt.optional()})}),fO=st({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(),...At,effort:bt.optional()})}),eT={substring:z.string().optional(),glob:z.string().optional(),regex:z.string().optional(),domain:z.string().optional()};function W$e(e){return [e.substring,e.glob,e.regex,e.domain].filter(t=>t!==void 0).length}function tT(e){let t=W$e(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 T7=jn({key:"header",detailed:z.strictObject({name:z.string(),value:z.string(),...eT,method:z.string().optional(),...At,effort:bt.optional()}).superRefine((e,t)=>{tT({payload:e,ctx:t,required:false});})}),v7=jn({key:"mock",detailed:z.strictObject({...eT,method:z.string().optional(),responseGenerator:z.string(),fetchOriginalResponse:z.boolean().optional(),key:z.string().optional(),...At,effort:bt.optional()}).superRefine((e,t)=>{tT({payload:e,ctx:t,required:true});})}),A7=st({key:"removeRouteMock",simplified:z.string(),detailed:z.strictObject({key:z.string().optional(),...At,effort:bt.optional()})}),E7=st({key:"waitForUrl",simplified:z.string(),detailed:z.strictObject({...eT,caseInsensitive:z.boolean().optional(),timeout:z.number().optional(),...At,effort:bt.optional()}).superRefine((e,t)=>{tT({payload:e,ctx:t,required:true});})}),w7=st({key:"waitForUrlNotToMatch",simplified:z.string(),detailed:z.strictObject({...eT,caseInsensitive:z.boolean().optional(),timeout:z.number().optional(),...At,effort:bt.optional()}).superRefine((e,t)=>{tT({payload:e,ctx:t,required:true});})}),q$e=z.union([E7,w7]),R7=st({key:"dialog",simplified:z.enum(["ACCEPT","DISMISS"]),detailed:z.strictObject({action:z.enum(["ACCEPT","DISMISS"]),...At,effort:bt.optional()})}),C7=st({key:"fileUpload",simplified:z.string(),detailed:z.strictObject({path:z.string(),name:z.string().optional(),...At,effort:bt.optional()})}),I7=st({key:"copy",simplified:z.union([z.string(),z.boolean(),z.null()]),detailed:z.strictObject({value:z.union([z.string(),z.boolean(),z.null()]),...At,effort:bt.optional()})}),x7=jn({key:"paste",detailed:z.strictObject({...At,effort:bt.optional()})}),_7=jn({key:"captcha",detailed:z.strictObject({...xl})}),K$e=z.strictObject({data:z.union([z.string(),fl]),width:z.number(),height:z.number()}),P7=st({key:"visualDiff",simplified:z.string(),detailed:Pa({descriptionKey:"on",required:false,schema:z.strictObject({on:z.string().optional(),...Ws,threshold:z.number().optional(),screenshot:K$e.optional(),...xl})})}),O7=jn({key:"offline",detailed:z.strictObject({...At,effort:bt.optional()})}),k7=jn({key:"online",detailed:z.strictObject({...At,effort:bt.optional()})}),M7=jn({key:"registerRequestListener",detailed:z.strictObject({...eT,key:z.string(),method:z.string().optional(),...At,effort:bt.optional()}).superRefine((e,t)=>{tT({payload:e,ctx:t,required:true});})}),L7=st({key:"awaitListener",simplified:z.string(),detailed:z.strictObject({key:z.string(),timeout:z.number().optional(),...At,effort:bt.optional()})}),N7=jn({key:"recordRequests",detailed:z.strictObject({...eT,key:z.string(),method:z.string().optional(),...At,effort:bt.optional()}).superRefine((e,t)=>{tT({payload:e,ctx:t,required:true});})}),D7=st({key:"getRecordedRequests",simplified:z.string(),detailed:z.strictObject({key:z.string(),...At,effort:bt.optional()})}),F7=st({key:"authLoad",simplified:z.string(),detailed:z.strictObject({path:z.string(),...At,effort:bt.optional()})}),B7=st({key:"authSave",simplified:z.string(),detailed:z.strictObject({path:z.string().optional(),...At,effort:bt.optional()})});z.union([jZ,HZ,$Z,n7,r7,GZ,VZ,WZ,qZ,KZ,YZ,JZ,XZ,QZ,ZZ,e7,t7,o7,i7,a7,s7,l7,c7,u7,d7,m7,pO,hO,WH,g7,f7,y7,b7,S7,fO,T7,v7,A7,q$e,R7,C7,I7,x7,_7,P7,O7,k7,M7,L7,N7,D7,F7,B7,gO]);var U7=new Map([["click",jZ],["doubleClick",HZ],["rightClick",$Z],["switchTab",n7],["closeTab",r7],["type",GZ],["fill",VZ],["select",WZ],["hover",qZ],["blur",KZ],["focus",YZ],["dragAndDrop",JZ],["mouseDrag",XZ],["press",QZ],["keyDown",ZZ],["keyUp",e7],["navigate",t7],["newTab",o7],["goBack",i7],["goForward",a7],["refresh",s7],["scrollUp",l7],["scrollDown",c7],["scrollLeft",u7],["scrollRight",d7],["wait",m7],["assert",pO],["assertVisually",hO],["checkPageContains",p7],["checkPageDoesNotContain",h7],["extract",g7],["cookie",f7],["localStorage",y7],["request",b7],["graphqlRequest",S7],["javascript",fO],["header",T7],["mock",v7],["removeRouteMock",A7],["waitForUrl",E7],["waitForUrlNotToMatch",w7],["dialog",R7],["fileUpload",C7],["copy",I7],["paste",x7],["captcha",_7],["visualDiff",P7],["offline",O7],["online",k7],["registerRequestListener",M7],["awaitListener",L7],["recordRequests",N7],["getRecordedRequests",D7],["authLoad",F7],["authSave",B7]]),qH=Object.freeze([...U7.keys()]),Y$e=[...qH,...mO.keys()],vd=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=U7.get(n)??(us(n)?gO:void 0);if(!r){let a=UZ(n,Y$e);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=J$e(i.error.issues,n);a.length>0&&z7(t,a);}});function J$e(e,t){return X$e(e).filter(o=>!Q$e(o,t))}function z7(e,t){for(let o of t){if(o.code==="invalid_union"){z7(e,KH(o));continue}e.addIssue({...o});}}function X$e(e){let t=[];for(let o of e){if(o.code==="invalid_union"){t.push(...KH(o));continue}t.push(o);}return t}function Q$e(e,t){return e.code!=="unrecognized_keys"?false:t===void 0?e.path.length===0:e.path.length===1&&e.path[0]===t}function KH(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(KH(o)):0;return t+o.path.length+n},0)}var j7=z.strictObject({string:z.string()}),Z$e=z.strictObject({javascript:z.string()}),H7=z.union([j7,Z$e]),eGe=z.union([z.strictObject({name:z.string(),required:z.boolean().optional(),default:j7.optional()}),z.strictObject({name:z.string(),required:z.boolean().optional(),defaultValue:z.string()})]),$7=eGe.array(),tGe=z.strictObject({name:z.string(),default:H7.optional(),enum:z.array(z.string()).optional()}),G7=tGe.array(),TR=z.union([H7,z.string()]),V7=z.record(z.string(),TR);var oGe=z.preprocess(e=>typeof e=="number"?String(e):e,KE),yO=z.looseObject({goal:z.string(),version:oGe.optional(),cache:z.literal(false).optional(),...At}),nGe=z.union([z.strictObject({act:z.string()}),z.strictObject({act:yO})]),YH=z.looseObject({path:z.string(),inputs:z.record(z.string(),TR).optional(),...At}),rGe=z.union([z.strictObject({module:z.string()}),z.strictObject({module:YH})]),Xm=z.union([pO,hO,WH,fO,gO]),iGe=new Set(["then","effort",...JS]),aGe=z.looseObject({then:z.lazy(()=>uu.array()),effort:bt.optional(),...At}).superRefine((e,t)=>{Object.entries(e).filter(([n,r])=>!iGe.has(n)&&Xm.safeParse({[n]:r}).success).length!==1&&t.addIssue({code:"custom",message:"Conditional steps require exactly one assertion condition at the top level."});}),sGe=z.strictObject({if:aGe}),lGe=new Set(["do","maxIterations","effort",...JS]),cGe=z.looseObject({do:z.lazy(()=>uu.array()),maxIterations:z.number().int().positive().optional(),effort:bt.optional(),...At}).superRefine((e,t)=>{let o=Object.entries(e).filter(([n,r])=>!lGe.has(n)&&Xm.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."});}),uGe=z.strictObject({while:cGe}),uu=z.lazy(()=>z.union([Yf,YS,nGe,rGe,sGe,uGe,vd]));z.object({before:uu.array().optional(),steps:uu.array(),after:uu.array().optional()});var dGe=z.union([jm,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 jm.safeParse({width:Number(o),height:Number(n)}).success},"Viewport must be two numeric values, e.g. 1920, 1080")]),mGe=os.omit({viewport:true}).extend({viewport:dGe.optional()}),JH=z.object({id:ir,version:z.string().optional(),url:Y_.optional(),description:z.string().optional(),retries:z.number().optional(),defaultEnv:z.string().optional(),parameters:$7.optional(),outputs:xP.optional(),disabled:z.boolean().optional(),labels:z.array(z.string()).optional(),runAssertions:_P.array().optional()}).extend(mGe.shape),pGe=z.looseObject({fileType:z.literal(Ue.TEST_V2)}).extend(JH.shape).extend({before:uu.array().optional(),steps:uu.array(),after:uu.array().optional()}),Fh=pGe.superRefine(gGe),hGe={beforeSteps:"before",afterSteps:"after"};function gGe(e,t){for(let[o,n]of Object.entries(hGe))o in e&&t.addIssue({code:"custom",message:`v2 tests must use ${n}, not ${o}`,path:[o]});}var fGe=z.array(z.string()),yGe=z.union([z.string(),z.record(z.string(),z.unknown().optional())]),bO=nr.omit({moduleId:true,name:true,parameters:true,defaultParameters:true,parameterEnums:true}).extend({id:ir,version:z.string().optional(),name:z.string().optional(),parameters:z.union([G7,fGe]).optional(),defaultParameters:z.record(z.string(),z.string()).optional(),parameterEnums:z.record(z.string(),z.array(z.string())).optional()}),SO=z.looseObject(bO.extend({fileType:z.literal(Ue.MODULE_V2),steps:yGe.array().optional()}).shape).superRefine(q7),TO=z.looseObject(bO.extend({fileType:z.literal(Ue.MODULE_V2),steps:uu.array().optional()}).shape).superRefine(q7);function W7(e){return e.steps??[]}function q7(e,t){"main"in e&&t.addIssue({code:"custom",message:"v2 modules must use steps, not main",path:["main"]});}var XH=(o=>(o.TEST="TEST",o.MODULE="MODULE",o))(XH||{}),bGe=z.enum(XH),K7=z.object({orgId:z.string(),entityType:bGe,entityId:z.string()}),QH=K7.extend({entityType:z.literal("TEST"),stepLists:tu}),ZH=K7.extend({entityType:z.literal("MODULE"),steps:mo.array()});z.discriminatedUnion("entityType",[QH,ZH]);var Y7=(n=>(n.WEB="web",n.ANDROID="android",n.IOS="ios",n))(Y7||{}),e$=z.nativeEnum(Y7);var J7=z.object({entity_type:z.string(),value:z.string(),schema_version:z.string().optional()}),X7=bw(J7),Q7=J7.extend({cache_key:z.string()});function vR({entityType:e,entityId:t}){return `${e}:${t}`}var Xf=z.string();var Z7='Coordinates must be "x, y" pixel values, e.g. "100, 200"',nee=z.union([ed,z.string().regex(/^\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*$/,Z7)],{error:Z7}),eee='Percent must be a number or a percent string, e.g. 90 or "90%"',ree=z.union([z.number(),z.string().regex(/^-?\d+(?:\.\d+)?%$/,eee)],{error:eee}).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"})),SGe=z.strictObject({x:z.number(),y:z.number(),delta:z.number()}),iee=z.union([z.string(),SGe]),Zo={...At,DANGEROUS_FORCE_DYNAMIC:z.boolean().optional()},TGe=["home","power","back","app_switcher","search","volume_up","volume_down","volume_mute"],vGe=["enter","backspace","close_keyboard"],tee=["airplane_mode","data","wifi","location"],oee=["portrait","landscape"],AGe=z.strictObject({on:Xf.optional(),longPress:z.boolean().optional(),longPressDuration:z.number().optional(),iterations:z.number().optional(),tapDelay:z.number().optional(),offset:nee.optional(),...Zo}),aee=st({key:"tap",simplified:Xf,detailed:AGe}),EGe=z.strictObject({text:z.string(),into:Xf.optional(),clearContent:z.boolean().optional(),forceClearContent:z.boolean().optional(),delay:z.number().optional(),waitForKeyboardSettle:z.boolean().optional(),replaceStrategy:z.nativeEnum(Ww).optional(),keyPressDelay:z.number().optional(),...Zo}),see=st({key:"type",simplified:z.string(),detailed:EGe}),lee=z.enum(TGe),wGe=z.strictObject({key:lee,longPress:z.boolean().optional(),...Zo}),cee=st({key:"press",simplified:lee,detailed:wGe}),uee=z.enum(vGe),RGe=z.strictObject({key:uee,repeat:z.number().optional(),delay:z.number().optional(),keyPressDelay:z.number().optional(),...Zo}),dee=st({key:"pressKey",simplified:uee,detailed:RGe}),CGe=z.strictObject({package:z.string(),activity:z.string().optional(),intentExtras:z.string().optional(),...Zo}),mee=st({key:"openApp",simplified:z.string(),detailed:CGe}),pee=jn({key:"killApp",detailed:z.strictObject(Zo)}),hee=jn({key:"openNotifications",detailed:z.strictObject(Zo)}),gee=z.enum(["up","down","left","right"]),IGe=z.strictObject({direction:gee,in:iee.optional(),viewportPercent:ree.optional(),duration:z.number().optional(),offset:nee.optional(),...Zo}),fee=st({key:"swipe",simplified:gee,detailed:IGe}),xGe=z.enum(["up","down"]),_Ge=z.strictObject({on:Xf,direction:xGe.optional(),in:iee.optional(),scrollStepPercent:ree.optional(),maxScrollAttempts:z.number().optional(),...Zo}),yee=st({key:"scrollTo",simplified:z.string(),detailed:_Ge}),t$=st({key:"assert",simplified:z.string(),detailed:z.strictObject({that:z.string(),timeout:z.number().optional(),...Zo})}),o$=st({key:"assertVisually",simplified:z.string(),detailed:z.strictObject({that:z.string(),timeout:z.number().optional(),...Zo})}),bee=st({key:"extract",simplified:z.string(),detailed:z.strictObject({goal:z.string(),schema:Lh.optional(),...Zo})}),See=st({key:"checkScreenContains",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),...Zo})}),Tee=st({key:"checkScreenDoesNotContain",simplified:z.string(),detailed:z.strictObject({text:z.string(),timeout:z.number().optional(),...Zo})}),vee=z.union([See,Tee]),PGe=z.record(z.string(),z.unknown().optional()),n$=PGe.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=us(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:Xf.optional(),timeout:z.number().optional(),name:z.string().optional(),value:z.string().optional(),...Zo}).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"]});}),OGe=z.strictObject({from:Xf,to:Xf,hoverDuration:z.number().optional(),dragDuration:z.number().optional(),...Zo}),Aee=jn({key:"dragAndDrop",detailed:OGe}),r$=st({key:"javascript",simplified:z.string(),detailed:z.strictObject({code:z.string(),timeout:z.number().optional(),...Zo})}),Eee=st({key:"request",simplified:z.string(),detailed:z.strictObject({url:z.string(),method:Om.optional(),headers:z.record(z.string(),z.string()).optional(),params:z.record(z.string(),z.string()).optional(),body:z.string().optional(),bodyType:z.nativeEnum(rd).optional(),timeout:z.number().optional(),...Zo})}),wee=st({key:"wait",simplified:z.number(),detailed:z.strictObject({ms:z.number(),...Zo})}),Ree=st({key:"visualDiff",simplified:z.string(),detailed:z.strictObject({path:z.string(),threshold:z.number().min(0).max(1).optional(),...Zo})}),Cee=jn({key:"addFile",detailed:z.strictObject({path:z.string(),location:z.string(),...Zo})}),Iee=st({key:"setCamera",simplified:z.string(),detailed:z.strictObject({path:z.string(),loop:z.boolean().optional(),playAudio:z.boolean().optional(),...Zo})}),xee=jn({key:"clearCamera",detailed:z.strictObject(Zo)}),_ee=st({key:"setMicrophone",simplified:z.string(),detailed:z.strictObject({path:z.string(),once:z.boolean().optional(),...Zo})}),Pee=jn({key:"clearMicrophone",detailed:z.strictObject(Zo)}),Oee=st({key:"installApp",simplified:z.string(),detailed:z.strictObject({path:z.string(),...Zo})}),kee=st({key:"uninstallApp",simplified:z.string(),detailed:z.strictObject({package:z.string(),...Zo})}),Mee=st({key:"toggleSettings",simplified:z.enum(tee),detailed:z.strictObject({setting:z.enum(tee),...Zo})}),Lee=st({key:"rotate",simplified:z.enum(oee),detailed:z.strictObject({orientation:z.enum(oee),...Zo})}),Nee=st({key:"adb",simplified:z.string(),detailed:z.strictObject({command:z.string(),args:z.string().optional(),...Zo})}),Dee=jn({key:"appium",detailed:z.strictObject({script:z.string(),args:z.string().optional(),...Zo})}),Fee=jn({key:"debugState",detailed:z.strictObject(Zo)}),Bee=z.enum(["killApp","openNotifications","debugState","clearCamera","clearMicrophone"]);z.union([aee,see,cee,dee,mee,pee,hee,fee,yee,t$,o$,bee,vee,Aee,r$,Eee,wee,Ree,Cee,Iee,xee,_ee,Pee,Oee,kee,Mee,Lee,Nee,Dee,Fee,n$]);var Uee=new Map([["tap",aee],["type",see],["press",cee],["pressKey",dee],["openApp",mee],["killApp",pee],["openNotifications",hee],["swipe",fee],["scrollTo",yee],["assert",t$],["assertVisually",o$],["extract",bee],["checkScreenContains",See],["checkScreenDoesNotContain",Tee],["dragAndDrop",Aee],["javascript",r$],["request",Eee],["wait",wee],["visualDiff",Ree],["addFile",Cee],["setCamera",Iee],["clearCamera",xee],["setMicrophone",_ee],["clearMicrophone",Pee],["installApp",Oee],["uninstallApp",kee],["toggleSettings",Mee],["rotate",Lee],["adb",Nee],["appium",Dee],["debugState",Fee]]);Object.freeze([...Uee.keys()]);var zee=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=Uee.get(n)??(us(n)?n$: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});}),i$=z.union([t$,o$,vee,r$,n$]);var kGe=z.preprocess(e=>typeof e=="number"?String(e):e,dH),MGe=z.looseObject({goal:z.string(),version:kGe.optional(),cache:z.literal(false).optional(),precondition:z.string().optional(),postcondition:z.string().optional(),...At}),LGe=z.union([z.strictObject({act:z.string()}),z.strictObject({act:MGe})]),NGe=z.looseObject({path:z.string(),inputs:z.record(z.string(),TR).optional(),...At}),DGe=z.union([z.strictObject({module:z.string()}),z.strictObject({module:NGe})]),FGe=new Set(["then",...JS]),BGe=z.looseObject({then:z.lazy(()=>du.array()),...At}).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])=>!FGe.has(n)&&i$.safeParse({[n]:r}).success).length!==1&&t.addIssue({code:"custom",message:"v2 mobile conditional steps require exactly one assertion condition at the top level."});}),UGe=z.strictObject({if:BGe}),zGe=new Set(["do","maxIterations",...JS]),jGe=z.looseObject({do:z.lazy(()=>du.array()),maxIterations:z.number().int().positive().optional(),...At}).superRefine((e,t)=>{let o=Object.entries(e).filter(([n,r])=>!zGe.has(n)&&i$.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."});}),HGe=z.strictObject({while:jGe}),du=z.lazy(()=>z.union([Bee,YS,LGe,DGe,UGe,HGe,zee]));z.object({before:du.array().optional(),steps:du.array(),after:du.array().optional()});var $Ge=z.literal("android"),GGe=z.literal("ios");function vO(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 jee=GS.omit({schemaVersion:true,settings:true,platform:true}).extend({version:z.string().optional(),platform:$Ge,...rR.shape}),Hee=VS.omit({schemaVersion:true,settings:true,platform:true}).extend({version:z.string().optional(),platform:GGe,...rR.shape}),VGe=z.discriminatedUnion("platform",[jee,Hee]),$ee=z.preprocess(vO,VGe),Gee={before:du.array().optional(),steps:du.array(),after:du.array().optional()},Vee=z.looseObject({fileType:z.literal(Ue.MOBILE_TEST_V2)}).extend(jee.shape).extend(Gee);z.preprocess(vO,Vee);var Wee=z.looseObject({fileType:z.literal(Ue.MOBILE_TEST_V2)}).extend(Hee.shape).extend(Gee);z.preprocess(vO,Wee);var WGe=z.discriminatedUnion("platform",[Vee,Wee]);z.preprocess(vO,WGe);var qGe=z.preprocess(e=>typeof e=="string"?e.toLowerCase():e,z.enum(SP).optional().default("android")),AO=YP.omit({moduleId:true,name:true,schemaVersion:true,platform:true}).extend({id:ir,name:z.string().optional(),version:z.string().optional(),platform:qGe});z.looseObject(AO.extend({fileType:z.literal(Ue.MOBILE_MODULE_V2),steps:z.array(z.record(z.string(),z.unknown().optional())).optional()}).shape);z.looseObject(AO.extend({fileType:z.literal(Ue.MOBILE_MODULE_V2),steps:du.array().optional()}).shape);var EO="x-momentic-cli-version",Kee="x-momentic-client-mode",wO="x-momentic-runner",Yee="x-momentic-cli-type",RO="x-momentic-logger-tags",a$="x-momentic-effective-ai-effort",KGe="x-momentic-main-branch-name",YGe="x-momentic-branch-name",JGe="x-momentic-commit-timestamp",XGe="x-momentic-last-commit-on-main",QGe="x-momentic-last-commit-on-main-timestamp",ZGe="x-momentic-merged-branch-name",Jee="x-momentic-session-id",Xee=529,Qee="x-momentic-parent-trace-id";x.object({error:x.boolean(),reason:x.string(),message:x.string()});Xr.merge(Hj);var Zee=$_;Xr.merge(Hj);Xr.merge(TQ).extend({useConsensus:x.boolean().optional(),attemptNumber:x.number().optional()});var s$=EJ;Xr.merge(vQ);var ete=pX;Xr.merge(fQ);var tte=yP;Xr.merge(V6);Xr.merge(yQ);var ote=uX;Xr.merge(bQ);Xr.merge(SQ);Xr.merge(RQ);Xr.merge(CQ);Xr.merge(IQ);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 nte=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 e1e=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."))}),rte=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:e1e.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.")}),t1e=x.object({test:x.string().describe("test YAML"),modules:x.record(x.string().describe("moduleId"),x.string().describe("module YAML"))});t1e.array();x.object({testId:x.string(),schemaVersion:x.string()}).merge(Lm);function CO(e){let{gitMainBranch:t,gitBranchName:o,gitCommitTimestamp:n,lastCommitOnMainSha:r,lastCommitOnMainTimestamp:i}=e,a={};return t&&(a[KGe]=encodeURIComponent(t)),o&&(a[YGe]=encodeURIComponent(o)),n&&(a[JGe]=n.toISOString()),r&&(a[XGe]=encodeURIComponent(r)),i&&(a[QGe]=i.toISOString()),e.mergedGitBranchName&&(a[ZGe]=encodeURIComponent(e.mergedGitBranchName)),a}x.object({entries:x.array(Y6)});x.object({platform:e$.optional(),entries:x.array(X7)});x.object({testId:x.string(),environment:x.string().optional(),platform:e$.optional()});x.object({testId:x.string(),key:x.string(),environment:x.string().optional()});function ite(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 ate=ite(J6),ste=Q7.array();function qee(e){return ite(Sw(e))}var lte={ANDROID:e=>qee(ZP).parse(e),IOS:e=>qee(eO).parse(e)},o1e=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(Tn).optional()}),n1e=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(Tn).optional()});x.object({completionType:x.string(),traceIds:x.string().array()});var l$=x.union([o1e,n1e]).array(),cte=x.object({trigger:x.nativeEnum(El),status:x.nativeEnum($t),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 ute=x.object({status:x.nativeEnum($t),updatedAt:x.coerce.date().optional(),finishedAt:x.coerce.date().optional()});x.object({summary:Df,githubRepository:x.string().optional(),gitBranchName:x.string().optional()});var r1e=x.object({runId:x.string(),healStatus:Nf,healDetails:wh.optional()});x.object({updates:r1e.array()});var dte=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(El),schemaVersion:x.string().optional(),section:x.nativeEnum(PP).optional(),resolvedInputs:x.record(x.string(),x.string()).optional(),quarantined:x.boolean().optional().default(false),quarantinedReason:x.string().optional(),aiSettings:Gs.optional()});x.object({id:x.string()});var i1e=Uj.pick({id:true,status:true,healStatus:true,healDetails:true,testName:true,testId:true,test:true,failureReason:true,failureDetails:true}),mte=i1e.array(),pte=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 IO=x.object({run:ns.omit({runAttempts:true}),attemptZipUrls:x.array(x.string().url().nullish())}),hte=x.object({status:x.nativeEnum($t),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 gte=x.object({key:x.string()}),fte=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()}),yte=x.object({blocked:x.boolean()}),bte=x.array(P6),Ste=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 Tte=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()}),vte=x.object({error:x.literal("multiple_organizations"),organizations:x.array(x.object({id:x.string(),name:x.string()}))}),a1e=80,s1e=x.string().trim().min(1).max(a1e);x.object({name:s1e});var l1e=["web","ios","android"];x.object({platforms:x.array(x.enum(l1e)),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:Dj.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 Ate=x.object({suiteRunIds:x.string().array(),runGroupIds:x.string().array()});x.object({suiteRunIds:x.string().array()});dQ.array();x.object({runGroupIds:x.string().array()});var xO=x.object({uploadUrl:x.string()});Xr.merge(AQ);Xr.merge(wQ);Xr.merge(EQ);var _O=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(_a).optional(),aiFeature:x.nativeEnum(kh).optional(),cached:x.boolean().optional(),outcome:x.nativeEnum(jS).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(),[J8]:x.string().optional(),agentInvocationId:x.string().optional(),moRuntimeSecondsUsed:x.number().nonnegative().optional(),moSpend: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(_a).optional()});var c1e=x.object({transactionId:x.string(),timestamp:x.string(),event:x.nativeEnum(Vf),properties:_O});c1e.array();var Ete=_Z.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:Vn.optional(),end:Vn.optional(),gitBranchName:x.string().optional(),status:x.nativeEnum($t).optional()});var wte=ZX.array(),Rte=ns.array(),AR=Nh.extend({executionType:$m.array().min(1).optional(),testId:ir.optional(),gitBranchName:x.string().optional(),gitCommitSha:x.string().optional(),status:x.nativeEnum($t).optional(),label:x.string().array().optional(),start:Vn.optional(),end:Vn.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()});AR.extend({orgId:x.string().optional(),testId:fi(ir),status:fi(x.nativeEnum($t)),gitBranchName:fi(x.string()),label:fi(x.string()),testName:x.string().optional(),trigger:fi(x.nativeEnum(El)),executionType:fi($m),cliVersion:fi(x.string()),githubRepository:fi(x.string()),gitlabProjectPath:fi(x.string()),environment:fi(x.string()),directory:fi(x.string()),failureCategory:fi(x.string()),exclude:fi(x.string()),healed:x.boolean().optional()});var u1e=ns.omit({test:true}),Cte=FH.extend({runs:u1e.array(),executionTypeFilterApplied:x.boolean().optional()});x.object({applied:x.boolean().optional(),appliedAt:x.coerce.date().optional()});var Ite=xO.extend({id:x.string()}),d1e=x.object({resultType:x.literal("run").optional().default("run"),runGroupId:x.guid().optional(),persist:x.boolean().optional()}),m1e=x.object({resultType:x.literal("explore"),exploreRunId:x.guid(),persist:x.boolean().optional()});x.discriminatedUnion("resultType",[d1e,m1e]);var xte=x.object({runGroupId:x.guid()}),p1e=x.object({status:Nf,runId:x.string(),rootCause:x.string().nullable().optional(),solution:x.string().nullable().optional(),verificationNotes:x.string().nullable().optional(),markedAt:x.string()}),_te=x.object({quarantined:x.object({testId:ir,quarantinedAt:x.coerce.date(),quarantinedBy:x.string().optional(),quarantinedReason:x.string(),verdict:p1e.nullish().default(null)}).array()}),c$=Nh.extend({limit:Nh.shape.limit.describe("Max number of quarantined tests to return per page."),page:Nh.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.")}),h1e=x.object({id:x.string(),status:x.literal("FAILED"),startedAt:Vn,finishedAt:Vn,failureReason:x.string().nullish(),healStatus:Nf,healDetails:wh.nullish()}),Pte=FH.extend({quarantinedTests:x.array(x.object({testId:ir,testName:x.string().nullish(),quarantinedAt:Vn,quarantineReason:x.string(),latestFailedRun:h1e.nullable()}))}),Ote=x.object({gitLocalUsername:x.string().optional(),gitLocalEmail:x.string().optional(),gitLocalName:x.string().optional()});x.object({testId:ir,testName:x.string().optional(),reason:x.string()}).merge(Ote);x.object({testName:x.string().optional(),reason:x.string().optional()}).merge(Ote);Xr.merge(z8);Xr.merge(j8);Xr.merge(H8);x.object({apkToInstall:x.object({channel:x.string(),tag:x.string().optional()}).optional(),hostname:x.string().optional(),region:RH.optional(),jurisdiction:nR.optional(),osVersion:x.nativeEnum($S).optional(),sessionId:x.string().optional(),runId:x.string().optional(),testId:x.string().optional(),playwrightVersion:o9.optional()});var kte=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:RH.optional(),jurisdiction:nR.optional(),osVersion:x.nativeEnum(oO).optional(),sessionId:x.string().optional(),runId:x.string().optional(),testId:x.string().optional(),installAppOnClient:x.boolean().optional()});var Mte=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()!==vw,{message:`"${vw}" 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()!==vw,{message:`"${vw}" is a reserved alias and cannot be assigned when uploading an asset.`}).optional(),md5:x.string()});var Lte=x.object({id:x.string(),tag:x.string().optional(),alias:x.string().optional(),uploadUrl:x.string().optional(),downloadUrl:x.string(),md5:x.string().optional()}),g1e=x.object({channel:x.string(),tag:x.string(),md5:x.string(),platform:x.nativeEnum(lc).default("ANDROID"),createdAt:x.number().describe("Unix timestamp in milliseconds")}),f1e=x.object({channel:x.string(),alias:x.string(),platform:x.nativeEnum(lc).default("ANDROID"),tag:x.string()}),Nte=x.object({assets:x.array(g1e),aliases:x.array(f1e).default([])}),Dte=x.object({downloadUrl:x.string()}),PO=(o=>(o.PLAYWRIGHT="PLAYWRIGHT",o.CDP="CDP",o))(PO||{}),y1e=x.nativeEnum(PO),Fte=x.string().trim().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,79}$/);x.object({access:Fte.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(cO).optional(),localhostTunnel:x.boolean().optional()});var b1e=x.object({access:Fte.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()});b1e.extend({attemptedProviders:x.array(cO).max(Object.values(bR).length).default([])}).strict();var S1e=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()]),Bte=x.object({accessToken:x.string().min(1),expiresAt:x.iso.datetime(),fleetApiUrl:x.url(),provider:x.literal("SELF_HOSTED"),tokenType:x.literal("Bearer")}),T1e=Bte.extend({network:S1e}).strict(),Ute=x.union([T1e,Bte.strict()]),v1e=x.object({hostname:x.string(),lease:x.string(),server:x.object({host:x.string(),port:x.number().int().positive()})}),zte=x.object({wsEndpoint:x.string(),accessToken:x.string().optional(),endpointType:y1e.optional(),provider:cO.optional(),operatingSystem:xZ.optional(),tunnel:v1e.optional()});var A1e=200,E1e=2e3,ER=z.string().trim().min(1).max(A1e),Bh=z.string().trim().min(1).max(E1e),nT=z.array(Bh),w1e=z.enum(["verified","issues_found","blocked"]),OO=z.object({name:ER,summary:Bh,preconditions:nT,outline:nT,acceptanceCriteria:nT}),R1e=z.object({startedAt:z.number(),finishedAt:z.number(),agentId:z.string().optional(),windowId:z.string().optional(),artifactId:z.string().optional()}),C1e=z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\.(?:jpg|png)$/),I1e=z.object({artifactId:C1e,mediaType:z.enum(["image/jpeg","image/png"])}).refine(({artifactId:e,mediaType:t})=>e.endsWith(t==="image/png"?".png":".jpg"),"Screenshot filename extension must match its media type"),x1e=z.enum(["bug","flag"]),kO=z.object({kind:x1e.default("bug"),name:ER,summary:Bh,expected:Bh,actual:Bh,reproSteps:nT,recording:R1e.nullish(),screenshot:I1e.nullish()}),Hte=z.object({name:ER.describe("The name of the bug to retract."),reason:z.enum(["duplicate","invalid"]).describe("Why the bug report is being retracted.")}),u$=z.enum(["checked","failed","partial","out_of_scope"]),d$=z.object({control:ER,status:u$,result:Bh}),m$=z.object({status:w1e,summary:Bh,verified:nT,gaps:nT});z.object({entry:OO});z.object({entry:kO});z.object({entry:d$});z.object({report:m$});z.object({entries:z.array(OO)});z.object({entries:z.array(kO)});z.object({entries:z.array(d$)});z.object({report:m$.nullable()});var p$=z.object({agent:z.string().nullable(),conversationId:z.string().nullable(),createdAt:z.iso.datetime(),updatedAt:z.iso.datetime()}),_1e=OO.extend({...p$.shape,blockedReason:z.string().nullable()}),P1e=kO.extend({...p$.shape,investigatorAgent:z.string().nullable(),investigatorConversationId:z.string().nullable(),reviewedAt:z.iso.datetime().nullable()});d$.extend({agent:z.string(),conversationId:z.string()});var O1e=m$.extend({testCaseName:z.string().nullable(),...p$.shape}),h$=z.enum(["OPEN","ACCEPTED","DUPLICATE","WORKS_AS_INTENDED","CANNOT_REPRODUCE"]);z.object({bugName:z.string(),status:h$,knowledgeItemId:z.string().nullable(),updatedByUserId:z.string().nullable(),updatedAt:z.iso.datetime()});z.object({chatId:z.string().min(1),bugName:ER,status:h$,reviewedKnowledgeItemIds:z.array(z.string().min(1)).optional(),reviewedKnowledgeItemStatus:IX.optional(),linkedKnowledgeItemId:z.string().min(1).nullable().optional()});z.object({entries:z.array(_1e)});z.object({entries:z.array(P1e)});z.object({entries:z.array(O1e)});var jte=z.object({testCases:z.number(),issuesFound:z.number(),blocked:z.number(),bugs:z.number(),bugsByTriage:z.record(h$,z.number())});z.union([jte.extend({passed:z.number()}),jte.extend({verified:z.number()}).transform(({verified:e,...t})=>({...t,passed:e}))]);z.object({entry:OO});z.object({retracted:z.boolean(),conflict:z.string().optional()});z.object({entry:kO,reporterAgent:z.string().min(1).optional(),reporterConversationId:z.string().min(1).optional()}).superRefine((e,t)=>{e.entry.kind!=="flag"||e.entry.screenshot||t.addIssue({code:"custom",message:"Flags require a screenshot",path:["entry","screenshot"]});}).refine(e=>e.reporterAgent===void 0==(e.reporterConversationId===void 0),"reporterAgent and reporterConversationId must be provided together");z.object({reason:Bh});var $te=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:Mz.nullish()});$te.extend({steps:z.lazy(()=>mo.array())});var Gte=5*60*1e3,wR=nr.extend($te.omit({id:true,createdAt:true,createdBy:true,organizationId:true,enabled:true}).shape);var k1e="org_01HMJTX4GT1KG94KZRCT8MZ6YB",M1e="org_01HMSCJQBCCG51M2ZF65YC5B8W",L1e="org_01JPR6MGFQSHF3W234R3XJDPMB",N1e=[k1e,M1e,L1e];function Qf(e){return N1e.includes(e)}var Vte=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:Vte.nullable()});var Wte=z.object({updates:Vte.array()});z.object({repositoriesIndexed:z.boolean(),indexingInProgress:z.boolean(),indexesOutdated:z.boolean()});var qte=(a=>(a.Queued="queued",a.InProgress="in_progress",a.Completed="completed",a.Waiting="waiting",a.Requested="requested",a.Pending="pending",a))(qte||{}),Kte=(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))(Kte||{});z.object({name:z.string(),status:z.enum(qte),conclusion:z.enum(Kte).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()})}),g$=z.object({mergedBranch:z.string().optional()});var Yte=z.object({orgId:z.string(),cacheKeys:z.string().array()});z.object({keyParams:Yte,clientMetadata:z.string(),lockAcquisitionTimeoutMs:z.number().optional()});var Jte=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()}),Yte]);var D1e=z.object({remainingTtlMs:z.number(),value:z.string().nullish()});z.object({results:z.record(z.string(),D1e),activeLocks:z.string().array()});var Xte=0,Qte=5*60*1e3;var Zte=z.object({cacheEntryId:z.string().uuid(),category:z.string().min(1)}),eoe={isManualOverride:z.boolean().optional(),manualOverrideOf:Zte.optional()},toe=vE.extend({identityVersion:z.literal(gl),cacheEntryId:z.string().uuid().optional(),runId:z.string().min(1).optional(),executionFailureReason:z.string().min(1).optional(),classification:b_,healDetails:lj.optional(),...eoe}),ooe=Gb.extend({identityVersion:z.literal(Ef).optional(),cacheEntryId:z.string().uuid().optional(),runId:z.string().min(1).optional(),testId:z.string().min(1),executionFailureReason:z.string().min(1).optional(),classification:b_,healDetails:lj.optional()}),F1e=z.union([toe,ooe]),noe={overriddenBy:Zte.optional(),createdAt:z.coerce.date(),updatedAt:z.coerce.date()},B1e=toe.extend({cacheEntryId:z.string().uuid(),...noe}),U1e=ooe.extend({...eoe,...noe}),z1e=U1e.transform(e=>({...e,identityVersion:Ef})),roe=z.union([B1e,z1e]);function CR(e){return !e.branchName&&AE(e.classification.category)}var j1e=vE.extend({mainBranchName:z.string().min(1).optional()}),H1e=Gb.extend({mainBranchName:z.string().min(1).optional(),testId:z.never().optional()}).transform(({testId:e,...t})=>t);z.union([j1e,H1e]);var ioe=roe.array();z.object({entries:F1e.array()});var $1e=vE.extend({cacheEntryId:z.string().uuid(),runId:z.string().min(1),category:z.string().min(1)}),G1e=Gb.extend({testId:z.never().optional(),runId:z.string().min(1),cacheEntryId:z.string().uuid(),category:z.string().min(1)}).transform(({testId:e,...t})=>t);z.union([$1e,G1e]);z.object({status:z.enum(["evicted","not_found","run_mismatch"]),entry:roe.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 MO=z.object({skip:z.boolean(),failed:z.number(),total:z.number()}),V1e=.8;function aoe({failed:e,completed:t,minCompletedRuns:o}){return t>=o&&e/t>=V1e}function rT(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 W1e=z.object({version:z.string(),json:z.record(z.string(),z.unknown().optional()),hash:z.string()}),soe=z.record(z.string(),z.unknown().optional());z.object({newSvgs:z.array(W1e),metadata:soe.optional()});var q1e=z.object({version:z.string(),json:z.record(z.string(),z.unknown().optional()).nullish(),hash:z.string(),description:z.string().nullish(),metadata:soe.nullish()}),loe=z.record(z.string().describe("icon hash"),q1e);var f$="metadata.json",y$="test.yaml",coe=".snapshot.zip",b$=Zn.extend(Tl.shape),K1e=z.object({envName:z.string().optional(),baseUrl:z.string(),variables:z.record(z.string(),z.unknown().optional()),resolvedEnv:hw.optional()}),uoe=z.object({browser:ru.optional(),ai:Gs.optional(),advanced:Iw.optional(),retries:z.number().optional()});z.object({momenticVersion:z.string(),schemaVersion:z.string(),createdAt:z.string(),relativeFilePath:z.string(),environment:K1e,config:uoe});var doe=z.object({variables:z.record(z.string(),z.unknown().optional()),resolvedEnv:hw.optional()}),Y1e=z.object({envName:z.string().optional(),baseUrl:z.string(),encryptedSecrets:z.string()}),moe=z.object({momenticVersion:z.string(),schemaVersion:z.string(),createdAt:z.string(),relativeFilePath:z.string(),environment:Y1e,config:uoe});var J1e=z.looseObject({type:z.number(),data:z.record(z.string(),z.unknown()),timestamp:z.number()}),poe=z.custom(e=>J1e.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:u$}),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 hoe(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 goe=e=>{e.extraHeaders&&(e.extraHeaders=Object.fromEntries(Object.entries(e.extraHeaders).filter(([t,o])=>t.trim()&&o.trim())));};var LO=class{async prepareGoldenScreenshotForComparison(t,o,n){return n}};var NO=class{async resolveStepCacheEntries(){return {}}async saveStepCacheEntries(){}async saveSnapshotCacheEntries(){}async deleteStepCacheEntry(){}};function Q1e(e){return e.map(t=>({...t,environment:void 0}))}function S$(e,t){return t?e:Q1e(e)}var v$="browser-crash-dump.zip",T$=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 T$}flushResults(t){}};var ft="metadata.json",ds="assets",Mn="runs",A$=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:A$,videoAssets:z.string().array().optional()});var foe=z.object({uploadUrl:z.string(),videoUploadUrls:z.record(z.string(),z.string()).optional()}),Z1e=z.object({step:po,status:z.enum(Dt),startedAt:z.coerce.date(),finishedAt:z.coerce.date().optional(),healMetadata:z.object({healType:z.enum(Tw).or(z.literal("AI")),healedAt:z.coerce.date()}).optional(),beforeSnapshotId:z.guid().optional(),afterSnapshotId:z.guid().optional(),message:z.string().optional()}),e2e=Z1e.extend({finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});e2e.extend({step:z.unknown().optional()});var E$=z.object({avdId:z.string().optional(),channel:z.string().optional(),tag:z.string().optional(),region:z.string().optional(),osVersion:n9.optional()}),yoe="1.0.0",boe=hte.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:E$.optional(),viewport:jm.optional(),activeVideos:z.array(z.object({videoName:z.string(),timestamp:z.coerce.date()})).optional()}),xR=boe.extend({assetDetails:E$.optional(),finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});boe.extend(Ej.shape);var Soe=xR.extend(Ej.shape),t2e=z.object({results:z.array(is),beforeResults:z.array(is).optional(),afterResults:z.array(is).optional()});xR.extend(t2e.shape);var o2e=z.object({results:z.array(as),beforeResults:z.array(as).optional(),afterResults:z.array(as).optional()});xR.extend(o2e.shape);var Toe=pte.merge(dte).extend({executionType:$m.optional().default("WEB"),testId:ir,testDescription:z.string().optional(),directory:z.string().optional(),runGroupId:z.guid(),status:z.enum($t),healStatus:Nf,testBundleHash:z.string().optional(),startedAt:z.coerce.date(),schemaVersion:z.string().nullish(),attempts:z.number(),failureRecoveryDetails:z.object({attempts:z.number()}).optional(),aiSettings:Gs.optional(),avgCpuUsage:z.number().optional(),avgMemoryUsage:z.number().optional()}),n2e=Toe.extend(E$.shape),Uh=Toe.extend({finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});n2e.extend({finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});var DO=1e4,r2e=cte.merge(ute).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:Gs.optional(),browser:ru.optional(),sourceRunGroupIds:z.array(z.guid()).max(DO).optional(),mergedAt:z.coerce.date().optional(),aiSelect:z.union([_w.transform(e=>[e]),z.array(_w)]).optional()}),Sc=r2e.extend({healRiskSummary:Df.optional(),updatedAt:z.coerce.date().optional().transform(e=>e??new Date),finishedAt:z.coerce.date().optional().transform(e=>e??new Date)});var i2e=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"]),a2e=new Set(["MODULE","RESOLVED_MODULE"]);function voe(e){return e.type!=="PRESET_ACTION"?e.type:e.command.type}function Aoe(e){return a2e.has(e.type)?false:e.type!=="PRESET_ACTION"?true:!i2e.has(e.command.type)}var Eoe="progress.json",woe="1.0.0",s2e=z.object({runId:z.string(),testId:z.string().optional(),testName:z.string().optional(),directory:z.string().optional(),status:z.nativeEnum($t),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($t),totalRuns:z.number(),completedRuns:z.number(),completedSteps:z.number(),totalSteps:z.number(),startedAt:z.coerce.date(),updatedAt:z.coerce.date(),runs:s2e.array()});function Roe(e,t){let o=bn__default.relative(t,e);return o!==""&&o!==".."&&!o.startsWith(`..${bn__default.sep}`)&&!bn__default.isAbsolute(o)}function Coe(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 Ioe="CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih",iT="https://us-west.metrics.momentic.ai",aT="c60c6a0f-60da-41a7-a61b-07969a0aa303",ms=!!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 g2e=new Set(["exit","quit"]),Poe=(()=>{try{return statSync("/.dockerenv"),!0}catch{return false}})(),f2e=ms||Poe||!process.stdin.isTTY;async function ei(e){if(ms||Poe)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 R$(e){let t=dirname(e);return Coe(t)?existsSync(e)?ei(`File '${xoe(e)}' already exists. Overwrite existing content?`):true:await ei(`Directory '${xoe(t)}' doesn't exist. Create it now?`)?(mkdirSync(t,{recursive:true}),true):false}function xoe(e){return e.replace(/(\s+)/g,"\\$1")}async function Ooe(e,t){return f2e?t:(await input({message:e,default:t})).trim()||t}async function C$(){let e;try{e=(await input({message:"ask"})).trim();}catch(t){if(t instanceof Error&&t.name==="ExitPromptError"){C.info("");return}throw t}if(!g2e.has(e.toLowerCase()))return e}var sT=new Map,Noe=new Set;function I2e(e){Noe.add(e);}function Doe(e){I2e(t=>{e({category:"cli",level:t.severity_text==="ERROR"?"error":t.severity_text==="WARN"?"warning":"info",message:t.body,timestamp:t.timestamp/1e9});});}var Moe="Log throttle exceeded",_2e=100,P2e=5e3,O2e=2e4,k2e=A2e(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 M2e({app:e,hostname:t,environment:o,serviceVersion:n}){return {host:t,env:o,[ATTR_SERVICE_NAME]:e,...n?{[ATTR_SERVICE_VERSION]:n}:{}}}var L2e=`${iT}/logs/json`,I$=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 k2e(L2e,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":Ioe,"x-momentic-metrics-api-key":aT},body:au(t),signal:AbortSignal.timeout(O2e)});if(!o.ok)throw new Error(`Got error status (${o.statusText}) from SigNoz`)}catch{}}},x$=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??Qm.hostname(),this.disableConsoleLogs=n,this.bindingAttributes={...t,env:"production"},this.flushIntervalMs=r??5e3,this.maxBatchSize=i??10,this.buffer=a??new I$(this.flushIntervalMs,this.maxBatchSize);let s={base:this.bindingAttributes,errorKey:"err",level:"debug"};this.consoleLogger=koe(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===Moe)return true;let o=Date.now();return o-this.lastWindowStart>P2e&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,Moe),this.droppedLogsInWindow=false,this.lastWindowStart=o),this.logsInCurrentWindow<_2e?(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(Cw[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=C2e.err(o.err));let i={...this.bindingAttributes,...o&&typeof o=="object"?o:{},...r.length>0?{args:r}:{}},a=M2e({app:this.bindingAttributes.app,hostname:this.hostname,environment:this.bindingAttributes.env,serviceVersion:this.bindingAttributes.cliVersion??"3.59.3"}),s=N2e();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:$X({message:n||"",...i})};this.buffer.push(l);for(let c of Noe)try{c(l);}catch{}}setApp(t){let o=this.bindingAttributes.app;this.bindingAttributes.app=t,sT.set("app",this),sT.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=GX[t]):(this.minLevelValue=Cw[t],this.consoleLogger.level=t);}enableConsoleLogs(){this.disableConsoleLogs=false;}},lT=({app:e,hostname:t,disableConsoleLogs:o})=>(sT.has(e)||sT.set(e,new x$({bindings:{app:e},hostname:t,disableConsoleLogs:o})),sT.get(e));function N2e(){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 FO(){await Promise.all([...sT.values()].map(e=>e.flush()));}var oa=class extends Error{callSiteStack;constructor(t){super(t),this.name="TimeoutError";}};var Foe=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(Foe(p));u=()=>{d(),c(Foe(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 oa(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 Tc({signal:e,timeoutMs:t}){let o=AbortSignal.timeout(t);return e?AbortSignal.any([e,o]):o}var BO="organization";function UO(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:{[BO]: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:BO,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 Boe(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:{[BO]: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 zO=class e extends Wf{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 Boe(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 Boe(this.client,this.orgId,this.userId);this.flags=o,this.payloads=n;}};var jO="/proc",Uoe="/sys/fs/cgroup",z2e="/sys/fs/cgroup/memory",zoe=8,j2e=1024;function $O(){let e;return ()=>{if(process.platform!=="linux")return;let t=W2e();if(!t)return;let o=q2e({current:t,previous:e});return e=t,o}}function joe(){if(process.platform!=="linux")return;let e=_$(`${Uoe}/memory.stat`);if(e){let o=_$(`${Uoe}/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=_$(`${z2e}/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 H2e(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 $2e(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*j2e);}}if(!(!o||n===void 0||r===void 0))return {pid:e,parentPid:n,name:o,rssBytes:r}}function G2e(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 V2e(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 _$(e){try{return H2e(readFileSync(e,"utf8"))}catch{return}}function W2e(){let e;try{e=V2e(readFileSync(`${jO}/stat`,"utf8"));}catch{return}if(e===void 0)return;let t=new Map,o;try{o=readdirSync(jO);}catch{return}for(let n of o){if(!/^\d+$/.test(n))continue;let r=Number.parseInt(n,10);try{let i=$2e(r,readFileSync(`${jO}/${n}/status`,"utf8")),a=G2e(readFileSync(`${jO}/${n}/stat`,"utf8"));if(!i||a===void 0)continue;t.set(r,{...i,cpuTicks:a});}catch{}}return {totalTicks:e,processes:t}}function q2e({current:e,previous:t}){let o=t?e.totalTicks-t.totalTicks:void 0,n=K2e(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,zoe),topCpuProcessGroups:c.filter(u=>u.cpuPercentage!==void 0).sort((u,d)=>(d.cpuPercentage??0)-(u.cpuPercentage??0)).slice(0,zoe)}}function K2e(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 X2e=2e3,Q2e=2e4,Z2e=.1,eVe=70,tVe=.8,Zf=e=>Number.parseInt(e,10),P$=e=>readFileSync(e,"utf8").trim(),cT=e=>Zf(P$(e));function Voe({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 _R={samples:0,lowMemorySamples:0,highCpuSamples:0,highHeapSamples:0};function Woe(){return {..._R}}var GO=Qm.platform(),oVe=Qm.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 Hoe(e=Date.now()){let t=Qm.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 nVe(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 VO(){let e=Hoe();return ()=>{let t=Hoe(),o=nVe(e,t);return e=t,o}}function $oe(){try{let t=readFileSync("/sys/fs/cgroup/cpu.stat","utf8").match(/^usage_usec\s+(\d+)/m);if(t?.[1])return Zf(t[1])}catch{}try{let e=cT("/sys/fs/cgroup/cpuacct/cpuacct.usage");if(!isNaN(e))return e/1e3}catch{}return null}function rVe(){try{let t=P$("/sys/fs/cgroup/cpu.max").split(" "),o=t[0],n=t[1];return !o||!n||o==="max"?null:Zf(o)/Zf(n)}catch{}try{let e=cT("/sys/fs/cgroup/cpu/cpu.cfs_quota_us"),t=cT("/sys/fs/cgroup/cpu/cpu.cfs_period_us");return e===-1||isNaN(t)?null:e/t}catch{return null}}function WO(){if(GO!=="linux")return null;let e=$oe();if(e===null)return null;let t=rVe()??Qm.cpus().length,o=e,n=Date.now();return ()=>{let r=$oe();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 iVe(){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(Qm.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 qoe({intervalMs:e=X2e,maxSamples:t=1e4,keepSamples:o=true,onSample:n}={}){let r=[],i=WO()??VO(),a=iVe(),s=()=>{let u=Date.now(),d=Joe(),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 aVe=$O(),sVe=WO()??VO(),Koe=e=>{O$({logger:e,processUsageTracker:aVe,cpuUsageTracker:sVe});},Yoe=e=>{let t=$O(),o=WO()??VO(),n=()=>O$({logger:e,processUsageTracker:t,cpuUsageTracker:o});n(),setTimeout(n,5e3);};function qO(e,t={}){let o=$O(),n=WO()??VO(),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=O$({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??Q2e),cpuMetadata:oVe,platform:GO,getSummary:()=>({...r})}}function O$({logger:e,processUsageTracker:t,cpuUsageTracker:o}){try{let n={},r=Joe(),i=o();_R.samples++;let a=r.freePercentage<.05;a&&(Object.assign(n,process.memoryUsage()),_R.lowMemorySamples++);let s=i!==null&&i.total>80;s&&_R.highCpuSamples++;let l=J2e.getHeapStatistics(),c=l.used_heap_size,u=l.heap_size_limit,d=c/u,m=d>.9;m&&_R.highHeapSamples++;let p=a||s||m,g=r.freePercentage<Z2e||i!==null&&i.total>eVe||d>tVe?{cgroupMemory:joe(),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 lVe(){if(GO!=="linux")return null;try{let e=P$("/sys/fs/cgroup/memory.max"),t=cT("/sys/fs/cgroup/memory.current");if(e==="max"||isNaN(t))return null;let o=Zf(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=cT("/sys/fs/cgroup/memory/memory.limit_in_bytes"),t=cT("/sys/fs/cgroup/memory/memory.usage_in_bytes");if(isNaN(e)||isNaN(t))return null;let o=Qm.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 Joe(){let e=lVe();if(e)return e;let t=Qm.totalmem(),o=GO==="darwin"?cVe():(()=>{let r=Qm.freemem();return {availableMemory:r,rawFreeMemory:r,cachedMemory:0}})(),n=o.availableMemory/t;return {totalMemory:t,freeMemory:o.availableMemory,freePercentage:n}}function cVe(){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?Zf(o):4096,r=u=>{let m=e.match(new RegExp(`${u}:\\s+(\\d+)\\.`,"i"))?.[1];return m?Zf(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=Qm.freemem();return {availableMemory:e,rawFreeMemory:e,cachedMemory:0}}}process.env.APP||"unknown";var KO="deployment.environment",YO="service.instance.id";function Xoe(){return process.env.MOMENTIC_LOCAL_DEV==="1"&&process.env.LOCAL_SIGNOZ==="true"}var ey=false,JO,OR=new Map,AVe={forceFlush:()=>Promise.resolve(),onStart:e=>{let{traceId:t,spanId:o}=e.spanContext();OR.set(`${t}:${o}`,e);},onEnd:e=>{let{traceId:t,spanId:o}=e.spanContext();OR.delete(`${t}:${o}`);},shutdown:()=>Promise.resolve()},PR,kR,EVe=[],XO,wVe=2e4;function Cr(){return ey}async function RVe(){for(let e of EVe)try{await e();}catch{}}function CVe(){return Cr()&&trace.getSpan(context.active())!==void 0}function IVe(){return Xoe()?new OTLPTraceExporter({url:"http://localhost:4318/v1/traces"}):new OTLPTraceExporter({url:`${iT}/v1/traces`,headers:{"x-momentic-metrics-api-key":aT},timeoutMillis:wVe})}function xVe(e){let t="production",o=v4$1(),n=IVe();return new NodeTracerProvider({resource:resourceFromAttributes({[ATTR_SERVICE_NAME]:e,[KO]:t,[YO]:o,[ATTR_SERVICE_VERSION]:"3.59.2"}),spanProcessors:[AVe,new BatchSpanProcessor(n)]})}function _Ve(e){XO=registerInstrumentations({tracerProvider:e,instrumentations:[new UndiciInstrumentation({requireParentforSpans:true})]});}function PVe(e){return !e&&!JO?trace.getTracer("momentic-serverless"):kR?.getTracer("momentic-serverless")??trace.getTracer("momentic-serverless")}async function vc(e){if(!(!e.enabled||ey))try{JO=e.serviceName;let t=xVe(e.serviceName);kR=t,PR=new AsyncLocalStorageContextManager,t.register({contextManager:PR.enable(),propagator:new W3CTraceContextPropagator}),_Ve(t),ey=!0;}catch{ey=false,JO=void 0,kR=void 0,PR=void 0,XO=void 0;}}function OVe(e){if(ey){for(let t of Array.from(OR.values()).reverse())try{t.setAttribute("momentic.aborted",!0),t.setAttribute("momentic.abort_reason",e),t.setStatus({code:SpanStatusCode.ERROR,message:e}),t.end();}catch{}OR.clear();}}async function QO(e="shutdown"){if(ey)try{OVe(e),await Promise.allSettled([kR?.shutdown(),RVe()]);}catch{}finally{XO?.();try{PR?.disable();}catch{}ey=false,JO=void 0,OR.clear(),PR=void 0,kR=void 0,XO=void 0;}}async function pe(e){if(!Cr()||!e.root&&!e.newTrace&&!CVe())return e.fn(void 0);let t=e.serviceName===void 0?e.attributes:{...e.attributes??{},"momentic.span_service_name":e.serviceName};return await PVe(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 MR=class{increment(t,o,n){}gauge(t,o){}distribution(t,o,n){}async flush(){}async recordDuration(t){return await L$(t)}};async function L$({fn:e,name:t,timeoutMs:o,timeoutMessage:n,trace:r}){let i=r?()=>pe({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 ZO(e){return e instanceof Error?e.name==="TimeoutError"?"timeout":e.name==="AbortError"?"aborted":"error":"error"}function N$(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 D$(e,t){let o=N$(e);return !t||Object.keys(t).length===0?o:{...t,...o}}function VVe(){return new OTLPMetricExporter({url:`${iT}/v1/metrics`,headers:{"x-momentic-metrics-api-key":aT},temporalityPreference:AggregationTemporalityPreference.DELTA})}var F$=[100,500,1e3,2e3,3e3,4e3,5e3,7500,1e4,15e3,2e4],wd=(e,t,o)=>({instrumentName:e,instrumentType:InstrumentType.HISTOGRAM,aggregation:{type:AggregationType.EXPLICIT_BUCKET_HISTOGRAM,options:{boundaries:t,recordMinMax:false}},...o?{attributeKeys:o}:void 0}),WVe=[1e3,5e3,15e3,3e4,6e4,12e4,3e5,6e5,12e5,18e5,36e5],qVe=[500,1e3,2e3,5e3,1e4,2e4,3e4,6e4,12e4,3e5,6e5],KVe=[50,100,250,500,1e3,2e3,5e3,1e4,2e4,3e4,6e4,12e4,3e5],B$=[1e4,3e4,6e4,12e4,3e5,6e5,9e5,12e5,18e5,36e5,54e5,72e5,108e5],YVe=[wd("test_event_duration",F$),wd("test_step_duration",F$),wd("test_mobile_step_duration",F$),wd("web_agent_action_duration",[25,50,100,200,350,500,750,1e3,2e3,5e3,1e4,2e4,3e4,6e4],["op","outcome"]),wd("mo_turn_duration_ms",WVe,["agent","outcome","env","platform"]),wd("mo_step_duration_ms",qVe,["agent","env"]),wd("mo_tool_call_duration_ms",KVe,["agent","tool","outcome","env"]),wd("sandbox_bug_reproduction_latency",B$,["outcome","env"]),wd("sandbox_bugbash_latency",B$,["env"]),wd("sandbox_explore_latency",B$,["env"])],ek=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,[KO]:o,[YO]:typeof process<"u"&&process.env.SERVICE_INSTANCE_ID?process.env.SERVICE_INSTANCE_ID:v4$1(),[ATTR_SERVICE_VERSION]:"3.59.2"}),r=VVe(),i=new PeriodicExportingMetricReader({exporter:r,exportIntervalMillis:t.exportIntervalMs??6e4});this.provider=new MeterProvider({resource:n,readers:[i],views:YVe}),metrics.setGlobalMeterProvider(this.provider),this.meter=this.provider.getMeter("momentic-serverless");}increment(t,o,n){try{let r=D$(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=D$(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 L$(t)}catch(s){throw a=ZO(s),s}finally{this.distribution(o,Date.now()-i,n?[...r??[],`outcome:${a}`]:r);}}};var go=new MR;function ene(e){if(!e.disabled)try{go=new ek(e);}catch{go=new MR;}}var U$;function tne(e){U$=e;}function Rd(e){XVe(e)&&U$&&U$(e);}var JVe=new Set(["InternalWebAgentError","InternalPlatformError","UnknownError"]);function XVe(e){return e instanceof Error&&e.name==="AbortError"?false:_E(e,lh)?true:_E(e,de)?false:e instanceof oe?JVe.has(e.reason):true}var QVe=z.object({openrouter:z.object({usage:z.object({cost:z.number().finite().nonnegative()})})});function uT({feature:e,orgId:t,result:o}){go.increment("ai_agent_invocations",1,[`feature:${e}`,`orgId:${t}`,`result:${o}`]);}function ZVe(e){let t=QVe.safeParse(e);return t.success?t.data.openrouter.usage.cost:void 0}function ok(e){let t;for(let o of e){let n=ZVe(o);n!==void 0&&(t=(t??0)+n);}return t}function dT(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 eWe({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;go.distribution("ai_session_tokens",i,[...r,"category:input"]),go.distribution("ai_session_tokens",Math.max(0,Math.min(a,i)),[...r,"category:cached_input"]),go.distribution("ai_session_tokens",Math.max(0,Math.min(s,i-a)),[...r,"category:cache_write_input"]),go.distribution("ai_session_tokens",l,[...r,"category:output"]);}function mu({usage:e,costUsd:t,promptType:o,logger:n,message:r,result:i="success",attributes:a,metricTags:s}){eWe({usage:e,promptType:o,result:i,tags:s}),n.info({...a,promptType:o,result:i,usage:e,costUsd:t},r);}function ti({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&&mu({usage:l,promptType:t,logger:o,result:a,message:i,attributes:s,metricTags:n});});}}var tWe=1e4;function nk({durationMs:e,executor:t,logger:o,orgId:n,resolvedStep:r,status:i}){if(!Aoe(r))return;let a=voe(r);go.distribution("test_step_duration",e,[`type:${a}`,"platform:browser",`executor:${t}`,`orgId:${n}`]),!(i!=="SUCCESS"||e<tWe)&&o.info({durationMs:e,executor:t,orgId:n,outcome:"success",stepId:r.id,stepType:a},"test_step_latency_outlier");}function et(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:ms,colorForced:n}}function Cd(e){return e.isTTY&&!e.ci&&e.columns>0}var one="\r",nne="\x1B[1A",rne="\x1B[J",ine="\x1B[?25l",z$="\x1B[?25h",iWe="\u28CB\u28D9\u28F9\u28F8\u28FC\u28F4\u28E6\u28E7\u28C7\u28CF",aWe="|/-\\",sWe="\u2736\u2738\u2739\u273A\u2739\u2737",lWe="*",cWe="#0891b2",uWe={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 nt(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(cWe)(a)),spinner:r=>{let i=e.unicode?iWe:aWe,a=(r%i.length+i.length)%i.length;return n(i.charAt(a),(s,l)=>s.cyan(l))},classifySpinner:r=>{let i=e.unicode?sWe:lWe,a=(r%i.length+i.length)%i.length;return n(i.charAt(a),(s,l)=>s.cyan(l))},statusGlyph:r=>{let i=uWe[r],a=e.unicode?i.glyph:i.ascii;return t?i.paint(o,a):a},separator:e.unicode?" \xB7 ":" | "}}var j$=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 _$(e){try{return H2e(readFileSync(e,"utf8"))}catch{return}}function W2e(){let e;try{e=V2e(readFileSync(`${jO}/stat`,"utf8"));}catch{return}if(e===void 0)return;let t=new Map,o;try{o=readdirSync(jO);}catch{return}for(let n of o){if(!/^\d+$/.test(n))continue;let r=Number.parseInt(n,10);try{let i=$2e(r,readFileSync(`${jO}/${n}/status`,"utf8")),a=G2e(readFileSync(`${jO}/${n}/stat`,"utf8"));if(!i||a===void 0)continue;t.set(r,{...i,cpuTicks:a});}catch{}}return {totalTicks:e,processes:t}}function q2e({current:e,previous:t}){let o=t?e.totalTicks-t.totalTicks:void 0,n=K2e(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,zoe),topCpuProcessGroups:c.filter(u=>u.cpuPercentage!==void 0).sort((u,d)=>(d.cpuPercentage??0)-(u.cpuPercentage??0)).slice(0,zoe)}}function K2e(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 X2e=2e3,Q2e=2e4,Z2e=.1,eVe=70,tVe=.8,Zf=e=>Number.parseInt(e,10),P$=e=>readFileSync(e,"utf8").trim(),cT=e=>Zf(P$(e));function Voe({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 _R={samples:0,lowMemorySamples:0,highCpuSamples:0,highHeapSamples:0};function Woe(){return {..._R}}var GO=Qm.platform(),oVe=Qm.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 Hoe(e=Date.now()){let t=Qm.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 nVe(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 VO(){let e=Hoe();return ()=>{let t=Hoe(),o=nVe(e,t);return e=t,o}}function $oe(){try{let t=readFileSync("/sys/fs/cgroup/cpu.stat","utf8").match(/^usage_usec\s+(\d+)/m);if(t?.[1])return Zf(t[1])}catch{}try{let e=cT("/sys/fs/cgroup/cpuacct/cpuacct.usage");if(!isNaN(e))return e/1e3}catch{}return null}function rVe(){try{let t=P$("/sys/fs/cgroup/cpu.max").split(" "),o=t[0],n=t[1];return !o||!n||o==="max"?null:Zf(o)/Zf(n)}catch{}try{let e=cT("/sys/fs/cgroup/cpu/cpu.cfs_quota_us"),t=cT("/sys/fs/cgroup/cpu/cpu.cfs_period_us");return e===-1||isNaN(t)?null:e/t}catch{return null}}function WO(){if(GO!=="linux")return null;let e=$oe();if(e===null)return null;let t=rVe()??Qm.cpus().length,o=e,n=Date.now();return ()=>{let r=$oe();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 iVe(){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(Qm.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 qoe({intervalMs:e=X2e,maxSamples:t=1e4,keepSamples:o=true,onSample:n}={}){let r=[],i=WO()??VO(),a=iVe(),s=()=>{let u=Date.now(),d=Joe(),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 aVe=$O(),sVe=WO()??VO(),Koe=e=>{O$({logger:e,processUsageTracker:aVe,cpuUsageTracker:sVe});},Yoe=e=>{let t=$O(),o=WO()??VO(),n=()=>O$({logger:e,processUsageTracker:t,cpuUsageTracker:o});n(),setTimeout(n,5e3);};function qO(e,t={}){let o=$O(),n=WO()??VO(),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=O$({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??Q2e),cpuMetadata:oVe,platform:GO,getSummary:()=>({...r})}}function O$({logger:e,processUsageTracker:t,cpuUsageTracker:o}){try{let n={},r=Joe(),i=o();_R.samples++;let a=r.freePercentage<.05;a&&(Object.assign(n,process.memoryUsage()),_R.lowMemorySamples++);let s=i!==null&&i.total>80;s&&_R.highCpuSamples++;let l=J2e.getHeapStatistics(),c=l.used_heap_size,u=l.heap_size_limit,d=c/u,m=d>.9;m&&_R.highHeapSamples++;let p=a||s||m,g=r.freePercentage<Z2e||i!==null&&i.total>eVe||d>tVe?{cgroupMemory:joe(),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 lVe(){if(GO!=="linux")return null;try{let e=P$("/sys/fs/cgroup/memory.max"),t=cT("/sys/fs/cgroup/memory.current");if(e==="max"||isNaN(t))return null;let o=Zf(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=cT("/sys/fs/cgroup/memory/memory.limit_in_bytes"),t=cT("/sys/fs/cgroup/memory/memory.usage_in_bytes");if(isNaN(e)||isNaN(t))return null;let o=Qm.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 Joe(){let e=lVe();if(e)return e;let t=Qm.totalmem(),o=GO==="darwin"?cVe():(()=>{let r=Qm.freemem();return {availableMemory:r,rawFreeMemory:r,cachedMemory:0}})(),n=o.availableMemory/t;return {totalMemory:t,freeMemory:o.availableMemory,freePercentage:n}}function cVe(){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?Zf(o):4096,r=u=>{let m=e.match(new RegExp(`${u}:\\s+(\\d+)\\.`,"i"))?.[1];return m?Zf(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=Qm.freemem();return {availableMemory:e,rawFreeMemory:e,cachedMemory:0}}}process.env.APP||"unknown";var KO="deployment.environment",YO="service.instance.id";function Xoe(){return process.env.MOMENTIC_LOCAL_DEV==="1"&&process.env.LOCAL_SIGNOZ==="true"}var ey=false,JO,OR=new Map,AVe={forceFlush:()=>Promise.resolve(),onStart:e=>{let{traceId:t,spanId:o}=e.spanContext();OR.set(`${t}:${o}`,e);},onEnd:e=>{let{traceId:t,spanId:o}=e.spanContext();OR.delete(`${t}:${o}`);},shutdown:()=>Promise.resolve()},PR,kR,EVe=[],XO,wVe=2e4;function Cr(){return ey}async function RVe(){for(let e of EVe)try{await e();}catch{}}function CVe(){return Cr()&&trace.getSpan(context.active())!==void 0}function IVe(){return Xoe()?new OTLPTraceExporter({url:"http://localhost:4318/v1/traces"}):new OTLPTraceExporter({url:`${iT}/v1/traces`,headers:{"x-momentic-metrics-api-key":aT},timeoutMillis:wVe})}function xVe(e){let t="production",o=v4$1(),n=IVe();return new NodeTracerProvider({resource:resourceFromAttributes({[ATTR_SERVICE_NAME]:e,[KO]:t,[YO]:o,[ATTR_SERVICE_VERSION]:"3.59.3"}),spanProcessors:[AVe,new BatchSpanProcessor(n)]})}function _Ve(e){XO=registerInstrumentations({tracerProvider:e,instrumentations:[new UndiciInstrumentation({requireParentforSpans:true})]});}function PVe(e){return !e&&!JO?trace.getTracer("momentic-serverless"):kR?.getTracer("momentic-serverless")??trace.getTracer("momentic-serverless")}async function vc(e){if(!(!e.enabled||ey))try{JO=e.serviceName;let t=xVe(e.serviceName);kR=t,PR=new AsyncLocalStorageContextManager,t.register({contextManager:PR.enable(),propagator:new W3CTraceContextPropagator}),_Ve(t),ey=!0;}catch{ey=false,JO=void 0,kR=void 0,PR=void 0,XO=void 0;}}function OVe(e){if(ey){for(let t of Array.from(OR.values()).reverse())try{t.setAttribute("momentic.aborted",!0),t.setAttribute("momentic.abort_reason",e),t.setStatus({code:SpanStatusCode.ERROR,message:e}),t.end();}catch{}OR.clear();}}async function QO(e="shutdown"){if(ey)try{OVe(e),await Promise.allSettled([kR?.shutdown(),RVe()]);}catch{}finally{XO?.();try{PR?.disable();}catch{}ey=false,JO=void 0,OR.clear(),PR=void 0,kR=void 0,XO=void 0;}}async function pe(e){if(!Cr()||!e.root&&!e.newTrace&&!CVe())return e.fn(void 0);let t=e.serviceName===void 0?e.attributes:{...e.attributes??{},"momentic.span_service_name":e.serviceName};return await PVe(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 MR=class{increment(t,o,n){}gauge(t,o){}distribution(t,o,n){}async flush(){}async recordDuration(t){return await L$(t)}};async function L$({fn:e,name:t,timeoutMs:o,timeoutMessage:n,trace:r}){let i=r?()=>pe({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 ZO(e){return e instanceof Error?e.name==="TimeoutError"?"timeout":e.name==="AbortError"?"aborted":"error":"error"}function N$(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 D$(e,t){let o=N$(e);return !t||Object.keys(t).length===0?o:{...t,...o}}function VVe(){return new OTLPMetricExporter({url:`${iT}/v1/metrics`,headers:{"x-momentic-metrics-api-key":aT},temporalityPreference:AggregationTemporalityPreference.DELTA})}var F$=[100,500,1e3,2e3,3e3,4e3,5e3,7500,1e4,15e3,2e4],wd=(e,t,o)=>({instrumentName:e,instrumentType:InstrumentType.HISTOGRAM,aggregation:{type:AggregationType.EXPLICIT_BUCKET_HISTOGRAM,options:{boundaries:t,recordMinMax:false}},...o?{attributeKeys:o}:void 0}),WVe=[1e3,5e3,15e3,3e4,6e4,12e4,3e5,6e5,12e5,18e5,36e5],qVe=[500,1e3,2e3,5e3,1e4,2e4,3e4,6e4,12e4,3e5,6e5],KVe=[50,100,250,500,1e3,2e3,5e3,1e4,2e4,3e4,6e4,12e4,3e5],B$=[1e4,3e4,6e4,12e4,3e5,6e5,9e5,12e5,18e5,36e5,54e5,72e5,108e5],YVe=[wd("test_event_duration",F$),wd("test_step_duration",F$),wd("test_mobile_step_duration",F$),wd("web_agent_action_duration",[25,50,100,200,350,500,750,1e3,2e3,5e3,1e4,2e4,3e4,6e4],["op","outcome"]),wd("mo_turn_duration_ms",WVe,["agent","outcome","env","platform"]),wd("mo_step_duration_ms",qVe,["agent","env"]),wd("mo_tool_call_duration_ms",KVe,["agent","tool","outcome","env"]),wd("sandbox_bug_reproduction_latency",B$,["outcome","env"]),wd("sandbox_bugbash_latency",B$,["env"]),wd("sandbox_explore_latency",B$,["env"])],ek=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,[KO]:o,[YO]:typeof process<"u"&&process.env.SERVICE_INSTANCE_ID?process.env.SERVICE_INSTANCE_ID:v4$1(),[ATTR_SERVICE_VERSION]:"3.59.3"}),r=VVe(),i=new PeriodicExportingMetricReader({exporter:r,exportIntervalMillis:t.exportIntervalMs??6e4});this.provider=new MeterProvider({resource:n,readers:[i],views:YVe}),metrics.setGlobalMeterProvider(this.provider),this.meter=this.provider.getMeter("momentic-serverless");}increment(t,o,n){try{let r=D$(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=D$(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 L$(t)}catch(s){throw a=ZO(s),s}finally{this.distribution(o,Date.now()-i,n?[...r??[],`outcome:${a}`]:r);}}};var go=new MR;function ene(e){if(!e.disabled)try{go=new ek(e);}catch{go=new MR;}}var U$;function tne(e){U$=e;}function Rd(e){XVe(e)&&U$&&U$(e);}var JVe=new Set(["InternalWebAgentError","InternalPlatformError","UnknownError"]);function XVe(e){return e instanceof Error&&e.name==="AbortError"?false:_E(e,lh)?true:_E(e,de)?false:e instanceof oe?JVe.has(e.reason):true}var QVe=z.object({openrouter:z.object({usage:z.object({cost:z.number().finite().nonnegative()})})});function uT({feature:e,orgId:t,result:o}){go.increment("ai_agent_invocations",1,[`feature:${e}`,`orgId:${t}`,`result:${o}`]);}function ZVe(e){let t=QVe.safeParse(e);return t.success?t.data.openrouter.usage.cost:void 0}function ok(e){let t;for(let o of e){let n=ZVe(o);n!==void 0&&(t=(t??0)+n);}return t}function dT(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 eWe({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;go.distribution("ai_session_tokens",i,[...r,"category:input"]),go.distribution("ai_session_tokens",Math.max(0,Math.min(a,i)),[...r,"category:cached_input"]),go.distribution("ai_session_tokens",Math.max(0,Math.min(s,i-a)),[...r,"category:cache_write_input"]),go.distribution("ai_session_tokens",l,[...r,"category:output"]);}function mu({usage:e,costUsd:t,promptType:o,logger:n,message:r,result:i="success",attributes:a,metricTags:s}){eWe({usage:e,promptType:o,result:i,tags:s}),n.info({...a,promptType:o,result:i,usage:e,costUsd:t},r);}function ti({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&&mu({usage:l,promptType:t,logger:o,result:a,message:i,attributes:s,metricTags:n});});}}var tWe=1e4;function nk({durationMs:e,executor:t,logger:o,orgId:n,resolvedStep:r,status:i}){if(!Aoe(r))return;let a=voe(r);go.distribution("test_step_duration",e,[`type:${a}`,"platform:browser",`executor:${t}`,`orgId:${n}`]),!(i!=="SUCCESS"||e<tWe)&&o.info({durationMs:e,executor:t,orgId:n,outcome:"success",stepId:r.id,stepType:a},"test_step_latency_outlier");}function et(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:ms,colorForced:n}}function Cd(e){return e.isTTY&&!e.ci&&e.columns>0}var one="\r",nne="\x1B[1A",rne="\x1B[J",ine="\x1B[?25l",z$="\x1B[?25h",iWe="\u28CB\u28D9\u28F9\u28F8\u28FC\u28F4\u28E6\u28E7\u28C7\u28CF",aWe="|/-\\",sWe="\u2736\u2738\u2739\u273A\u2739\u2737",lWe="*",cWe="#0891b2",uWe={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 nt(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(cWe)(a)),spinner:r=>{let i=e.unicode?iWe:aWe,a=(r%i.length+i.length)%i.length;return n(i.charAt(a),(s,l)=>s.cyan(l))},classifySpinner:r=>{let i=e.unicode?sWe:lWe,a=(r%i.length+i.length)%i.length;return n(i.charAt(a),(s,l)=>s.cyan(l))},statusGlyph:r=>{let i=uWe[r],a=e.unicode?i.glyph:i.ascii;return t?i.paint(o,a):a},separator:e.unicode?" \xB7 ":" | "}}var j$=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 sne(e){let t=globalThis.console,o=new j$;globalThis.console=o;try{e();}finally{let n=o.flushed();n&&process.stdout.write(`${n}
185
185
  `),globalThis.console=t;}}var pWe=" ",hWe=" ",gWe=" ",fWe=" > ",cne=3;function une(e){if(!e.failureDetails)return;let t=e.filePath?rk(e.filePath):void 0;if(t&&t.doc.get("fileType")!==Ue.TEST_V2)return;let o=t?yWe({root:t,result:e}):void 0,n=e.failureDetails.classification?.previousStepsDescription??[];if(n.length===0&&!o)return;let r=[`${pWe}Failed at:`];for(let i of n)r.push(`${hWe}- ${i}`);if(o){let i=SWe(o);i&&(r.push(""),r.push(i));}return r.join(`
186
186
  `)}function rk(e){let t;try{t=readFileSync(e,"utf-8");}catch{return}let o=new LineCounter,n=Ss.parseDocument(t,{lineCounter:o});if(!(n.errors.length>0))return {filePath:e,text:t,doc:n,lineCounter:o}}function yWe({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=H$({source:e,yamlPath:[n],results:r});if(i)return i}}function H$({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(!Ss.isNode(a))return;let s={source:e,node:a};if(r.type==="MODULE"){let l=bWe({source:e,stepPath:i});return l?H$({source:l,yamlPath:["steps"],results:r.results})??s:s}if(r.type==="CONDITIONAL"){let l=e.doc.getIn([...i,"if","then"],true);return !Ss.isNode(l)||!Ss.isSeq(l)?s:H$({source:e,yamlPath:[...i,"if","then"],results:r.results})??s}return s}function bWe({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=bn__default.resolve(bn__default.dirname(e.filePath),n),i=rk(r);if(i?.doc.get("fileType")===Ue.MODULE_V2)return i}function SWe(e){let t=e.node.range;if(t)return $$(e.source,t[0])}function dne(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(Ss.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 $$(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-cne),i=Math.min(n.length,o+cne),a=String(i).length,s=[];for(let l=r;l<=i;l++){let c=l===o?fWe:gWe;s.push(`${c}${String(l).padStart(a)} | ${n[l-1]??""}`);}return s.join(`
188
188
  `)}function pne(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 mne=new Set;function hne(e,t,o=t){mne.has(o)||(mne.add(o),e.warn(t));}var vWe={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}},AWe={PASSED:"PASS",FAILED:"FAIL",CANCELLED:"CANCEL",RETRYING:"RETRY",RUNNING:"RUNNING",SKIP:"SKIP",RUN:"RUNNING",RETRY:"RETRY"};function DR(e,t,o=0){let n=AWe[e];if(!n)return;let r=nt(t);if(n==="RUNNING")return {badge:r.spinner(o),isTerminal:false};let{glyph:i,isTerminal:a}=vWe[n];return {badge:r.statusGlyph(i),isTerminal:a}}function lr(e,t){return !t.isTTY||t.colorLevel===0?e:`\x1B]8;;${e}\x07${e}\x1B]8;;\x07`}function gne({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 fne(){let e=Woe(),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 Te=lT({app:"cli",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:"3.59.2"});var wWe=5,mT=" ";async function ik({getResults:e,checkDone:t,name:o,timeoutMs:n=18e5}){let r=Date.now(),i=0;for(;Date.now()-r<n;){let a;i>wWe&&(C.error(`Failed to fetch ${o} status too many times.`),process.exit(1));try{a=await e(),i=0;}catch(c){i++,Te.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 yne(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 V$(e){let t=yne(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 pT(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 W$({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}=yne(e),h=et(),g=nt(h),f=(y,b,S,A)=>{C.log(""),C.log(S(` ${b+1}) ${o(y)}`)),C.log(""),A();let E=n(y);E&&(C.log(""),C.log(`${mT}${lr(E,h)}`));};sne(()=>{u.forEach((I,_)=>{f(I,_,g.red,()=>r?.(I));}),d.forEach((I,_)=>{f(I,u.length+_,g.yellow,()=>{let P=i?.(I)??"Cancelled";C.log(`${mT}${g.yellow(P)}`);});});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 A=S.length>0?` (${S.join(", ")})`:"",E=RWe(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${A}`)));let w=e.length+(s??0),O=(I,_)=>` ${g.dim(I.padEnd(8))} ${_}`;C.log(""),C.log(O("Tests",`${R.join(g.dim(" | "))} ${g.dim(`(${w})`)}`)),C.log(O("Duration",`${b}s${g.dim(E)}`)),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}${lr("https://momentic.ai/docs/reliability/auto-heal",h)}`)}`)),fne();});}function ak(e){return W$(e),V$(e.results)}function RWe(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 sk(e){if(!e.failureDetails||!e.failureReason)return;let t=Ju({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=et(),i=nt(r);C.log(`${mT}${i.bold(i.red(o))}`),n&&n!==o&&(C.log(""),C.log(i.dim(pne(n,mT))));let a=une({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(`${mT}${i.dim("Sources")}`);for(let l of s)C.log(`${mT} ${i.dim(`[${l.refId}]`)} ${l.title}`);}}var hT=" ".repeat(6);var CWe=(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);!IWe(r,i)&&n||Object.defineProperty(e,o,i);},IWe=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)},xWe=(e,t)=>{let o=Object.getPrototypeOf(t);o!==Object.getPrototypeOf(e)&&Object.setPrototypeOf(e,o);},_We=(e,t)=>`/* Wrapped ${e}*/
190
+ `)}var mne=new Set;function hne(e,t,o=t){mne.has(o)||(mne.add(o),e.warn(t));}var vWe={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}},AWe={PASSED:"PASS",FAILED:"FAIL",CANCELLED:"CANCEL",RETRYING:"RETRY",RUNNING:"RUNNING",SKIP:"SKIP",RUN:"RUNNING",RETRY:"RETRY"};function DR(e,t,o=0){let n=AWe[e];if(!n)return;let r=nt(t);if(n==="RUNNING")return {badge:r.spinner(o),isTerminal:false};let{glyph:i,isTerminal:a}=vWe[n];return {badge:r.statusGlyph(i),isTerminal:a}}function lr(e,t){return !t.isTTY||t.colorLevel===0?e:`\x1B]8;;${e}\x07${e}\x1B]8;;\x07`}function gne({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 fne(){let e=Woe(),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 Te=lT({app:"cli",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:"3.59.3"});var wWe=5,mT=" ";async function ik({getResults:e,checkDone:t,name:o,timeoutMs:n=18e5}){let r=Date.now(),i=0;for(;Date.now()-r<n;){let a;i>wWe&&(C.error(`Failed to fetch ${o} status too many times.`),process.exit(1));try{a=await e(),i=0;}catch(c){i++,Te.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 yne(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 V$(e){let t=yne(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 pT(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 W$({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}=yne(e),h=et(),g=nt(h),f=(y,b,S,A)=>{C.log(""),C.log(S(` ${b+1}) ${o(y)}`)),C.log(""),A();let E=n(y);E&&(C.log(""),C.log(`${mT}${lr(E,h)}`));};sne(()=>{u.forEach((I,_)=>{f(I,_,g.red,()=>r?.(I));}),d.forEach((I,_)=>{f(I,u.length+_,g.yellow,()=>{let P=i?.(I)??"Cancelled";C.log(`${mT}${g.yellow(P)}`);});});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 A=S.length>0?` (${S.join(", ")})`:"",E=RWe(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${A}`)));let w=e.length+(s??0),O=(I,_)=>` ${g.dim(I.padEnd(8))} ${_}`;C.log(""),C.log(O("Tests",`${R.join(g.dim(" | "))} ${g.dim(`(${w})`)}`)),C.log(O("Duration",`${b}s${g.dim(E)}`)),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}${lr("https://momentic.ai/docs/reliability/auto-heal",h)}`)}`)),fne();});}function ak(e){return W$(e),V$(e.results)}function RWe(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 sk(e){if(!e.failureDetails||!e.failureReason)return;let t=Ju({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=et(),i=nt(r);C.log(`${mT}${i.bold(i.red(o))}`),n&&n!==o&&(C.log(""),C.log(i.dim(pne(n,mT))));let a=une({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(`${mT}${i.dim("Sources")}`);for(let l of s)C.log(`${mT} ${i.dim(`[${l.refId}]`)} ${l.title}`);}}var hT=" ".repeat(6);var CWe=(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);!IWe(r,i)&&n||Object.defineProperty(e,o,i);},IWe=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)},xWe=(e,t)=>{let o=Object.getPrototypeOf(t);o!==Object.getPrototypeOf(e)&&Object.setPrototypeOf(e,o);},_We=(e,t)=>`/* Wrapped ${e}*/
191
191
  ${t}`,PWe=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),OWe=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),kWe=(e,t,o)=>{let n=o===""?"":`with ${o.trim()}() `,r=_We.bind(null,n,t.toString());Object.defineProperty(r,"name",OWe);let{writable:i,enumerable:a,configurable:s}=PWe;Object.defineProperty(e,"toString",{value:r,writable:i,enumerable:a,configurable:s});};function q$(e,t,{ignoreNonConfigurable:o=false}={}){let{name:n}=e;for(let r of Reflect.ownKeys(t))CWe(e,t,r,o);return xWe(e,t),kWe(e,t,n),e}var lk=new WeakMap,bne=(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(lk.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 q$(i,e),lk.set(i,n),i};bne.callCount=e=>{if(!lk.has(e))throw new Error(`The given function \`${e.name}\` is not wrapped by the \`onetime\` package`);return lk.get(e)};var Sne=bne;var oy=[];oy.push("SIGHUP","SIGINT","SIGTERM");process.platform!=="win32"&&oy.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&oy.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var ck=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",K$=Symbol.for("signal-exit emitter"),Y$=globalThis,MWe=Object.defineProperty.bind(Object),J$=class{emitted={afterExit:false,exit:false};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(Y$[K$])return Y$[K$];MWe(Y$,K$,{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}},uk=class{},LWe=e=>({onExit(t,o){return e.onExit(t,o)},load(){return e.load()},unload(){return e.unload()}}),X$=class extends uk{onExit(){return ()=>{}}load(){}unload(){}},Q$=class extends uk{#n=Z$.platform==="win32"?"SIGINT":"SIGHUP";#t=new J$;#e;#i;#m;#o={};#a=false;constructor(t){super(),this.#e=t,this.#o={};for(let o of oy)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(!ck(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 oy)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,oy.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 ck(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"&&ck(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)}},Z$=globalThis.process,{onExit:Tne}=LWe(ck(Z$)?new Q$(Z$):new X$);var vne=pu.stderr.isTTY?pu.stderr:pu.stdout.isTTY?pu.stdout:void 0,NWe=vne?Sne(()=>{Tne(()=>{vne.write("\x1B[?25h");},{alwaysLast:true});}):()=>{},Ane=NWe;var mk=false,gT={};gT.show=(e=pu.stderr)=>{e.isTTY&&(mk=false,e.write("\x1B[?25h"));};gT.hide=(e=pu.stderr)=>{e.isTTY&&(Ane(),mk=true,e.write("\x1B[?25l"));};gT.toggle=(e,t)=>{e!==void 0&&(mk=e),mk?gT.show(t):gT.hide(t);};var eG=gT;var BR=uz(tG());function oG(){return pu.platform!=="win32"?pu.env.TERM!=="linux":!!pu.env.CI||!!pu.env.WT_SESSION||!!pu.env.TERMINUS_SUBLIME||pu.env.ConEmuTask==="{cmd::Cmder}"||pu.env.TERM_PROGRAM==="Terminus-Sublime"||pu.env.TERM_PROGRAM==="vscode"||pu.env.TERM==="xterm-256color"||pu.env.TERM==="alacritty"||pu.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var FWe={info:cc.blue("\u2139"),success:cc.green("\u2714"),warning:cc.yellow("\u26A0"),error:cc.red("\u2716")},BWe={info:cc.blue("i"),success:cc.green("\u221A"),warning:cc.yellow("\u203C"),error:cc.red("\xD7")},UWe=oG()?FWe:BWe,FR=UWe;function nG({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 zWe=nG();function rG(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return !e.includes("\x1B")&&!e.includes("\x9B")?e:e.replace(zWe,"")}function iG({stream:e=process.stdout}={}){return !!(e&&e.isTTY&&process.env.TERM!=="dumb"&&!("CI"in process.env))}function aG(){let{env:e}=pu,{TERM:t,TERM_PROGRAM:o}=e;return pu.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 jWe=3,sG=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(){pu.platform==="win32"||!pu.stdin.isTTY||(pu.stdin.setRawMode(true),pu.stdin.on("data",this.#i),pu.stdin.resume());}#e(){pu.stdin.isTTY&&(pu.stdin.off("data",this.#i),pu.stdin.pause(),pu.stdin.setRawMode(false));}#i(t){t[0]===jWe&&pu.emit("SIGINT");}},HWe=new sG,lG=HWe;uz(tG());var cG=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:pu.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:iG({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,pu.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(!aG())this.#a=BR.default.line;else if(t===void 0)this.#a=BR.default.dots;else if(t!=="default"&&BR.default[t])this.#a=BR.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 rG(r).split(`
192
192
  `))this.#e+=Math.max(1,Math.ceil($pe(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=cc[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&&eG.hide(this.#r),this.#o.discardStdin&&pu.stdin.isTTY&&(this.#t=true,lG.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&&eG.show(this.#r),this.#o.discardStdin&&pu.stdin.isTTY&&this.#t&&(lG.stop(),this.#t=false),this):this}succeed(t){return this.stopAndPersist({symbol:FR.success,text:t})}fail(t){return this.stopAndPersist({symbol:FR.error,text:t})}warn(t){return this.stopAndPersist({symbol:FR.warning,text:t})}info(t){return this.stopAndPersist({symbol:FR.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+`
@@ -260,7 +260,7 @@ ${z.prettifyError(s)}`:`: ${H(s)}`;C.warn(`Project config at ${e} does not match
260
260
  ${r.map(i=>i.configFilePath).join(`
261
261
  `)}`);if(r.length===0)throw new de(`No valid Momentic project file (${Xs}) 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 ${Xs}.`);return C.debug(`Found valid project configuration at ${r[0].configFilePath}`),r[0]}async function x4e(e){let t=C4e(e);if(!t||!t.projects||!t.projects.length)return;let o=t.projects.map(a=>(a.endsWith("/")||(a+="/"),`${a}*${Xs}`)),n=AbortSignal.timeout(2e3),r;try{r=await Nd(o,{cwd:cwd(),maxDepth:JT,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 ${gC} is misconfigured.`),a}let i=[];for(let a of r){let s=bn__default.join(cwd(),a),l=T1(s);l&&i.push({configFilePath:s,config:l,rootDir:dirname(s)});}return i}async function v1(e,t){if(e){e=bn__default.resolve(e);let n=T1(e);if(!n){if(!t)throw new de(`No valid Momentic project file found at ${e}.`);return console.error(`No valid Momentic project file found at ${e}.`),[]}return [{config:n,configFilePath:e,rootDir:bn__default.dirname(e)}]}if(existsSync(gC)){let n=await x4e(gC);if(n)return n}return I4e()}function Sy(e,t){let o=Ss.stringify(e);writeFileSync(t,o);}var _4e={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"},P4e=[" Store a separate step cache per environment. See https://momentic.ai/docs/reliability/step-cache"," isolateCachesByEnvironment: true"].join(`
262
262
  `),O4e=[" 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(`
263
- `);function ig(e,t,{commentBefore:o,comment:n}){let r=e.items.find(i=>Ss.isPair(i)&&Ss.isScalar(i.key)&&i.key.value===t);if(r&&(o!==void 0&&Ss.isScalar(r.key)&&(r.key.commentBefore=o),n!==void 0)){let i=r.value;(Ss.isMap(i)||Ss.isSeq(i)||Ss.isScalar(i))&&(i.comment=n);}}function Use(e){let t=new Ss.Document(e);if(!Ss.isMap(t.contents))return t.toString();let o=true;for(let a of t.contents.items){if(!Ss.isPair(a)||!Ss.isScalar(a.key))continue;let s=a.key.value,l=Object.entries(_4e).find(([c])=>c===s)?.[1];l!==void 0&&(a.key.commentBefore=l),a.key.spaceBefore=!o,o=false;}ig(t.contents,"advanced",{comment:P4e}),ig(t.contents,"browser",{comment:O4e});let n=t.get("advanced");Ss.isMap(n)&&ig(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");Ss.isMap(r)&&(ig(r,"autoExpandIframes",{commentBefore:" Let the AI act on elements inside iframes. See https://momentic.ai/docs/configuration/browser#browser-autoexpandiframes"}),ig(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 Ss.isMap(i)&&(ig(i,"useMemory",{commentBefore:" Reuse decisions from past runs so the AI picks the same elements and assertions. See https://momentic.ai/docs/ai/memory"}),ig(i,"failureRecovery",{commentBefore:" Let the AI find a path forward when a step fails. See https://momentic.ai/docs/reliability/auto-maintenance#failure-recovery"}),ig(i,"agentConfig",{commentBefore:" Version of each AI agent. See https://momentic.ai/docs/ai/agents"})),t.toString()}var Be="v1",A1="cli",Ty="3.59.2";var M4e=9e4,L4e=3,N4e=1500,D4e=15e3,F4e=6e4,Mo=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;}},E1=class extends de{constructor(t,o={}){super(t,o),this.name="RateLimitExceededError";}},w1=class extends de{constructor(t,o={}){super(t,o),this.name="PlanLimitExceededError";}},fC=class extends de{constructor(t,o={}){super(t,o),this.name="AuthenticationError";}};function B4e(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 U4e(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 R1=class{baseUrl;logger;constructor(t){this.baseUrl=t.baseUrl,this.logger=t.logger;}getHeaders(t){let o={"Content-Type":"application/json"};return (o[EO]=Ty),(o[Yee]=A1),o}async sendRequest(t,o){let{retries:n=L4e,requestTimeoutMs:r=M4e,initialRetryDelayMs:i=N4e,maxRetryDelayMs:a=D4e,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 Mo&&m.status===429?m:void 0;if(m instanceof Mo&&!p&&m.status>=400&&m.status<500)throw m.status===402?new w1(m.rawError,{cause:m}):m.status===401||m.status===403?new fC(m.rawError,{cause:m}):m;if(m instanceof Mo&&m.status===Xee)throw m;if(m instanceof Error&&m.name==="AbortError"&&!o.signal?.aborted&&(u=new oa),p&&(l===0||o.signal?.aborted))throw new E1(`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),F4e)),await wk(g,o.signal),o.signal?.aborted)throw u}throw u?(this.logger.warn({...d,err:u},"Got fatal error response from Momentic server"),u):new Error(`Refusing to send ${o.method} ${t}: retries was ${c}, so no request was attempted.`)}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 U4e(d);throw new Mo(d.status,g,`Request to ${o.method} ${t} failed with status ${d.status}: ${g}`,{code:h,retryAfterMs:B4e(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);}}};function z4e(e){try{validateHeaderValue("Authorization",e);}catch(t){throw new de("Your Momentic API key contains a character that cannot be sent over HTTP. Copy the full key from https://app.momentic.ai/settings/api-keys and set MOMENTIC_API_KEY again.",{cause:t})}}var Ts=class extends R1{apiKey;mode;runner;constructor(t){super(t),z4e(t.apiKey),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}`,[Kee]:this.mode,[wO]:this.runner}}};var DM=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 C1(e){}function zse(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=C1,onError:o=C1,onRetry:n=C1,onComment:r}=e,i="",a=true,s,l="",c="";function u(g){let f=a?g.replace(/^\xEF\xBB\xBF/,""):g,[y,b]=j4e(`${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
+ `);function ig(e,t,{commentBefore:o,comment:n}){let r=e.items.find(i=>Ss.isPair(i)&&Ss.isScalar(i.key)&&i.key.value===t);if(r&&(o!==void 0&&Ss.isScalar(r.key)&&(r.key.commentBefore=o),n!==void 0)){let i=r.value;(Ss.isMap(i)||Ss.isSeq(i)||Ss.isScalar(i))&&(i.comment=n);}}function Use(e){let t=new Ss.Document(e);if(!Ss.isMap(t.contents))return t.toString();let o=true;for(let a of t.contents.items){if(!Ss.isPair(a)||!Ss.isScalar(a.key))continue;let s=a.key.value,l=Object.entries(_4e).find(([c])=>c===s)?.[1];l!==void 0&&(a.key.commentBefore=l),a.key.spaceBefore=!o,o=false;}ig(t.contents,"advanced",{comment:P4e}),ig(t.contents,"browser",{comment:O4e});let n=t.get("advanced");Ss.isMap(n)&&ig(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");Ss.isMap(r)&&(ig(r,"autoExpandIframes",{commentBefore:" Let the AI act on elements inside iframes. See https://momentic.ai/docs/configuration/browser#browser-autoexpandiframes"}),ig(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 Ss.isMap(i)&&(ig(i,"useMemory",{commentBefore:" Reuse decisions from past runs so the AI picks the same elements and assertions. See https://momentic.ai/docs/ai/memory"}),ig(i,"failureRecovery",{commentBefore:" Let the AI find a path forward when a step fails. See https://momentic.ai/docs/reliability/auto-maintenance#failure-recovery"}),ig(i,"agentConfig",{commentBefore:" Version of each AI agent. See https://momentic.ai/docs/ai/agents"})),t.toString()}var Be="v1",A1="cli",Ty="3.59.3";var M4e=9e4,L4e=3,N4e=1500,D4e=15e3,F4e=6e4,Mo=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;}},E1=class extends de{constructor(t,o={}){super(t,o),this.name="RateLimitExceededError";}},w1=class extends de{constructor(t,o={}){super(t,o),this.name="PlanLimitExceededError";}},fC=class extends de{constructor(t,o={}){super(t,o),this.name="AuthenticationError";}};function B4e(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 U4e(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 R1=class{baseUrl;logger;constructor(t){this.baseUrl=t.baseUrl,this.logger=t.logger;}getHeaders(t){let o={"Content-Type":"application/json"};return (o[EO]=Ty),(o[Yee]=A1),o}async sendRequest(t,o){let{retries:n=L4e,requestTimeoutMs:r=M4e,initialRetryDelayMs:i=N4e,maxRetryDelayMs:a=D4e,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 Mo&&m.status===429?m:void 0;if(m instanceof Mo&&!p&&m.status>=400&&m.status<500)throw m.status===402?new w1(m.rawError,{cause:m}):m.status===401||m.status===403?new fC(m.rawError,{cause:m}):m;if(m instanceof Mo&&m.status===Xee)throw m;if(m instanceof Error&&m.name==="AbortError"&&!o.signal?.aborted&&(u=new oa),p&&(l===0||o.signal?.aborted))throw new E1(`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),F4e)),await wk(g,o.signal),o.signal?.aborted)throw u}throw u?(this.logger.warn({...d,err:u},"Got fatal error response from Momentic server"),u):new Error(`Refusing to send ${o.method} ${t}: retries was ${c}, so no request was attempted.`)}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 U4e(d);throw new Mo(d.status,g,`Request to ${o.method} ${t} failed with status ${d.status}: ${g}`,{code:h,retryAfterMs:B4e(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);}}};function z4e(e){try{validateHeaderValue("Authorization",e);}catch(t){throw new de("Your Momentic API key contains a character that cannot be sent over HTTP. Copy the full key from https://app.momentic.ai/settings/api-keys and set MOMENTIC_API_KEY again.",{cause:t})}}var Ts=class extends R1{apiKey;mode;runner;constructor(t){super(t),z4e(t.apiKey),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}`,[Kee]:this.mode,[wO]:this.runner}}};var DM=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 C1(e){}function zse(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=C1,onError:o=C1,onRetry:n=C1,onComment:r}=e,i="",a=true,s,l="",c="";function u(g){let f=a?g.replace(/^\xEF\xBB\xBF/,""):g,[y,b]=j4e(`${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}
264
264
  `;break;case "id":s=f.includes("\0")?void 0:f;break;case "retry":/^\d+$/.test(f)?n(parseInt(f,10)):o(new DM(`Invalid \`retry\` value: "${f}"`,{type:"invalid-retry",value:f,line:y}));break;default:o(new DM(`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(`
265
265
  `)?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 j4e(e){let t=[],o="",n=0;for(;n<e.length;){let r=e.indexOf("\r",n),i=e.indexOf(`
266
266
  `,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]===`
@@ -330,7 +330,7 @@ ${s}
330
330
  `,xZe=1e4,_Ze=6e4,vde=x__default.object({stream:x__default.boolean().optional(),type:x__default.literal("response.create").optional()}).passthrough(),PZe=vde.extend({stream:x__default.literal(true)});function Ade(e={}){let t=new _2(e),o=e.fetch??fetch;return async(n,r)=>{if(!kZe(n,r))return o(n,r);let i=await OZe(r?.body);if(!i)return o(n,r);let a=PZe.safeParse(i);return a.success?t.fetch({httpUrl:Ede(n),init:r,request:a.data}):o(n,r)}}var _2=class{constructor(t){this.options=t;this.compactionState=t.compactionState;}websocket;openPromise;latestResponseId;previousFullInput;pendingRequest;observedCompactionItems=new Set;compactionState;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 pe({name:"openai.responses_websocket.fetch.started",attributes:r,fn:async()=>{}});let i=await pe({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,compactionItem:void 0};this.pendingRequest=l;let c={"momentic.websocket_ready_state":i.readyState};await pe({name:"openai.responses_websocket.send.started",attributes:c,fn:async()=>{}}),await pe({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===x2.OPEN?this.websocket:this.openPromise?this.openPromise:(this.openPromise=new Promise((n,r)=>{let i=new x2(MZe(t),{headers:{...Tde(o?.headers),...Tde(this.options.getHeaders?.({httpUrl:t,init:o}))}}),a=setTimeout(()=>{i.terminate(),r(new Error("Timed out opening OpenAI responses websocket"));},xZe);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(),pe({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:ui(r)});}}buildPayload(t){let{background:o,stream:n,...r}=t,i={...r,type:"response.create"};LZe({payload:i,compactThreshold:this.options.compactThreshold});let a=Array.isArray(t.input)?t.input:void 0,s=this.latestResponseId&&a&&this.previousFullInput?gde({currentInput:a,previousInput:this.previousFullInput}):void 0;if(s&&s.length>0)return i.input=s,i.previous_response_id=this.latestResponseId,i;let l=this.compactionState&&a?dv({currentInput:a,state:this.compactionState}):void 0;return this.compactionState&&!l&&(this.compactionState=void 0,this.options.onCompactionStateChange?.(void 0)),l&&(i.input=l),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=DZe(t),i;try{i=JSON.parse(r);}catch(l){this.failPendingRequest({pendingRequest:o,err:ui(l)});return}let a=G8.safeParse(i),s=a.success?a.data:void 0;if(NZe(s)&&o.sentContinuation&&!o.startedStreaming&&!o.retryingFullContext&&this.websocket?.readyState===x2.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,gL(i)){let l=fL(i);l&&(o.compactionItem=l);let c=hde(i),u=c??"compaction-without-id",d=this.options.compactThreshold;d!==void 0&&!this.observedCompactionItems.has(u)&&(this.observedCompactionItems.add(u),this.options.onCompaction?.({compactThreshold:d,itemId:c,transport:"websocket"}));}else o.controller.enqueue(FZe(i));if(s?.type==="response.completed"){let l=Array.isArray(o.fullRequest.input)?o.fullRequest.input:void 0;o.compactionItem&&l&&(this.compactionState=Py({input:l,item:o.compactionItem}),this.options.onCompactionStateChange?.(this.compactionState)),this.latestResponseId=s.response.id,this.previousFullInput=l,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(IZe)),o.controller.close(),this.pendingRequest=void 0,pe({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??_Ze;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`)}),pe({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 OZe(e){let t=await yL(e);if(!t)return;let o=vde.safeParse(JSON.parse(t));return o.success?o.data:void 0}function kZe(e,t){return (t?.method??(e instanceof Request?e.method:"GET")).toUpperCase()==="POST"&&Ede(e).endsWith("/responses")}function Ede(e){return e instanceof Request?e.url:e.toString()}function MZe(e){let t=new URL(e);return t.protocol=t.protocol==="https:"?"wss:":"ws:",t.toString()}function Tde(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 LZe({payload:e,compactThreshold:t}){t&&(e.context_management=[{type:"compaction",compact_threshold:t}]);}function NZe(e){return e?.type==="error"&&e.code==="previous_response_not_found"}function DZe(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 FZe(e){return new TextEncoder().encode(`data: ${JSON.stringify(e)}
331
331
 
332
332
  `)}function P2(e){return {specificationVersion:e.specificationVersion,provider:e.provider,modelId:e.modelId,supportedUrls:e.supportedUrls,doGenerate:t=>e.doGenerate(wde(t)),doStream:t=>e.doStream(wde(t))}}function wde(e){return {...e,providerOptions:{...e.providerOptions,openai:{...e.providerOptions?.openai,store:false}}}}function vL(e){return async(t,o)=>{let n=zZe(o?.body);if(!n)return fetch(t,o);let r=e?.priorityServiceTier===true,i=e?.promptCacheKey;n.store=false,UZe(n),r&&(n.service_tier="priority"),i&&(n.prompt_cache_key=i);let a=await fetch(t,{...o,body:JSON.stringify(n)});return jZe({capturePath:e?.requestCapturePath,input:t,status:a.status,body:n}),a}}function UZe(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 zZe(e){if(typeof e=="string")try{let t=JSON.parse(e);return Rde(t)?t:void 0}catch{return}}function jZe({capturePath:e,input:t,status:o,body:n}){e&&appendFileSync(e,`${JSON.stringify({url:$Ze(t),status:o,request:HZe(n)})}
333
- `);}function HZe(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:Rde(t)?{effort:t.effort}:void 0,hasInput:!!e.input,toolsCount:Array.isArray(e.tools)?e.tools.length:0}}function Rde(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function $Ze(e){return typeof e=="string"?e:e instanceof URL?e.toString():e.url}var GZe=3e5;function AL(e){let t=e.split("/").at(-1)??e;return t.startsWith("grok-4.5")||t.startsWith("grok-4.6")}var VZe=z.object({input:z.array(z.custom()),instructions:z.unknown().optional(),model:z.string(),tools:z.unknown().optional()}).passthrough(),WZe=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 Cde(e={}){let t=e.compactThreshold??GZe,o=vL(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=VZe.safeParse(c);if(!u.success)return o(r,i);let d=u.data.input,m=n?dv({currentInput:d,state:n}):void 0;n&&!m&&(n=void 0);let p=m??d;if((m&&n?n.outputTokens:0)+xt({input:m?m.slice(1):d,instructions:u.data.instructions,tools:u.data.tools})>=t){let g=await qZe({url:s,init:i,model:u.data.model,providerInput:p});if(g){let f=g.output[0];n={...Py({input: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 qZe({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=WZe.safeParse(i);return a.success?a.data:void 0}var JZe="MOMENTIC_OPENAI_RESPONSES_WEBSOCKET_COMPACT_THRESHOLD";function gg(e){let{apiKey:t,sessionId:o,loggerTags:n,runner:r,parentTraceId:i}=e,a={Authorization:`Bearer ${t}`,[EO]:Ty,...o&&{[Jee]:o},...r&&{[wO]:r},...i&&{[Qee]:i},...n&&{[RO]: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 Ide="bedrock/",xde="azure/",_de="anthropic/",Pde=e=>t=>{let o=gg(e),n=t,r=`${e.baseUrl}/v1/llm/anthropic/${encodeURIComponent(t)}`;return t.startsWith(Ide)?r=`${e.baseUrl}/v1/llm/provider/bedrock/anthropic/${encodeURIComponent(t.slice(Ide.length))}`:t.startsWith(xde)?r=`${e.baseUrl}/v1/llm/provider/foundry/anthropic/${encodeURIComponent(t.slice(xde.length))}`:t.startsWith(_de)&&(n=t.slice(_de.length),r=`${e.baseUrl}/v1/llm/provider/anthropic/${encodeURIComponent(n)}`),createAnthropic({baseURL:r,headers:o,apiKey:e.apiKey})(n)},Ode=e=>t=>{let o=gg(e),n=e.useOpenAIResponsesWebSocket??false,r=n?e.openAIResponsesWebSocketCompactThreshold??XZe(process.env[JZe])??SL(t):e.openAIResponsesCompactThreshold??SL(t),i=a=>e.onOpenAINativeCompaction?.({...a,model:t});return P2(lv({baseURL:`${e.baseUrl}/v1/llm/provider/openai/${t}`,headers:o,apiKey:e.apiKey,fetch:n?Ade({compactThreshold:r,onCompaction:i}):I2({compactThreshold:r,onCompaction:i})})(t))},kde=e=>t=>{let o=gg(e),n=vL(e.xai);return AL(t)&&(n=Cde({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)},Mde=e=>t=>{let o=gg(e);return P2(lv({baseURL:`${e.baseUrl}/v1/llm/provider/azure/${t}`,headers:o,apiKey:e.apiKey,fetch:I2({compactThreshold:e.openAIResponsesCompactThreshold??SL(t),onCompaction:n=>e.onOpenAINativeCompaction?.({...n,model:t})})})(t))};function Lde(e){return t=>o=>{let n=gg(t);return lv({baseURL:`${t.baseUrl}/v1/llm/provider/${e}/${o}`,headers:n,apiKey:t.apiKey}).chat(o)}}var Nde=Lde("azure/deepseek"),Dde=Lde("azure/kimi"),Fde=e=>t=>{let o=gg(e);return lv({baseURL:`${e.baseUrl}/v1/llm/provider/fireworks`,headers:o,apiKey:e.apiKey}).chat(t)},Bde=e=>t=>{let o=gg(e);return C2({baseURL:`${e.baseUrl}/v1/llm/provider/openrouter`,headers:o,apiKey:e.apiKey,compatibility:"strict"}).chat(t)},Ude=e=>t=>{let o=gg(e);return K1({baseURL:`${e.baseUrl}/v1/llm/provider/vertex`,headers:o,apiKey:e.apiKey})(t)};function XZe(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function zde(e){let t=bt.safeParse(e[a$]);return delete e[a$],t.success?t.data:void 0}var kr=class extends Ts{agentConfig;apiPathPrefix;supportsAiActionTurbo;constructor(t,o){let n={...uh,...t};N_(n),super(o),this.apiPathPrefix=o.apiPathPrefix??`/${Be}`,this.agentConfig=n,this.supportsAiActionTurbo=o.supportsAiActionTurbo??false;}getAgentConfig(){return this.agentConfig}async compactConversationNonNative(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/llm/compact`,{method:"POST",body:{...e7e(t),sessionId:o.sessionId,parentTraceId:o.parentTraceId},signal:o.abortSignal,retries:1,requestTimeoutMs:15e3,extraHeaders:{[RO]:JSON.stringify(O2(o))}});return vX.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 gQ.parse(r)}async rankChunksWithRag(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:Ty,...t},signal:o.abortSignal});return hQ.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=zde(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(),tte.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=zde(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(),s$.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 ete.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 s$.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 Zee.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 yj.parse(n)}async getAiActionTurboDecision(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/ai-action/turbo-decision`,{method:"POST",body:{...t,loggerTags:o.loggerTags},signal:o.abortSignal,requestTimeoutMs:3e3,retries:1});return G6.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 ote.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 fj.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 SX.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 TX.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 RE.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 xQ.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 hX.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 yX.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 fX.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 M9.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 MO.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 W6.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(Pde,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 Ode({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:O2(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(kde,t,{onXAINativeCompaction:r=>{o.info({promptType:n,nativeCompaction:r},"Native conversation compaction completed");}})}getOpenRouterModelFactory(t){return this.buildModelFactory(Bde,t)}getAzureOpenAIModelFactory(t){let{logger:o,streamType:n}=t;return this.buildModelFactory(Mde,t,{onOpenAINativeCompaction:r=>{o.info({promptType:n,nativeCompaction:r},"Native conversation compaction completed");}})}getAzureDeepSeekModelFactory(t){return this.buildModelFactory(Nde,t)}getAzureKimiModelFactory(t){return this.buildModelFactory(Dde,t)}getFireworksModelFactory(t){return this.buildModelFactory(Fde,t)}getVertexGeminiModelFactory(t){return this.buildModelFactory(Ude,t)}buildModelFactory(t,o,n){let{sessionId:r,parentTraceId:i,xai:a}=o;return t({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:O2(o),sessionId:r,runner:this.runner,parentTraceId:i,xai:a,...n})}};function O2(e){return {...So(e.logger),agentInvocationId:e.agentInvocationId,promptType:e.streamType}}function e7e(e){return {...e,messages:e.messages.map(k2)}}function k2(e){return e instanceof Uint8Array||e instanceof ArrayBuffer?Buffer.from(e).toString("base64"):e instanceof URL?e.toString():Array.isArray(e)?e.map(k2):typeof e!="object"||e===null?e:Object.fromEntries(Object.entries(e).map(([t,o])=>[t,k2(o)]))}async function EL(e,t,o){let{size:n}=await mn__default.promises.stat(o),r=new URL(e),i=t==="application/zip"?AbortSignal.timeout(Ok(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=mn__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,A=S===204||S===205||S===304;if(y&&S>=200&&S<300&&!A){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 E=[];f.on("data",R=>E.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[O,I]of Object.entries(f.headers))if(Array.isArray(I))for(let _ of I)R.append(O,_);else I!==void 0&&R.set(O,I);let w=A?null:Buffer.concat(E);u.then(()=>{try{s(new Response(w,{headers:R,status:S,statusText:f.statusMessage}));}catch(O){l(O);}});});});}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 Hde(e,t,o,n){return fetch(e,{method:"PUT",body:o,signal:n,headers:{"Content-Type":t}})}var n7e=2e3,Bt=class extends Ts{apiPathPrefix;constructor(t){super(t),this.apiPathPrefix=t.apiPathPrefix??`/${Be}`;}getAppUrl(){return rT(this.baseUrl)}limbarPath(t){return `${this.apiPathPrefix}/limbar/${t}`}async getAuthInfo(){let t;try{t=await this.sendRequest(`/${Be}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3});}catch(o){throw o instanceof fC?new de(`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 Mo?o.status>=400&&o.status<500?new de(o.rawError,{cause:o}):new Error(`Momentic server error (HTTP ${o.status}). Please try again in a moment.`,{cause:o}):o instanceof de?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 fte.parse(t)}async getFeatureFlags(){let t=await this.sendRequest(`/${Be}/auth/flags`,{method:"GET",retries:1,requestTimeoutMs:5e3});return Ste.parse(t)}async getCliAnnouncements(){let t=await this.sendRequest(`/${Be}/announcements`,{method:"GET",retries:1,requestTimeoutMs:5e3});return v9.parse(t).announcements}async createMoSessionUpload(t,o){let n;try{n=await this.sendRequest(`/${Be}/mo/sessions/${encodeURIComponent(t)}/uploads`,{method:"POST",body:o,retries:3,requestTimeoutMs:15e3});}catch(r){throw r instanceof Mo&&r.status===404?new de(`Mo session ${t} was not found.`,{cause:r}):r}return IZ.parse(n)}async createMoSessionDownload(t,o,n){let r;try{r=await this.sendRequest(`/${Be}/mo/sessions/${encodeURIComponent(t)}/downloads`,{method:"POST",body:o,retries:3,requestTimeoutMs:15e3,signal:n});}catch(i){throw i instanceof Mo&&i.status===404?new de(i.rawError,{cause:i}):i}return CZ.parse(r)}async listProductUpdates(t=3){let o=await this.sendRequest(`/${Be}/product-updates?limit=${t}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return Wte.parse(o).updates}async getQuotaStatus(){let t=await this.sendRequest(`/${Be}/billing/check-quota`,{method:"GET",retries:3,requestTimeoutMs:5e3});return yte.parse(t)}async createRemoteBrowserConnection(t){let o=await this.sendRequest(`/${Be}/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 zte.parse(o)}async tryCreateBrowserFleetAccessToken(t,o){let n;try{n=await this.sendRequest(`/${Be}/browsers/token`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4,signal:o});}catch(i){if(i instanceof Mo&&(i.status===400||i.status===404||i.status===409))return null;throw i}let r=Ute.parse(n);return "network"in r?r:null}async bulkGetRunStatus(t){let o=await this.sendRequest(`/${Be}/runs/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return mte.parse(o)}async getOrgLevelFailureRate(t){let o=t?`?environment=${encodeURIComponent(t)}`:"",n=await this.sendRequest(`/${Be}/org-level-failure-rate${o}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return MO.parse(n)}async recordRunOutcomeForFailureRate(t){await this.sendRequest(`/${Be}/org-level-failure-rate`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});}async getRunExport(t,o){let n=await this.sendRequest(`/${Be}/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4,signal:o});return IO.parse(n)}submitInteractiveAgentFeedback(t){try{this.sendRequest(`/${Be}/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(`/${Be}/result-classification-cache`,{method:"POST",body:t,retries:1,requestTimeoutMs:1e4});return ioe.parse(o)}async createResultClassificationCacheEntries(t){await this.sendRequest(`/${Be}/result-classification-cache`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:1e4});}async createAiTriageMetrics(t){await this.sendRequest(`/${Be}/ai-triage-metrics`,{method:"POST",body:t,retries:1,requestTimeoutMs:3e3});}async getAiTriageExistingFixes(t){let o=await this.sendRequest(`/${Be}/ai-triage-metrics/existing-fixes`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});return q8.parse(o)}async saveRunClassification(t,o){await this.sendRequest(`/${Be}/runs/${encodeURIComponent(t)}/classification`,{method:"PATCH",body:o,retries:3,requestTimeoutMs:1e4});}async uploadRunHealTraceZip(t,o){let n=await this.sendRequest(`/${Be}/runs/${encodeURIComponent(t)}/heal-trace/upload-url`,{method:"POST",retries:3,requestTimeoutMs:1e4}),{uploadUrl:r}=xO.parse(n),i=await Hde(r,"application/zip",o,AbortSignal.timeout(Ok(o.byteLength)));if(!i.ok)throw new Error(`Failed to upload heal trace: ${await i.text()}`)}async saveRunHealMetadataBatch(t){await this.sendRequest(`/${Be}/runs/heal-metadata`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:1e4});}async getTestYAMLExport(t){let o=await this.sendRequest(`/${Be}/tests/export`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return rte.parse(o)}async updateStepCaches(t,o){await this.sendRequest(`/${Be}/cache`,{method:"PATCH",body:t,extraHeaders:o,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async updateSnapshotCaches(t,o){await this.sendRequest(`/${Be}/snapshot-cache`,{method:"PATCH",body:t,extraHeaders:o,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getStepCacheForTest(t,o){let n=await this.sendRequest(`/${Be}/cache`,{method:"POST",body:t,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return ate.parse(n)}async getSnapshotCacheForTest(t,o){let n=await this.sendRequest(`/${Be}/snapshot-cache`,{method:"POST",body:t,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return ste.parse(n)}async deleteStepCacheEntry(t,o){await this.sendRequest(`/${Be}/cache/entry`,{method:"DELETE",body:t,extraHeaders:o,retries:3,requestTimeoutMs:1e4});}async getWebStepCacheMemoryTraces(t){let o=await this.sendRequest(`/${Be}/cache/traces`,{method:"POST",body:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return l$.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(`/${Be}/${this.cacheRouteForPlatform(t)}/entry`,{method:"DELETE",body:o,extraHeaders:n,retries:3,requestTimeoutMs:1e4});}async getMobileStepCacheMemoryTraces(t,o){let n=await this.sendRequest(`/${Be}/${this.cacheRouteForPlatform(t)}/traces`,{method:"POST",body:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return l$.parse(n)}async updateMobileStepCaches(t){await this.sendRequest(`/${Be}/${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(`/${Be}/${this.cacheRouteForPlatform(t)}`,{method:"POST",body:o,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return lte[t](r)}async queueTests(t){let o=await this.sendRequest(`/${Be}/tests/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return nte.parse(o)}async uploadScreenshot(t){let o=await this.sendRequest(`/${Be}/screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return gte.parse(o)}async uploadOnDemandScreenshot(t){return await this.sendRequest(`/${Be}/on-demand-screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${Be}/on-demand-screenshots/${t.id}`}}async fetchOnDemandScreenshot(t){let o={};return {data:await this.sendRequest(`/${Be}/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(`/${Be}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return bte.parse(t)}async acquireCacheLock(t,o){let n=await this.sendRequest(`/${Be}/result-cache/lock`,{method:"POST",body:t,signal:o,retries:3,requestTimeoutMs:3e4});return Jte.parse(n)}async releaseCacheLock(t){await this.sendRequest(`/${Be}/result-cache/lock`,{method:"DELETE",body:{key:t},retries:3,requestTimeoutMs:5e3});}async deleteCacheResult(t){await this.sendRequest(`/${Be}/result-cache/entry`,{method:"DELETE",body:t,retries:3,requestTimeoutMs:5e3});}async setCacheResult(t){await this.sendRequest(`/${Be}/result-cache/entry`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:5e3});}async getCacheResult(t){try{return await this.sendRequest(`/${Be}/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(`/${Be}/suites/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return Ate.parse(o)}async bulkGetRunGroupStatus(t){let o={runGroupIds:t},n=await this.sendRequest(`/${Be}/run-groups/status`,{method:"POST",body:o,retries:3,requestTimeoutMs:5e3});return cQ.array().parse(n)}async getRunGroupWithRuns(t){try{let o=await this.sendRequest(`/${Be}/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return kP.parse(o)}catch(o){if(o instanceof Mo&&o.status===404)return null;throw o}}async getRun(t){try{let o=await this.sendRequest(`/${Be}/runs/${encodeURIComponent(t)}/metadata`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ns.parse(o)}catch(o){if(o instanceof Mo&&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(`/${Be}/run-groups/${encodeURIComponent(t)}/runs`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Rte.parse(o)}async updateGithubPRHealRiskSummary(t,o){await this.sendRequest(`/${Be}/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(`/${Be}/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(`/${Be}/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(`/${Be}/test-fragments/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Ete.parse(o)}async patchTestFragment(t,o){await this.sendRequest(`/${Be}/test-fragments/${t}`,{method:"PATCH",body:o,retries:3,requestTimeoutMs:1e4});}async getPastTestResults(t,o){let n=await this.sendRequest(`/${Be}/results/tests/${t}`,{method:"POST",body:o,retries:3,requestTimeoutMs:1e4});return wte.parse(n)}async listRuns(t,o){let n=await this.sendRequest(`/${Be}/results/runs`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4,signal:o});return Cte.parse(n)}async generateTestResultsUploadUrl(){let t=await this.sendRequest(`/${Be}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return Ite.parse(t)}async startProcessingResultsUpload(t,o){let n=await this.sendRequest(`/${Be}/results/uploads/${t}/process`,{method:"POST",body:o,retries:3,requestTimeoutMs:1e4});return xte.parse(n)}async startExploreTraceUpload(t){let o=await this.sendRequest(`/${Be}/explore/trace-uploads`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return foe.parse(o)}async fetchIconKnowledgeBase(t){try{let o=await this.sendRequest(`/${Be}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return loe.parse(o)}catch(o){return t.error({err:o},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(t,o){try{await this.sendRequest(`/${Be}/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(`/${Be}/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+n7e,signal:m});return OX.parse(g)}catch(g){return h.warn({err:g},"Failed to retrieve from knowledge base"),null}}async createKnowledgeItem(t){let o=await this.sendRequest(`/${Be}/knowledge-base/items`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return Cj.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(`/${Be}/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(`/${Be}/git/github/${t}/${o}/compare?${a.toString()}`,{signal:i,method:"GET",retries:3,requestTimeoutMs:5e3});return K9.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(`/${Be}/git/github/${t}/${o}/commits?${a.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Y9.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(`/${Be}/git/github/${t}/${o}/contents?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return J9.parse(a).content??void 0}async getGithubBranchMetadata(t,o,n){let r=new URLSearchParams;r.set("branch",n);let i=await this.sendRequest(`/${Be}/git/github/${t}/${o}/branch-metadata?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return X9.parse(i)}async createGithubPullRequest(t,o,n){let r=await this.sendRequest(`/${Be}/git/github/${t}/${o}/pull-requests`,{method:"POST",body:n,retries:3,requestTimeoutMs:6e4});return B9.parse(r)}async createGithubCommit(t,o,n){let r=await this.sendRequest(`/${Be}/git/github/${t}/${o}/commits`,{method:"POST",body:n,retries:3,requestTimeoutMs:6e4});return U9.parse(r)}async getGithubPullRequestTemplate(t,o){try{let n=await this.sendRequest(`/${Be}/git/github/${t}/${o}/pull-request-template`,{method:"GET",retries:3,requestTimeoutMs:1e4});return eZ.parse(n).template}catch(n){if(n instanceof Mo&&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(`/${Be}/git/github/${t}/${o}/pull-requests?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(a){if(a instanceof Mo&&a.status===404)return;throw a}return V9.parse(i)}async getCommitFromGithub(t,o,n){let r=await this.sendRequest(`/${Be}/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(`/${Be}/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(`/${Be}/git/github/${t}/${o}/collaborator-merge-access`,{method:"POST",body:{usernames:n},retries:3,requestTimeoutMs:15e3});return z9.parse(r).usernamesWithMergeAccess}async searchGithubRelatedPullRequests(t,o,n){let r=await this.sendRequest(`/${Be}/git/github/${t}/${o}/related-pull-requests`,{method:"POST",body:{query:n},retries:2,requestTimeoutMs:6e4});return $9.parse(r)}async getGithubRelatedPullRequestDetails(t,o,n){let r=await this.sendRequest(`/${Be}/git/github/${t}/${o}/related-pull-requests/${n}`,{method:"GET",retries:2,requestTimeoutMs:6e4});return z.object({pullRequest:LH}).parse(r).pullRequest}async getGithubCommitDetails(t,o,n){let r=j9.parse({shas:n}),i=await this.sendRequest(`/${Be}/git/github/${t}/${o}/commit-details`,{method:"POST",body:r,retries:3,requestTimeoutMs:2e4});return H9.parse(i)}async getMergedBranchFromGithub(t,o,n,r){let i=encodeURIComponent(n),a=await this.sendRequest(`/${Be}/git/github/${t}/${o}/${i}/${r}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return g$.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(`/${Be}/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(`/${Be}/git/gitlab/${r}/merge-requests?${n.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(a){if(a instanceof Mo&&a.status===404)return;throw a}return Q9.parse(i)}async getCommitFromGitlab(t,o){let n=encodeURIComponent(t),r=await this.sendRequest(`/${Be}/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(`/${Be}/git/gitlab/${i}/${r}/${n}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return g$.parse(a)}async getAgentConfig(){let t=await this.sendRequest(`/${Be}/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(`/${Be}/org-settings`,{method:"GET",retries:3,requestTimeoutMs:5e3});return KX(t)}catch(t){if(t instanceof Mo&&t.status===404)return this.logger.warn({err:t},"Momentic server does not expose org settings; continuing with local project settings"),OS.parse({});throw t}}async getQuarantinedTests(){let t=await this.sendRequest(`/${Be}/quarantine`,{method:"GET"});return _te.parse(t)}async listQuarantinedTests(t){let o=await this.sendRequest(`/${Be}/quarantine/details`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Pte.parse(o)}async sendExploreSlackNotification(t){await this.sendRequest(`/${Be}/explore/slack-notification`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async recordExplorerSuggestedTests(t){await this.sendRequest(`/${Be}/explore/suggested-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async quarantineTest(t,o,n){await this.sendRequest(`/${Be}/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(`/${Be}/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 kte.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 Lte.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 Nte.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 Dte.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 Mte.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(`/${Be}/logcat/mobile/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return g9.parse(o)}async generateMcpSessionTraceUploadUrl(t){let o=await this.sendRequest(`/${Be}/mcp/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return xO.parse(o)}};async function Oy(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 gp=class{apiClient;constructor(t){this.apiClient=t;}async reportBillableEvents(t,o){await this.apiClient.reportBillableEvents(t,o);}};async function fp({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(A=>A.outcome)),f=r;i==="failure"&&(f="error");let y={cached:n,sessionId:d,agentInvocationId:m},b=_O.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(A=>({event:"ai-triage-test-result",timestamp:h,transactionId:`${p}:test-result:${A.testId}`,properties:_O.parse({...y,runId:A.runId,testId:A.testId,testName:A.testName,aiFeature:"triage",outcome:A.outcome,labels:A.labels})}))];try{await e.reportBillableEvents(t,S);}catch(A){t.warn({err:A,feature:o,cached:n,outcome:f},"Failed to report AI agent invocation");}}var yp=class extends Ts{generator;constructor(t,o){super(t),this.generator=o;}async runTemplateMatching(t,o={}){let n=await this.sendRequest(`/${Be}/web-agent/template-matching`,{method:"POST",body:t,signal:o?.signal});return q6.parse(n)}async constructIframeRegex(t,o={}){return this.generator.getIframeRegex(t,{abortSignal:o.signal,loggerTags:o.loggerTags})}};var pv=class{constructor(t,o){this.client=t;this.orgId=o;}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let t=this.getApiServerUrl();return rT(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 r7e="x-momentic-internal-api-endpoint-secret",wL=class extends Bt{internalHeaders;constructor({internalApiSecret:t,...o}){super(o),this.internalHeaders=t?{[r7e]:t}:{},t&&C.addRedactedValue(t);}async getRunExport(t,o){let n=await this.sendRequest(`/internal/eval/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4,extraHeaders:this.internalHeaders,signal:o});return IO.parse(n)}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 kP.parse(o)}catch(o){if(o instanceof Mo&&o.status===404)return null;throw o}}};var bp="v1",s7e=2e3,$de="sms.lease() and sms.release() are only supported when running tests via the Momentic CLI.",Sp=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}),this.fakerInstance.seed(this.fakerSeed);}async sendSms(t){return this.httpClient.sendRequest(`/${bp}/tools/sms/send`,{method:"POST",body:t}).then(()=>{}).catch(o=>{throw o instanceof Mo?new Error(o.rawError):new Error(`Failed to send sms: ${o.message}`)})}async fetchLatestSms(t){return this.httpClient.sendRequest(`/${bp}/tools/sms/fetchLatest`,{method:"POST",body:t}).catch(o=>{throw o instanceof Mo?new Error(o.rawError):o})}async leasePhoneNumber(t){if(!this.supportsLease)throw new Error($de);let o=await this.httpClient.sendRequest(`/${bp}/tools/sms/lease`,{method:"POST",body:t??{}}).catch(r=>{throw r instanceof Mo?new Error(r.rawError):new Error(`Failed to lease phone number: ${r.message}`)}),n=A9.parse(o);return this.activeLeases.set(n.phoneNumber,{leaseToken:n.leaseToken}),n}async releasePhoneNumber(t){if(!this.supportsLease)throw new Error($de);return this.activeLeases.delete(t.phoneNumber),this.httpClient.sendRequest(`/${bp}/tools/sms/release`,{method:"POST",body:t}).then(()=>{}).catch(o=>{throw o instanceof Mo?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(`/${bp}/tools/sms/release`,{method:"POST",body:{phoneNumber:o,leaseToken:n}}),{milliseconds:s7e,fallback:()=>{}})));}async sendEmail(t){return this.httpClient.sendRequest(`/${bp}/tools/email/send`,{method:"POST",body:t}).then(()=>{}).catch(o=>{throw o instanceof Mo?new Error(o.rawError):new Error(`Failed to send email: ${o.message}`)})}async fetchAllEmails(t){return this.httpClient.sendRequest(`/${bp}/tools/email/fetchAll`,{method:"POST",body:t}).catch(o=>{throw o instanceof Mo?new Error(o.rawError):new Error(`Failed to fetch all emails: ${o.message}`)})}async fetchLatestEmail(t){return this.httpClient.sendRequest(`/${bp}/tools/email/fetchLatest`,{method:"POST",body:t}).catch(o=>{throw o instanceof Mo?new Error(o.rawError):new Error(`Failed to fetch latest emails: ${o.message}`)})}async createEmail(){let t=await this.httpClient.sendRequest(`/${bp}/tools/email/create`,{method:"POST",body:{}}).catch(o=>{throw o instanceof Mo?new Error(o.rawError):new Error(`Failed to create email inbox: ${o.message}`)});return E9.parse(t)}};var hv=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 EL(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 EL(u,c.contentType,c.path);if(!d.ok)throw new Error(`Failed to upload explore video ${c.name}: ${await d.text()}`)}let l=await EL(a,"application/zip",r);if(!l.ok)throw new Error(`Failed to upload explore results: ${await l.text()}`)}};function Tp({logger:e,orgId:t,client:o,gitMetadata:n,regenerateCache:r,alwaysSaveCache:i,noCache:a,isolateCachesByEnvironment:s=false,bustOldestCachePercentage:l}){return a?new NO:new M2(e,t,o,n,{regenerateCache:r,alwaysSaveCache:i,bustOldestCachePercentage:l,isolateCachesByEnvironment:s})}var M2=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=CO(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:S$(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:S$(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=qh({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&&c7e({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.59.2"];if(go.increment("step_cache_resolution",l.cacheKeysHit.length,[...c,"outcome:hit"]),go.increment("step_cache_resolution",l.cacheKeysMissed.length,[...c,"outcome:miss"]),go.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 Ln({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 Ln({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"),go.increment("step_cache_resolution",1,["platform:web","source:local","fileFormat:v2","snapshotIdentityCache:true",`orgId:${this.orgId}`,"cliVersion:3.59.2","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=xH(s.schema_version),c=xH(_t);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 (${_t}). Please update your momentic package version. Skipping identity restoration from snapshot cache.`);return}}let i=sM({entries:r,orgId:this.orgId,testId:n,logger:o}),a=aM({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 c7e({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 ws({project:e,apiClient:t,classificationOverrides:o}){let{classification:n,healing:r,explore:i}=(await u7e(t))?.ai??{},a=m7e({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 u7e(e){try{return await e.getOrgSettings()}catch(t){if(!d7e(t))throw t;C.warn({err:t},"Could not load organization settings from Momentic. Continuing with local project configuration.");return}}function d7e(e){return e instanceof Mo?e.status>=500:e instanceof oa||$R(e)}function m7e({flags:e,config:t,cloudCategories:o}){if(!(!t&&!o))return {enabled:e?.disabled?false:t?.enabled??false,overrideExitCode:e?.overrideExitCode??t?.overrideExitCode??iJ,categories:o??Ns}}var Gde="golden/visual-diff",Vde="reports",Cu="test-results";var p7e=z.object({width:z.number(),height:z.number()}),fv=class{defaultGoldenScreenshotDir;regenerateGoldenFiles;apiClient;constructor(t,o,n){let r=bn__default.join(t.rootDir,t.config.goldenFileDir??Gde);this.defaultGoldenScreenshotDir=r,this.regenerateGoldenFiles=n,this.apiClient=o;}async prepareGoldenScreenshotForComparison(t,o,n){if(e6(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=bn__default.join(this.defaultGoldenScreenshotDir,`${o.id}.jpg`));let i=`${r}.metadata.json`;if(this.regenerateGoldenFiles)return mn__default.mkdirSync(bn__default.dirname(r),{recursive:true}),mn__default.writeFileSync(r,n.buffer),mn__default.writeFileSync(i,JSON.stringify({width:n.width,height:n.height})),{buffer:Buffer.from(n.buffer),width:n.width,height:n.height};if(mn__default.existsSync(r)){let a=mn__default.readFileSync(r),s=p7e.parse(JSON.parse(mn__default.readFileSync(i,"utf-8")));return {buffer:a,width:s.width,height:s.height}}else throw new oe("UserConfigurationError",`Cannot execute visual diff without a saved baseline screenshot at ${r}`)}};var qde=3e3,g7e=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 f7e(){let e={};for(let[t,o]of Object.entries(process.env))o!==void 0&&!g7e.has(t.toLowerCase())&&(e[t]=o);return e.LC_ALL="C",e.LANG="C",e}var y7e=f7e();function Vd(e,t){return t?.throwIfAborted(),j2({baseDir:e??process.cwd(),abort:t,unsafe:{allowUnsafeAskPass:true,allowUnsafeGitProxy:true,allowUnsafeSshCommand:true}}).env(y7e)}var Si=Vd();async function D2(e,t,o){try{return await Vd(e,o).revparse(t)}catch(n){if(o?.throwIfAborted(),Qde(n))return;throw n}}async function Nc(e,t){return D2(e,["--show-toplevel"],t)}async function yv(e){let t=await Nc(e);if(!t)return;let o=bn__default.relative(t,e);if(!(o.startsWith("..")||bn__default.isAbsolute(o)))return o===""?".":o}async function Kde(e){return D2(e,["HEAD"])}async function Yde(e){try{return (await Vd(e).revparse(["--is-shallow-repository"])).trim()==="true"}catch{return false}}async function Jde(e){return D2(e,["--abbrev-ref","HEAD"])}async function bv({cwd:e,base:t,head:o,logger:n,abortSignal:r}){try{let i=(await Vd(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 F2(){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 Sv({client:e,repository:t,base:o,head:n,logger:r,abortSignal:i}){let a=ar(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 Lc(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>qde&&!process.env.CI&&t.warn({operation:o,durationMs:a,thresholdMs:qde,...r??{}},"[timing] slow git metadata operation");}}function Gd(e){if(e)try{let t=new Date(e);return isNaN(t.getTime())?void 0:t}catch{return}}async function Xde(e,t){let o=await Un(e,t.raw(["config","--null","--list"])),n={};if(!o)return n;for(let r of o.split("\0")){let i=r.indexOf(`
333
+ `);}function HZe(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:Rde(t)?{effort:t.effort}:void 0,hasInput:!!e.input,toolsCount:Array.isArray(e.tools)?e.tools.length:0}}function Rde(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function $Ze(e){return typeof e=="string"?e:e instanceof URL?e.toString():e.url}var GZe=3e5;function AL(e){let t=e.split("/").at(-1)??e;return t.startsWith("grok-4.5")||t.startsWith("grok-4.6")}var VZe=z.object({input:z.array(z.custom()),instructions:z.unknown().optional(),model:z.string(),tools:z.unknown().optional()}).passthrough(),WZe=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 Cde(e={}){let t=e.compactThreshold??GZe,o=vL(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=VZe.safeParse(c);if(!u.success)return o(r,i);let d=u.data.input,m=n?dv({currentInput:d,state:n}):void 0;n&&!m&&(n=void 0);let p=m??d;if((m&&n?n.outputTokens:0)+xt({input:m?m.slice(1):d,instructions:u.data.instructions,tools:u.data.tools})>=t){let g=await qZe({url:s,init:i,model:u.data.model,providerInput:p});if(g){let f=g.output[0];n={...Py({input: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 qZe({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=WZe.safeParse(i);return a.success?a.data:void 0}var JZe="MOMENTIC_OPENAI_RESPONSES_WEBSOCKET_COMPACT_THRESHOLD";function gg(e){let{apiKey:t,sessionId:o,loggerTags:n,runner:r,parentTraceId:i}=e,a={Authorization:`Bearer ${t}`,[EO]:Ty,...o&&{[Jee]:o},...r&&{[wO]:r},...i&&{[Qee]:i},...n&&{[RO]: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 Ide="bedrock/",xde="azure/",_de="anthropic/",Pde=e=>t=>{let o=gg(e),n=t,r=`${e.baseUrl}/v1/llm/anthropic/${encodeURIComponent(t)}`;return t.startsWith(Ide)?r=`${e.baseUrl}/v1/llm/provider/bedrock/anthropic/${encodeURIComponent(t.slice(Ide.length))}`:t.startsWith(xde)?r=`${e.baseUrl}/v1/llm/provider/foundry/anthropic/${encodeURIComponent(t.slice(xde.length))}`:t.startsWith(_de)&&(n=t.slice(_de.length),r=`${e.baseUrl}/v1/llm/provider/anthropic/${encodeURIComponent(n)}`),createAnthropic({baseURL:r,headers:o,apiKey:e.apiKey})(n)},Ode=e=>t=>{let o=gg(e),n=e.useOpenAIResponsesWebSocket??false,r=n?e.openAIResponsesWebSocketCompactThreshold??XZe(process.env[JZe])??SL(t):e.openAIResponsesCompactThreshold??SL(t),i=a=>e.onOpenAINativeCompaction?.({...a,model:t});return P2(lv({baseURL:`${e.baseUrl}/v1/llm/provider/openai/${t}`,headers:o,apiKey:e.apiKey,fetch:n?Ade({compactThreshold:r,onCompaction:i}):I2({compactThreshold:r,onCompaction:i})})(t))},kde=e=>t=>{let o=gg(e),n=vL(e.xai);return AL(t)&&(n=Cde({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)},Mde=e=>t=>{let o=gg(e);return P2(lv({baseURL:`${e.baseUrl}/v1/llm/provider/azure/${t}`,headers:o,apiKey:e.apiKey,fetch:I2({compactThreshold:e.openAIResponsesCompactThreshold??SL(t),onCompaction:n=>e.onOpenAINativeCompaction?.({...n,model:t})})})(t))};function Lde(e){return t=>o=>{let n=gg(t);return lv({baseURL:`${t.baseUrl}/v1/llm/provider/${e}/${o}`,headers:n,apiKey:t.apiKey}).chat(o)}}var Nde=Lde("azure/deepseek"),Dde=Lde("azure/kimi"),Fde=e=>t=>{let o=gg(e);return lv({baseURL:`${e.baseUrl}/v1/llm/provider/fireworks`,headers:o,apiKey:e.apiKey}).chat(t)},Bde=e=>t=>{let o=gg(e);return C2({baseURL:`${e.baseUrl}/v1/llm/provider/openrouter`,headers:o,apiKey:e.apiKey,compatibility:"strict"}).chat(t)},Ude=e=>t=>{let o=gg(e);return K1({baseURL:`${e.baseUrl}/v1/llm/provider/vertex`,headers:o,apiKey:e.apiKey})(t)};function XZe(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function zde(e){let t=bt.safeParse(e[a$]);return delete e[a$],t.success?t.data:void 0}var kr=class extends Ts{agentConfig;apiPathPrefix;supportsAiActionTurbo;constructor(t,o){let n={...uh,...t};N_(n),super(o),this.apiPathPrefix=o.apiPathPrefix??`/${Be}`,this.agentConfig=n,this.supportsAiActionTurbo=o.supportsAiActionTurbo??false;}getAgentConfig(){return this.agentConfig}async compactConversationNonNative(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/llm/compact`,{method:"POST",body:{...e7e(t),sessionId:o.sessionId,parentTraceId:o.parentTraceId},signal:o.abortSignal,retries:1,requestTimeoutMs:15e3,extraHeaders:{[RO]:JSON.stringify(O2(o))}});return vX.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 gQ.parse(r)}async rankChunksWithRag(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:Ty,...t},signal:o.abortSignal});return hQ.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=zde(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(),tte.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=zde(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(),s$.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 ete.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 s$.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 Zee.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 yj.parse(n)}async getAiActionTurboDecision(t,o){let n=await this.sendRequest(`${this.apiPathPrefix}/web-agent/ai-action/turbo-decision`,{method:"POST",body:{...t,loggerTags:o.loggerTags},signal:o.abortSignal,requestTimeoutMs:3e3,retries:1});return G6.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 ote.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 fj.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 SX.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 TX.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 RE.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 xQ.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 hX.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 yX.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 fX.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 M9.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 MO.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 W6.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(Pde,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 Ode({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:O2(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(kde,t,{onXAINativeCompaction:r=>{o.info({promptType:n,nativeCompaction:r},"Native conversation compaction completed");}})}getOpenRouterModelFactory(t){return this.buildModelFactory(Bde,t)}getAzureOpenAIModelFactory(t){let{logger:o,streamType:n}=t;return this.buildModelFactory(Mde,t,{onOpenAINativeCompaction:r=>{o.info({promptType:n,nativeCompaction:r},"Native conversation compaction completed");}})}getAzureDeepSeekModelFactory(t){return this.buildModelFactory(Nde,t)}getAzureKimiModelFactory(t){return this.buildModelFactory(Dde,t)}getFireworksModelFactory(t){return this.buildModelFactory(Fde,t)}getVertexGeminiModelFactory(t){return this.buildModelFactory(Ude,t)}buildModelFactory(t,o,n){let{sessionId:r,parentTraceId:i,xai:a}=o;return t({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:O2(o),sessionId:r,runner:this.runner,parentTraceId:i,xai:a,...n})}};function O2(e){return {...So(e.logger),agentInvocationId:e.agentInvocationId,promptType:e.streamType}}function e7e(e){return {...e,messages:e.messages.map(k2)}}function k2(e){return e instanceof Uint8Array||e instanceof ArrayBuffer?Buffer.from(e).toString("base64"):e instanceof URL?e.toString():Array.isArray(e)?e.map(k2):typeof e!="object"||e===null?e:Object.fromEntries(Object.entries(e).map(([t,o])=>[t,k2(o)]))}async function EL(e,t,o){let{size:n}=await mn__default.promises.stat(o),r=new URL(e),i=t==="application/zip"?AbortSignal.timeout(Ok(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=mn__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,A=S===204||S===205||S===304;if(y&&S>=200&&S<300&&!A){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 E=[];f.on("data",R=>E.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[O,I]of Object.entries(f.headers))if(Array.isArray(I))for(let _ of I)R.append(O,_);else I!==void 0&&R.set(O,I);let w=A?null:Buffer.concat(E);u.then(()=>{try{s(new Response(w,{headers:R,status:S,statusText:f.statusMessage}));}catch(O){l(O);}});});});}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 Hde(e,t,o,n){return fetch(e,{method:"PUT",body:o,signal:n,headers:{"Content-Type":t}})}var n7e=2e3,Bt=class extends Ts{apiPathPrefix;constructor(t){super(t),this.apiPathPrefix=t.apiPathPrefix??`/${Be}`;}getAppUrl(){return rT(this.baseUrl)}limbarPath(t){return `${this.apiPathPrefix}/limbar/${t}`}async getAuthInfo(){let t;try{t=await this.sendRequest(`/${Be}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3});}catch(o){throw o instanceof fC?new de(`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 Mo?o.status>=400&&o.status<500?new de(o.rawError,{cause:o}):new Error(`Momentic server error (HTTP ${o.status}). Please try again in a moment.`,{cause:o}):o instanceof de?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 fte.parse(t)}async getFeatureFlags(){let t=await this.sendRequest(`/${Be}/auth/flags`,{method:"GET",retries:1,requestTimeoutMs:5e3});return Ste.parse(t)}async getCliAnnouncements(){let t=await this.sendRequest(`/${Be}/announcements`,{method:"GET",retries:1,requestTimeoutMs:5e3});return v9.parse(t).announcements}async createMoSessionUpload(t,o){let n;try{n=await this.sendRequest(`/${Be}/mo/sessions/${encodeURIComponent(t)}/uploads`,{method:"POST",body:o,retries:3,requestTimeoutMs:15e3});}catch(r){throw r instanceof Mo&&r.status===404?new de(`Mo session ${t} was not found.`,{cause:r}):r}return IZ.parse(n)}async createMoSessionDownload(t,o,n){let r;try{r=await this.sendRequest(`/${Be}/mo/sessions/${encodeURIComponent(t)}/downloads`,{method:"POST",body:o,retries:3,requestTimeoutMs:15e3,signal:n});}catch(i){throw i instanceof Mo&&i.status===404?new de(i.rawError,{cause:i}):i}return CZ.parse(r)}async listProductUpdates(t=3){let o=await this.sendRequest(`/${Be}/product-updates?limit=${t}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return Wte.parse(o).updates}async getQuotaStatus(){let t=await this.sendRequest(`/${Be}/billing/check-quota`,{method:"GET",retries:3,requestTimeoutMs:5e3});return yte.parse(t)}async createRemoteBrowserConnection(t){let o=await this.sendRequest(`/${Be}/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 zte.parse(o)}async tryCreateBrowserFleetAccessToken(t,o){let n;try{n=await this.sendRequest(`/${Be}/browsers/token`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4,signal:o});}catch(i){if(i instanceof Mo&&(i.status===400||i.status===404||i.status===409))return null;throw i}let r=Ute.parse(n);return "network"in r?r:null}async bulkGetRunStatus(t){let o=await this.sendRequest(`/${Be}/runs/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return mte.parse(o)}async getOrgLevelFailureRate(t){let o=t?`?environment=${encodeURIComponent(t)}`:"",n=await this.sendRequest(`/${Be}/org-level-failure-rate${o}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return MO.parse(n)}async recordRunOutcomeForFailureRate(t){await this.sendRequest(`/${Be}/org-level-failure-rate`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});}async getRunExport(t,o){let n=await this.sendRequest(`/${Be}/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4,signal:o});return IO.parse(n)}submitInteractiveAgentFeedback(t){try{this.sendRequest(`/${Be}/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(`/${Be}/result-classification-cache`,{method:"POST",body:t,retries:1,requestTimeoutMs:1e4});return ioe.parse(o)}async createResultClassificationCacheEntries(t){await this.sendRequest(`/${Be}/result-classification-cache`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:1e4});}async createAiTriageMetrics(t){await this.sendRequest(`/${Be}/ai-triage-metrics`,{method:"POST",body:t,retries:1,requestTimeoutMs:3e3});}async getAiTriageExistingFixes(t){let o=await this.sendRequest(`/${Be}/ai-triage-metrics/existing-fixes`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});return q8.parse(o)}async saveRunClassification(t,o){await this.sendRequest(`/${Be}/runs/${encodeURIComponent(t)}/classification`,{method:"PATCH",body:o,retries:3,requestTimeoutMs:1e4});}async uploadRunHealTraceZip(t,o){let n=await this.sendRequest(`/${Be}/runs/${encodeURIComponent(t)}/heal-trace/upload-url`,{method:"POST",retries:3,requestTimeoutMs:1e4}),{uploadUrl:r}=xO.parse(n),i=await Hde(r,"application/zip",o,AbortSignal.timeout(Ok(o.byteLength)));if(!i.ok)throw new Error(`Failed to upload heal trace: ${await i.text()}`)}async saveRunHealMetadataBatch(t){await this.sendRequest(`/${Be}/runs/heal-metadata`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:1e4});}async getTestYAMLExport(t){let o=await this.sendRequest(`/${Be}/tests/export`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return rte.parse(o)}async updateStepCaches(t,o){await this.sendRequest(`/${Be}/cache`,{method:"PATCH",body:t,extraHeaders:o,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async updateSnapshotCaches(t,o){await this.sendRequest(`/${Be}/snapshot-cache`,{method:"PATCH",body:t,extraHeaders:o,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getStepCacheForTest(t,o){let n=await this.sendRequest(`/${Be}/cache`,{method:"POST",body:t,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return ate.parse(n)}async getSnapshotCacheForTest(t,o){let n=await this.sendRequest(`/${Be}/snapshot-cache`,{method:"POST",body:t,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return ste.parse(n)}async deleteStepCacheEntry(t,o){await this.sendRequest(`/${Be}/cache/entry`,{method:"DELETE",body:t,extraHeaders:o,retries:3,requestTimeoutMs:1e4});}async getWebStepCacheMemoryTraces(t){let o=await this.sendRequest(`/${Be}/cache/traces`,{method:"POST",body:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return l$.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(`/${Be}/${this.cacheRouteForPlatform(t)}/entry`,{method:"DELETE",body:o,extraHeaders:n,retries:3,requestTimeoutMs:1e4});}async getMobileStepCacheMemoryTraces(t,o){let n=await this.sendRequest(`/${Be}/${this.cacheRouteForPlatform(t)}/traces`,{method:"POST",body:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return l$.parse(n)}async updateMobileStepCaches(t){await this.sendRequest(`/${Be}/${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(`/${Be}/${this.cacheRouteForPlatform(t)}`,{method:"POST",body:o,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return lte[t](r)}async queueTests(t){let o=await this.sendRequest(`/${Be}/tests/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return nte.parse(o)}async uploadScreenshot(t){let o=await this.sendRequest(`/${Be}/screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return gte.parse(o)}async uploadOnDemandScreenshot(t){return await this.sendRequest(`/${Be}/on-demand-screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${Be}/on-demand-screenshots/${t.id}`}}async fetchOnDemandScreenshot(t){let o={};return {data:await this.sendRequest(`/${Be}/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(`/${Be}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return bte.parse(t)}async acquireCacheLock(t,o){let n=await this.sendRequest(`/${Be}/result-cache/lock`,{method:"POST",body:t,signal:o,retries:3,requestTimeoutMs:3e4});return Jte.parse(n)}async releaseCacheLock(t){await this.sendRequest(`/${Be}/result-cache/lock`,{method:"DELETE",body:{key:t},retries:3,requestTimeoutMs:5e3});}async deleteCacheResult(t){await this.sendRequest(`/${Be}/result-cache/entry`,{method:"DELETE",body:t,retries:3,requestTimeoutMs:5e3});}async setCacheResult(t){await this.sendRequest(`/${Be}/result-cache/entry`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:5e3});}async getCacheResult(t){try{return await this.sendRequest(`/${Be}/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(`/${Be}/suites/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return Ate.parse(o)}async bulkGetRunGroupStatus(t){let o={runGroupIds:t},n=await this.sendRequest(`/${Be}/run-groups/status`,{method:"POST",body:o,retries:3,requestTimeoutMs:5e3});return cQ.array().parse(n)}async getRunGroupWithRuns(t){try{let o=await this.sendRequest(`/${Be}/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return kP.parse(o)}catch(o){if(o instanceof Mo&&o.status===404)return null;throw o}}async getRun(t){try{let o=await this.sendRequest(`/${Be}/runs/${encodeURIComponent(t)}/metadata`,{method:"GET",retries:3,requestTimeoutMs:1e4});return ns.parse(o)}catch(o){if(o instanceof Mo&&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(`/${Be}/run-groups/${encodeURIComponent(t)}/runs`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Rte.parse(o)}async updateGithubPRHealRiskSummary(t,o){await this.sendRequest(`/${Be}/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(`/${Be}/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(`/${Be}/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(`/${Be}/test-fragments/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Ete.parse(o)}async patchTestFragment(t,o){await this.sendRequest(`/${Be}/test-fragments/${t}`,{method:"PATCH",body:o,retries:3,requestTimeoutMs:1e4});}async getPastTestResults(t,o){let n=await this.sendRequest(`/${Be}/results/tests/${t}`,{method:"POST",body:o,retries:3,requestTimeoutMs:1e4});return wte.parse(n)}async listRuns(t,o){let n=await this.sendRequest(`/${Be}/results/runs`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4,signal:o});return Cte.parse(n)}async generateTestResultsUploadUrl(){let t=await this.sendRequest(`/${Be}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return Ite.parse(t)}async startProcessingResultsUpload(t,o){let n=await this.sendRequest(`/${Be}/results/uploads/${t}/process`,{method:"POST",body:o,retries:3,requestTimeoutMs:1e4});return xte.parse(n)}async startExploreTraceUpload(t){let o=await this.sendRequest(`/${Be}/explore/trace-uploads`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return foe.parse(o)}async fetchIconKnowledgeBase(t){try{let o=await this.sendRequest(`/${Be}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return loe.parse(o)}catch(o){return t.error({err:o},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(t,o){try{await this.sendRequest(`/${Be}/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(`/${Be}/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+n7e,signal:m});return OX.parse(g)}catch(g){return h.warn({err:g},"Failed to retrieve from knowledge base"),null}}async createKnowledgeItem(t){let o=await this.sendRequest(`/${Be}/knowledge-base/items`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return Cj.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(`/${Be}/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(`/${Be}/git/github/${t}/${o}/compare?${a.toString()}`,{signal:i,method:"GET",retries:3,requestTimeoutMs:5e3});return K9.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(`/${Be}/git/github/${t}/${o}/commits?${a.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Y9.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(`/${Be}/git/github/${t}/${o}/contents?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return J9.parse(a).content??void 0}async getGithubBranchMetadata(t,o,n){let r=new URLSearchParams;r.set("branch",n);let i=await this.sendRequest(`/${Be}/git/github/${t}/${o}/branch-metadata?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return X9.parse(i)}async createGithubPullRequest(t,o,n){let r=await this.sendRequest(`/${Be}/git/github/${t}/${o}/pull-requests`,{method:"POST",body:n,retries:3,requestTimeoutMs:6e4});return B9.parse(r)}async createGithubCommit(t,o,n){let r=await this.sendRequest(`/${Be}/git/github/${t}/${o}/commits`,{method:"POST",body:n,retries:3,requestTimeoutMs:6e4});return U9.parse(r)}async getGithubPullRequestTemplate(t,o){try{let n=await this.sendRequest(`/${Be}/git/github/${t}/${o}/pull-request-template`,{method:"GET",retries:3,requestTimeoutMs:1e4});return eZ.parse(n).template}catch(n){if(n instanceof Mo&&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(`/${Be}/git/github/${t}/${o}/pull-requests?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(a){if(a instanceof Mo&&a.status===404)return;throw a}return V9.parse(i)}async getCommitFromGithub(t,o,n){let r=await this.sendRequest(`/${Be}/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(`/${Be}/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(`/${Be}/git/github/${t}/${o}/collaborator-merge-access`,{method:"POST",body:{usernames:n},retries:3,requestTimeoutMs:15e3});return z9.parse(r).usernamesWithMergeAccess}async searchGithubRelatedPullRequests(t,o,n){let r=await this.sendRequest(`/${Be}/git/github/${t}/${o}/related-pull-requests`,{method:"POST",body:{query:n},retries:2,requestTimeoutMs:6e4});return $9.parse(r)}async getGithubRelatedPullRequestDetails(t,o,n){let r=await this.sendRequest(`/${Be}/git/github/${t}/${o}/related-pull-requests/${n}`,{method:"GET",retries:2,requestTimeoutMs:6e4});return z.object({pullRequest:LH}).parse(r).pullRequest}async getGithubCommitDetails(t,o,n){let r=j9.parse({shas:n}),i=await this.sendRequest(`/${Be}/git/github/${t}/${o}/commit-details`,{method:"POST",body:r,retries:3,requestTimeoutMs:2e4});return H9.parse(i)}async getMergedBranchFromGithub(t,o,n,r){let i=encodeURIComponent(n),a=await this.sendRequest(`/${Be}/git/github/${t}/${o}/${i}/${r}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return g$.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(`/${Be}/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(`/${Be}/git/gitlab/${r}/merge-requests?${n.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(a){if(a instanceof Mo&&a.status===404)return;throw a}return Q9.parse(i)}async getCommitFromGitlab(t,o){let n=encodeURIComponent(t),r=await this.sendRequest(`/${Be}/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(`/${Be}/git/gitlab/${i}/${r}/${n}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return g$.parse(a)}async getAgentConfig(){let t=await this.sendRequest(`/${Be}/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(`/${Be}/org-settings`,{method:"GET",retries:3,requestTimeoutMs:5e3});return KX(t)}catch(t){if(t instanceof Mo&&t.status===404)return this.logger.warn({err:t},"Momentic server does not expose org settings; continuing with local project settings"),OS.parse({});throw t}}async getQuarantinedTests(){let t=await this.sendRequest(`/${Be}/quarantine`,{method:"GET"});return _te.parse(t)}async listQuarantinedTests(t){let o=await this.sendRequest(`/${Be}/quarantine/details`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Pte.parse(o)}async sendExploreSlackNotification(t){await this.sendRequest(`/${Be}/explore/slack-notification`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async recordExplorerSuggestedTests(t){await this.sendRequest(`/${Be}/explore/suggested-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async quarantineTest(t,o,n){await this.sendRequest(`/${Be}/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(`/${Be}/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 kte.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 Lte.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 Nte.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 Dte.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 Mte.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(`/${Be}/logcat/mobile/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return g9.parse(o)}async generateMcpSessionTraceUploadUrl(t){let o=await this.sendRequest(`/${Be}/mcp/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return xO.parse(o)}};async function Oy(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 gp=class{apiClient;constructor(t){this.apiClient=t;}async reportBillableEvents(t,o){await this.apiClient.reportBillableEvents(t,o);}};async function fp({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(A=>A.outcome)),f=r;i==="failure"&&(f="error");let y={cached:n,sessionId:d,agentInvocationId:m},b=_O.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(A=>({event:"ai-triage-test-result",timestamp:h,transactionId:`${p}:test-result:${A.testId}`,properties:_O.parse({...y,runId:A.runId,testId:A.testId,testName:A.testName,aiFeature:"triage",outcome:A.outcome,labels:A.labels})}))];try{await e.reportBillableEvents(t,S);}catch(A){t.warn({err:A,feature:o,cached:n,outcome:f},"Failed to report AI agent invocation");}}var yp=class extends Ts{generator;constructor(t,o){super(t),this.generator=o;}async runTemplateMatching(t,o={}){let n=await this.sendRequest(`/${Be}/web-agent/template-matching`,{method:"POST",body:t,signal:o?.signal});return q6.parse(n)}async constructIframeRegex(t,o={}){return this.generator.getIframeRegex(t,{abortSignal:o.signal,loggerTags:o.loggerTags})}};var pv=class{constructor(t,o){this.client=t;this.orgId=o;}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let t=this.getApiServerUrl();return rT(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 r7e="x-momentic-internal-api-endpoint-secret",wL=class extends Bt{internalHeaders;constructor({internalApiSecret:t,...o}){super(o),this.internalHeaders=t?{[r7e]:t}:{},t&&C.addRedactedValue(t);}async getRunExport(t,o){let n=await this.sendRequest(`/internal/eval/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4,extraHeaders:this.internalHeaders,signal:o});return IO.parse(n)}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 kP.parse(o)}catch(o){if(o instanceof Mo&&o.status===404)return null;throw o}}};var bp="v1",s7e=2e3,$de="sms.lease() and sms.release() are only supported when running tests via the Momentic CLI.",Sp=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}),this.fakerInstance.seed(this.fakerSeed);}async sendSms(t){return this.httpClient.sendRequest(`/${bp}/tools/sms/send`,{method:"POST",body:t}).then(()=>{}).catch(o=>{throw o instanceof Mo?new Error(o.rawError):new Error(`Failed to send sms: ${o.message}`)})}async fetchLatestSms(t){return this.httpClient.sendRequest(`/${bp}/tools/sms/fetchLatest`,{method:"POST",body:t}).catch(o=>{throw o instanceof Mo?new Error(o.rawError):o})}async leasePhoneNumber(t){if(!this.supportsLease)throw new Error($de);let o=await this.httpClient.sendRequest(`/${bp}/tools/sms/lease`,{method:"POST",body:t??{}}).catch(r=>{throw r instanceof Mo?new Error(r.rawError):new Error(`Failed to lease phone number: ${r.message}`)}),n=A9.parse(o);return this.activeLeases.set(n.phoneNumber,{leaseToken:n.leaseToken}),n}async releasePhoneNumber(t){if(!this.supportsLease)throw new Error($de);return this.activeLeases.delete(t.phoneNumber),this.httpClient.sendRequest(`/${bp}/tools/sms/release`,{method:"POST",body:t}).then(()=>{}).catch(o=>{throw o instanceof Mo?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(`/${bp}/tools/sms/release`,{method:"POST",body:{phoneNumber:o,leaseToken:n}}),{milliseconds:s7e,fallback:()=>{}})));}async sendEmail(t){return this.httpClient.sendRequest(`/${bp}/tools/email/send`,{method:"POST",body:t}).then(()=>{}).catch(o=>{throw o instanceof Mo?new Error(o.rawError):new Error(`Failed to send email: ${o.message}`)})}async fetchAllEmails(t){return this.httpClient.sendRequest(`/${bp}/tools/email/fetchAll`,{method:"POST",body:t}).catch(o=>{throw o instanceof Mo?new Error(o.rawError):new Error(`Failed to fetch all emails: ${o.message}`)})}async fetchLatestEmail(t){return this.httpClient.sendRequest(`/${bp}/tools/email/fetchLatest`,{method:"POST",body:t}).catch(o=>{throw o instanceof Mo?new Error(o.rawError):new Error(`Failed to fetch latest emails: ${o.message}`)})}async createEmail(){let t=await this.httpClient.sendRequest(`/${bp}/tools/email/create`,{method:"POST",body:{}}).catch(o=>{throw o instanceof Mo?new Error(o.rawError):new Error(`Failed to create email inbox: ${o.message}`)});return E9.parse(t)}};var hv=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 EL(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 EL(u,c.contentType,c.path);if(!d.ok)throw new Error(`Failed to upload explore video ${c.name}: ${await d.text()}`)}let l=await EL(a,"application/zip",r);if(!l.ok)throw new Error(`Failed to upload explore results: ${await l.text()}`)}};function Tp({logger:e,orgId:t,client:o,gitMetadata:n,regenerateCache:r,alwaysSaveCache:i,noCache:a,isolateCachesByEnvironment:s=false,bustOldestCachePercentage:l}){return a?new NO:new M2(e,t,o,n,{regenerateCache:r,alwaysSaveCache:i,bustOldestCachePercentage:l,isolateCachesByEnvironment:s})}var M2=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=CO(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:S$(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:S$(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=qh({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&&c7e({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.59.3"];if(go.increment("step_cache_resolution",l.cacheKeysHit.length,[...c,"outcome:hit"]),go.increment("step_cache_resolution",l.cacheKeysMissed.length,[...c,"outcome:miss"]),go.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 Ln({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 Ln({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"),go.increment("step_cache_resolution",1,["platform:web","source:local","fileFormat:v2","snapshotIdentityCache:true",`orgId:${this.orgId}`,"cliVersion:3.59.3","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=xH(s.schema_version),c=xH(_t);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 (${_t}). Please update your momentic package version. Skipping identity restoration from snapshot cache.`);return}}let i=sM({entries:r,orgId:this.orgId,testId:n,logger:o}),a=aM({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 c7e({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 ws({project:e,apiClient:t,classificationOverrides:o}){let{classification:n,healing:r,explore:i}=(await u7e(t))?.ai??{},a=m7e({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 u7e(e){try{return await e.getOrgSettings()}catch(t){if(!d7e(t))throw t;C.warn({err:t},"Could not load organization settings from Momentic. Continuing with local project configuration.");return}}function d7e(e){return e instanceof Mo?e.status>=500:e instanceof oa||$R(e)}function m7e({flags:e,config:t,cloudCategories:o}){if(!(!t&&!o))return {enabled:e?.disabled?false:t?.enabled??false,overrideExitCode:e?.overrideExitCode??t?.overrideExitCode??iJ,categories:o??Ns}}var Gde="golden/visual-diff",Vde="reports",Cu="test-results";var p7e=z.object({width:z.number(),height:z.number()}),fv=class{defaultGoldenScreenshotDir;regenerateGoldenFiles;apiClient;constructor(t,o,n){let r=bn__default.join(t.rootDir,t.config.goldenFileDir??Gde);this.defaultGoldenScreenshotDir=r,this.regenerateGoldenFiles=n,this.apiClient=o;}async prepareGoldenScreenshotForComparison(t,o,n){if(e6(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=bn__default.join(this.defaultGoldenScreenshotDir,`${o.id}.jpg`));let i=`${r}.metadata.json`;if(this.regenerateGoldenFiles)return mn__default.mkdirSync(bn__default.dirname(r),{recursive:true}),mn__default.writeFileSync(r,n.buffer),mn__default.writeFileSync(i,JSON.stringify({width:n.width,height:n.height})),{buffer:Buffer.from(n.buffer),width:n.width,height:n.height};if(mn__default.existsSync(r)){let a=mn__default.readFileSync(r),s=p7e.parse(JSON.parse(mn__default.readFileSync(i,"utf-8")));return {buffer:a,width:s.width,height:s.height}}else throw new oe("UserConfigurationError",`Cannot execute visual diff without a saved baseline screenshot at ${r}`)}};var qde=3e3,g7e=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 f7e(){let e={};for(let[t,o]of Object.entries(process.env))o!==void 0&&!g7e.has(t.toLowerCase())&&(e[t]=o);return e.LC_ALL="C",e.LANG="C",e}var y7e=f7e();function Vd(e,t){return t?.throwIfAborted(),j2({baseDir:e??process.cwd(),abort:t,unsafe:{allowUnsafeAskPass:true,allowUnsafeGitProxy:true,allowUnsafeSshCommand:true}}).env(y7e)}var Si=Vd();async function D2(e,t,o){try{return await Vd(e,o).revparse(t)}catch(n){if(o?.throwIfAborted(),Qde(n))return;throw n}}async function Nc(e,t){return D2(e,["--show-toplevel"],t)}async function yv(e){let t=await Nc(e);if(!t)return;let o=bn__default.relative(t,e);if(!(o.startsWith("..")||bn__default.isAbsolute(o)))return o===""?".":o}async function Kde(e){return D2(e,["HEAD"])}async function Yde(e){try{return (await Vd(e).revparse(["--is-shallow-repository"])).trim()==="true"}catch{return false}}async function Jde(e){return D2(e,["--abbrev-ref","HEAD"])}async function bv({cwd:e,base:t,head:o,logger:n,abortSignal:r}){try{let i=(await Vd(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 F2(){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 Sv({client:e,repository:t,base:o,head:n,logger:r,abortSignal:i}){let a=ar(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 Lc(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>qde&&!process.env.CI&&t.warn({operation:o,durationMs:a,thresholdMs:qde,...r??{}},"[timing] slow git metadata operation");}}function Gd(e){if(e)try{let t=new Date(e);return isNaN(t.getTime())?void 0:t}catch{return}}async function Xde(e,t){let o=await Un(e,t.raw(["config","--null","--list"])),n={};if(!o)return n;for(let r of o.split("\0")){let i=r.indexOf(`
334
334
  `);if(i===-1)continue;let a=r.slice(0,i),s=r.slice(i+1).trim();n[a]=s;}return n}function _C(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 b7e=["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 Qde(e){return e instanceof Error?b7e.some(t=>e.message.includes(t)):false}async function Un(e,t){try{return (await t).trim()}catch(o){if(Qde(o))return;e.error({err:o},"Failed to run git command");return}}async function ca(e,t,o){if(e)try{return (await Vd(t,o).revparse([e]))?.trim()||void 0}catch{o?.throwIfAborted();return}}async function PC(e){let t=await ca(e);return t||await ca(`origin/${e}`)}function Zde(){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 S7e(e){let[t,o,n]=await Promise.all([Un(e,Si.show(["--no-patch","--format=%ci"])),Un(e,Si.show(["-s","--pretty=%B"])),Un(e,Si.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?Gd(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 T7e(e){let[t,o,n]=await Promise.all([Un(e,Si.listRemote(["--get-url","origin"])),Un(e,Si.show(["-s","--pretty=%B"])),Un(e,Si.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?Gd(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 v7e(e){let[t,o,n,r]=await Promise.all([Un(e,Si.show(["--no-patch","--format=%ci"])),Un(e,Si.listRemote(["--get-url","origin"])),Un(e,Si.show(["-s","--pretty=%B"])),Un(e,Si.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?_C(a):void 0;return {ciProvider:"CircleCI",gitCommitSha:process.env.CIRCLE_SHA1,gitCommitShaShort:process.env.CIRCLE_SHA1?.slice(0,6),gitCommitTimestamp:t?Gd(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 A7e(e){let[t,o,n]=await Promise.all([Un(e,Si.show(["--no-patch","--format=%ci"])),Un(e,Si.show(["-s","--pretty=%B"])),Un(e,Si.show(["-s","--pretty=%an"]))]),r=process.env.BUILDKITE_REPO,i=r?.includes("github.com"),a=r?.includes("gitlab.com"),s=r?_C(r):void 0;return {ciProvider:"Buildkite",gitCommitSha:process.env.BUILDKITE_COMMIT,gitCommitShaShort:process.env.BUILDKITE_COMMIT?.slice(0,6),gitCommitTimestamp:t?Gd(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 E7e(e){let[t,o,n]=await Promise.all([Un(e,Si.show(["--no-patch","--format=%ci"])),Un(e,Si.show(["-s","--pretty=%B"])),Un(e,Si.show(["-s","--pretty=%an"]))]),r=process.env["Build.Repository.Uri"],i=r?.includes("github.com"),a=r?.includes("gitlab.com"),s=r?_C(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?Gd(t):void 0,gitBranchName:mR(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 eme(e,t,o,n="full"){let r=Vd(o?.repoDir),[i,a,s,l,c]=await Promise.all([w7e(e,r,n),Un(e,r.revparse(["--abbrev-ref","HEAD"])),Un(e,r.listRemote(["--get-url","origin"])),t?Un(e,r.raw(["merge-base","--fork-point",t])):Promise.resolve(void 0),n==="full"?Xde(e,r):Promise.resolve(void 0)]),u=i.sha??await Un(e,r.revparse(["HEAD"])),d=s??c?.["remote.origin.url"]??await Un(e,r.raw(["config","--get","remote.origin.url"])),m=l||(t?await Un(e,r.raw(["merge-base",t,"HEAD"])):void 0),p=m?await Un(e,r.show(["--no-patch","--format=%cI",m])):void 0,h=d?.includes("github.com"),g=d?.includes("gitlab.com"),f=d?_C(d):void 0,y=c?.["user.email"]||void 0,b=c?.["user.name"]||void 0,S=c?.["user.username"]||void 0,A=c?.["github.user"]||void 0,E=S??A??void 0;return {ciProvider:"none",gitCommitSha:u,gitCommitShaShort:i.shaShort,gitBranchName:a,gitOriginUrl:d,gitCommitTimestamp:Gd(i.timestamp),gitCommitMessage:i.message,gitCommitAuthorName:i.authorName,gitLocalUsername:E,gitLocalEmail:y,gitLocalName:b,lastCommitOnMainSha:m,lastCommitOnMainTimestamp:p?Gd(p):void 0,githubRepository:h?f:void 0,gitlabProjectPath:g?f:void 0,pipelineId:void 0}}async function w7e(e,t,o){let n=o==="full"?"%H%x00%h%x00%cI%x00%an%x00%B":"%H%x00%cI",r=await Un(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 R7e(e){let[t,o]=await Promise.all([Un(e,Si.show(["--no-patch","--format=%ci"])),Un(e,Si.show(["-s","--pretty=%an"]))]),n=process.env.GIT_REPOSITORY_URL,r=n?.includes("github.com"),i=n?.includes("gitlab.com"),a=n?_C(n):void 0;return {ciProvider:"Bitrise",gitCommitSha:process.env.BITRISE_GIT_COMMIT,gitCommitShaShort:process.env.BITRISE_GIT_COMMIT?.slice(0,6),gitCommitTimestamp:t?Gd(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 C7e(){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 I7e(){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:Gd(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:Gd(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 RL({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 ky(e){try{let t=(await Vd(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 x7e(e){let t=[...e.config.gitProtectedBranches??[]];return e.config.gitMainBranch&&t.push(e.config.gitMainBranch),{gitMainBranch:e.config.gitMainBranch??await ky(e.rootDir),gitProtectedBranches:t}}async function Dc(e,t,o){let n=Zde();if(!n)return eme(e,t,o);switch(n){case "GithubActions":return S7e(e);case "GitlabCI":return T7e(e);case "CircleCI":return v7e(e);case "Buildkite":return A7e(e);case "AzureDevOps":return E7e(e);case "GCPCloudBuild":return C7e();case "Bitrise":return R7e(e);case "Custom":return I7e()}}async function B2(e,t){let o=await Xde(e,Vd(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 _7e(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 Lc({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 Lc({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 Lc({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 P7e(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 Lc({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 Lc({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 Lc({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 O7e(e,t,o,n){try{if(o.githubRepository){let{owner:r,repo:i}=tZ(o.githubRepository);return await Lc({logger:e,operation:"getRemoteMetadataIfNeeded.getRemoteMetadataFromGitHub",fn:()=>P7e(e,t,r,i,o,n),context:{githubRepository:o.githubRepository}})}else if(o.gitlabProjectPath){let r=o.gitlabProjectPath;return await Lc({logger:e,operation:"getRemoteMetadataIfNeeded.getRemoteMetadataFromGitlab",fn:()=>_7e(e,t,r,o,n),context:{gitlabProjectPath:r}})}}catch(r){e.warn({err:r},"Failed to get remote git metadata");}return o}async function tme(e,t,o,n){let r=n==="full"?"getGitMetadata":"getGitMetadataForCache",i={},a={gitMainBranch:o.config.gitMainBranch};return Lc({logger:e,operation:`${r}.total`,fn:async()=>{let[s,l]=await Promise.all([Lc({logger:e,operation:`${r}.getConfiguredGitMetadata`,fn:()=>x7e(o),context:{projectConfigPath:o.configFilePath}}),Lc({logger:e,operation:`${r}.getEnvironmentGitMetadata`,fn:async()=>{let d=Zde()?await Dc(e,o.config.gitMainBranch,{repoDir:o.rootDir}):await eme(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 Lc({logger:e,operation:`${r}.getRemoteMetadataIfNeeded`,fn:()=>O7e(e,t,c,n),context:{githubRepository:c.githubRepository,gitlabProjectPath:c.gitlabProjectPath,gitBranchName:c.gitBranchName}});return {...s,...l,...u}},context:i})}async function ome(e){try{let t=await Vd(e).remote(["show","origin"]);return t?t.match(/HEAD branch: (.*)$/m)?.[1]?.trim():void 0}catch{return}}async function nme(){try{return (await Si.revparse(["--is-inside-work-tree"])).trim()==="true"}catch{return false}}var IC,xC;async function rme(e,t){let o=Vd(t.rootDir),[n,r]=await Promise.all([o.raw(["symbolic-ref","--short","-q","HEAD"]).then(s=>s.trim()||void 0).catch(()=>{}),Un(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 fg(e,t,o){let n=await rme(e,o);if(n&&IC?.snapshotKey===n)return e.debug("Using cached git metadata"),await IC.value;let r=tme(e,t,o,"full");n&&(IC={snapshotKey:n,value:r});try{return await r}catch(i){throw IC?.value===r&&(IC=void 0),i}}async function Wd(e,t,o){let n=await rme(e,o);if(n&&xC?.snapshotKey===n)return e.debug("Using cached git metadata for cache resolution"),await xC.value;let r=tme(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&&(xC={snapshotKey:n,value:r});try{return await r}catch(i){throw xC?.value===r&&(xC=void 0),i}}var M7e=z.object({pull_request:z.object({body:z.string().nullable().optional()}).optional()});async function CL({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 L7e(o);if(r!==void 0)return r;let i=t.gitBranchName;if(i)try{if(t.githubRepository){let a=ar(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 L7e(e){let t=process.env.GITHUB_EVENT_PATH;if(t)try{let o=JSON.parse(await readFile(t,"utf8")),r=M7e.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 N7e=1024*1024;async function yg({absoluteRepoRoot:e,baseRef:t="HEAD",candidateRepoRelativePaths:o}){kC(e);let n=j2(e),r=o?OC(o):[];if(o&&r.length===0)return [];for(let l of r)H2({absoluteRepoRoot:e,repoRelativePath:l});let i=r.map(z2),[a,s]=await Promise.all([n.diff(["--name-only","--diff-filter=ACDMRTUXB",t,"--",...i]),n.raw(["ls-files","--others","--exclude-standard","--",...i])]);return D7e(OC([...ime(a),...ime(s)]))}function D7e(e){return e.filter(Ap)}function Ap(e){let t=vp.basename(e);return e.endsWith(".test.yaml")||e.endsWith(".module.yaml")||t===Xs||t===gC}async function IL({absoluteRepoRoot:e,repoRelativePaths:t,maxFileSizeBytes:o=N7e}){kC(e);let n=[];for(let r of OC(t)){let i=H2({absoluteRepoRoot:e,repoRelativePath:r});if(!Ap(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 bg({absoluteRepoRoot:e,repoRelativePaths:t,baseRef:o="HEAD",maxFileSizeBytes:n}){kC(e);let r=OC(t??await yg({absoluteRepoRoot:e,baseRef:o}));if(r.length===0)return "";let a=(await IL({absoluteRepoRoot:e,repoRelativePaths:r,maxFileSizeBytes:n})).filter(l=>l.operation==="upsert").map(l=>l.path),s=await promises.mkdtemp(vp.join(ame.tmpdir(),"momentic-git-patch-"));try{let l=j2(e).env("GIT_INDEX_FILE",vp.join(s,"index"));return await l.raw(["read-tree",o]),a.length>0&&await l.raw(["add","--intent-to-add","--",...a.map(z2)]),await l.raw(["diff","--binary","--",...r.map(z2)])}finally{await promises.rm(s,{recursive:true,force:true});}}async function sme({absoluteRepoRoot:e,patch:t}){kC(e);let o=await promises.mkdtemp(vp.join(ame.tmpdir(),"momentic-git-apply-")),n=vp.join(o,"heal.patch");try{await promises.writeFile(n,t,"utf8");let r=j2(e),i=F7e(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(H2({absoluteRepoRoot:e,repoRelativePath:a}),!Ap(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 lme({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}){kC(e);let A=await IL({absoluteRepoRoot:e,repoRelativePaths:t??await yg({absoluteRepoRoot:e,baseRef:n}),maxFileSizeBytes:S}),E=o??await Jde(e);if(!E)throw new de(`Cannot determine base branch because git is not usable in '${e}'.`);let R=n??await Kde(e);if(!R)throw new de(`Cannot determine base commit SHA because git is not usable in '${e}'.`);return {baseBranch:E,baseCommitSha:R,headBranch:r,branchPrefix:i,idempotencyKey:a,commitMessage:s,title:l,body:c,changes:A,reviewers:u,teamReviewers:d,fallbackReviewers:m,draft:p,coAuthorRange:h,requestCommitAuthorsAsReviewers:f,assignCommitAuthorsAsAssignees:y,assignees:b,omitBaseCommitCoAuthors:g}}function ime(e){return e?e.split(`
335
335
  `).filter(t=>t.length>0):[]}function OC(e){return [...new Set(e)]}function z2(e){return `:(literal)${e}`}function F7e(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 OC(o)}function kC(e){if(!vp.isAbsolute(e))throw new Error(`Git repository root must be absolute: ${e}`)}function H2({absoluteRepoRoot:e,repoRelativePath:t}){if(!t||vp.isAbsolute(t)||t.includes("\0"))throw new Error(`Unsafe pull request path: ${t}`);let o=vp.resolve(e,t);if(o!==e&&!o.startsWith(`${e}${vp.sep}`))throw new Error(`Pull request path escapes repository root: ${t}`);return o}var cme=bn__default.join(".momentic","skills"),ume="SKILL.md",z7e=/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/,j7e=50;function H7e({rootDir:e,fileSystem:t}){let o=bn__default.resolve(e);for(let n=0;n<j7e;n++){let r=bn__default.join(o,cme);if(t.existsSync(r))return r;let i=bn__default.dirname(o);if(i===o)break;o=i;}return bn__default.join(bn__default.resolve(e),cme)}function $7e({rootDir:e,fileSystem:t=yt}){let o=H7e({rootDir:e,fileSystem:t}),n=dme({skillsDir:o,fileSystem:t}),r=[];for(let i of n){let a=bn__default.basename(bn__default.dirname(i)),s=bn__default.relative(o,bn__default.dirname(i)).split(bn__default.sep).join("/"),l=G7e({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 Tv({rootDir:e,agent:t,fileSystem:o=yt}){let n=$7e({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}">
336
336
  ${r.body}
@@ -445,7 +445,7 @@ ${r.code(lr(u,n))}`,i),t)try{await $tt(u);}catch{e.warn(`Could not open a browse
445
445
  `),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?"":one+nne.repeat(this.liveRows)+rne}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 Dot=80,Fot=120,Bot=20,Uot="classifying failure",tN=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=nt(this.screen),this.region=new wg({stream:process.stdout,isTTY:this.screen.isTTY,tickMs:Dot,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===_m,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=DR(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:Fot,h=a+3+t.testRef.length+l.length+c.length+m.length,g=Math.max(Bot,p-1)-h,f=n?`${Uot}${t.classifyPending?"\u2026":""}`:t.step&&!o.isTerminal?t.step.text:void 0,b=f?bV(n?" \xB7 ":" \u203A ",f,g):"";g-=b.length;let S=t.note?bV(" ",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 oN=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 zot="classifying failure",nN=class{totalTests=0;nextIndex=0;running=new Map;quarantined=new Set;recovered=new Set;theme;screen;constructor(t){this.screen=t,this.theme=nt(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=DR(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===_m){this.detail(r,1,`${this.theme.classifySpinner(0)} ${this.theme.dim(`${zot}\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(wp(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=DR(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}
446
446
  `);}};var Hot="list",Rhe="steps",Che="dot",rN=["json","junit","allure","allure-json","playwright-json","buildkite-json"],iN=["newrelic"],whe=[Hot,Rhe,Che,...rN,...iN];function Ihe(e,t){if(!whe.includes(e))throw new InvalidArgumentError$2(`Allowed choices are ${whe.join(", ")}.`);return [...t,e]}function xhe(e){let t=[],o=[];for(let r of e.reporter??[]){let i=rN.find(s=>s===r);i&&t.push(i);let a=iN.find(s=>s===r);a&&o.push(a);}let n;return e.reporter?.includes(Che)?n=new eN(e.screen):e.reporter?.includes(Rhe)?n=new nN(e.screen):n=new tN(e.screen),{live:new oN([n]),files:t,network:o}}function aN(e,t){return e.split(`
447
447
  `).map(o=>t.color?o.startsWith("+")?cc.green(o):o.startsWith("-")?cc.red(o):o.startsWith("@@")?t.dim(o):o:o)}var Vot="MOMENTIC_SKIP_UPGRADE_PROMPT",Wot=24*60*60*1e3;async function Phe(e){let{runUpgrade:t}=e;if(!t||process.env.NO_UPDATE_NOTIFIER||process.env[Vot]!==void 0||ms||!process.stdin.isTTY||!process.stdout.isTTY)return;let o;try{o=await TV(e);}catch(n){e.logger.warn({err:n},"Failed to check for a newer CLI version");return}if(!(!o||!Rp.gt(o,e.currentVersion))&&Pv(`upgrade-prompt-${e.packageName}-${o}`,Wot)){vV(e,o,et());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}: ${H(n)}. Run ${e.updateCommand} to update manually.`);}}}var qot="https://api.momentic.ai";function Ohe({server:e,serverSource:t,apiKeySource:o}){return t!=="default"||o==="default"?e:qot}function khe(e,t){switch(e){case "cli":return "--api-key";case "env":return "MOMENTIC_API_KEY";default:return t}}function Mhe({auth:e,serverUrl:t,appUrl:o,keySource:n,screen:r}){let i=nt(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:lr(o,r)},{label:"API key",value:i.dim(n)}),C.log(`Signed in as ${i.bold(a)}`),C.log(Yd(s,r));}var QC=25;function Lhe(e){return {v2ProjectConfig:{...e.config,fileFormat:"v2"},migratedFilePaths:[]}}function Nhe(e){return {legacyProjectConfig:{...e.config,fileFormat:"v1"},migratedFilePaths:[]}}function PV({project:e,newProjectConfig:t,fileFormatLabel:o,migratedFilePaths:n}){e.config=t,Sy(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`),QT([...new Set(n)],t));}async function ZC(e,t,o){for(let n=0;n<e.length;n+=t)await Promise.all(e.slice(n,n+t).map(o));}function OV(e){return e.upgradedAgents.length>0||e.enabledUseMemory||e.enabledFailureRecovery}function Yot(e){let t=e.ai??={},o=t.agentConfig??={},n=[];for(let[a,s]of Object.entries(uh)){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 Dhe({project:e,dryRun:t,migrate:o}){let n=e.config.fileFormat!=="v2",r=Ss.stringify(e.config),i=Yot(e.config);if(!n)return !t&&OV(i)&&Sy(e.config,e.configFilePath),{fileFormatChanged:false,aiSettings:i,migration:kV(),configDiff:xV(r,e.config)};let a=await o();return {fileFormatChanged:n,aiSettings:i,migration:a,configDiff:xV(r,{...e.config,fileFormat:"v2"})}}function xV(e,t){return ry(e,Ss.stringify(t),{n_surrounding:2})}function Fhe(e){return xV(Ss.stringify(e),{...e,fileFormat:"v2"})}function kV(){return {migratedTestPaths:[],migratedModulePaths:[],alreadyV2TestCount:0,alreadyV2ModuleCount:0}}function MV({summary:e,fileFormatChanged:t,configChange:o,dryRun:n,testNoun:r="test",moduleNoun:i="module"}){let a=et(),s=nt(a),l=s.green("~");C.info(""),C.info(Eg(n?"Upgrade Preview":"Upgrade Summary",a)),C.info("");let c=p=>` ${l} ${s.code(bn__default.relative(process.cwd(),p))}`,u=(p,h)=>{let g=vT(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} ${vT(r,d)}`)} and ${s.bold(`${m} ${vT(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 ${vT(r,e.alreadyV2TestCount)} and ${e.alreadyV2ModuleCount} already-migrated ${vT(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 aN(o.diff,s))C.info(` ${p}`);C.info("");}}var ze={Success:0,Failure:1,Sigint:130,Sigterm:143},Lv=class extends Error{exitCode;constructor(t){super(`CLI exit ${t}`),this.name="CliExit",this.exitCode=t;}};function We(e){throw new Lv(e)}function Gy(e){if(e instanceof Lv)throw e}function sN(){return new Promise(()=>{})}var eI=class extends Error{constructor(t){super("Reported CLI failure",{cause:t}),this.name="ReportedError";}};function Wr(e){return new eI(e)}function Bhe(e){return ya(e,eI)!==void 0}function Uhe(e){return ya(e,eI)?.cause??e}var Ao=class extends de{code;constructor(t,o,n){super(o,n),this.name="CliError",this.code=t;}},Jot={group:"internal",retry:"case-by-case",attribution:"unknown"};function tI(e,t){return {code:e,...t.catalog[e]??Jot}}function Xot(e,t){let o=ya(e,Ao);if(o)return tI(o.code,t);let n=t.extraClassifier?.(e);return n!==void 0?tI(n,t):e instanceof CommanderError?tI(t.argsCode,t):ya(e,de)?tI(t.userCode,t):tI(t.internalCode,t)}var Qot=/API key is required|required option '--api-key/;function Zot(e){let t=ya(e,CommanderError);return t!==void 0&&Qot.test(t.message)}var ent=/No valid Momentic project file|Multiple valid projects|Project config at .*does not match/;function tnt(e){let t=ya(e,de);return t!==void 0&&ent.test(t.message)}function Hhe(e,t){let o=ya(e,Mo);if(o)return o.status===401||o.status===403?t.authForbidden:o.status===404?t.resourceNotFound:o.status>=500?t.apiUnavailable:t.apiError;if(Zot(e))return t.authRequired;if(t.projectConfigError!==void 0&&tnt(e))return t.projectConfigError}function ont(e){return {failure_code:e.code,failure_group:e.group,failure_attribution:e.attribution,failure_retryable:e.retry}}var nnt=/\u001b\[[0-9;]*m/g,zhe=400;function rnt(e){let t=e.replace(nnt,"").trim();return t.length>zhe?`${t.slice(0,zhe)}\u2026`:t}function jhe(e,t,o){try{process.stderr.write(`${e}-error: ${JSON.stringify({code:t.code,group:t.group,retry:t.retry,attribution:t.attribution,message:rnt(o)})}
448
- `);}catch{}}async function $he(e){let{cliName:t,err:o,taxonomy:n,cleanup:r,captureException:i,messages:a}=e,s=Xot(o,n),l=ont(s);o instanceof CommanderError&&(o.exitCode!==0&&(Te.error({err:o,...e.argsLogFields?.(),...l},a.invalidArgs),jhe(t,s,o.message)),await r(),process.exit(o.exitCode));let c=ya(o,Lv);c&&(await r(),process.exit(c.exitCode));let u=Uhe(o),d=ya(o,de),m=Bhe(o),p={err:o,...e.failureLogFields?.(o),...l};d?(Te.error(p,a.userFacing),m||C.error(d.message)):(Te.error(p,a.uncaught),m||C.error({err:o},a.unexpectedExit)),jhe(t,s,d?.message??H(u)),e.doctorCommand&&ZL({err:u,doctorCommand:e.doctorCommand}),i(u),await r(),process.exit(ze.Failure);}var NV=false,Ghe,Vhe;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.59.2",tracesSampleRate:0,skipOpenTelemetrySetup:!0,sendDefaultPii:!0,beforeSend(o,n){return vre(n?.originalException)||_E(n?.originalException,de)||Are(n?.originalException)?null:o}}),tne(e.captureException),Doe(e.addBreadcrumb),Ghe=o=>{if(!o){e.setUser(null);return}e.setUser({id:o.userId,organizationId:o.orgId,...o.email&&{email:o.email}});},Vhe=()=>e.flush(2e3),NV=!0;}catch{}var Whe=e=>Ghe?.(e);async function qhe(){await Vhe?.().catch(()=>{});}var ant=new xk(30,60*1e3),nI="https://api.momentic.ai",Nv,Khe,Cp=e=>{nI=e;},jl=()=>nI,Yhe=()=>rT(nI),Rg=e=>{Khe=e;},_u=()=>Khe,$n=()=>Nv,Jhe=()=>{if(!Nv)throw new Error("Global API client has not been initialized.");return Nv};var oI,cN,Xhe,Qhe,Zhe,uN,ege,tge=({authInfo:e,apiKey:t,apiClient:o})=>{nI=o.baseUrl,Nv=o,oI=e.orgId,cN=e.userId,Xhe=e.email,Qhe=e.name,Zhe=e.pylonEmailHash,uN=t,ege=e.selfServe;},Cg=async({apiClient:e,apiKey:t,skipPrompts:o})=>{let n=await Oy({client:e});return tge({authInfo:n,apiKey:t,apiClient:e}),n},pN=async({apiKey:e,mode:t,runner:o})=>{if(Nv&&oI&&uN)return oI;let n=new Bt({baseUrl:nI,apiKey:e,logger:C,mode:t,runner:o});Nv=n;try{let r=await n.getAuthInfo();return tge({authInfo:r,apiKey:e,apiClient:n}),r.orgId}catch(r){throw new Error(`Error checking API key against server: ${r}`,{cause:r})}},Lr=()=>{if(!oI)throw new Error("Your organization ID is invalid.");return oI},Qd=()=>{if(!cN)throw new Error("Your user ID is invalid.");return cN},oge=()=>cN,Dv=()=>Xhe,nge=()=>Qhe,rge=()=>Zhe,hN=()=>ege,Ip=()=>{if(!uN)throw new Error("Your API key is invalid.");return uN},dN,mN,xp=()=>{mN?.abort(),mN=void 0;},Ig=(e,t)=>{dN=e,xp(),mN=new AbortController;let o=mN.signal,n=[e.configFilePath];e.config.environments?.forEach(r=>{if(!r.envFile)return;let i=bn__default.resolve(e.rootDir,r.envFile);try{if(mn__default.lstatSync(i).isSymbolicLink())return;mn__default.existsSync(i)&&n.push(i);}catch(a){C.warn({err:a},`Failed to check if env file ${i} exists`);}});try{snt({filesToWatch:n,revalidator:t,signal:o,project:e});}catch(r){C.error({err:r},"Failed to start config file watchers");}};async function Fv({project:e,apiClient:t}){let o=n=>ws({project:n,apiClient:t});Ig(await o(e),async n=>o(await Io({configFilePath:n})));}var kt=()=>{if(!dN)throw new de("No Momentic project is currently loaded. Open or select a project before invoking this action.");return dN};function snt({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()){ant.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{dN=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`);}}};mn__default.watchFile(r,{persistent:false},i);let a=()=>{mn__default.unwatchFile(r,i),o.removeEventListener("abort",a);};o.addEventListener("abort",a);});}function qt(e){return function(...t){let o=t[t.length-1],n=e(...t);Promise.resolve(n).catch(o);}}var cnt="3.59.2",_p=lT({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:cnt});(async()=>{try{let e=await Dc(_p);e.gitBranchName&&_p.addBinding("branch",e.gitBranchName);}catch{}})();var ige=Router();ige.get("/",async(e,t)=>{let o=kt(),n=$n();if(!n){t.status(500).json({message:"API client not initialized"});return}let r=await Wd(_p,n,o),i=r?.gitProtectedBranches&&r?.gitBranchName&&r.gitProtectedBranches.includes(r.gitBranchName),{noCache:a,alwaysSaveCache:s}=_u(),l=!a&&(s||!i);t.status(200).json({saveCaches:l,checkedOutBranch:r?.gitBranchName});});var DV=ige;var mnt=5e3,pnt=[".js",".mjs",".cjs",".ts"];function FV(e={}){let t=Router();function o(){let d=kt();return bn__default.dirname(d.configFilePath)}function n(d){return bn__default.join(o(),...d)}function r(d){let m=bn__default.relative(o(),d);return m?m.split(bn__default.sep):[]}function i(d,m){let p=mn__default.statSync(d),h=r(d);return zH.parse({name:m,absolutePath:d,relativePath:h.join(bn__default.sep),pathSegments:h,isDirectory:p.isDirectory(),size:p.size,createdAt:p.birthtime,modifiedAt:p.mtime,accessedAt:p.atime})}function a(d){let m=bn__default.relative(o(),d);return m===""||!m.startsWith("..")&&!bn__default.isAbsolute(m)}async function s(d){let m=kt();return Nd(["*"],{cwd:d,ignore:m.config.exclude??[],maxDepth:1,nodir:false,signal:AbortSignal.timeout(mnt)})}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=bn__default.relative(d,m).split(bn__default.sep).join("/");return p?h?`${h}/`:"./":h}return t.post("/file-reference-suggestions",qt(async(d,m,p)=>{let h=bZ.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??pnt).map(I=>I.toLowerCase())),b=l(f);if(b.directoryText.startsWith("/")){m.status(200).json({suggestions:[]});return}let S=bn__default.resolve(o(),...c(g)),A=bn__default.resolve(S,...c(b.directoryText));if(!a(S)||!a(A)){m.status(200).json({suggestions:[]});return}if(!mn__default.existsSync(A)||!mn__default.statSync(A).isDirectory()){m.status(200).json({suggestions:[]});return}let E;try{E=await s(A);}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=E.map(I=>{let _=bn__default.join(A,I);return {entryName:I,targetPath:_,isDirectory:mn__default.statSync(_).isDirectory()}}),w=b.filePrefix.toLowerCase(),O=R.filter(I=>I.entryName.startsWith(".")||!I.entryName.toLowerCase().startsWith(w)?false:I.isDirectory?true:y.has(bn__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:O});})),t.post("/",qt(async(d,m,p)=>{let h,g;try{let E=yZ.parse(d.body);h=E.pathSegments,g=E.directoriesOnly??!1;}catch(E){m.status(400).json({error:`Failed to parse folder read body: ${E}`});return}let f=n(h);if(!mn__default.existsSync(f)){m.status(404).json({error:`Path not found: ${h.join(bn__default.sep)}`});return}if(!mn__default.statSync(f).isDirectory()){m.status(400).json({error:`Path is not a directory: ${h.join(bn__default.sep)}`});return}let b;try{b=await s(f);}catch(E){if(E instanceof Error&&E.name==="TimeoutError"){m.status(408).json({error:"Folder listing timed out. This directory may contain too many files."});return}throw E}let S=b.map(E=>{let R=bn__default.join(f,E);return i(R,E)});if(g&&(S=S.filter(E=>E.isDirectory)),e.allowedFileTypes){let E=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 O=await hnt(R.absolutePath);return O!==void 0&&E.has(O)?R:null}))).filter(R=>R!==null);}let A={absolutePath:f,pathSegments:h,contents:S};m.status(200).json(A);})),t.put("/",qt(async(d,m,p)=>{let h;try{h=SZ.parse(d.body).pathSegments;}catch(y){m.status(400).json({error:`Failed to parse folder create body: ${y}`});return}let g=n(h);if(mn__default.existsSync(g)){m.status(200).json({success:true,message:`Folder already exists: ${h.join(bn__default.sep)}`,pathSegments:h});return}mn__default.mkdirSync(g,{recursive:true});let f={success:true,message:`Folder created: ${h.join(bn__default.sep)}`,pathSegments:h};m.status(201).json(f);})),t.patch("/",qt(async(d,m,p)=>{let h,g;try{let A=TZ.parse(d.body);h=A.pathSegments,g=A.newPathSegments;}catch(A){m.status(400).json({error:`Failed to parse folder update body: ${A}`});return}let f=n(h),y=n(g);if(!mn__default.existsSync(f)){m.status(400).json({error:`Folder not found: ${h.join(bn__default.sep)}`});return}if(mn__default.existsSync(y)){m.status(400).json({error:`Destination already exists: ${g.join(bn__default.sep)}`});return}let b=bn__default.dirname(y);mn__default.existsSync(b)||mn__default.mkdirSync(b,{recursive:true}),mn__default.renameSync(f,y);let S={success:true,message:`Folder moved from ${h.join(bn__default.sep)} to ${g.join(bn__default.sep)}`,pathSegments:g};m.status(200).json(S);})),t.delete("/",qt(async(d,m,p)=>{let h,g=true;try{let S=vZ.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(!mn__default.existsSync(f)){m.status(200).json({success:true,message:`Folder not found: ${h.join(bn__default.sep)}`,pathSegments:h});return}if(!mn__default.statSync(f).isDirectory()){m.status(400).json({error:`Path is not a directory: ${h.join(bn__default.sep)}`});return}try{if(g)mn__default.rmSync(f,{recursive:!0,force:!0});else {if(mn__default.readdirSync(f).length>0){m.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${h.join("/")}`});return}mn__default.rmdirSync(f);}}catch(S){let{status:A,body:E}=Fme(S,`delete folder ${h.join("/")}`);m.status(A).json(E);return}let b={success:true,message:`Folder deleted: ${h.join("/")}`,pathSegments:h};m.status(200).json(b);})),t}async function hnt(e){try{let t=await mn__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 age=Router();age.get("/",async(e,t)=>{let o=kt(),n=$n();if(!n){t.status(500).json({message:"API client not initialized"});return}let r=await fg(_p,n,o);t.status(200).json(r);});var BV=age;var sge=Router();sge.get("/",async(e,t)=>{let o=$n(),n=[];try{n=await o?.listProductUpdates()??[];}catch(r){_p.debug({err:r},"Failed to fetch product updates");}t.status(200).json({updates:n});});var UV=sge;var ynt=({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{}}},lge={event:"cancel",createHandler:ynt};var bnt=({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=wT(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:H(u)});}}},cge={event:"clearAIActionCache",createHandler:bnt};var Snt=({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});}}},uge={event:"fetchA11yTree",createHandler:Snt};var Tnt=({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});}}},dge={event:"fetchDom",createHandler:Tnt};var vnt=({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);}},mge={event:"disconnect",createHandler:vnt};function rl(e){let{result:t,nestedResults:o}=e;if(!e.nestedResults.length)return;let{firstMetadata:n,lastMetadata:r}=Ant(o);Ent(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 wnt(a,t,n,r);}catch(s){e.logger.error({result:e.result,err:s},"Error hoisting scalar result metadata");}})());}function Ant(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 Ent(e,t,o){t&&(e.beforeUrl=t.beforeUrl),o&&(e.afterUrl=o.afterUrl,e.data=o.data);}async function wnt(e,t,o,n){await Promise.allSettled(e),o&&(t.beforeSnapshot=o.beforeSnapshot),n&&(t.afterSnapshot=n.afterSnapshot);}function rI(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 xg(e,t,o){return Rnt(e,t,o)}async function Rnt(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 oe?s=`${r}`:s=`An unexpected error occurred: ${r.message}`,e.type==="RESOLVED_MODULE"){let l=rI(e,{},"FAILED");return l.message=s,l.startedAt=n,l.finishedAt=i,l}return {...LT(e),startedAt:n,finishedAt:i,status:a,data:null,message:s,results:[]}}}async function Fa(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 Bv=20,gN=100;function zV(e){return e.baseDerivedFrom==="estimate"}var Cnt={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 fN(e){return e.baseDerivedFrom?` The base of this comparison window is ${Cnt[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}
448
+ `);}catch{}}async function $he(e){let{cliName:t,err:o,taxonomy:n,cleanup:r,captureException:i,messages:a}=e,s=Xot(o,n),l=ont(s);o instanceof CommanderError&&(o.exitCode!==0&&(Te.error({err:o,...e.argsLogFields?.(),...l},a.invalidArgs),jhe(t,s,o.message)),await r(),process.exit(o.exitCode));let c=ya(o,Lv);c&&(await r(),process.exit(c.exitCode));let u=Uhe(o),d=ya(o,de),m=Bhe(o),p={err:o,...e.failureLogFields?.(o),...l};d?(Te.error(p,a.userFacing),m||C.error(d.message)):(Te.error(p,a.uncaught),m||C.error({err:o},a.unexpectedExit)),jhe(t,s,d?.message??H(u)),e.doctorCommand&&ZL({err:u,doctorCommand:e.doctorCommand}),i(u),await r(),process.exit(ze.Failure);}var NV=false,Ghe,Vhe;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.59.3",tracesSampleRate:0,skipOpenTelemetrySetup:!0,sendDefaultPii:!0,beforeSend(o,n){return vre(n?.originalException)||_E(n?.originalException,de)||Are(n?.originalException)?null:o}}),tne(e.captureException),Doe(e.addBreadcrumb),Ghe=o=>{if(!o){e.setUser(null);return}e.setUser({id:o.userId,organizationId:o.orgId,...o.email&&{email:o.email}});},Vhe=()=>e.flush(2e3),NV=!0;}catch{}var Whe=e=>Ghe?.(e);async function qhe(){await Vhe?.().catch(()=>{});}var ant=new xk(30,60*1e3),nI="https://api.momentic.ai",Nv,Khe,Cp=e=>{nI=e;},jl=()=>nI,Yhe=()=>rT(nI),Rg=e=>{Khe=e;},_u=()=>Khe,$n=()=>Nv,Jhe=()=>{if(!Nv)throw new Error("Global API client has not been initialized.");return Nv};var oI,cN,Xhe,Qhe,Zhe,uN,ege,tge=({authInfo:e,apiKey:t,apiClient:o})=>{nI=o.baseUrl,Nv=o,oI=e.orgId,cN=e.userId,Xhe=e.email,Qhe=e.name,Zhe=e.pylonEmailHash,uN=t,ege=e.selfServe;},Cg=async({apiClient:e,apiKey:t,skipPrompts:o})=>{let n=await Oy({client:e});return tge({authInfo:n,apiKey:t,apiClient:e}),n},pN=async({apiKey:e,mode:t,runner:o})=>{if(Nv&&oI&&uN)return oI;let n=new Bt({baseUrl:nI,apiKey:e,logger:C,mode:t,runner:o});Nv=n;try{let r=await n.getAuthInfo();return tge({authInfo:r,apiKey:e,apiClient:n}),r.orgId}catch(r){throw new Error(`Error checking API key against server: ${r}`,{cause:r})}},Lr=()=>{if(!oI)throw new Error("Your organization ID is invalid.");return oI},Qd=()=>{if(!cN)throw new Error("Your user ID is invalid.");return cN},oge=()=>cN,Dv=()=>Xhe,nge=()=>Qhe,rge=()=>Zhe,hN=()=>ege,Ip=()=>{if(!uN)throw new Error("Your API key is invalid.");return uN},dN,mN,xp=()=>{mN?.abort(),mN=void 0;},Ig=(e,t)=>{dN=e,xp(),mN=new AbortController;let o=mN.signal,n=[e.configFilePath];e.config.environments?.forEach(r=>{if(!r.envFile)return;let i=bn__default.resolve(e.rootDir,r.envFile);try{if(mn__default.lstatSync(i).isSymbolicLink())return;mn__default.existsSync(i)&&n.push(i);}catch(a){C.warn({err:a},`Failed to check if env file ${i} exists`);}});try{snt({filesToWatch:n,revalidator:t,signal:o,project:e});}catch(r){C.error({err:r},"Failed to start config file watchers");}};async function Fv({project:e,apiClient:t}){let o=n=>ws({project:n,apiClient:t});Ig(await o(e),async n=>o(await Io({configFilePath:n})));}var kt=()=>{if(!dN)throw new de("No Momentic project is currently loaded. Open or select a project before invoking this action.");return dN};function snt({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()){ant.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{dN=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`);}}};mn__default.watchFile(r,{persistent:false},i);let a=()=>{mn__default.unwatchFile(r,i),o.removeEventListener("abort",a);};o.addEventListener("abort",a);});}function qt(e){return function(...t){let o=t[t.length-1],n=e(...t);Promise.resolve(n).catch(o);}}var cnt="3.59.3",_p=lT({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:cnt});(async()=>{try{let e=await Dc(_p);e.gitBranchName&&_p.addBinding("branch",e.gitBranchName);}catch{}})();var ige=Router();ige.get("/",async(e,t)=>{let o=kt(),n=$n();if(!n){t.status(500).json({message:"API client not initialized"});return}let r=await Wd(_p,n,o),i=r?.gitProtectedBranches&&r?.gitBranchName&&r.gitProtectedBranches.includes(r.gitBranchName),{noCache:a,alwaysSaveCache:s}=_u(),l=!a&&(s||!i);t.status(200).json({saveCaches:l,checkedOutBranch:r?.gitBranchName});});var DV=ige;var mnt=5e3,pnt=[".js",".mjs",".cjs",".ts"];function FV(e={}){let t=Router();function o(){let d=kt();return bn__default.dirname(d.configFilePath)}function n(d){return bn__default.join(o(),...d)}function r(d){let m=bn__default.relative(o(),d);return m?m.split(bn__default.sep):[]}function i(d,m){let p=mn__default.statSync(d),h=r(d);return zH.parse({name:m,absolutePath:d,relativePath:h.join(bn__default.sep),pathSegments:h,isDirectory:p.isDirectory(),size:p.size,createdAt:p.birthtime,modifiedAt:p.mtime,accessedAt:p.atime})}function a(d){let m=bn__default.relative(o(),d);return m===""||!m.startsWith("..")&&!bn__default.isAbsolute(m)}async function s(d){let m=kt();return Nd(["*"],{cwd:d,ignore:m.config.exclude??[],maxDepth:1,nodir:false,signal:AbortSignal.timeout(mnt)})}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=bn__default.relative(d,m).split(bn__default.sep).join("/");return p?h?`${h}/`:"./":h}return t.post("/file-reference-suggestions",qt(async(d,m,p)=>{let h=bZ.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??pnt).map(I=>I.toLowerCase())),b=l(f);if(b.directoryText.startsWith("/")){m.status(200).json({suggestions:[]});return}let S=bn__default.resolve(o(),...c(g)),A=bn__default.resolve(S,...c(b.directoryText));if(!a(S)||!a(A)){m.status(200).json({suggestions:[]});return}if(!mn__default.existsSync(A)||!mn__default.statSync(A).isDirectory()){m.status(200).json({suggestions:[]});return}let E;try{E=await s(A);}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=E.map(I=>{let _=bn__default.join(A,I);return {entryName:I,targetPath:_,isDirectory:mn__default.statSync(_).isDirectory()}}),w=b.filePrefix.toLowerCase(),O=R.filter(I=>I.entryName.startsWith(".")||!I.entryName.toLowerCase().startsWith(w)?false:I.isDirectory?true:y.has(bn__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:O});})),t.post("/",qt(async(d,m,p)=>{let h,g;try{let E=yZ.parse(d.body);h=E.pathSegments,g=E.directoriesOnly??!1;}catch(E){m.status(400).json({error:`Failed to parse folder read body: ${E}`});return}let f=n(h);if(!mn__default.existsSync(f)){m.status(404).json({error:`Path not found: ${h.join(bn__default.sep)}`});return}if(!mn__default.statSync(f).isDirectory()){m.status(400).json({error:`Path is not a directory: ${h.join(bn__default.sep)}`});return}let b;try{b=await s(f);}catch(E){if(E instanceof Error&&E.name==="TimeoutError"){m.status(408).json({error:"Folder listing timed out. This directory may contain too many files."});return}throw E}let S=b.map(E=>{let R=bn__default.join(f,E);return i(R,E)});if(g&&(S=S.filter(E=>E.isDirectory)),e.allowedFileTypes){let E=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 O=await hnt(R.absolutePath);return O!==void 0&&E.has(O)?R:null}))).filter(R=>R!==null);}let A={absolutePath:f,pathSegments:h,contents:S};m.status(200).json(A);})),t.put("/",qt(async(d,m,p)=>{let h;try{h=SZ.parse(d.body).pathSegments;}catch(y){m.status(400).json({error:`Failed to parse folder create body: ${y}`});return}let g=n(h);if(mn__default.existsSync(g)){m.status(200).json({success:true,message:`Folder already exists: ${h.join(bn__default.sep)}`,pathSegments:h});return}mn__default.mkdirSync(g,{recursive:true});let f={success:true,message:`Folder created: ${h.join(bn__default.sep)}`,pathSegments:h};m.status(201).json(f);})),t.patch("/",qt(async(d,m,p)=>{let h,g;try{let A=TZ.parse(d.body);h=A.pathSegments,g=A.newPathSegments;}catch(A){m.status(400).json({error:`Failed to parse folder update body: ${A}`});return}let f=n(h),y=n(g);if(!mn__default.existsSync(f)){m.status(400).json({error:`Folder not found: ${h.join(bn__default.sep)}`});return}if(mn__default.existsSync(y)){m.status(400).json({error:`Destination already exists: ${g.join(bn__default.sep)}`});return}let b=bn__default.dirname(y);mn__default.existsSync(b)||mn__default.mkdirSync(b,{recursive:true}),mn__default.renameSync(f,y);let S={success:true,message:`Folder moved from ${h.join(bn__default.sep)} to ${g.join(bn__default.sep)}`,pathSegments:g};m.status(200).json(S);})),t.delete("/",qt(async(d,m,p)=>{let h,g=true;try{let S=vZ.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(!mn__default.existsSync(f)){m.status(200).json({success:true,message:`Folder not found: ${h.join(bn__default.sep)}`,pathSegments:h});return}if(!mn__default.statSync(f).isDirectory()){m.status(400).json({error:`Path is not a directory: ${h.join(bn__default.sep)}`});return}try{if(g)mn__default.rmSync(f,{recursive:!0,force:!0});else {if(mn__default.readdirSync(f).length>0){m.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${h.join("/")}`});return}mn__default.rmdirSync(f);}}catch(S){let{status:A,body:E}=Fme(S,`delete folder ${h.join("/")}`);m.status(A).json(E);return}let b={success:true,message:`Folder deleted: ${h.join("/")}`,pathSegments:h};m.status(200).json(b);})),t}async function hnt(e){try{let t=await mn__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 age=Router();age.get("/",async(e,t)=>{let o=kt(),n=$n();if(!n){t.status(500).json({message:"API client not initialized"});return}let r=await fg(_p,n,o);t.status(200).json(r);});var BV=age;var sge=Router();sge.get("/",async(e,t)=>{let o=$n(),n=[];try{n=await o?.listProductUpdates()??[];}catch(r){_p.debug({err:r},"Failed to fetch product updates");}t.status(200).json({updates:n});});var UV=sge;var ynt=({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{}}},lge={event:"cancel",createHandler:ynt};var bnt=({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=wT(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:H(u)});}}},cge={event:"clearAIActionCache",createHandler:bnt};var Snt=({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});}}},uge={event:"fetchA11yTree",createHandler:Snt};var Tnt=({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});}}},dge={event:"fetchDom",createHandler:Tnt};var vnt=({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);}},mge={event:"disconnect",createHandler:vnt};function rl(e){let{result:t,nestedResults:o}=e;if(!e.nestedResults.length)return;let{firstMetadata:n,lastMetadata:r}=Ant(o);Ent(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 wnt(a,t,n,r);}catch(s){e.logger.error({result:e.result,err:s},"Error hoisting scalar result metadata");}})());}function Ant(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 Ent(e,t,o){t&&(e.beforeUrl=t.beforeUrl),o&&(e.afterUrl=o.afterUrl,e.data=o.data);}async function wnt(e,t,o,n){await Promise.allSettled(e),o&&(t.beforeSnapshot=o.beforeSnapshot),n&&(t.afterSnapshot=n.afterSnapshot);}function rI(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 xg(e,t,o){return Rnt(e,t,o)}async function Rnt(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 oe?s=`${r}`:s=`An unexpected error occurred: ${r.message}`,e.type==="RESOLVED_MODULE"){let l=rI(e,{},"FAILED");return l.message=s,l.startedAt=n,l.finishedAt=i,l}return {...LT(e),startedAt:n,finishedAt:i,status:a,data:null,message:s,results:[]}}}async function Fa(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 Bv=20,gN=100;function zV(e){return e.baseDerivedFrom==="estimate"}var Cnt={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 fN(e){return e.baseDerivedFrom?` The base of this comparison window is ${Cnt[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}
449
449
  ${e}`}]}function ji({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 yN(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 q(e){if(e.length===0)throw new Wt("No content parts provided to construct the tool response content.");return {type:"content",value:e}}function il(e){return {type:"content",value:[{type:"text",text:e}]}}function HV({data:e,filters:t}){let o=Vne(e,t??[]);return Rh(o)?o:{}}function bN({data:e,filters:t,tokenLimit:o,perItemLimit:n=Math.max(1,Math.floor(o/4))}){let r=HV({data:e,filters:t}),i=JSON.stringify(r,null,2);if(xt(i)<=o)return i;let a=$V({environmentVariables:r,perItemLimit:n}),s=JSON.stringify(a,null,2);return xt(s)<=o?s:JSON.stringify(GV(a,o),null,2)}function $V({environmentVariables:e,perItemLimit:t}){return Object.fromEntries(Object.entries(e).map(([o,n])=>{if(Rh(n))return [o,pge(n,t)];let r=pge({[o]:n},t);return [o,r[o]]}))}function pge(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(xt(i)>t){o[n]="[too large truncated]";continue}o[n]=r;continue}if(typeof r=="string"){o[n]=Int(r,t);continue}o[n]=r;}return o}function Int(e,t){let o=xt(e);if(o<=t)return e;let n=Math.max(1,Math.floor(t*(e.length/o)));return `${e.slice(0,n)}... [truncated]`}function GV(e,t){let o={},n=0,r=Object.entries(e).map(([i,a])=>{let s=JSON.stringify(a,null,2),l=xt(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 hge({projectRoot:e,filePath:t,pathLabel:o="path"}){if(!t||!bn__default.isAbsolute(t))return t;let n=bn__default.relative(e,t);if(n.startsWith("..")||bn__default.isAbsolute(n))throw new Error(`Error: ${o} "${t}" must be inside project root "${e}".`);return n}function gge(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 Tge=["__generated__"],vge=[".env",".npmrc",".netrc",".git-credentials","credentials","credentials.json"],Age=[".env.","id_rsa","id_ecdsa","id_ed25519","service-account"],Ege=[".pem",".key",".p12",".pfx",".keystore",".jks",".tfstate"],wge=[".tfstate."],TN=[...vge.map(e=>`**/${e}`),...Age.map(e=>`**/${e}*`),...Ege.map(e=>`**/*${e}`),...wge.map(e=>`**/*${e}*`)];function fge(e){let t=bn__default.basename(e).toLowerCase();return vge.includes(t)||Age.some(o=>t.startsWith(o))||Ege.some(o=>t.endsWith(o))||wge.some(o=>t.includes(o))}function Uv(e){return `Relative paths resolve at the Git repository root \`${e}\`, never at the server cwd; absolute paths are also accepted.`}function yge(e,t){return bn__default.resolve(bn__default.resolve(e),t)}async function iI(e,t){let o=yge(e,t);if(bn__default.isAbsolute(t)||await bge(o))return o;let n=yge(process.cwd(),t);return n===o||!await bge(n)?o:n}async function bge(e){try{return await WV.stat(e),!0}catch{return false}}async function Rge(e,t){let o=await iI(e,t);if(fge(o))throw new Error(`Path '${t}' matches the sensitive-file deny list (likely credentials or secrets) and cannot be read.`);let n=await WV.realpath(o);if(fge(n))throw new Error(`Path '${t}' matches the sensitive-file deny list (likely credentials or secrets) and cannot be read.`);return n}var _nt=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 Pnt(e){return `Find files by glob pattern. ${Uv(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 AN(e){return {tool:tool({description:Pnt(e.repoRoot),inputSchema:_nt,execute:async(o,{abortSignal:n})=>{let r=await Ont(o,e,n);return q(L({text:knt(o.pattern,r)}))},toModelOutput:({output:o})=>o}),name:gr}}async function Ont({pattern:e,path:t,maxResults:o},n,r){let i=Tc({signal:r,timeoutMs:3e4});i.throwIfAborted();let a=bn__default.resolve(n.repoRoot),s=t?await iI(a,t):a,l=await Nd([e],{cwd:s,ignore:[...Tge.map(c=>`**/${c}`),...TN],maxDepth:1/0,nodir:true,signal:i});return i.throwIfAborted(),l.slice(0,o).map(c=>bn__default.relative(a,bn__default.resolve(s,c)))}function knt(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(`
450
450
  `)}async function EN({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([ca(`${e}^{commit}`,o.repoRoot,n),ca(`${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 aI({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?Cge(g,300):g),c=l.join(`
451
451
  `),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(`
@@ -2065,7 +2065,7 @@ ${e}`;default:return e}}async function Hl({frameConfig:e,action:t,browser:o}){le
2065
2065
  `),c=0,u=[],d=0,m=[],p=[],h=false;for(;c<l.length;){h&&(s.push({ids:m,content:u.join(`
2066
2066
  `),tokenLength:d}),u=[],d=0,m=p.length?[p[p.length-1].id]:[],h=false);let g=l[c],f=xt(g);d+=f,g.length>a&&(g=g.slice(0,a));let S=Array.from(g.matchAll(qve)).map(k=>k&&k.length>=3?{tagName:k[1],id:k[2]}:void 0).filter(k=>!!k),E=Array.from(g.matchAll(agt)).map(k=>k&&(k[2]||k[4])).filter(k=>!!k);E.reverse();let R=g.replace(/ id="[0-9]+"/g,"");u.push(R);for(let k of S)m.push(k.id),p.push(k);for(let k of E){let $=p[p.length-1];$&&$.tagName===k&&p.pop();}let w=p.some(k=>lgt.includes(k.tagName)),O=l[c+1]??"",I=xt(O),P=Array.from(O.matchAll(qve)).map(k=>k&&k.length>2?k[1]:void 0).filter(k=>!!k),M=P.some(k=>Yve.includes(k)),B=P.some(k=>sgt.includes(k));d+I>=i&&(h=true),d>=n&&(M&&!w||E.some(k=>cgt.includes(k)))&&(h=true),d>=r&&B&&!w&&(h=true),c++;}return u.length&&s.push({ids:m,content:u.join(`
2067
2067
  `),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 Xve=5e6,mgt=1e5,pgt=3e4,hgt=6e4,ggt=1e5;async function Gl(e){let{fixtures:t}=e,{logger:o}=t,n=e.tree,r=e.serializedTree,i=xt(r);if(i>Xve)throw new oe("UserConfigurationError",`Page accessibility tree is too large for AI page filtering (${i} tokens). Maximum supported size is ${Xve} tokens.`);if(i>mgt){let a=Jve({serializedTree:r,options:Kve,logger:o}),s=randomUUID();n=await fgt({...e,chunks:a.chunks,callId:s}),r=n.serialize();let l=xt(r);o.info({oldTokens:i,newTokens:l,langfuseCallId:s},"Filtered page using AI chunk ranking");}return r}async function fgt({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:pgt,mediumTokenLimit:hgt,hardTokenLimit:ggt,callId:t},{abortSignal:s,logger:l,loggerTags:So(l)}),u=[];return o.forEach((m,p)=>{c.indices.includes(p)&&(u=u.concat(m.ids));}),i.pruneUsingRelevantIds(new Set(u))}function bgt(e,t){return t.markIneligibleElementsInChecks===true&&e.source==="ELEMENT_CHECK"&&e.allowNotActionableNodesOverride===false?true:void 0}async function yK(e,t){if(!e.description)throw new oe("UserConfigurationError","Cannot locate element with empty description");return Hl({action:async()=>Zve(e,t),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,browser:t.browser,logger:e.logger})}async function Qve(e,t){if(e.length===0)return [];if(e.some(s=>s.iframeUrl))throw new oe("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 oe("UserConfigurationError",`Batch element location requires identical page-capture settings, but target ${n+1} differs from target 1`);let r=await eAe(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=>Zve(s,t,{...r,materialize:a})))}async function Zve(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=Kn(),A=e.useMemory&&!n;r&&(b=await ja({orgId:p,s:b,context:r,codeEvaluator:g,signal:y,logger:s})),i&&(b=$ve(b,i));let{serializedTree:E,tree:R,screenshotBuff:w}=o??await eAe(e,t);if(m?.serializedTree===E&&m?.screenshotBuff?.equals(w))throw s.info("Skipping AI locate, the page is unchanged since the last miss"),new wf("Could not find any relevant element: the page has not changed since the last attempt",void 0);let O=E,I=false,P=`data:image/jpeg;base64,${w.toString("base64")}`,M=So(s);O=await Gl({type:"locator",description:b,screenshot:P,serializedTree:E,tree:R,fixtures:{generator:f,signal:y,logger:s,orgId:p}}),O!==E&&(I=true);let B=await S.startAsyncSpan("AI_LOCATOR_CALL",async N=>{c&&(N.attributes.isAutoHeal=true),u&&(N.attributes.cacheBustReason=u);let ae=await f.getElementLocation({browserState:O,goal:b,screenshot:P,source:i,markIneligibleElementsInChecks:bgt(e,h.userBrowserSettings),memory:A?a:void 0},{disableCache:n,effort:e.effort,onEffectiveEffort:e.onEffectiveEffort,abortSignal:y,logger:s,loggerTags:M,useMemory:A,cacheBustReason:u});if(N.result=ae,A&&(N.attributes.useMemory=true,N.attributes.memoryTraces=ae.rememberedTraces??[],ae.updatedMemory&&(N.attributes.memorySavedNewResult=true)),S.storeTraceAsset){let Q=randomUUID();S.storeTraceAsset({snapshotId:Q,data:w}),N.screenshotSnapshotId=Q;}return ae});if(s.debug({usedRag:I,result:B},"Got locator result"),!(B.id>0))throw m&&(m.serializedTree=E,m.screenshotBuff=w),new wf(`Could not find any relevant element: ${B.thoughts}`,B.updatedMemory?{type:"GCS_TRACES",traces:B.updatedMemory}:void 0);let $=()=>S.startAsyncSpan("TARGET_RESOLUTION",async N=>{let ae=await h.createTargetFromA11yId({id:B.id,requirements:B.requirements,additionalElements:B.additionalElements,description:b,targetSource:"AI",logger:s,skipSavingVisualAttributes:l,acceptElementMovedError:d});return N.result={serializedElement:ae.target.nodeOnlySerializedHtml??"Unknown HTML element"},ae}),{resolution:Z,target:z,frameConfig:Y}=o?.materialize?await o.materialize($):await $();if(Z.a11yNode?.properties?.hidden&&Z.a11yNode?.properties?.hidden!=="false")throw new oe("ActionFailureError",`Momentic's AI found a relevant element to interact with, but it is explicitly marked with an 'aria-hidden' attribute. Please remove this attribute or adjust the element description to locate a different element. Element chosen: ${Z.displayString}`);return A&&(B.updatedMemory?z.memory={type:"GCS_TRACES",traces:B.updatedMemory}:a&&(z.memory=a)),{thoughts:B.thoughts,target:z,resolution:Z,frameConfig:Y,screenshot:P}}async function eAe(e,t){let{allowNotActionableNodesOverride:o,allowIneligibleTagRedirect:n,showZeroOpacityElementsOverride:r,filterByViewport:i,skipWait:a,logger:s}=e,{browser:l,abortSignal:c}=t,u=Kn(),{serializedTree:d,tree:m}=await u.startAsyncSpan("GET_PAGE_STATE",async()=>$l(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 oe("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 Sgt=15;async function gF({command:e,logger:t,fixtures:o,useMemory:n,maxRetries:r=Sgt,recoveryHint:i,effort:a,onEffectiveEffort:s}){if(!e.assertion.trim())throw new oe("ActionFailureError","Assertion command is missing the assertion content");let l=jj.optional().catch(void 0).parse(e.source);e.source&&!l&&t.warn(`Invalid source ${e.source} for AI assertion, ignoring...`);let c=Kn();return c.startAsyncSpan("AI_ASSERTION_CALL",async u=>{let{browser:d}=o,m=e.timeout?e.timeout*1e3:d.smartWaitingTimeout,p=tae(m,r-1),h=0,g=Date.now(),f=g+m,y=g,b,S,A;try{await Hl({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,P=y-w,M=Math.min(P,_);M>0&&await ht(M,o.abortSignal);}let O=Date.now();if(h>0&&O>=f)break;let I=false;try{if(b=await Hl({action:async()=>{let P=await oAe(d,t,o.abortSignal);return S&&S.serializedTree===P.serializedTree&&S.screenshotBuff.equals(P.screenshotBuff)?(I=!0,b):(S=P,nAe({command:e,state:P,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&&KR(e,b.updatedMemory,t);break}else throw b?.aiResult.thoughts?new oe("AssertionFailureError",b.aiResult.thoughts):new oe("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(_){o.abortSignal.throwIfAborted(),A=_ 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=O+p;}}if(!b?.aiResult.result){let w=f-Date.now();w>0&&await ht(w,o.abortSignal);}if(!b?.aiResult.result)try{b=await Hl({action:async()=>nAe({command:e,state:await oAe(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(),A=w instanceof Error?w:new Error(`${w}`);}finally{h++;}b?.updatedMemory&&KR(e,b.updatedMemory,t);let E=b?.afterScreenshotOverride;if(E&&c.storeTraceAsset){let w=randomUUID();c.storeTraceAsset({snapshotId:w,data:E}),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:A?.message??"AI check failed after all attempts",result:false};let w=`AI check still failing after ${h} attempts.`;throw A&&(w+=` Latest result: ${A.message}`),new oe("AssertionFailureError",w)}return u.result=b.aiResult,{...b,thoughts:b.aiResult.thoughts,succeedImmediately:false,urlAfterCommand:d.url()}})}async function oAe(e,t,o){await e.waitForPageLoad({signal:o});let[n,r]=await Promise.all([$l(e,{abortSignal:o,skipWait:true,skipWaitForPageLoad:true,logger:t}),e.screenshot({retries:1,respectActiveFrame:true})]);return {...n,screenshotBuff:r}}async function nAe({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"),A=m.url(),E=e.contextChoice??"MULTIMODAL",R=f;E!=="VISION_ONLY"&&(R=await Gl({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:A,memory:r?e.cache?.memory:void 0,browserState:R,screenshot:S,contextChoice:E,source:s,recoveryHint:c},I=await(E==="VISION_ONLY"?(P,M)=>p.getVisualAssertionResult(P,M):(P,M)=>p.getAssertionResult(P,M))(w,{useConsensus:n,attemptNumber:a,useMemory:r,disableCache:!!e.disableCache,effort:u,onEffectiveEffort:d,abortSignal:h,logger:l,loggerTags:So(l)}),_;if((I.result||i)&&I.relevantElements?.length){I.relevantElements.map(P=>m.getSerializedFormFromA11yId(P)).filter(P=>!!P);try{let P=I.relevantElements[0],{resolution:M}=await m.createTargetFromA11yId({id:P,description:null,targetSource:"AI",skipSaveToCache:!0});_=await m.screenshot({locator:M.locator,clearHighlights:!0,respectActiveFrame:!0});}catch(P){l.debug({err:P},"Failed to capture element screenshot for trace, continuing...");}await Tgt(I.relevantElements,m,l);}return {aiResult:I,afterScreenshotOverride:b,elementScreenshotOverride:_,updatedMemory:r?I.updatedMemory:void 0}}async function Tgt(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 iAe(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 oe("ActionFailureError","Cannot perform AI extraction without goal");if(t.schema){let m=hoe(t.schema);if(m)throw new oe("UserConfigurationError",m)}let c;i&&!t.iframeUrl?c=(await a.evaluateFunctionInAllFrames(vgt,{bannedAttributes:a.userBrowserSettings.bannedAttributes})).join(`
2068
- `):c=await a.getCondensedHtml();let u=await a.screenshot({retries:2,respectActiveFrame:true}),d=Kn();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:So(o)});if(m.result=p,Agt({tracer:d,span:m,screenshot:u,htmlState:c,logger:o}),p.result==="NOT_FOUND")throw new oe("ActionFailureError","No relevant data found for extraction goal on this page");if(p.thoughts?.includes("MaxGenerationLengthExceededError"))throw new oe("UserConfigurationError",p.thoughts);return {thoughts:p.thoughts||void 0,data:p.result,succeedImmediately:!1,urlAfterCommand:a.url()}})}catch(m){let p=H(m);throw p.includes("MaxGenerationLengthExceededError")?new oe("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 oe("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 vgt({bannedAttributes:e}){return window._momentic?.getCondensedHtmlTree?.({bannedAttributes:e})?.result??""}function Agt(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 aAe=500;async function sAe(e,t){let{logger:o}=e,{abortSignal:n,browser:r}=t,i=Date.now();try{await Egt(i,e,t);}catch(a){if(Pm(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 ht(s,n);}finally{o.debug({durationMs:Date.now()-i},"AI smart waiting complete");}}async function Egt(e,t,o){let{abortSignal:n,browser:r}=o;if(r.smartWaitingTimeout<3e3){await ht(r.smartWaitingTimeout,n);return}if(!t.description)throw new oe("UserConfigurationError","Cannot locate element with empty description");await ge(wgt(e,t,o),{milliseconds:r.smartWaitingTimeout});}async function wgt(e,t,o){let{logger:n,iframeUrl:r,testContext:i}=t,{abortSignal:a,browser:s,codeEvaluator:l,orgId:c}=o,u=i?await ja({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 Hl({action:async()=>{let g=await Rgt(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<aAe&&await ht(aAe-h,a);}}async function Rgt(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 oe("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:So(r)});return r.debug({result:d},"Got smart waiting result"),{isReady:d.isPageReady,notReadyScreenshot:d.isPageReady?void 0:l}}var Cgt=3e4;function Igt({command:e,originalCache:t,cacheToUse:o,keepMemory:n}){if(o){if(n){let r=IG(t,o);return o.target=r.target,o.updatedAt=r.updatedAt,o}if(!t){let r=pd(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 uAe(e){return Kn().startAsyncSpan("ELEMENT_ASSERTION",async o=>xgt(e,o),{name:"Element check"})}async function xgt(e,t){let{command:o,timeoutMs:n,fixtures:r,disableCache:i}=e,{abortSignal:a}=r,s=()=>z_(o.cache)?o.cache:void 0,l=s(),c=!i&&!!l?.target&&Jb(l.target),u=cloneDeep(l),d=(E=false)=>{l=Igt({command:o,originalCache:u,cacheToUse:s(),keepMemory:E});},m={},p=Date.now(),h=c?Math.max(n/10,Cgt):0,g=p,f=0,y,b=500,S=false;for(;f<2||Date.now()-p<n;){f++,f>1&&await ht(b,a),a?.throwIfAborted(),l=s();let E=f===1,R=c&&Date.now()-g>=h;R&&(g=Date.now());let{result:w,elementWasFound:O}=await lAe({cacheToUse:l,skipAISmartWaiting:!E,useAIIfCacheFails:!c||R,pastLocatorMiss:m,params:e});if(y=w,S=S||O,w.success)break;d(),b=Math.min(b*1.25,1e4);}if(!y)throw new oe("InternalPlatformError",`Failed to evaluate manual element assertion in ${n}ms.`);if(a?.throwIfAborted(),!y.success){let E=s(),R=E?.target?.memory?{target:{id:-1,memory:E.target.memory}}:void 0,{result:w,elementWasFound:O}=await lAe({cacheToUse:R,skipAISmartWaiting:true,useAIIfCacheFails:true,params:e});y=w,S=S||O,y.success||d(true);}let A=s();return y.success&&A?.target&&!S&&(A.target=Yh(A.target),A.updatedAt=new Date),t.result={success:y.success,message:y.err?.message},y}async function lAe({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&&!Qc(i.target))throw new Error("Element assertion with x/y is not supported yet");let d=Pre(i.assertion),m=_gt(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=>Pgt(S.locator,r),options:{...i,allowNotActionableNodesOverride:m,allowIneligibleTagRedirect:m,showZeroOpacityElementsOverride:!0,disableCache:a,memory:g?.target?.memory,disableGlobalLocatorRedirect:!0,source:pd(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 oe)||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 _gt(e){return !(e.type==="ELEMENT_EXISTENCE"&&e.condition==="VISIBLE"&&!e.negated)}async function Pgt(e,{command:t,fixtures:o}){return await o.browser.highlight(e),await Ogt(e,t.assertion)}async function Ogt(e,t){let o=true,n,r;switch(t.type){case "ELEMENT_CONTENT":{let a=await e.textContent()??"";if(r={elementTextContent:un(a,500,true)},!VR(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let s=AT(t);o=false,n=new oe("AssertionFailureError",`The content ${s} '${t.value}': ${a}`);}break}case "ELEMENT_ATTRIBUTE":{r={elementOuterHtml:un(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 oe("AssertionFailureError",H(s)),o=false;break}if(!VR(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let s=AT(t);o=false,t.operation==="EXISTS"?n=new oe("AssertionFailureError",`The attribute ${t.attr} ${s}`):n=new oe("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},ec*1e3);break}case "EDITABLE":{o=await e.isEditable({timeout:ec*1e3});break}case "EXISTS":{o=true;break}case "ENABLED":{o=await e.isEnabled({timeout:ec*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=AT(t);n=new oe("AssertionFailureError",`The element ${a}`);}break}case "ELEMENT_NAME":{let a=await e.evaluate(s=>s.tagName);if(!VR(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:true})){let s=AT(t);o=false,n=new oe("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(!VR(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let s=AT(t);o=false,t.operation==="EXISTS"?n=new oe("AssertionFailureError",`The style property ${t.property} ${s}`):n=new oe("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 dAe(e){return e.type==="ELEMENT_EXISTENCE"&&e.negated&&e.condition==="EXISTS"}async function FI(e,t){let o=await e.screenshot(t),{width:n,height:r}=nF(o);return {buffer:o,width:Math.ceil(n),height:Math.ceil(r)}}async function pAe(e){let{command:t,browser:o,logger:n}=e;if(t.target&&!Qc(t.target))throw new Error("Visual Diff with x/y is not supported yet");return await o.waitForStability({logger:n}),Kn().startAsyncSpan("VISUAL_DIFF",async i=>{try{let a=await Mgt(e);return i.result={success:!a.fail,message:a.thoughts},a}catch(a){throw a instanceof oe&&(i.result={success:false,message:a.message}),a}},{name:"Compare against golden"})}async function Mgt({tracer:e,command:t,disableCache:o,browser:n,targetingWrapper:r,logger:i,screenshotStorage:a}){let s={clearHighlights:true,hideCaret:true},l=t.target&&Qc(t.target)?t.target:void 0,c;l?.elementDescriptor?c=(await r({tracer:e,command:t,target:l,cache:t.cache?.target,action:async P=>FI(n,{locator:P.locator,...s}),options:{...t,disableCache:o,disableGlobalLocatorRedirect:true,memory:t.cache?.target?.memory,targetName:"target"}})).result:c=await FI(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}`,P=`${u.width}x${u.height}`;return {fail:true,thoughts:`Current screenshot (${_}) does not match saved screenshot dimensions (${P}) - 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 A={data:Buffer.alloc(c.width*c.height*4),width:c.width,height:c.height},E=t.threshold??.1,w=Upt(bK.decode(u.buffer).data,bK.decode(c.buffer).data,A.data,c.width,c.height,{threshold:E,diffColorAlt:[0,255,0]})/(c.width*c.height)*100,O=w>E*100,I=`Visual diff of ${w.toFixed(2)}% detected, which is ${O?"over":"under"} the threshold of ${E*100}%.`;if(g&&(I+=` The ${g} screenshot was cropped since it was taller by ${b} pixels and wider by ${S} pixels.`),O)throw new oe("ActionFailureError",I);return {fail:O,thoughts:I,beforeScreenshotOverride:c.buffer,afterScreenshotOverride:bK.encode(A,75).data,succeedImmediately:false,urlAfterCommand:n.url()}}var Lgt=3e4;function Ngt(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 hAe({command:e,logger:t,baseUrl:o,fetchImplementation:n=fetch}){let r=e.timeout??Lgt/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(NT(e.url)&&(l=e.url),o&&DT(e.url,o)&&(l=new URL(e.url,o).toString()),!l)throw new oe("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=Ngt(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 oe("ActionFailureError",`Failed to make HTTP request: ${H(g)}`,{errOptions:{cause:g}})}})(),{milliseconds:r*1e3,fallback:()=>{throw new oe("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 oe("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 Dgt=5e3;async function fF({timeout:e=ec,...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 gAe(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 ht(s,t.signal),s=Math.min(Math.floor(s*1.5),Dgt);else return i}return i=await gAe(t),i}async function gAe(e){return Kn().startAsyncSpan("PAGE_ASSERTION",async o=>{let n=await Fgt(e);return o.result={success:n.success,message:n.err?.message},n},{name:"Page check"})}async function Fgt({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(fAe,{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(fAe,{value:e.value,negated:!!e.negated,returnHtml:!0},"checking page content"));if(!i){let l=e.negated?Zm.CONTAINS:ep.CONTAINS;a=new oe("AssertionFailureError",`The page ${l} '${e.value}'.`),r=s;}}catch(s){a=new oe("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 fAe({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 Bgt=3e4;async function yAe({command:e,logger:t,baseUrl:o,fetchImplementation:n=fetch}){let r=e.timeout??Bgt/1e3,i=new AbortController,a=Object.fromEntries(Object.entries(e.headers||{}).filter(([d,m])=>d&&m));a["Content-Type"]="application/json";let s;if(NT(e.url)&&(s=e.url),o&&DT(e.url,o)&&(s=new URL(e.url,o).toString()),!s)throw new oe("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 oe("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 oe("ActionFailureError",`GraphQL request failed with status ${c.status}: ${m}`)}throw d?.errors?.length&&d?.errors[0]?.message?new oe("ActionFailureError",`GraphQL request failed with status ${c.status}: ${d.errors[0].message}`):new oe("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 hA=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([$l(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 Gl({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:{...So(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([$l(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 Gl({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:{...So(a)},langfuseSessionId:s})}catch(h){throw new oe("InternalWebAgentError",`Error generating command: ${h instanceof Error?h.message:h}`,{errOptions:{cause:h}})}}async getBrowserState(t){return $l(this.browser,t)}async locateElement(t){return await yK(t,this.getControllerFixtures())}async locateMultipleElements(t){return Qve(t,this.getControllerFixtures())}async locateElementWithSelector(t,o){return Hl({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 oe("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 oe("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 ht(500);}}throw s}async scrollIntoViewAndResolveFinalTarget(t){let{resolutionResult:o,disableGlobalLocatorRedirect:n,logger:r}=t,i=Kn(),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:St}),originalElementLocationResult:o.originalElementLocationResult}),s}async resolveCachedTargetForAction(t){let{cache:o,options:n,logger:r}=t,a=await Kn().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 fa&&(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 Hl({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=Kn(),h=this.logger.child({commandId:a.id}),g=this.shouldUseMemory(),f=cloneDeep(t.cache);if((!f||u)&&!AJ(n))throw new oe("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=Wve({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 A=true,E=i.memory??f?.memory;if(!Vve(f))return c--,A=false,this.executeTargetingCommandWithAI({tracer:p,stepTracer:o,target:n,options:{...i,memory:E},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}),O=await r(w);if(go.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.59.2"]),Uk({cmd:a,key:m,newTarget:f,logger:h,updatedWithAI:!1}),A){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:O,elementInteractedDisplayString:R.displayString}}catch(R){this.throwIfClosed();let w=Ez(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 oe&&!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 fa?zve(R.decisions):void 0},"Failed to execute action with cached target, retrying with AI"),go.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.59.2",`missReason:${R instanceof fa?R.cacheMissReason:"unknown"}`]);let O;f.memory&&B_(f.memory)&&(O=f.memory);let I=R instanceof fa&&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:O,targetHealingInProgress:true},skipInitialLocateWait:I})}throw new oe("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 sAe({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(),A=i.force||y>1;try{let E;try{E=await yK({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:A,pastLocatorMiss:i.pastLocatorMiss},this.getControllerFixtures());}catch(O){if(O instanceof wf&&O.updatedLocatorMemory){let I={id:-1,...l,memory:O.updatedLocatorMemory};Uk({cmd:a,key:i.targetName,newTarget:I,logger:c,updatedWithAI:!0});}throw O}E.frameConfig&&(this.browser.setActiveFrameConfig(E.frameConfig),b=!0);let R=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:E.resolution,disableGlobalLocatorRedirect:i.disableGlobalLocatorRedirect,logger:c}),w=await s(R);return Uk({cmd:a,key:i.targetName,newTarget:E.target,logger:c,updatedWithAI:!0}),i.targetHealingInProgress&&(n.recordTargetAutoHeal({healType:"AI"}),E.target.targetSource="AI_HEALED",E.target.targetUpdateTime=new Date().toUTCString(),E.target.targetUpdateLoggerTags=So(c)),{result:w,elementInteractedDisplayString:E.resolution.displayString,thoughts:E.thoughts}}catch(E){if(b&&this.browser.setActiveFrameConfig(S),this.throwIfClosed(),y<f&&Ez(E)){c.warn({err:E,aiAttempt:y},"Encountered retryable AI targeting error; retrying with AI once");continue}throw E instanceof oe?E:new oe("ActionFailureError",E.message,{errOptions:{cause:E}})}}throw new oe("ActionFailureError","Failed to execute AI targeting after retry")}async screenshotWithDimensions(t){return FI(this.browser,t)}async waitBetweenSteps(){this.options?.slowMoMs&&await ht(this.options.slowMoMs,this.executeAbortController.signal);}async executePresetCommand(t,o,n,r,i,a,s){let l=await this.browser.getOpenPages(),c=this.browser.url(),u;try{u=await this.resolveCommandTemplateStrings(o,n);}catch(d){throw this.throwIfClosed(),new oe("ActionFailureError",`Failed to substitute template strings in command: ${d.message}`,{errOptions:{cause:d}})}try{let d=await pe({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 Gve({beforeUrl:c,command:o,beforePages:l.map(m=>m.url),browser:this.browser,logger:this.logger}),d}catch(d){throw d.name!=="AbortError"&&this.logger.warn({err:d},"Error thrown in action controller"),d}finally{Bve(o,u);}}createCallbacksForBrowser(t){return {createIsolatedFolder:()=>Hq(t)}}async traceBrowserInteraction(t,o,n){return Kn().startAsyncSpan("BROWSER_INTERACTION",async i=>o(i),{name:t,...n})}async resolveCommandTemplateStrings(t,o){return hF({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()?gF({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 oe("ActionFailureError","Missing assertion");if(o.timeout&&o.timeout>1800)throw new oe("AssertionFailureError",`AI check timeout of ${o.timeout} exceeds the maximum allowed value of 30 minutes.`);return gF({command:o,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:l,recoveryHint:i,effort:a,onEffectiveEffort:s})}case "AI_EXTRACT":return Hl({action:()=>iAe({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(!NT(o.url)&&!DT(o.url,this.browser.baseUrl))throw new oe("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 oe("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&&td(o.target)){let h=ba(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??ea.height,p=this.browser.getViewport()?.width??ea.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 oe("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 oe("UserConfigurationError",`Wait timeout of ${o.delay} seconds exceeds the maximum allowed value of 30 minutes`);let u=o.delay*1e3;await ht(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(td(o.target)){let g=ba(o.target.pixels),f={...o,relativePosition:o.relativePosition?ba(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?ba(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 tM(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(td(o.fromTarget)&&td(o.toTarget)){let m=ba(o.fromTarget.pixels),p=ba(o.toTarget.pixels);await this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDropUsingVisualCoordinates(m,p,{hoverDurationMs:o.hoverSeconds?o.hoverSeconds*1e3:void 0}),{coordinates:m});break}if(td(o.fromTarget)||td(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 oe("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${o.deltaX}, ${o.deltaY})`);if(o.target&&td(o.target)){let g=ba(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(!Qc(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:pd(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 tf({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 oe("ActionFailureError",d instanceof Error?d.message:`${d}`,{errOptions:{cause:d}})}try{JSON.stringify(u);}catch(d){throw new oe("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&&td(o.target)){let f=ba(o.target.pixels),y={...o,relativePosition:o.relativePosition?ba(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:pd(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 tM(u,g.urlAfterCommand)&&(g.succeedImmediately=true,g.succeedImmediatelyReason="URL changed"),g}case "HOVER":{if(td(o.target)){let m=ba(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?ba(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(!Qc(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&&!Qc(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 tM(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=zgt(fetch,u),m;try{m=new URL(o.url).hostname;}catch{}let p=await hAe({command:o,baseUrl:this.browser.baseUrl,logger:l,fetchImplementation:d});return {data:$E.parse({...p,cookies:Q8(u,m)}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GRAPHQL_REQUEST":return {data:await yAe({command:o,baseUrl:this.browser.baseUrl,logger:l}),succeedImmediately:false,urlAfterCommand:this.browser.url()};case "VISUAL_DIFF":return pAe({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 mTe({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 oe("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&&rg(o.storageState)){let d=bn__default.resolve(o.storageState);mn__default.mkdirSync(bn__default.dirname(d),{recursive:true}),mn__default.writeFileSync(d,`${JSON.stringify(u,null,2)}
2068
+ `):c=await a.getCondensedHtml();let u=await a.screenshot({retries:2,respectActiveFrame:true}),d=Kn();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:So(o)});if(m.result=p,Agt({tracer:d,span:m,screenshot:u,htmlState:c,logger:o}),p.result==="NOT_FOUND")throw new oe("ActionFailureError","No relevant data found for extraction goal on this page");if(p.thoughts?.includes("MaxGenerationLengthExceededError"))throw new oe("UserConfigurationError",p.thoughts);return {thoughts:p.thoughts||void 0,data:p.result,succeedImmediately:!1,urlAfterCommand:a.url()}})}catch(m){let p=H(m);throw p.includes("MaxGenerationLengthExceededError")?new oe("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 oe("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 vgt({bannedAttributes:e}){return window._momentic?.getCondensedHtmlTree?.({bannedAttributes:e})?.result??""}function Agt(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 aAe=500;async function sAe(e,t){let{logger:o}=e,{abortSignal:n,browser:r}=t,i=Date.now();try{await Egt(i,e,t);}catch(a){if(Pm(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 ht(s,n);}finally{o.debug({durationMs:Date.now()-i},"AI smart waiting complete");}}async function Egt(e,t,o){let{abortSignal:n,browser:r}=o;if(r.smartWaitingTimeout<3e3){await ht(r.smartWaitingTimeout,n);return}if(!t.description)throw new oe("UserConfigurationError","Cannot locate element with empty description");await ge(wgt(e,t,o),{milliseconds:r.smartWaitingTimeout});}async function wgt(e,t,o){let{logger:n,iframeUrl:r,testContext:i}=t,{abortSignal:a,browser:s,codeEvaluator:l,orgId:c}=o,u=i?await ja({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 Hl({action:async()=>{let g=await Rgt(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<aAe&&await ht(aAe-h,a);}}async function Rgt(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 oe("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:So(r)});return r.debug({result:d},"Got smart waiting result"),{isReady:d.isPageReady,notReadyScreenshot:d.isPageReady?void 0:l}}var Cgt=3e4;function Igt({command:e,originalCache:t,cacheToUse:o,keepMemory:n}){if(o){if(n){let r=IG(t,o);return o.target=r.target,o.updatedAt=r.updatedAt,o}if(!t){let r=pd(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 uAe(e){return Kn().startAsyncSpan("ELEMENT_ASSERTION",async o=>xgt(e,o),{name:"Element check"})}async function xgt(e,t){let{command:o,timeoutMs:n,fixtures:r,disableCache:i}=e,{abortSignal:a}=r,s=()=>z_(o.cache)?o.cache:void 0,l=s(),c=!i&&!!l?.target&&Jb(l.target),u=cloneDeep(l),d=(E=false)=>{l=Igt({command:o,originalCache:u,cacheToUse:s(),keepMemory:E});},m={},p=Date.now(),h=c?Math.max(n/10,Cgt):0,g=p,f=0,y,b=500,S=false;for(;f<2||Date.now()-p<n;){f++,f>1&&await ht(b,a),a?.throwIfAborted(),l=s();let E=f===1,R=c&&Date.now()-g>=h;R&&(g=Date.now());let{result:w,elementWasFound:O}=await lAe({cacheToUse:l,skipAISmartWaiting:!E,useAIIfCacheFails:!c||R,pastLocatorMiss:m,params:e});if(y=w,S=S||O,w.success)break;d(),b=Math.min(b*1.25,1e4);}if(!y)throw new oe("InternalPlatformError",`Failed to evaluate manual element assertion in ${n}ms.`);if(a?.throwIfAborted(),!y.success){let E=s(),R=E?.target?.memory?{target:{id:-1,memory:E.target.memory}}:void 0,{result:w,elementWasFound:O}=await lAe({cacheToUse:R,skipAISmartWaiting:true,useAIIfCacheFails:true,params:e});y=w,S=S||O,y.success||d(true);}let A=s();return y.success&&A?.target&&!S&&(A.target=Yh(A.target),A.updatedAt=new Date),t.result={success:y.success,message:y.err?.message},y}async function lAe({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&&!Qc(i.target))throw new Error("Element assertion with x/y is not supported yet");let d=Pre(i.assertion),m=_gt(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=>Pgt(S.locator,r),options:{...i,allowNotActionableNodesOverride:m,allowIneligibleTagRedirect:m,showZeroOpacityElementsOverride:!0,disableCache:a,memory:g?.target?.memory,disableGlobalLocatorRedirect:!0,source:pd(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 oe)||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 _gt(e){return !(e.type==="ELEMENT_EXISTENCE"&&e.condition==="VISIBLE"&&!e.negated)}async function Pgt(e,{command:t,fixtures:o}){return await o.browser.highlight(e),await Ogt(e,t.assertion)}async function Ogt(e,t){let o=true,n,r;switch(t.type){case "ELEMENT_CONTENT":{let a=await e.textContent()??"";if(r={elementTextContent:un(a,500,true)},!VR(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let s=AT(t);o=false,n=new oe("AssertionFailureError",`The content ${s} '${t.value}': ${a}`);}break}case "ELEMENT_ATTRIBUTE":{r={elementOuterHtml:un(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 oe("AssertionFailureError",H(s)),o=false;break}if(!VR(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let s=AT(t);o=false,t.operation==="EXISTS"?n=new oe("AssertionFailureError",`The attribute ${t.attr} ${s}`):n=new oe("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},ec*1e3);break}case "EDITABLE":{o=await e.isEditable({timeout:ec*1e3});break}case "EXISTS":{o=true;break}case "ENABLED":{o=await e.isEnabled({timeout:ec*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=AT(t);n=new oe("AssertionFailureError",`The element ${a}`);}break}case "ELEMENT_NAME":{let a=await e.evaluate(s=>s.tagName);if(!VR(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:true})){let s=AT(t);o=false,n=new oe("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(!VR(a,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let s=AT(t);o=false,t.operation==="EXISTS"?n=new oe("AssertionFailureError",`The style property ${t.property} ${s}`):n=new oe("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 dAe(e){return e.type==="ELEMENT_EXISTENCE"&&e.negated&&e.condition==="EXISTS"}async function FI(e,t){let o=await e.screenshot(t),{width:n,height:r}=nF(o);return {buffer:o,width:Math.ceil(n),height:Math.ceil(r)}}async function pAe(e){let{command:t,browser:o,logger:n}=e;if(t.target&&!Qc(t.target))throw new Error("Visual Diff with x/y is not supported yet");return await o.waitForStability({logger:n}),Kn().startAsyncSpan("VISUAL_DIFF",async i=>{try{let a=await Mgt(e);return i.result={success:!a.fail,message:a.thoughts},a}catch(a){throw a instanceof oe&&(i.result={success:false,message:a.message}),a}},{name:"Compare against golden"})}async function Mgt({tracer:e,command:t,disableCache:o,browser:n,targetingWrapper:r,logger:i,screenshotStorage:a}){let s={clearHighlights:true,hideCaret:true},l=t.target&&Qc(t.target)?t.target:void 0,c;l?.elementDescriptor?c=(await r({tracer:e,command:t,target:l,cache:t.cache?.target,action:async P=>FI(n,{locator:P.locator,...s}),options:{...t,disableCache:o,disableGlobalLocatorRedirect:true,memory:t.cache?.target?.memory,targetName:"target"}})).result:c=await FI(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}`,P=`${u.width}x${u.height}`;return {fail:true,thoughts:`Current screenshot (${_}) does not match saved screenshot dimensions (${P}) - 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 A={data:Buffer.alloc(c.width*c.height*4),width:c.width,height:c.height},E=t.threshold??.1,w=Upt(bK.decode(u.buffer).data,bK.decode(c.buffer).data,A.data,c.width,c.height,{threshold:E,diffColorAlt:[0,255,0]})/(c.width*c.height)*100,O=w>E*100,I=`Visual diff of ${w.toFixed(2)}% detected, which is ${O?"over":"under"} the threshold of ${E*100}%.`;if(g&&(I+=` The ${g} screenshot was cropped since it was taller by ${b} pixels and wider by ${S} pixels.`),O)throw new oe("ActionFailureError",I);return {fail:O,thoughts:I,beforeScreenshotOverride:c.buffer,afterScreenshotOverride:bK.encode(A,75).data,succeedImmediately:false,urlAfterCommand:n.url()}}var Lgt=3e4;function Ngt(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 hAe({command:e,logger:t,baseUrl:o,fetchImplementation:n=fetch}){let r=e.timeout??Lgt/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(NT(e.url)&&(l=e.url),o&&DT(e.url,o)&&(l=new URL(e.url,o).toString()),!l)throw new oe("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=Ngt(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 oe("ActionFailureError",`Failed to make HTTP request: ${H(g)}`,{errOptions:{cause:g}})}})(),{milliseconds:r*1e3,fallback:()=>{throw new oe("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 oe("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 Dgt=5e3;async function fF({timeout:e=ec,...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 gAe(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 ht(s,t.signal),s=Math.min(Math.floor(s*1.5),Dgt);else return i}return i=await gAe(t),i}async function gAe(e){return Kn().startAsyncSpan("PAGE_ASSERTION",async o=>{let n=await Fgt(e);return o.result={success:n.success,message:n.err?.message},n},{name:"Page check"})}async function Fgt({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(fAe,{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(fAe,{value:e.value,negated:!!e.negated,returnHtml:!0},"checking page content"));if(!i){let l=e.negated?Zm.CONTAINS:ep.CONTAINS;a=new oe("AssertionFailureError",`The page ${l} '${e.value}'.`),r=s;}}catch(s){a=new oe("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 fAe({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 Bgt=3e4;async function yAe({command:e,logger:t,baseUrl:o,fetchImplementation:n=fetch}){let r=e.timeout??Bgt/1e3,i=new AbortController,a=Object.fromEntries(Object.entries(e.headers||{}).filter(([d,m])=>d&&m));a["Content-Type"]="application/json";let s;if(NT(e.url)&&(s=e.url),o&&DT(e.url,o)&&(s=new URL(e.url,o).toString()),!s)throw new oe("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 oe("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 oe("ActionFailureError",`GraphQL request failed with status ${c.status}: ${m}`)}throw d?.errors?.length&&d?.errors[0]?.message?new oe("ActionFailureError",`GraphQL request failed with status ${c.status}: ${d.errors[0].message}`):new oe("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 hA=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([$l(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 Gl({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:{...So(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([$l(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 Gl({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:{...So(a)},langfuseSessionId:s})}catch(h){throw new oe("InternalWebAgentError",`Error generating command: ${h instanceof Error?h.message:h}`,{errOptions:{cause:h}})}}async getBrowserState(t){return $l(this.browser,t)}async locateElement(t){return await yK(t,this.getControllerFixtures())}async locateMultipleElements(t){return Qve(t,this.getControllerFixtures())}async locateElementWithSelector(t,o){return Hl({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 oe("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 oe("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 ht(500);}}throw s}async scrollIntoViewAndResolveFinalTarget(t){let{resolutionResult:o,disableGlobalLocatorRedirect:n,logger:r}=t,i=Kn(),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:St}),originalElementLocationResult:o.originalElementLocationResult}),s}async resolveCachedTargetForAction(t){let{cache:o,options:n,logger:r}=t,a=await Kn().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 fa&&(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 Hl({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=Kn(),h=this.logger.child({commandId:a.id}),g=this.shouldUseMemory(),f=cloneDeep(t.cache);if((!f||u)&&!AJ(n))throw new oe("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=Wve({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 A=true,E=i.memory??f?.memory;if(!Vve(f))return c--,A=false,this.executeTargetingCommandWithAI({tracer:p,stepTracer:o,target:n,options:{...i,memory:E},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}),O=await r(w);if(go.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.59.3"]),Uk({cmd:a,key:m,newTarget:f,logger:h,updatedWithAI:!1}),A){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:O,elementInteractedDisplayString:R.displayString}}catch(R){this.throwIfClosed();let w=Ez(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 oe&&!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 fa?zve(R.decisions):void 0},"Failed to execute action with cached target, retrying with AI"),go.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.59.3",`missReason:${R instanceof fa?R.cacheMissReason:"unknown"}`]);let O;f.memory&&B_(f.memory)&&(O=f.memory);let I=R instanceof fa&&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:O,targetHealingInProgress:true},skipInitialLocateWait:I})}throw new oe("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 sAe({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(),A=i.force||y>1;try{let E;try{E=await yK({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:A,pastLocatorMiss:i.pastLocatorMiss},this.getControllerFixtures());}catch(O){if(O instanceof wf&&O.updatedLocatorMemory){let I={id:-1,...l,memory:O.updatedLocatorMemory};Uk({cmd:a,key:i.targetName,newTarget:I,logger:c,updatedWithAI:!0});}throw O}E.frameConfig&&(this.browser.setActiveFrameConfig(E.frameConfig),b=!0);let R=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:E.resolution,disableGlobalLocatorRedirect:i.disableGlobalLocatorRedirect,logger:c}),w=await s(R);return Uk({cmd:a,key:i.targetName,newTarget:E.target,logger:c,updatedWithAI:!0}),i.targetHealingInProgress&&(n.recordTargetAutoHeal({healType:"AI"}),E.target.targetSource="AI_HEALED",E.target.targetUpdateTime=new Date().toUTCString(),E.target.targetUpdateLoggerTags=So(c)),{result:w,elementInteractedDisplayString:E.resolution.displayString,thoughts:E.thoughts}}catch(E){if(b&&this.browser.setActiveFrameConfig(S),this.throwIfClosed(),y<f&&Ez(E)){c.warn({err:E,aiAttempt:y},"Encountered retryable AI targeting error; retrying with AI once");continue}throw E instanceof oe?E:new oe("ActionFailureError",E.message,{errOptions:{cause:E}})}}throw new oe("ActionFailureError","Failed to execute AI targeting after retry")}async screenshotWithDimensions(t){return FI(this.browser,t)}async waitBetweenSteps(){this.options?.slowMoMs&&await ht(this.options.slowMoMs,this.executeAbortController.signal);}async executePresetCommand(t,o,n,r,i,a,s){let l=await this.browser.getOpenPages(),c=this.browser.url(),u;try{u=await this.resolveCommandTemplateStrings(o,n);}catch(d){throw this.throwIfClosed(),new oe("ActionFailureError",`Failed to substitute template strings in command: ${d.message}`,{errOptions:{cause:d}})}try{let d=await pe({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 Gve({beforeUrl:c,command:o,beforePages:l.map(m=>m.url),browser:this.browser,logger:this.logger}),d}catch(d){throw d.name!=="AbortError"&&this.logger.warn({err:d},"Error thrown in action controller"),d}finally{Bve(o,u);}}createCallbacksForBrowser(t){return {createIsolatedFolder:()=>Hq(t)}}async traceBrowserInteraction(t,o,n){return Kn().startAsyncSpan("BROWSER_INTERACTION",async i=>o(i),{name:t,...n})}async resolveCommandTemplateStrings(t,o){return hF({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()?gF({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 oe("ActionFailureError","Missing assertion");if(o.timeout&&o.timeout>1800)throw new oe("AssertionFailureError",`AI check timeout of ${o.timeout} exceeds the maximum allowed value of 30 minutes.`);return gF({command:o,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:l,recoveryHint:i,effort:a,onEffectiveEffort:s})}case "AI_EXTRACT":return Hl({action:()=>iAe({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(!NT(o.url)&&!DT(o.url,this.browser.baseUrl))throw new oe("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 oe("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&&td(o.target)){let h=ba(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??ea.height,p=this.browser.getViewport()?.width??ea.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 oe("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 oe("UserConfigurationError",`Wait timeout of ${o.delay} seconds exceeds the maximum allowed value of 30 minutes`);let u=o.delay*1e3;await ht(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(td(o.target)){let g=ba(o.target.pixels),f={...o,relativePosition:o.relativePosition?ba(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?ba(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 tM(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(td(o.fromTarget)&&td(o.toTarget)){let m=ba(o.fromTarget.pixels),p=ba(o.toTarget.pixels);await this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDropUsingVisualCoordinates(m,p,{hoverDurationMs:o.hoverSeconds?o.hoverSeconds*1e3:void 0}),{coordinates:m});break}if(td(o.fromTarget)||td(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 oe("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${o.deltaX}, ${o.deltaY})`);if(o.target&&td(o.target)){let g=ba(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(!Qc(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:pd(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 tf({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 oe("ActionFailureError",d instanceof Error?d.message:`${d}`,{errOptions:{cause:d}})}try{JSON.stringify(u);}catch(d){throw new oe("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&&td(o.target)){let f=ba(o.target.pixels),y={...o,relativePosition:o.relativePosition?ba(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:pd(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 tM(u,g.urlAfterCommand)&&(g.succeedImmediately=true,g.succeedImmediatelyReason="URL changed"),g}case "HOVER":{if(td(o.target)){let m=ba(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?ba(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(!Qc(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&&!Qc(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 tM(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=zgt(fetch,u),m;try{m=new URL(o.url).hostname;}catch{}let p=await hAe({command:o,baseUrl:this.browser.baseUrl,logger:l,fetchImplementation:d});return {data:$E.parse({...p,cookies:Q8(u,m)}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GRAPHQL_REQUEST":return {data:await yAe({command:o,baseUrl:this.browser.baseUrl,logger:l}),succeedImmediately:false,urlAfterCommand:this.browser.url()};case "VISUAL_DIFF":return pAe({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 mTe({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 oe("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&&rg(o.storageState)){let d=bn__default.resolve(o.storageState);mn__default.mkdirSync(bn__default.dirname(d),{recursive:true}),mn__default.writeFileSync(d,`${JSON.stringify(u,null,2)}
2069
2069
  `,"utf8");}return {data:u,succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AUTH_LOAD":{let u;if(rg(o.storageState))try{u=JSON.parse(mn__default.readFileSync(bn__default.resolve(o.storageState),"utf8"));}catch(m){throw new oe("UserConfigurationError",`Failed to read auth state from '${o.storageState}': ${H(m)}`,{errOptions:{cause:m}})}else if(!o.storageState.trim())u=void 0;else if(u=await tf({orgId:this.orgId,code:o.storageState,fragment:false,context:n,logger:l,codeEvaluator:this.codeEvaluator,signal:this.executeAbortController.signal}),typeof u!="object")throw new oe("ActionFailureError",`Credentials must evaluate to an object (received ${typeof u} instead)`);let d;try{d=QP.optional().parse(u);}catch(m){throw new oe("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??ec)*1e3,d=this.generator.getAgentConfig()?.assertion;if(dAe(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 gF({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&&KR(o,p.cache?.memory.traces,l);}}let m=await uAe({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 Hl({action:async()=>fF({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 Jg(o.requestMatcher),d=this.browser.registerRequestListener(u);return this.registeredListeners[o.key]=d.then(async m=>await Kq(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 oe("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 Jg(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]=QD(m);},onRequestComplete:(d,m)=>{this.recordedRequests[o.key]?.[d]&&(this.recordedRequests[o.key][d]=QD(m));}}),{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GET_RECORDED_REQUESTS":{let u=this.recordedRequests[o.key];if(!u)throw new oe("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 Jg(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 Jg(o.requestMatcher),async(d,m)=>{let p=await tf({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=w9.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:So(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 aF({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:So(this.logger)})}async getFailureRecoveryPlan(t,o){return this.generator.getFailureRecoveryPlan(t,{disableCache:true,abortSignal:this.executeAbortController.signal,loggerTags:So(o??this.logger)})}};var bF=class{constructor(t){this.logger=t;this.directory=mn__default.mkdtempSync(bn__default.join(Qm.tmpdir(),"momentic-explore-network-")),this.entriesFilePath=bn__default.join(this.directory,"har-entries.log"),this.pagesStream=mn__default.createWriteStream(bn__default.join(this.directory,"har-pages.log")),this.entriesStream=mn__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 lb(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([SAe(this.entriesStream),SAe(this.pagesStream)]);await this.writer.close(),await t;}remove(){try{mn__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 SAe(e){return e.writableFinished?Promise.resolve():once$2(e,"finish").then(()=>{},()=>{})}var RAe="No browser session is recording network traffic right now. Open or re-open the browser and retry.",TAe=30,AK=40,vAe=4e3,Ggt=2e4,Vgt=`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 ${Qa} 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.`,Wgt=`Inspect a single network request in full (headers and, optionally, request/response bodies) by the index returned from ${wa}. Bodies are already size-limited by the recorder and are further truncated here; raise maxBodyChars to see more.`,qgt=z.object({...PI,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(_I).optional().default(TAe).describe(`Maximum number of requests to return (newest first). Defaults to ${TAe}.`),beforeIndex:z.int().min(0).optional().describe("Optional: only include requests with an index below this value, to page further back in time.")}),Kgt=z.object({index:z.int().min(0).describe(`The index of a request as returned by ${wa}.`),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(Ggt).optional().default(vAe).describe(`Maximum characters of each included body to return. Defaults to ${vAe}.`)}),CAe=e=>{if(!xAe(e))return;let t=tool({description:Vgt,inputSchema:qgt,toModelOutput:({output:o})=>o,execute:async o=>{let n;try{n={...BD({input:o}),sinceMs:o.sinceSecondsAgo!==void 0?Date.now()-o.sinceSecondsAgo*1e3:void 0};}catch(a){return q(L({text:`Invalid urlRegex "${o.urlRegex}": ${H(a)}. Provide a valid JavaScript regular expression and try again.`,section:"Network requests"}))}let r=await _Ae(e);if(!r)return q(L({text:RAe,section:"Network requests"}));let i=await uSe({...r,filter:n,limit:o.limit,beforeIndex:o.beforeIndex});return q(L({text:Ygt(i.summaries,{totalEntries:i.totalEntries,totalMatched:i.totalMatched,hasMoreOlder:i.hasMoreOlder}),section:"Network requests"}))}});return {name:wa,tool:t}},IAe=e=>{if(!xAe(e))return;let t=tool({description:Wgt,inputSchema:Kgt,toModelOutput:({output:o})=>o,execute:async o=>{let n=await _Ae(e);if(!n)return q(L({text:RAe,section:"Network request detail"}));let r=await dSe({...n,index:o.index}),i=r?Jgt(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 q(L({text:i,section:"Network request detail"}))}});return {name:Qa,tool:t}};function xAe(e){return !!(e.networkLogEntriesPath||e.openNetworkLogEntries)}async function _Ae(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 Ygt(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=`
2070
2070
 
2071
2071
  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(`
@@ -3160,7 +3160,7 @@ to pick which of these modules are relevant:
3160
3160
 
3161
3161
  `;let m=GAt(c);d+=m;let p=streamObject({schema:CY,model:u("claude-sonnet-4-5-20250929"),system:$At,messages:[{role:"user",content:d}],providerOptions:{anthropic:al}}),h=[];for await(let S of p.textStream)h.push(S);let g=h.join(""),f;try{let S=JSON.parse(g);f=CY.parse(S);}catch(S){r.error({rawResponse:g,parseError:S},"Failed to parse AI response as JSON"),o.addError(`Failed to parse AI response: ${H(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: ${H(c)}`);}}}),E0=[WAt,jAt];var qAt=1e4,IY=new WeakSet;async function Rb({response:e,extra:t,sessionId:o,toolName:n,attributes:r,operation:i}){let a=Bu({response:e,sessionId:o,toolName:n});if(a)try{await xY({session:a,signal:t?.signal,operation:()=>KAt({extra:t,session:a,toolName:n,attributes:r,operation:i})});}catch(s){e.addError(H(s));}}async function KAt({extra:e,session:t,toolName:o,attributes:n,operation:r}){if(ai.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=pe({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 _Y({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),qAt);})]);l&&clearTimeout(l),c||ai.killSession(t.sessionId,"cancelled MCP operation did not stop");}throw s}finally{i?.();}}async function xY({session:e,signal:t,operation:o}){if(t?.throwIfAborted(),IY.has(e))throw new Error("Another browser operation is already active for this session. Wait for it to finish or cancel it before retrying.");IY.add(e);try{return await o()}finally{IY.delete(e);}}async function _Y({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 w0({signal:e,onCancellation:t}){if(!(!e||!t)){if(e.aborted){t();return}return e.addEventListener("abort",t,{once:true}),()=>e.removeEventListener("abort",t)}}var YAt=Object.getPrototypeOf(async function(){}).constructor;async function BCe({code:e,page:t,signal:o}){return await new YAt("page","signal",`"use strict"; return await (${e})(page, signal);
3162
3162
  //# sourceURL=momentic-mcp/run-playwright-unsafe.js`)(t,o)}var JAt=1e5,UCe=mr({schema:{name:ew,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. ${Dr}`,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 Rb({response:o,extra:n,sessionId:t.sessionId,toolName:ew,operation:async r=>{let i=await AY({browser:r.controller.browser,isRemoteBrowser:r.isRemoteBrowser,supportsFileOutput:e.supportsFileOutput,returnBrowserState:t.returnBrowserState,returnScreenshot:t.returnScreenshot,tokenLimit:JAt,hint:t.hint,filtering:{generator:e.generator,orgId:e.orgId,logger:e.logger,signal:r.controller.executeAbortController.signal}});o.addContentParts(i);}});}}),zCe=mr({schema:{name:tw,description:`${mS} ${Dr}`,inputSchema:{sessionId:z.string(),filters:z.array(z.string().trim().min(1)).min(1).optional().describe(pS)}},handle:async(e,t,o)=>{let n=Bu({response:o,sessionId:t.sessionId,toolName:tw});if(!n)return;let r=await Fu({testContext:n.context,supportsFileOutput:e.supportsFileOutput,filters:t.filters});o.addContentParts(r);}}),jCe=mr({schema:{name:Gz,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 Rb({response:o,extra:n,sessionId:t.sessionId,toolName:Gz,operation:async r=>{let i=w0({signal:n?.signal,onCancellation:()=>{ai.killSession(t.sessionId,"unsafe MCP tool cancelled");}});try{let a=await BCe({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 HCe=mr({schema:{name:fh,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. ${EI} 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 ${Ii} 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 vc({serviceName:"mcp",enabled:i});let a=t.video??e.videoDefault??false,s;a&&(ur(e.project.rootDir),s=dr({rootDir:e.project.rootDir,entity:"video",ext:"d"}),mkdirSync(s,{recursive:true}));let l;try{let m=$n();if(!m){o.addError("API client is not initialized; cannot start MCP session.");return}let p=await ws({project:await Io({configFilePath:t.projectConfigPath??e.project.configFilePath,nameFilter:t.projectNameFilter,skipExitOnError:!0}),apiClient:m}),h=new ql(m,e.orgId,p),g;t.turbo===!0?g="turbo":t.turbo===!1&&(g="standard"),l=await ai.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(H(m));return}let c=n?.signal?l.controller.bindCancellation(n.signal):void 0;c&&o.addCleanupCallback(c);let u=w0({signal:n?.signal,onCancellation:()=>{ai.killSession(l.sessionId,"MCP session start cancelled");}});u&&o.addCleanupCallback(u),n?.signal.throwIfAborted(),Wl({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:nA(),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 cbe({projectRootAbsolutePath:e.project.rootDir,projectConfigAbsolutePath:e.project.configFilePath,cwd:nA(),stepSchema:Ba(),stepSchemaTitle:"Step schema",supportsFileOutput:e.supportsFileOutput}));try{let m=await lf({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 _s({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:H(m)},null,2));}s&&o.addContentParts(L({text:Gn({filePath:s,title:"Video output directory"}),section:"Video Output"}));}}),$Ce=mr({schema:{name:$z,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 Rb({response:o,extra:n,sessionId:t.sessionId,toolName:$z,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));}});}}),GCe=mr({schema:{name:Q_,description:`Kill a granular browser session by sessionId. Returns available session ids if the target is missing. ${Dr}`,inputSchema:{sessionId:z.string().describe("The session id to terminate.")}},handle:async(e,t,o)=>{let{sessionId:n}=t;try{let r=ai.getSession(n),i=r?.videoOutputDir,a=await ai.killSession(t.sessionId,"explicit kill");if(a.killed&&Wl({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:ai.listSessionIds()},null,2));return}o.addPartFromText(JSON.stringify({sessionId:t.sessionId,killed:!0},null,2));let s=await ube({killResult:a,rootDir:e.project.rootDir});s&&o.addContentParts(L({text:Gn({filePath:s.filePath,title:"Session span report"}),section:"Session Spans"})),i&&o.addContentParts(L({text:Gn({filePath:i,title:"Video output directory"}),section:"Video Output"}));}catch(r){o.addError(H(r));}}});var PY=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(),Vl({listParams:{containerName:"agent-step-list",steps:e,tracer:y},fixtures:f,options:{collectDebugData:false,collectStepScreenshots:r,reinitializeBrowser:false,disableHealing:true},inputs:{orgId:m,userId:oge(),runId:randomUUID(),sessionId:p,clientMode:"interactive",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())},PA=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 PY({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 gx({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 gI(e,{project:t,logger:o,tempCaches:d});switch(y.type){case "PRESET_ACTION":return ZAt({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 eEt({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 tEt({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([_s({browser:r.browser,supportsFileOutput:u}),Fu({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 VCe({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(...wwe({index:b,rawStep:e[b]}));let S;try{let A=await gx({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:E=>{S=E,h?.(E);}});g.push(...A);}catch(A){r.executeAbortController.signal.throwIfAborted(),o.error({err:A,stepIndex:b+1},"Batch preview step execution errored"),g.push(...L({text:`Step Execution errored: ${H(A)}`,section:"Error"})),y=b+1;break}if(!S||S.status!=="SUCCESS"){y=b+1;break}f++;}g.push(...Cwe({completedSteps:f,failedStep:y})),r.executeAbortController.signal.throwIfAborted();try{g.push(...await R0({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: ${H(b)}`,section:"Error"}));}return {parts:g,successful:y===void 0}}async function WCe({steps:e,project:t,logger:o,controller:n,testContext:r,tempCaches:i}){let a=await Promise.all(e.map(l=>gI(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 Iwe({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 ZAt({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 PA({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"&&jK({logger:t,tempCaches:u,command:e.command,parts:y}),y.push(...Rwe({result:f})),h&&y.push(...await R0({controller:n,supportsFileOutput:c,testContext:l})),y}async function R0({controller:e,supportsFileOutput:t,testContext:o}){await e.browser.waitForStability();let[n,r]=await Promise.all([_s({browser:e.browser,supportsFileOutput:t}),Fu({testContext:o,supportsFileOutput:t})]);return [...n,...r]}async function eEt({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 PA({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 R0({controller:n,supportsFileOutput:c,testContext:l})),f}async function tEt({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 PA({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 R0({controller:n,supportsFileOutput:c,testContext:l})),f}var qCe=({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=XI(i.id,s,t.fromStepId,t.parentStepIdChain);if(n.fastForwardingToStep){if(!l)return false;n.fastForwardingToStep=false;}return n.total+=1,!!(o&&XI(i.id,s,o.toStepId,o.parentStepIdChain))};return ps({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=XI(i.id,s,t.fromStepId,t.parentStepIdChain);if(n.fastForwardingToStep){if(!l)return false;n.fastForwardingToStep=false;}return !!(o&&XI(i.id,s,o.toStepId,o.parentStepIdChain))},onSimpleStepContainer:(i,a)=>r(i,a.parentChain)}),n.total};var nEt="Cannot add a module step inside another module. Modules cannot be nested.";function OY(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 rEt(e,t,o){let n=OY(e,t);if(!o?.length)return n;let r=kre(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 KCe(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])ps({steps:r,onPresetAction:n,onConditional:n,onSimpleStepContainer:n});}async function C0({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=bn__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(_=>gI(_,{project:e,logger:n,tempCaches:s})));}catch(_){return q(L({text:`Error parsing steps: ${H(_)}`,section:"Error"}))}let b=cloneDeep(y),S=u.parentStepIdChain,A;try{A=rEt(f,u.targetSection,S);}catch(_){return q(L({text:`Error: ${H(_)}`,section:"Error"}))}if(u.startIndex<0||u.startIndex>A.length)return q(L({text:`Error: Invalid startIndex ${u.startIndex} for splicing ${u.targetSection} section with ${A.length} steps (must be 0-${A.length})`,section:"Error"}));let E=y.length,R=u.deleteCount,w=cloneDeep(A.slice(u.startIndex,u.startIndex+R)),O=[];if(S?.length){let _=Mre(OY(f,u.targetSection),S,u.targetSection);if(O.push(..._),_.some(M=>M.type==="RESOLVED_MODULE")&&y.some(M=>M.type==="RESOLVED_MODULE"))return q(L({text:`Error: ${nEt}`,section:"Error"}))}A.splice(u.startIndex,u.deleteCount,...y);for(let _ of y)_.type==="RESOLVED_MODULE"&&KCe(f,_);for(let _ of O)_.type==="RESOLVED_MODULE"&&KCe(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:_t});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 ${E} step(s) at index ${u.startIndex} in the ${u.targetSection} section, removing ${R} step(s).`,section:"Result"})];return I.push(...await sEt({logger:n,project:e,orgId:o,testId:p.id,environment:d,originalSteps:g,updatedSteps:f})),I.push(...await Ewe({rootDir:e.rootDir,supportsFileOutput:a,deletedStepRefs:w.map((_,P)=>({id:_.id,index:u.startIndex+P})),insertedStepRefs:b.map((_,P)=>({id:_.id,index:u.startIndex+P})),deletedSteps:eg(w,{includeCache:false}),insertedSteps:eg(b,{includeCache:false}),metadata:{section:u.targetSection,parentStepIdChain:S??[],startIndex:u.startIndex,deleteCount:R,insertedCount:E},artifactEntity:"splice-restoration-payload"})),u.returnTest&&I.push(...L({text:JSON.stringify(await b0({project:e,storage:t,selector:{path:r},envName:d,logger:n,mutableStepState:l,supportsFileOutput:a,hydrateStepIdentity:false}),null,2),section:"Test Content"})),q(I)}async function I0({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:A}){let{fromStep:E,toStep:R,targetSection:w}=m,O=await n.getTestByPath({relativeTestPath:o,logger:t}),{alwaysSaveCache:I,noCache:_}=_u(),P=await Ha({logger:t,orgId:s,project:e,alwaysSaveCache:I,noCache:_||b===true}),M=f?.stepLists??{beforeSteps:O.beforeSteps??[],afterSteps:O.afterSteps??[],steps:O.steps};await P.resolveStepCacheEntries({logger:t,schemaVersion:O.schemaVersion,stepLists:M,testId:O.id,environment:c,useSnapshotIdentityCache:!f&&e.config.fileFormat==="v2"}),f&&(f.stepLists=M);let B=b?cloneDeep(M):M;b&&iEt(B);let k=OY(B,w),$=cloneDeep({steps:B.steps,beforeSteps:B.beforeSteps,afterSteps:B.afterSteps}),{result:Z}=hu(k,E.fromStepId,E.parentStepIdChain);if(!Z)return q(L({text:`Error: No step found with id "${E.fromStepId}" and parent chain [${E.parentStepIdChain.join(", ")}] in ${w} section.`,section:"Error"}));if(R){let{result:W}=hu(k,R.toStepId,R.parentStepIdChain);if(!W)return q(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 W=qCe({steps:k,fromStep:E,toStep:R});d.setProgressTotal(W);}YCe({controller:r,abortSignal:A});let z;try{z=await PY({steps:k,controller:r,storage:n,codeEvaluator:i,logger:t,socket:a,orgId:s,sessionId:l,testContext:u,fromStep:E,toStep:R,tracer:d,collectStepScreenshots:S,usageTracker:g,apiClient:y});}finally{g.flushEvents(t);}let{results:Y}=z;if(!Y||Y.length===0)return q(L({text:"Error: No steps were executed.",section:"Error"}));let N=Y.at(-1);if(!N)return q(L({text:"Error: No steps were executed.",section:"Error"}));let ae={logger:t,cacheStorage:P,orgId:s,testId:O.id,environment:c,originalStepsWithCaches:$,updatedStepsWithCaches:{steps:B.steps,beforeSteps:B.beforeSteps??[],afterSteps:B.afterSteps??[]}},Q=N.status!=="SUCCESS";await uy({logger:t,cacheStorage:P,orgId:s,testId:O.id,environment:c,stepLists:ae.updatedStepsWithCaches,useSnapshotIdentityCache:e.config.fileFormat==="v2"}),Q?N.status==="FAILED"&&await PT(ae):await dy(ae);let ne=w==="main"?"":` in ${w}`,K=W=>{let ee="fromStepId"in W?W.fromStepId:W.toStepId;return W.parentStepIdChain.length>0?`id "${ee}" (parent chain [${W.parentStepIdChain.join(", ")}])`:`id "${ee}"`},ue=E?K(E):"beginning",Se=R?`Steps from ${ue} through ${K(R)}${ne}`:`Steps from ${ue} to end${ne}`,xe=[];if(Q)xe.push(...L({text:`Error: step with id ${N.id} failed: ${N.message}`,section:"Error"}));else {YCe({controller:r,abortSignal:A});let W=`${Se} executed successfully.`;xe.push(...L({text:W,section:"Result"})),N.data&&xe.push(...L({text:`Data: ${JSON.stringify(N.data,null,2)}`,section:"Result Data"}));}let[De,lt]=await Promise.all([_s({browser:r.browser,supportsFileOutput:h}),Fu({testContext:u,supportsFileOutput:h,limits:{tokenLimit:p}})]);return q([...xe,...De,...lt])}function YCe({controller:e,abortSignal:t}){t?.throwIfAborted(),e.setOpen();}function iEt(e){for(let t of [e.steps,e.beforeSteps,e.afterSteps])t&&aEt(t);}function aEt(e){ps({steps:e,earlyStop:false,onPresetAction:t=>(Jr(t.command)&&delete t.command.cache,false),onSimpleStepContainer:()=>false,onConditional:()=>false});}async function sEt({logger:e,project:t,orgId:o,testId:n,environment:r,originalSteps:i,updatedSteps:a}){let s=[];try{let{alwaysSaveCache:l,noCache:c}=_u(),u=await Ha({logger:e,orgId:o,project:t,alwaysSaveCache:l,noCache:c});await uy({logger:e,cacheStorage:u,orgId:o,testId:n,environment:r,stepLists:a,useSnapshotIdentityCache:t.config.fileFormat==="v2"}),await dy({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 kY=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 x0(this.reporter,this.parentStepIdChain.concat(this.step.id),this.setTotal)}},x0=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 kY(this.reporter,t.step,this.parentStepIdChain,this.setTotal)}};function JCe(e,t,o,n,r){let i=JI(e),a={completed:0,total:0},s=new AbortController,l=false,c=p=>{i&&nwe(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=dn(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=dn(p);r&&(r.currentStep=void 0,r.lastCompletedStep=h),c(`Completed: ${h}`);}};return new x0(m,[],d)}var _0=`CLI-style step definition. Use the Step Authoring Guide artifact returned from ${fh} when you start your session to get the full step schema.`,lEt=mr({schema:{name:T6,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);Wl({type:"mcp:test_create",test_platform:"web"}),o.addPartFromText(JSON.stringify(r,null,2));}catch(r){o.addError(H(r));return}}}),cEt=mr({schema:{name:Ii,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 ${fS}, 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. ${Dr}`,inputSchema:{testId:z.string().optional().describe(`Id of the test to fetch. If you do not already know it, list project tests with ${Hz}. 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 lf({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(H(r));return}}}),XCe=mr({schema:{name:X_,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 ${gh}. Returns updated Test Content with step ids for the active session. ${Dr}`,inputSchema:{sessionId:z.string().describe("The active session whose bound test should be reloaded.")}},handle:async(e,t,o,n)=>{let r=Bu({response:o,sessionId:t.sessionId,toolName:X_});if(!r)return;let i=r.storage.getProject();if(i.config.fileFormat!=="v2"){o.addError(`${X_} 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}=_u(),u=await Ha({logger:e.logger,orgId:r.orgId,project:i,alwaysSaveCache:l,noCache:c});r.mutableStepState.testId=a.id;let{stepListsWithCaches:d}=await wc({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 lf({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}));}}),uEt={...XCe,addToolToMcpServer:(e,t)=>{e.project.config.fileFormat==="v2"&&XCe.addToolToMcpServer(e,t);}},dEt=mr({schema:{name:Hz,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. ${EI} 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: ${H(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: ${H(c)}`);}let l=await dbe({artifacts:a,rootDir:r.rootDir,supportsFileOutput:e.supportsFileOutput,projectRootAbsolutePath:r.rootDir,projectConfigAbsolutePath:r.configFilePath,cwd:nA()});o.addContentParts(l),s.length>0&&o.addContentParts(L({section:"Discovery Errors",text:s.map(c=>`- ${c}`).join(`
3163
- `)}));}}),QCe=mr({schema:{name:yh,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. ${Dr}`,inputSchema:{sessionId:z.string(),step:z.string().describe(_0),timeoutSeconds:FF}},handle:async(e,t,o,n)=>{let r=Bu({response:o,sessionId:t.sessionId,toolName:yh});if(!r)return;let i=BF({runs:r.runStepRuns,toolName:yh,run:()=>MY({session:r,response:o,extra:n,operation:async()=>{let a=!1;return {parts:await gx({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:$n(),onStepResult:l=>{a=l.status==="SUCCESS";}}),isError:!a}}})});await LY({session:r,response:o,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}}),ZCe=mr({schema:{name:Vz,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. ${Dr}`,inputSchema:{sessionId:z.string(),steps:z.array(z.string().describe(_0)).min(1).max(20)}},handle:async(e,t,o,n)=>{await Rb({response:o,extra:n,sessionId:t.sessionId,toolName:Vz,attributes:{"momentic.element_count":t.steps.length},operation:async r=>{let i=await WCe({project:r.storage.getProject(),steps:t.steps,logger:e.logger,controller:r.controller,testContext:r.context,tempCaches:r.tempCaches});o.addContentParts(i);}});}}),eIe=mr({schema:{name:ow,description:`Execute multiple steps sequentially without adding them to the test. Supports the same preset, AI Action, and module steps as ${yh}, 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. ${Dr}`,inputSchema:{sessionId:z.string(),steps:z.array(z.string().describe(_0)).min(1).max(20),timeoutSeconds:FF}},handle:async(e,t,o,n)=>{let r=Bu({response:o,sessionId:t.sessionId,toolName:ow});if(!r)return;let i=BF({runs:r.runStepRuns,toolName:ow,run:()=>MY({session:r,response:o,extra:n,operation:async()=>{let a=await VCe({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:$n()});return {parts:a.parts,isError:!a.successful}}})});await LY({session:r,response:o,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}});async function MY({session:e,response:t,extra:o,operation:n}){return xY({session:e,signal:o?.signal,operation:async()=>{if(ai.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 LY({session:e,response:t,stepRunnerId:o,timeoutSeconds:n}){let r=await UK({runs:e.runStepRuns,stepRunnerId:o,timeoutMs:n*1e3});zK({result:r,response:t,statusToolName:ZE});}var tIe=mr({schema:{name:fS,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. ${Dr}`,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(_0),targetSection:zm.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=Bu({response:o,sessionId:t.sessionId,toolName:fS});if(!r)return;let i=await C0({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&&Wl({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);}}),oIe=mr({schema:{name:gh,description:`${J_} Use step ids from active Test Content or splice responses, never raw v2 YAML. Only one preview or run may execute per session. ${Dr}`,inputSchema:{sessionId:z.string(),fromStep:TP,toStep:vP.optional(),targetSection:zm.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:FF}},handle:async(e,t,o,n)=>{let r=Bu({response:o,sessionId:t.sessionId,toolName:gh});if(!r)return;let i=BF({runs:r.runStepRuns,toolName:gh,run:a=>MY({session:r,response:o,extra:n,operation:()=>mEt({context:e,params:t,response:o,extra:n,session:r,stepRunnerId:a})}).then(s=>({parts:s}))});await LY({session:r,response:o,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}});async function mEt({context:e,params:t,response:o,extra:n,session:r,stepRunnerId:i}){t.resetSession&&await S0({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=JCe(n,e.logger,o,()=>ai.touchSession(r.sessionId),ywe({runs:r.runStepRuns,stepRunnerId:i})),s=await I0({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:$n(),disableCache:t.disableCache});return Wl({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 nIe=mr({schema:{name:ZE,description:`Check active or finished ${yh}, ${ow}, and ${gh} executions. Pass the returned stepRunnerId to collect that operation's result. Optionally wait up to ${BK} seconds per poll. ${Dr}`,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(BK).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=Bu({response:o,sessionId:t.sessionId,toolName:ZE});if(!r)return;let i=await _Y({signal:n?.signal,operation:()=>UK({runs:r.runStepRuns,stepRunnerId:t.stepRunnerId,timeoutMs:t.timeoutSeconds*1e3})});zK({result:i,response:o,statusToolName:ZE});}}),rIe=[dEt,lEt,cEt,uEt];var iIe=[UCe,zCe,HCe,$Ce,GCe,ZCe,QCe,eIe,oIe,nIe,tIe];async function gEt({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 Ha({logger:t,orgId:r,project:o}),{stepListsWithCaches:u}=await wc({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 P0({project:e,storage:t,logger:o,relativeTestPath:n,saveChangesToDisk:r,mutableStepState:i,params:a}){let s=Lr();sd(a.name);let l=await t.scanEntities(),c;a.startIndex!==void 0&&n!==void 0&&(c=await gEt({testPath:n,logger:o,project:e,storage:t,orgId:s,mutableStepState:i}));let{stepsToExtract:u,startIndex:d,endIndex:m}=xwe({moduleName:a.name,existingModuleNames:Object.values(l.modules).map(I=>I.name),...a,parameterNames:a.parameters,testPath:n,availableSteps:c?.availableSteps,containsNestedModuleStep:Ore}),{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:A,testId:E}=c.cacheSaveContext,R=e.config.fileFormat==="v2",{cachesToSave:w,snapshotCachesToSave:O}=await Ln({stepLists:b,useSnapshotIdentityCache:R,cacheCreationParams:{orgId:s,testId:E,environment:S}});return R&&await A.saveSnapshotCacheEntries({logger:o,entries:O}),await A.saveStepCacheEntries({logger:o,entries:w}),r&&await t.updateTestByPath({logger:o,relativeTestPath:n,stepLists:b,schemaVersion:_t}),{module:p}}var aIe=mr({schema:{name:b6,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(Kf),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=hge({projectRoot:e.project.rootDir,filePath:r,pathLabel:"testPath"}),s=await P0({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(H(a));}}});var O0=[...rIe,...E0,...iIe,aIe,Ube,AEe,HEe,CEe,qbe,UEe,uEe,bEe,Xbe];function k0({enableUnsafeFullAccess:e=false}={}){return e?[...O0,jCe]:O0}async function sIe(e){let{project:t,applicationName:o,daemonPort:n,daemonToken:r,daemonSessionId:i,logger:a,cliVersion:s}=e,l=t.configFilePath,c=uIe(e);await T0(e);let{context:u}=v0({...e,logger:a.child({daemonSessionId:i}),applicationName:`${o}-daemon`,serverId:i});await dwe({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 lwe({context:u,tool:m,input:p,extra:h})}}},sessionManager:ai,daemonPort:n,daemonToken:r,daemonId:i,cliVersion:s,workerType:"momentic-web-mcp",configPath:l,inactivityTimeoutMsOverride:RY(e)*2,onShutdown:()=>{xp();}});}async function NY(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 owe({workerType:"momentic-web-mcp",configPath:h,apiKey:n,serverUrl:r,cliVersion:i,shareDiagnostics:!!m,enableUnsafeFullAccess:!!p,logger:o,buildDaemonArgs:({entryScript:g})=>bEt({entryScript:g,serverUrl:r,configPath:h,alwaysSaveCache:a,noCache:s,videoDefault:l,headfulDefault:c,devicePixelRatio:u,sessionIdleTimeoutMinutes:d,shareDiagnostics:m,enableUnsafeFullAccess:p})})}async function lIe(e){let{logger:t,applicationName:o,cliVersion:n,serverUrl:r}=e,i=cIe(e);Cp(r),await NY(e);let{info:a,mcpLogger:s}=wY({logger:t,applicationName:`${o}-daemon-proxy`,cliVersion:n});return DF({context:{logger:s},info:a,tools:cwe({tools:i,resolveDaemonStateForCall:()=>NY(e),logger:s})})}var yEt=30*6e4;async function DY({options:e,toolName:t,input:o,timeoutMs:n=yEt}){Cp(e.serverUrl);let r=uIe(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 KI({workerType:"momentic-web-mcp",configPath:e.project.configFilePath,cliVersion:e.cliVersion,sessionId:s,logger:e.logger}):l=await NY(e),!l)throw new Error(`No active session found for id '${s}'.`);return DK({state:l,toolName:t,input:a,timeoutMs:n})}function bEt({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 cIe(e){return k0(e).map(t=>t.tool)}function uIe(e){return new Map(cIe(e).map(t=>[t.schema.name,t]))}var FY=async(e,t)=>{try{let{killed:o,failed:n}=await ai.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 BY(e){let{daemon:t,logger:o}=e,n=twe.safeParse(process.env);if(t&&n.success&&n.data[LF]==="momentic-web-mcp")return sIe({...e,daemonPort:n.data[kF],daemonToken:n.data[MF],daemonSessionId:n.data[NF]});if(Hh(o,true),t)return await lIe(e);await T0(e);let{context:r,info:i}=v0(e);return DF({context:r,info:i,tools:k0(e),shutdownHandlers:[FY,xp,async()=>{await f0();}]})}var fx="3.59.2",Sn=lT({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:fx});(async()=>{try{let e=await Dc(Sn);e.gitBranchName&&Sn.addBinding("branch",e.gitBranchName);}catch{}})();var df=Router();async function L0(e,t){let o=Object.values(e.modules).filter(i=>t===void 0||t.has(i.id));return (await f1({momenticFiles:e,moduleHandles:o,logger:Sn})).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)}df.get("/",qt(async(e,t)=>{let o=kt(),n=await Ml(o),r=await L0(n);t.status(200).json(r);}));df.post("/",qt(async(e,t)=>{let o;try{o=dZ.parse(e.body);}catch(l){t.status(400).json({error:`Invalid request body: ${l}`});return}try{sd(o.name);}catch(l){t.status(400).json({error:`Invalid module name: ${l}`});return}let n=kt(),r=await it(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=bn__default.join(n.rootDir,o.folderPath??bn__default.dirname(o.testFilePath));if(!mn__default.existsSync(a)||!mn__default.statSync(a).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${a}' does not exist.`});return}let s=await xM({...o,folder:a,project:n,momenticFiles:r});t.status(201).json(s);}));df.get("/:moduleId/tests",qt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o=kt(),n=await it(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))b1(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);}));df.get("/:moduleId",qt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o=await Ml(kt()),n=o.modules[e.params.moduleId];if(!n){t.status(404).json({error:"Module not found."});return}try{let r=await Ud({modHandle:n,momenticFiles:o,logger:C});t.json(r);}catch(r){t.status(400).json({err:r});}}));df.post("/:moduleId/duplicate",qt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o;try{o=uZ.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{sd(o.name);}catch(h){t.status(400).json({error:h.message});return}let n=kt(),r=await it(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=bn__default.join(n.rootDir,bn__default.dirname(i.relativePath));if(!mn__default.existsSync(s)||!mn__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=bn__default.join(s,`${l}.module.yaml`),u=Fd({projectConfig:n.config,momenticFiles:r,entityType:"module"}),{stepsToSave:d}=await Ln({stepLists:{steps:a.steps},createNewCacheIds:true}),m={fileType:Ue.MODULE,schemaVersion:_t,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};Ic({module:m,filePath:c,projectConfig:n.config,momenticFiles:r});let p={relativeFilePath:bn__default.relative(n.rootDir,c)};t.status(201).json(p);}));df.patch("/:moduleId/move",qt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o;try{o=pZ.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${H(i)}`});return}let n=kt();if(!(await Ml(n)).modules[e.params.moduleId]){t.status(404).json({error:"Module not found."});return}await Ose({moduleId:e.params.moduleId,targetFolderRelativePath:o.folderPath,project:n}),t.status(200).json({message:"ok"});}));df.patch("/:moduleId/metadata",qt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o;try{o=mZ.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let n=kt(),r=await Ml(n);await kse({moduleId:e.params.moduleId,content:o,momenticFiles:r,logger:C,project:n}),t.status(201).json({message:"ok"});}));var dIe=df;var MA=Router();MA.get("/",qt(async(e,t)=>{let o=kt(),n=await it(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 L0(n),l={labels:i,tests:a,modules:s};t.status(200).json(l);}));MA.get("/folders",qt(async(e,t)=>{let o=kt(),n=await yse(o);t.status(200).json(n);}));MA.get("/summary",qt(async(e,t)=>{let o=kt(),r={hasEntities:await fse(o,[Ue.TEST,Ue.TEST_V2,Ue.MODULE,Ue.MODULE_V2])};t.status(200).json(r);}));MA.get("/labels",qt(async(e,t)=>{let o=kt(),n=await it(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);}));MA.post("/in-folder",qt(async(e,t)=>{let o=iZ.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=kt(),i=await gse(r,n),a=Object.values(i.tests),s=new Set(Object.keys(i.modules)),l=[];if(s.size>0){let u=await Ml(r);l=await L0(u,s);}let c={tests:a,modules:l};t.status(200).json(c);}));var mIe=MA;var UY=Router();UY.get("/",qt((e,t)=>{let o=NM(kt(),Sn);t.status(200).json(o);}));UY.get("/names",qt((e,t)=>{let n=kt().config.environments?.map(r=>r.name)??[];t.status(200).json(n);}));var pIe=UY;var hIe=Router();hIe.get("/",qt((e,t)=>{let o={userId:Qd(),orgId:Lr(),email:Dv(),name:nge(),pylonEmailHash:rge(),cliVersion:fx};t.status(200).json(o);}));var gIe=hIe;var zY="mcp-session-id",fIe="MOMENTIC_SESSION_IDLE_TIMEOUT_MINUTES",N0=Router();function IEt(){let e=process.env[fIe];if(!e)return wb*60*1e3;let t=Number.parseInt(e,10);return Number.isNaN(t)||t<1?(Sn.warn({envVar:fIe,rawValue:e,fallback:wb},"Invalid MCP session idle timeout env var; falling back to default"),wb*60*1e3):t*60*1e3}function xEt(e){let{headfulDefault:t,supportsFileOutput:o}={},n={serverId:randomUUID(),applicationName:"momentic-mcp-desktop-server",cliVersion:fx},r=kt(),i=Ip(),a=jl(),s=Sn.child({orgId:Lr(),userId:Qd(),...n}),l=new Bt({baseUrl:a,apiKey:i,logger:s,mode:"interactive",runner:"mcp"}),c=aR(process.env.MOMENTIC_HEADFUL_BROWSER),u=new kr(r.config.ai?.agentConfig,{baseUrl:a,apiKey:i,logger:s,mode:"interactive",runner:"mcp"}),d=Lr(),m=new ql(l,d,r);return {context:{project:r,orgId:d,logger:s,generator:u,apiClient:l,storage:m,serverId:n.serverId,extractBaseDir:Mu(r.rootDir),saveChangesToDisk:true,supportsFileOutput:o??true,knowledgeRetrievalResults:Co,knowledgeCitations:[],sessionIdleTimeoutMs:IEt(),headfulDefault:t??c??true,categoryDefinitions:r.config.ai?.classification?.categories??Ns},info:n}}var Vp={};N0.post("/",async(e,t)=>{let o=String(e.headers[zY]??"");try{if(o&&Vp[o]){await Vp[o].handleRequest(e,t,e.body);return}if(!o&&isInitializeRequest(e.body)){let{context:n,info:r}=xEt(),i=FK(n,r,O0),a=new StreamableHTTPServerTransport({sessionIdGenerator:()=>randomUUID(),enableDnsRebindingProtection:!1,onsessioninitialized:s=>{Vp[s]=a;}});a.onclose=()=>{let s=a.sessionId;s&&Vp[s]&&delete Vp[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});}});N0.get("/",async(e,t)=>{let o=String(e.headers[zY]??"");if(!o||!Vp[o]){t.status(400).send("Invalid or missing session ID");return}await Vp[o].handleRequest(e,t);});N0.delete("/",async(e,t)=>{let o=String(e.headers[zY]??"");if(!o||!Vp[o]){t.status(400).send("Invalid or missing session ID");return}let n=Vp[o];try{await n.handleRequest(e,t);}catch{t.headersSent||t.status(500).send("Error processing session termination");}});var bIe=N0;var SIe=Router();SIe.get("/:id",qt(async(e,t)=>{let{id:o}=e.params;if(!o){t.status(400).json({error:"Missing ID"});return}let n=$n();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){Sn.error({err:r,screenshotId:o},"Failed to proxy on-demand screenshot"),t.status(404).json({error:"Screenshot not found"});}}));var TIe=SIe;var jY=Router(),vIe=e=>({name:e.config.name,configFilePath:e.configFilePath,fileFormat:e.config.fileFormat});jY.get("/",qt(async(e,t)=>{let o=kt(),n=new Map;for(let i of await v1())n.set(i.configFilePath,i);n.set(o.configFilePath,o);let r={projects:[...n.values()].map(vIe),current:vIe(o)};t.status(200).json(r);}));jY.post("/set",qt(async(e,t)=>{let o;try{o=fZ.parse(e.body);}catch(n){t.status(400).json({error:`Invalid request body: ${n}`});return}Sn.info("Setting local project");try{let n=await Io({configFilePath:o.configFilePath}),r=$n();if(!r)throw new Error("API client is not initialized.");await Fv({project:n,apiClient:r});}catch(n){t.status(400).json({error:`Error setting project: ${n}`});return}t.sendStatus(204);}));var AIe=jY;var EIe=Router();EIe.get("/",qt((e,t)=>{let o=kt(),n={ai:o.config.ai,browser:o.config.browser,displayRoot:o.config.displayRoot};t.status(200).json(n);}));var wIe=EIe;var ym=Router();ym.post("/",qt(async(e,t)=>{let o;try{o=lZ.parse(e.body);}catch(n){t.status(400).json({error:`Invalid request body: ${n}`});return}try{let n=kt(),r=await hx({project:n,input:o});Wl({type:"test_editor:test_create",test_platform:"web"}),t.status(201).json(r);}catch(n){if(n instanceof Wt){t.status(400).json({error:n.message});return}throw n}}));ym.get("/:testPath",qt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n=kt(),r=await Ml(n),i;try{i=await Js(bn__default.join(n.rootDir,o),Sn,r),await(await Ha({logger:Sn,orgId:Lr(),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:Sn,useSnapshotIdentityCache:n.config.fileFormat==="v2"}),t.status(200).json(i);}catch(a){t.status(400).send({error:a.message});return}(async()=>{try{await MM({relativeTestPath:o,stepLists:{steps:i.steps,beforeSteps:i.beforeSteps,afterSteps:i.afterSteps},schemaVersion:_t,momenticFiles:r,project:n});}catch(a){Sn.error({err:a},"Failed to save migrated test to disk after initial fetch");}})();}));ym.get("/:testPath/metadata",qt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n=kt(),r=bn__default.join(n.rootDir,o);if(!mn__default.existsSync(r)){t.status(404).json({error:"Test file not found."});return}let i=mn__default.statSync(r),a=await Dc(Sn),s={gitBranch:a.gitBranchName??"unknown",fileMtime:i.mtime,gitCommitSha:a.gitCommitSha??"unknown"};t.status(200).json(s);}));ym.patch("/:testPath/metadata",qt(async(e,t)=>{if(!e.params.testPath){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=sZ.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let r={message:"ok",newRelativeTestPath:pC(e.params.testPath,o,kt()).newRelativeTestPath};t.status(200).json(r);}));ym.patch("/:testPath",qt(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=aZ.parse(e.body);}catch(p){Sn.warn({err:p},"Invalid save request"),t.status(400).json({error:`Invalid request body: ${p}`});return}Sn.info({testPath:o},"Save received");let r=kt(),i=await Ml(r),a;try{a=bu(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 Ln({stepLists:n.stepLists,useSnapshotIdentityCache:s,cacheCreationParams:{orgId:Lr(),testId:a.id,environment:a.envs?.find(p=>p.default)?.name}}),m=await Ha({logger:Sn,orgId:Lr(),project:r});s&&await m.saveSnapshotCacheEntries({logger:Sn,entries:d}),await m.saveStepCacheEntries({logger:Sn,entries:u}),await y1({relativeTestPath:o,stepsToSave:l,moduleUpdates:c,schemaVersion:n.schemaVersion,momenticFiles:i,project:r}),t.status(201).json({message:"ok"});}));ym.patch("/:testPath/environments",qt(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=gZ.parse(e.body);}catch(r){t.status(400).json({error:`Invalid request body: ${r}`});return}pC(o,{envs:n.defaultEnv?[{name:n.defaultEnv,default:true}]:[]},kt()),t.status(201).json({message:"ok"});}));ym.patch("/:testPath/move",qt(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=hZ.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${H(i)}`});return}let r=kt();if(!mn__default.existsSync(bn__default.join(r.rootDir,o))){t.status(404).json({error:"Test not found."});return}await Mse({relativeTestPath:o,targetFolderRelativePath:n.folderPath,project:r}),t.status(200).json({message:"ok"});}));ym.delete("/:testPath",qt((e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n=kt(),r=bn__default.join(n.rootDir,o);if(!mn__default.existsSync(r)){t.status(404).json({error:"Test not found."});return}mn__default.unlinkSync(r),t.status(200).json({message:"ok"});}));ym.post("/:testPath/duplicate",qt(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=cZ.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{sd(n.name);}catch(h){t.status(400).json({error:h.message});return}let r=kt(),i=bn__default.join(r.rootDir,o);if(!mn__default.existsSync(i)){t.status(404).json({error:"Test not found."});return}let a=await it(r),s;try{s=await Js(i,Sn,a);}catch(h){t.status(400).send({error:h.message});return}let l=Fd({projectConfig:r.config,momenticFiles:a,entityType:"test"}),c=Zn.parse({...s,name:n.name,id:l}),{stepsToSave:u}=await Ln({stepLists:{steps:s.steps,beforeSteps:s.beforeSteps,afterSteps:s.afterSteps},createNewCacheIds:true}),d=bn__default.dirname(i),m=bn__default.join(d,`${n.name}.test.yaml`);xc({test:{fileType:Ue.TEST,...c,...u},filePath:m,projectConfig:r.config,momenticFiles:a});let p={relativeFilePath:bn__default.relative(r.rootDir,m)};Wl({type:"test_editor:test_duplicated"}),t.status(201).json(p);}));var RIe=ym;var CIe=15e4,Ps={numScreenshots:10,numBrowserStates:2,tokensThreshold:25e4,targetTokens:2e5};function bm(){return {openai:{reasoningEffort:dj,reasoningSummary:"auto",textVerbosity:"low",store:false,include:["reasoning.encrypted_content"]},azure:{reasoningEffort:dj,reasoningSummary:"auto",textVerbosity:"low",store:false,include:["reasoning.encrypted_content"]}}}var LEt="about:blank",NEt=[".webm",".mp4"];function GY(e){return e?mn__default.mkdtempSync(bn__default.join(Qm.tmpdir(),"momentic-explore-video-")):void 0}async function Uu(e){let{sessionManager:t,storage:o,logger:n,owner:r,signal:i,timelineLane:a}=e,s=GY(a),l=new bF(n),c=await t.startTestlessSession({logger:n,storage:o,baseUrl:LEt,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 VY({logger:m,timelineLane:a,videoOutputDir:s,videoStartTimes:c.videoStartTimes,videoActivations:c.videoActivations,finishedAt:Date.now()}),await DEt({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:CIe,networkLogEntriesPath:()=>l.entriesFilePath,cleanupBrowserSession:d},isAlive:()=>t.getSession(c.sessionId)!==void 0}}async function VY({logger:e,timelineLane:t,videoOutputDir:o,videoStartTimes:n,videoActivations:r,finishedAt:i}){if(!(!t||!o))try{for(let a of await mn__default.promises.readdir(o)){if(!NEt.includes(bn__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:bn__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 DEt({logger:e,timelineLane:t,entriesFilePath:o}){if(t)try{if((await mn__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 BEt=2/3;function IIe(e,t){return t===void 0?{signal:e}:{signal:AbortSignal.any([e,AbortSignal.timeout(t)]),buildTimeoutMs:Math.floor(t*BEt)}}function NA(e,t){if(!e?.aborted)return H(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 xIe(e){let t=e.filter(o=>o!==void 0);return t.length===0?void 0:AbortSignal.any(t)}async function Wp(e,t){try{await WV.rm(e,{recursive:!0,force:!0});}catch(o){t.warn({err:o,spoolDir:e},"Failed to clean up explorer spool dir");}}async function qY(e){return await UEt(e),await zEt(e),await jEt(e)}async function UEt(e){try{await j2(e).version();}catch(t){throw new Error(`git is not available on PATH. Install git to use 'momentic ai explore' (${H(t)}).`,{cause:t})}}async function zEt(e){let t;try{t=await j2(e).checkIsRepo();}catch(o){throw new Error(`Failed to determine whether ${e} is a git repository: ${H(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 jEt(e){let t=j2(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}: ${H(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 qp=class extends ql{overlay;diskProject;writtenFilePaths=new Set;constructor(t,o,n){let r=new AM(yt);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=D0(await this.collectDraftTests(t),o.testIds,u=>u.test.id,"test"),r=D0(await this.collectDraftModules(t),o.moduleIds,u=>u.module.moduleId,"module");if(n.length===0&&r.length===0)return {acceptedTests:[],acceptedModules:[]};let i=await it(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)HEt(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));QT(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=D0(n,o.testIds,u=>u.test.id,"test"),i=D0(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"&&_Ie(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 Wt(s.join(`
3163
+ `)}));}}),QCe=mr({schema:{name:yh,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. ${Dr}`,inputSchema:{sessionId:z.string(),step:z.string().describe(_0),timeoutSeconds:FF}},handle:async(e,t,o,n)=>{let r=Bu({response:o,sessionId:t.sessionId,toolName:yh});if(!r)return;let i=BF({runs:r.runStepRuns,toolName:yh,run:()=>MY({session:r,response:o,extra:n,operation:async()=>{let a=!1;return {parts:await gx({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:$n(),onStepResult:l=>{a=l.status==="SUCCESS";}}),isError:!a}}})});await LY({session:r,response:o,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}}),ZCe=mr({schema:{name:Vz,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. ${Dr}`,inputSchema:{sessionId:z.string(),steps:z.array(z.string().describe(_0)).min(1).max(20)}},handle:async(e,t,o,n)=>{await Rb({response:o,extra:n,sessionId:t.sessionId,toolName:Vz,attributes:{"momentic.element_count":t.steps.length},operation:async r=>{let i=await WCe({project:r.storage.getProject(),steps:t.steps,logger:e.logger,controller:r.controller,testContext:r.context,tempCaches:r.tempCaches});o.addContentParts(i);}});}}),eIe=mr({schema:{name:ow,description:`Execute multiple steps sequentially without adding them to the test. Supports the same preset, AI Action, and module steps as ${yh}, 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. ${Dr}`,inputSchema:{sessionId:z.string(),steps:z.array(z.string().describe(_0)).min(1).max(20),timeoutSeconds:FF}},handle:async(e,t,o,n)=>{let r=Bu({response:o,sessionId:t.sessionId,toolName:ow});if(!r)return;let i=BF({runs:r.runStepRuns,toolName:ow,run:()=>MY({session:r,response:o,extra:n,operation:async()=>{let a=await VCe({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:$n()});return {parts:a.parts,isError:!a.successful}}})});await LY({session:r,response:o,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}});async function MY({session:e,response:t,extra:o,operation:n}){return xY({session:e,signal:o?.signal,operation:async()=>{if(ai.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 LY({session:e,response:t,stepRunnerId:o,timeoutSeconds:n}){let r=await UK({runs:e.runStepRuns,stepRunnerId:o,timeoutMs:n*1e3});zK({result:r,response:t,statusToolName:ZE});}var tIe=mr({schema:{name:fS,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. ${Dr}`,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(_0),targetSection:zm.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=Bu({response:o,sessionId:t.sessionId,toolName:fS});if(!r)return;let i=await C0({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&&Wl({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);}}),oIe=mr({schema:{name:gh,description:`${J_} Use step ids from active Test Content or splice responses, never raw v2 YAML. Only one preview or run may execute per session. ${Dr}`,inputSchema:{sessionId:z.string(),fromStep:TP,toStep:vP.optional(),targetSection:zm.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:FF}},handle:async(e,t,o,n)=>{let r=Bu({response:o,sessionId:t.sessionId,toolName:gh});if(!r)return;let i=BF({runs:r.runStepRuns,toolName:gh,run:a=>MY({session:r,response:o,extra:n,operation:()=>mEt({context:e,params:t,response:o,extra:n,session:r,stepRunnerId:a})}).then(s=>({parts:s}))});await LY({session:r,response:o,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}});async function mEt({context:e,params:t,response:o,extra:n,session:r,stepRunnerId:i}){t.resetSession&&await S0({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=JCe(n,e.logger,o,()=>ai.touchSession(r.sessionId),ywe({runs:r.runStepRuns,stepRunnerId:i})),s=await I0({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:$n(),disableCache:t.disableCache});return Wl({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 nIe=mr({schema:{name:ZE,description:`Check active or finished ${yh}, ${ow}, and ${gh} executions. Pass the returned stepRunnerId to collect that operation's result. Optionally wait up to ${BK} seconds per poll. ${Dr}`,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(BK).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=Bu({response:o,sessionId:t.sessionId,toolName:ZE});if(!r)return;let i=await _Y({signal:n?.signal,operation:()=>UK({runs:r.runStepRuns,stepRunnerId:t.stepRunnerId,timeoutMs:t.timeoutSeconds*1e3})});zK({result:i,response:o,statusToolName:ZE});}}),rIe=[dEt,lEt,cEt,uEt];var iIe=[UCe,zCe,HCe,$Ce,GCe,ZCe,QCe,eIe,oIe,nIe,tIe];async function gEt({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 Ha({logger:t,orgId:r,project:o}),{stepListsWithCaches:u}=await wc({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 P0({project:e,storage:t,logger:o,relativeTestPath:n,saveChangesToDisk:r,mutableStepState:i,params:a}){let s=Lr();sd(a.name);let l=await t.scanEntities(),c;a.startIndex!==void 0&&n!==void 0&&(c=await gEt({testPath:n,logger:o,project:e,storage:t,orgId:s,mutableStepState:i}));let{stepsToExtract:u,startIndex:d,endIndex:m}=xwe({moduleName:a.name,existingModuleNames:Object.values(l.modules).map(I=>I.name),...a,parameterNames:a.parameters,testPath:n,availableSteps:c?.availableSteps,containsNestedModuleStep:Ore}),{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:A,testId:E}=c.cacheSaveContext,R=e.config.fileFormat==="v2",{cachesToSave:w,snapshotCachesToSave:O}=await Ln({stepLists:b,useSnapshotIdentityCache:R,cacheCreationParams:{orgId:s,testId:E,environment:S}});return R&&await A.saveSnapshotCacheEntries({logger:o,entries:O}),await A.saveStepCacheEntries({logger:o,entries:w}),r&&await t.updateTestByPath({logger:o,relativeTestPath:n,stepLists:b,schemaVersion:_t}),{module:p}}var aIe=mr({schema:{name:b6,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(Kf),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=hge({projectRoot:e.project.rootDir,filePath:r,pathLabel:"testPath"}),s=await P0({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(H(a));}}});var O0=[...rIe,...E0,...iIe,aIe,Ube,AEe,HEe,CEe,qbe,UEe,uEe,bEe,Xbe];function k0({enableUnsafeFullAccess:e=false}={}){return e?[...O0,jCe]:O0}async function sIe(e){let{project:t,applicationName:o,daemonPort:n,daemonToken:r,daemonSessionId:i,logger:a,cliVersion:s}=e,l=t.configFilePath,c=uIe(e);await T0(e);let{context:u}=v0({...e,logger:a.child({daemonSessionId:i}),applicationName:`${o}-daemon`,serverId:i});await dwe({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 lwe({context:u,tool:m,input:p,extra:h})}}},sessionManager:ai,daemonPort:n,daemonToken:r,daemonId:i,cliVersion:s,workerType:"momentic-web-mcp",configPath:l,inactivityTimeoutMsOverride:RY(e)*2,onShutdown:()=>{xp();}});}async function NY(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 owe({workerType:"momentic-web-mcp",configPath:h,apiKey:n,serverUrl:r,cliVersion:i,shareDiagnostics:!!m,enableUnsafeFullAccess:!!p,logger:o,buildDaemonArgs:({entryScript:g})=>bEt({entryScript:g,serverUrl:r,configPath:h,alwaysSaveCache:a,noCache:s,videoDefault:l,headfulDefault:c,devicePixelRatio:u,sessionIdleTimeoutMinutes:d,shareDiagnostics:m,enableUnsafeFullAccess:p})})}async function lIe(e){let{logger:t,applicationName:o,cliVersion:n,serverUrl:r}=e,i=cIe(e);Cp(r),await NY(e);let{info:a,mcpLogger:s}=wY({logger:t,applicationName:`${o}-daemon-proxy`,cliVersion:n});return DF({context:{logger:s},info:a,tools:cwe({tools:i,resolveDaemonStateForCall:()=>NY(e),logger:s})})}var yEt=30*6e4;async function DY({options:e,toolName:t,input:o,timeoutMs:n=yEt}){Cp(e.serverUrl);let r=uIe(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 KI({workerType:"momentic-web-mcp",configPath:e.project.configFilePath,cliVersion:e.cliVersion,sessionId:s,logger:e.logger}):l=await NY(e),!l)throw new Error(`No active session found for id '${s}'.`);return DK({state:l,toolName:t,input:a,timeoutMs:n})}function bEt({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 cIe(e){return k0(e).map(t=>t.tool)}function uIe(e){return new Map(cIe(e).map(t=>[t.schema.name,t]))}var FY=async(e,t)=>{try{let{killed:o,failed:n}=await ai.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 BY(e){let{daemon:t,logger:o}=e,n=twe.safeParse(process.env);if(t&&n.success&&n.data[LF]==="momentic-web-mcp")return sIe({...e,daemonPort:n.data[kF],daemonToken:n.data[MF],daemonSessionId:n.data[NF]});if(Hh(o,true),t)return await lIe(e);await T0(e);let{context:r,info:i}=v0(e);return DF({context:r,info:i,tools:k0(e),shutdownHandlers:[FY,xp,async()=>{await f0();}]})}var fx="3.59.3",Sn=lT({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:fx});(async()=>{try{let e=await Dc(Sn);e.gitBranchName&&Sn.addBinding("branch",e.gitBranchName);}catch{}})();var df=Router();async function L0(e,t){let o=Object.values(e.modules).filter(i=>t===void 0||t.has(i.id));return (await f1({momenticFiles:e,moduleHandles:o,logger:Sn})).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)}df.get("/",qt(async(e,t)=>{let o=kt(),n=await Ml(o),r=await L0(n);t.status(200).json(r);}));df.post("/",qt(async(e,t)=>{let o;try{o=dZ.parse(e.body);}catch(l){t.status(400).json({error:`Invalid request body: ${l}`});return}try{sd(o.name);}catch(l){t.status(400).json({error:`Invalid module name: ${l}`});return}let n=kt(),r=await it(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=bn__default.join(n.rootDir,o.folderPath??bn__default.dirname(o.testFilePath));if(!mn__default.existsSync(a)||!mn__default.statSync(a).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${a}' does not exist.`});return}let s=await xM({...o,folder:a,project:n,momenticFiles:r});t.status(201).json(s);}));df.get("/:moduleId/tests",qt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o=kt(),n=await it(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))b1(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);}));df.get("/:moduleId",qt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o=await Ml(kt()),n=o.modules[e.params.moduleId];if(!n){t.status(404).json({error:"Module not found."});return}try{let r=await Ud({modHandle:n,momenticFiles:o,logger:C});t.json(r);}catch(r){t.status(400).json({err:r});}}));df.post("/:moduleId/duplicate",qt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o;try{o=uZ.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{sd(o.name);}catch(h){t.status(400).json({error:h.message});return}let n=kt(),r=await it(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=bn__default.join(n.rootDir,bn__default.dirname(i.relativePath));if(!mn__default.existsSync(s)||!mn__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=bn__default.join(s,`${l}.module.yaml`),u=Fd({projectConfig:n.config,momenticFiles:r,entityType:"module"}),{stepsToSave:d}=await Ln({stepLists:{steps:a.steps},createNewCacheIds:true}),m={fileType:Ue.MODULE,schemaVersion:_t,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};Ic({module:m,filePath:c,projectConfig:n.config,momenticFiles:r});let p={relativeFilePath:bn__default.relative(n.rootDir,c)};t.status(201).json(p);}));df.patch("/:moduleId/move",qt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o;try{o=pZ.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${H(i)}`});return}let n=kt();if(!(await Ml(n)).modules[e.params.moduleId]){t.status(404).json({error:"Module not found."});return}await Ose({moduleId:e.params.moduleId,targetFolderRelativePath:o.folderPath,project:n}),t.status(200).json({message:"ok"});}));df.patch("/:moduleId/metadata",qt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let o;try{o=mZ.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let n=kt(),r=await Ml(n);await kse({moduleId:e.params.moduleId,content:o,momenticFiles:r,logger:C,project:n}),t.status(201).json({message:"ok"});}));var dIe=df;var MA=Router();MA.get("/",qt(async(e,t)=>{let o=kt(),n=await it(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 L0(n),l={labels:i,tests:a,modules:s};t.status(200).json(l);}));MA.get("/folders",qt(async(e,t)=>{let o=kt(),n=await yse(o);t.status(200).json(n);}));MA.get("/summary",qt(async(e,t)=>{let o=kt(),r={hasEntities:await fse(o,[Ue.TEST,Ue.TEST_V2,Ue.MODULE,Ue.MODULE_V2])};t.status(200).json(r);}));MA.get("/labels",qt(async(e,t)=>{let o=kt(),n=await it(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);}));MA.post("/in-folder",qt(async(e,t)=>{let o=iZ.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=kt(),i=await gse(r,n),a=Object.values(i.tests),s=new Set(Object.keys(i.modules)),l=[];if(s.size>0){let u=await Ml(r);l=await L0(u,s);}let c={tests:a,modules:l};t.status(200).json(c);}));var mIe=MA;var UY=Router();UY.get("/",qt((e,t)=>{let o=NM(kt(),Sn);t.status(200).json(o);}));UY.get("/names",qt((e,t)=>{let n=kt().config.environments?.map(r=>r.name)??[];t.status(200).json(n);}));var pIe=UY;var hIe=Router();hIe.get("/",qt((e,t)=>{let o={userId:Qd(),orgId:Lr(),email:Dv(),name:nge(),pylonEmailHash:rge(),cliVersion:fx};t.status(200).json(o);}));var gIe=hIe;var zY="mcp-session-id",fIe="MOMENTIC_SESSION_IDLE_TIMEOUT_MINUTES",N0=Router();function IEt(){let e=process.env[fIe];if(!e)return wb*60*1e3;let t=Number.parseInt(e,10);return Number.isNaN(t)||t<1?(Sn.warn({envVar:fIe,rawValue:e,fallback:wb},"Invalid MCP session idle timeout env var; falling back to default"),wb*60*1e3):t*60*1e3}function xEt(e){let{headfulDefault:t,supportsFileOutput:o}={},n={serverId:randomUUID(),applicationName:"momentic-mcp-desktop-server",cliVersion:fx},r=kt(),i=Ip(),a=jl(),s=Sn.child({orgId:Lr(),userId:Qd(),...n}),l=new Bt({baseUrl:a,apiKey:i,logger:s,mode:"interactive",runner:"mcp"}),c=aR(process.env.MOMENTIC_HEADFUL_BROWSER),u=new kr(r.config.ai?.agentConfig,{baseUrl:a,apiKey:i,logger:s,mode:"interactive",runner:"mcp"}),d=Lr(),m=new ql(l,d,r);return {context:{project:r,orgId:d,logger:s,generator:u,apiClient:l,storage:m,serverId:n.serverId,extractBaseDir:Mu(r.rootDir),saveChangesToDisk:true,supportsFileOutput:o??true,knowledgeRetrievalResults:Co,knowledgeCitations:[],sessionIdleTimeoutMs:IEt(),headfulDefault:t??c??true,categoryDefinitions:r.config.ai?.classification?.categories??Ns},info:n}}var Vp={};N0.post("/",async(e,t)=>{let o=String(e.headers[zY]??"");try{if(o&&Vp[o]){await Vp[o].handleRequest(e,t,e.body);return}if(!o&&isInitializeRequest(e.body)){let{context:n,info:r}=xEt(),i=FK(n,r,O0),a=new StreamableHTTPServerTransport({sessionIdGenerator:()=>randomUUID(),enableDnsRebindingProtection:!1,onsessioninitialized:s=>{Vp[s]=a;}});a.onclose=()=>{let s=a.sessionId;s&&Vp[s]&&delete Vp[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});}});N0.get("/",async(e,t)=>{let o=String(e.headers[zY]??"");if(!o||!Vp[o]){t.status(400).send("Invalid or missing session ID");return}await Vp[o].handleRequest(e,t);});N0.delete("/",async(e,t)=>{let o=String(e.headers[zY]??"");if(!o||!Vp[o]){t.status(400).send("Invalid or missing session ID");return}let n=Vp[o];try{await n.handleRequest(e,t);}catch{t.headersSent||t.status(500).send("Error processing session termination");}});var bIe=N0;var SIe=Router();SIe.get("/:id",qt(async(e,t)=>{let{id:o}=e.params;if(!o){t.status(400).json({error:"Missing ID"});return}let n=$n();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){Sn.error({err:r,screenshotId:o},"Failed to proxy on-demand screenshot"),t.status(404).json({error:"Screenshot not found"});}}));var TIe=SIe;var jY=Router(),vIe=e=>({name:e.config.name,configFilePath:e.configFilePath,fileFormat:e.config.fileFormat});jY.get("/",qt(async(e,t)=>{let o=kt(),n=new Map;for(let i of await v1())n.set(i.configFilePath,i);n.set(o.configFilePath,o);let r={projects:[...n.values()].map(vIe),current:vIe(o)};t.status(200).json(r);}));jY.post("/set",qt(async(e,t)=>{let o;try{o=fZ.parse(e.body);}catch(n){t.status(400).json({error:`Invalid request body: ${n}`});return}Sn.info("Setting local project");try{let n=await Io({configFilePath:o.configFilePath}),r=$n();if(!r)throw new Error("API client is not initialized.");await Fv({project:n,apiClient:r});}catch(n){t.status(400).json({error:`Error setting project: ${n}`});return}t.sendStatus(204);}));var AIe=jY;var EIe=Router();EIe.get("/",qt((e,t)=>{let o=kt(),n={ai:o.config.ai,browser:o.config.browser,displayRoot:o.config.displayRoot};t.status(200).json(n);}));var wIe=EIe;var ym=Router();ym.post("/",qt(async(e,t)=>{let o;try{o=lZ.parse(e.body);}catch(n){t.status(400).json({error:`Invalid request body: ${n}`});return}try{let n=kt(),r=await hx({project:n,input:o});Wl({type:"test_editor:test_create",test_platform:"web"}),t.status(201).json(r);}catch(n){if(n instanceof Wt){t.status(400).json({error:n.message});return}throw n}}));ym.get("/:testPath",qt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n=kt(),r=await Ml(n),i;try{i=await Js(bn__default.join(n.rootDir,o),Sn,r),await(await Ha({logger:Sn,orgId:Lr(),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:Sn,useSnapshotIdentityCache:n.config.fileFormat==="v2"}),t.status(200).json(i);}catch(a){t.status(400).send({error:a.message});return}(async()=>{try{await MM({relativeTestPath:o,stepLists:{steps:i.steps,beforeSteps:i.beforeSteps,afterSteps:i.afterSteps},schemaVersion:_t,momenticFiles:r,project:n});}catch(a){Sn.error({err:a},"Failed to save migrated test to disk after initial fetch");}})();}));ym.get("/:testPath/metadata",qt(async(e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n=kt(),r=bn__default.join(n.rootDir,o);if(!mn__default.existsSync(r)){t.status(404).json({error:"Test file not found."});return}let i=mn__default.statSync(r),a=await Dc(Sn),s={gitBranch:a.gitBranchName??"unknown",fileMtime:i.mtime,gitCommitSha:a.gitCommitSha??"unknown"};t.status(200).json(s);}));ym.patch("/:testPath/metadata",qt(async(e,t)=>{if(!e.params.testPath){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=sZ.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let r={message:"ok",newRelativeTestPath:pC(e.params.testPath,o,kt()).newRelativeTestPath};t.status(200).json(r);}));ym.patch("/:testPath",qt(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=aZ.parse(e.body);}catch(p){Sn.warn({err:p},"Invalid save request"),t.status(400).json({error:`Invalid request body: ${p}`});return}Sn.info({testPath:o},"Save received");let r=kt(),i=await Ml(r),a;try{a=bu(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 Ln({stepLists:n.stepLists,useSnapshotIdentityCache:s,cacheCreationParams:{orgId:Lr(),testId:a.id,environment:a.envs?.find(p=>p.default)?.name}}),m=await Ha({logger:Sn,orgId:Lr(),project:r});s&&await m.saveSnapshotCacheEntries({logger:Sn,entries:d}),await m.saveStepCacheEntries({logger:Sn,entries:u}),await y1({relativeTestPath:o,stepsToSave:l,moduleUpdates:c,schemaVersion:n.schemaVersion,momenticFiles:i,project:r}),t.status(201).json({message:"ok"});}));ym.patch("/:testPath/environments",qt(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=gZ.parse(e.body);}catch(r){t.status(400).json({error:`Invalid request body: ${r}`});return}pC(o,{envs:n.defaultEnv?[{name:n.defaultEnv,default:true}]:[]},kt()),t.status(201).json({message:"ok"});}));ym.patch("/:testPath/move",qt(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=hZ.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${H(i)}`});return}let r=kt();if(!mn__default.existsSync(bn__default.join(r.rootDir,o))){t.status(404).json({error:"Test not found."});return}await Mse({relativeTestPath:o,targetFolderRelativePath:n.folderPath,project:r}),t.status(200).json({message:"ok"});}));ym.delete("/:testPath",qt((e,t)=>{let{testPath:o}=e.params;if(!o){t.status(400).json({error:"Missing testPath in url path."});return}let n=kt(),r=bn__default.join(n.rootDir,o);if(!mn__default.existsSync(r)){t.status(404).json({error:"Test not found."});return}mn__default.unlinkSync(r),t.status(200).json({message:"ok"});}));ym.post("/:testPath/duplicate",qt(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=cZ.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{sd(n.name);}catch(h){t.status(400).json({error:h.message});return}let r=kt(),i=bn__default.join(r.rootDir,o);if(!mn__default.existsSync(i)){t.status(404).json({error:"Test not found."});return}let a=await it(r),s;try{s=await Js(i,Sn,a);}catch(h){t.status(400).send({error:h.message});return}let l=Fd({projectConfig:r.config,momenticFiles:a,entityType:"test"}),c=Zn.parse({...s,name:n.name,id:l}),{stepsToSave:u}=await Ln({stepLists:{steps:s.steps,beforeSteps:s.beforeSteps,afterSteps:s.afterSteps},createNewCacheIds:true}),d=bn__default.dirname(i),m=bn__default.join(d,`${n.name}.test.yaml`);xc({test:{fileType:Ue.TEST,...c,...u},filePath:m,projectConfig:r.config,momenticFiles:a});let p={relativeFilePath:bn__default.relative(r.rootDir,m)};Wl({type:"test_editor:test_duplicated"}),t.status(201).json(p);}));var RIe=ym;var CIe=15e4,Ps={numScreenshots:10,numBrowserStates:2,tokensThreshold:25e4,targetTokens:2e5};function bm(){return {openai:{reasoningEffort:dj,reasoningSummary:"auto",textVerbosity:"low",store:false,include:["reasoning.encrypted_content"]},azure:{reasoningEffort:dj,reasoningSummary:"auto",textVerbosity:"low",store:false,include:["reasoning.encrypted_content"]}}}var LEt="about:blank",NEt=[".webm",".mp4"];function GY(e){return e?mn__default.mkdtempSync(bn__default.join(Qm.tmpdir(),"momentic-explore-video-")):void 0}async function Uu(e){let{sessionManager:t,storage:o,logger:n,owner:r,signal:i,timelineLane:a}=e,s=GY(a),l=new bF(n),c=await t.startTestlessSession({logger:n,storage:o,baseUrl:LEt,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 VY({logger:m,timelineLane:a,videoOutputDir:s,videoStartTimes:c.videoStartTimes,videoActivations:c.videoActivations,finishedAt:Date.now()}),await DEt({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:CIe,networkLogEntriesPath:()=>l.entriesFilePath,cleanupBrowserSession:d},isAlive:()=>t.getSession(c.sessionId)!==void 0}}async function VY({logger:e,timelineLane:t,videoOutputDir:o,videoStartTimes:n,videoActivations:r,finishedAt:i}){if(!(!t||!o))try{for(let a of await mn__default.promises.readdir(o)){if(!NEt.includes(bn__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:bn__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 DEt({logger:e,timelineLane:t,entriesFilePath:o}){if(t)try{if((await mn__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 BEt=2/3;function IIe(e,t){return t===void 0?{signal:e}:{signal:AbortSignal.any([e,AbortSignal.timeout(t)]),buildTimeoutMs:Math.floor(t*BEt)}}function NA(e,t){if(!e?.aborted)return H(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 xIe(e){let t=e.filter(o=>o!==void 0);return t.length===0?void 0:AbortSignal.any(t)}async function Wp(e,t){try{await WV.rm(e,{recursive:!0,force:!0});}catch(o){t.warn({err:o,spoolDir:e},"Failed to clean up explorer spool dir");}}async function qY(e){return await UEt(e),await zEt(e),await jEt(e)}async function UEt(e){try{await j2(e).version();}catch(t){throw new Error(`git is not available on PATH. Install git to use 'momentic ai explore' (${H(t)}).`,{cause:t})}}async function zEt(e){let t;try{t=await j2(e).checkIsRepo();}catch(o){throw new Error(`Failed to determine whether ${e} is a git repository: ${H(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 jEt(e){let t=j2(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}: ${H(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 qp=class extends ql{overlay;diskProject;writtenFilePaths=new Set;constructor(t,o,n){let r=new AM(yt);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=D0(await this.collectDraftTests(t),o.testIds,u=>u.test.id,"test"),r=D0(await this.collectDraftModules(t),o.moduleIds,u=>u.module.moduleId,"module");if(n.length===0&&r.length===0)return {acceptedTests:[],acceptedModules:[]};let i=await it(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)HEt(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));QT(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=D0(n,o.testIds,u=>u.test.id,"test"),i=D0(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"&&_Ie(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 Wt(s.join(`
3164
3164
  `));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 Js(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 Ud({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=>bn__default.resolve(s))),r=await it(this.diskProject,true),i=[];for(let s of Object.values(r.tests)){if(!n.has(bn__default.resolve(s.fullFilePath)))continue;let l=await Js(s.fullFilePath,t,r,yt);i.push({entity:s,test:l,kind:"delete"});}let a=[];for(let s of Object.values(r.modules)){if(!n.has(bn__default.resolve(s.fullFilePath)))continue;let l=await Ud({modHandle:s,momenticFiles:r,logger:t,fileSystem:yt});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 _Ie(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 Wt(s.join(`
3165
3165
  `))}};function D0(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 Wt(`No pending draft ${n} with id "${r}".`);return i})}function _Ie(e){let t=new Set;return ps({steps:[...e.beforeSteps??[],...e.steps??[],...e.afterSteps??[]],onPresetAction:()=>{},onConditional:()=>{},onSimpleStepContainer:o=>{o.type==="RESOLVED_MODULE"&&t.add(o.moduleId);}}),t}function HEt(e){try{yt.unlinkSync(e);}catch{}}var GEt=["**/pnpm-lock.yaml","**/yarn.lock","**/package-lock.json","**/Cargo.lock","**/Gemfile.lock","**/poetry.lock","**/uv.lock","**/go.sum","**/composer.lock"],VEt=["**/__generated__/**","**/dist/**","**/build/**","**/.next/**","**/.nuxt/**","**/out/**","**/coverage/**","**/*.snap"],WEt=["**/*.{test,spec}.{ts,tsx,js,jsx,mjs,cjs,py,go,rs,rb,java,kt}","**/__tests__/**","**/test/**","**/tests/**","**/e2e/**","**/cypress/**","**/playwright/**"],qEt=["**/*.md","**/*.mdx","**/*.rst","**/docs/**","**/README*","**/CHANGELOG*","**/LICENSE*"],KEt=["**/*.json","**/*.yaml","**/*.yml","**/*.toml","**/*.ini","**/*.env*","**/*.config.{ts,js,mjs,cjs}","**/.eslintrc*","**/.prettierrc*","**/.editorconfig","**/tsconfig*.json","**/Dockerfile*","**/Makefile","**/.gitignore","**/.dockerignore"],YEt=[".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 bx(e){return vPe([...e],{dot:true})}var JEt=bx(GEt),XEt=bx(VEt),QEt=bx(WEt),ZEt=bx(qEt),ewt=bx(KEt);function PIe(e,t){if(JEt(e))return "lockfile";if(XEt(e))return "generated";if(t===true)return "binary";if(QEt(e))return "test";if(ZEt(e))return "docs";if(ewt(e))return "config";let o=e.toLowerCase();for(let n of YEt)if(o.endsWith(n))return "code";return "other"}var owt={minCombinedScore:.05,maxResults:8,maxTokens:2e3},OIe={minCombinedScore:.05,maxResults:5,maxTokens:1500},nwt=5,rwt=12;async function kIe({client:e,manifest:t,customPrompt:o,logger:n,abortSignal:r}){let i=iwt({manifest:t,customPrompt:o});if(!i)return Co;try{return await ge(Ec({client:e,query:i,config:owt,logger:n,clientName:"explorer",agentSubtype:"explorer",abortSignal:r}),{milliseconds:Ks})}catch(a){if(r.aborted)throw a;return n.warn({err:a},"Knowledge retrieval failed during explorer setup"),Co}}function iwt({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,nwt);if(r.length>0){o.push("Commit subjects:");for(let a of r)o.push(`- ${a}`);}let i=awt(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(`
3166
3166
  `)}function awt(e){return e.filter(o=>swt(o.category)).sort((o,n)=>n.insertions+n.deletions-(o.insertions+o.deletions)||o.path.localeCompare(n.path)).slice(0,rwt)}function swt(e){switch(e){case "code":case "config":case "docs":return true;case "test":case "lockfile":case "generated":case "binary":case "other":return false}}var lwt=SS.filter(e=>e!=="CONDITIONAL"),MIe=Pt`
@@ -4301,7 +4301,7 @@ ${C3}`;if(Array.isArray(e))return [...e,{role:"system",content:C3}];if(e&&typeof
4301
4301
  <completion>
4302
4302
  Call ${sc} exactly once with shouldPermanentHeal and failureReason. The run is bound to this assessment; do not provide a run ID. Do not edit tests or use a browser session.
4303
4303
  </completion>
4304
- `.trim()}var _3="gpt-5.6-luna",Hxt="claude-sonnet-4-6",$xt={openai:{reasoningEffort:"high",reasoningSummary:"auto",store:false,textVerbosity:"low"},azure:{reasoningEffort:"high",reasoningSummary:"auto",store:false,textVerbosity:"low"},anthropic:{...al,effort:"low"}},Gxt=15,F_e=8e4,Vxt=2,Wxt=z.object({shouldPermanentHeal:z.boolean(),failureReason:z.string().min(1)});async function B_e({recoveryRuns:e,orgId:t,serverId:o,project:n,logger:r,generator:i,apiClient:a,outputDir:s,abortSignal:l,output:c,timelineRecorder:u}){return e.length===0?[]:Promise.all(e.map(d=>qxt({recoveryRun:d,orgId:t,serverId:o,project:n,logger:r,generator:i,apiClient:a,outputDir:s,abortSignal:l,output:c,timelineRecorder:u})))}async function qxt(e){let{recoveryRun:t}=e;return pe({name:"heal-recovery-assessor",attributes:{"momentic.agent_name":"heal-recovery-assessor","momentic.test_id":t.testId,"momentic.run_id":t.runId},fn:()=>Kxt(e)})}async function Kxt({recoveryRun:e,orgId:t,serverId:o,project:n,logger:r,generator:i,apiClient:a,outputDir:s,abortSignal:l,output:c,timelineRecorder:u}){let d=AbortSignal.timeout(F_e),m=AbortSignal.any([l,d]),p={orgId:t,serverId:o,project:n,logger:r,generator:i,apiClient:a,extractBaseDir:bn__default.join(tmpdir(),`${o}-recovery-assessment-${e.runId}`),outputDir:s,saveChangesToDisk:false,supportsFileOutput:false,sessionIdleTimeoutMs:5*60*1e3,assessmentRunId:e.runId,submittedAssessment:void 0},h=Jxt({generator:i,logger:r,sessionId:`${o}:recovery-assessment:${e.runId}`,agentInvocationId:o}),g=Yxt({context:p,logger:r}),f=D_e(),y=c?.pane(`Recovery assessment: ${e.testName} (${e.runId.slice(0,8)})`,{compactDoneRow:true}),b=u?.registerRecoveryAssessor({label:`Recovery assessment: ${e.testName}`,testId:e.testId,runId:e.runId});try{let S,A;try{let{run:_}=await ge(Gg({runId:e.runId},p),{milliseconds:1/0,signal:m});A=_.attemptNumber,S=Yye({simplifiedResults:Zv(_,{includeFailureClassification:!0}),runAttemptNumber:A});}catch(_){if(m.aborted)throw _;r.warn({err:_,runId:e.runId,testId:e.testId},"Failed to preload recovery attempts for failure recovery assessment");}let E=[{role:"user",content:stringify({recoveryRuns:[e],finalAttemptNumber:A,recoveryAttempts:S})}],R=Eo({...h,system:f,abortSignal:m,stopWhen:[stepCountIs(Gxt),hasToolCall(sc)],messages:E,tools:g}),w=ti({usage:R.totalUsage,promptType:"heal-recovery-assessor",logger:r.child({agentInvocationId:o})});(y||b)&&await ge(Hi({streamResult:R,pane:y,timelineLane:b}),{milliseconds:1/0,signal:m});let[,O]=await ge(Promise.all([R.text,R.response]),{milliseconds:1/0,signal:m});w({message:"Failure recovery assessor completed",attributes:{runId:e.runId,testId:e.testId}}),p.submittedAssessment||(r.warn({runId:e.runId,testId:e.testId},`Failure recovery assessor stopped without ${sc}; continuing with a corrective turn`),await ge(Cs({maxAttempts:Vxt,logger:r,agentConfig:{...h,system:f,messages:E,tools:g},streamResponseMessages:O.messages,abortSignal:m,toolName:sc,isComplete:()=>p.submittedAssessment!==void 0,userMessage:`You forgot to call ${sc}. Review the prior conversation, then call ${sc} with shouldPermanentHeal and failureReason now. The run is already bound to this assessment.`}),{milliseconds:1/0,signal:m}));let I=p.submittedAssessment;if(!I)throw new Error("Failure recovery assessor did not submit an assessment.");return y?.close({state:I.shouldPermanentHeal?"done":"failed",detail:I.failureReason}),I}catch(S){if(l.aborted)throw y?.close({state:"failed",detail:"Recovery assessment cancelled."}),S;return d.aborted?(r.warn({runId:e.runId,testId:e.testId},`Failure recovery assessment timed out after ${F_e/1e3} seconds; treating run as not permanently healable`),y?.close({state:"failed",detail:"Recovery assessment timed out after 80 seconds."}),{runId:e.runId,shouldPermanentHeal:false,failureReason:"Recovery assessment timed out after 80 seconds."}):(r.error({err:S,runId:e.runId,testId:e.testId},"Failure recovery assessment failed; treating run as not permanently healable"),y?.close({state:"failed",detail:"Recovery assessment failed."}),{runId:e.runId,shouldPermanentHeal:false,failureReason:"Recovery assessment failed."})}finally{b?.close();}}function Yxt({context:e,logger:t}){let o={};for(let n of [$g,yA,pm,xF]){let r=n(e);o[r.name]=ni({tool:Nr({tool:r.tool,name:r.name,logger:t,agentName:"heal-recovery-assessor"}),name:r.name,spanName:`heal_recovery_assessment.tool.${r.name}`,attributes:{"momentic.agent_name":"heal-recovery-assessor"}});}return o[sc]=ni({tool:Nr({tool:tool({description:"Submit the permanent-healing decision for the recovered run after inspecting the required evidence.",inputSchema:Wxt,execute:async n=>(e.submittedAssessment={runId:e.assessmentRunId,...n},q(L({text:"Assessment submitted."}))),toModelOutput:({output:n})=>n}),name:sc,logger:t,agentName:"heal-recovery-assessor"}),name:sc,spanName:`heal_recovery_assessment.tool.${sc}`,attributes:{"momentic.agent_name":"heal-recovery-assessor"}}),o}function Jxt({generator:e,logger:t,sessionId:o,agentInvocationId:n}){let r={logger:t,streamType:"heal-recovery-assessor",sessionId:o,agentInvocationId:n},i=e.getOpenAIModelFactory({...r,useOpenAIResponsesWebSocket:false}),a=e.getAzureOpenAIModelFactory(r),s=e.getAnthropicModelFactory(r),l=e.getOpenAIModelFactory({...r,useOpenAIResponsesWebSocket:true});return {providerFallback:{logger:t,providers:[{id:"openai",model:i(_3)},{id:"azure",model:a(_3)},{id:"anthropic",model:s(Hxt)}],websocketFirst:{enabled:true,provider:{id:Uc,model:l(_3)}}},providerOptions:$xt}}async function H_e(e){let{momenticServerUrl:t,apiKey:o,serverPort:n,staticDir:r,devicePixelRatio:i,regenerateCache:a,alwaysSaveCache:s,noCache:l,initialProject:c}=e;t&&Cp(t),Rg({alwaysSaveCache:s,noCache:l}),cse(true),await pN({apiKey:o,mode:"interactive",runner:"editor"});let u=Lr(),d=Qd(),m=Dv(),p=hN();g0({userId:d,orgId:u,email:m,selfServe:p});let h=e.logger??Sn;h=h.child({orgId:u,userId:d}),Hh(h),h.debug({params:e},"Desktop server init and api key check done");let g=n_t(r,n,h),f=`http://localhost:${n}`,y={type:"API_KEY",baseUrl:jl(),apiKey:o,logger:h,mode:"interactive",runner:"editor"},b=new Bt(y);await Fv({project:c,apiClient:b}),await new Promise((R,w)=>{let O=I=>{"code"in I&&I.code==="EADDRINUSE"?r_t(n):C.error(`An unexpected error occurred while starting the server: ${H(I)}`),w(Wr(I));};g.once("error",O),g.listen(n,()=>{g.removeListener("error",O),h.info(`Desktop server is running at ${f}`),R();}),Ac(async()=>{Wl({type:"test_editor:app_shutdown"}),await f0(),xp(),g.close();});}),Wl({type:"test_editor:app_started"});let A=async()=>{let R=kt();return new kr(R.config.ai?.agentConfig,y)};wCe({baseServer:g,getOrgId:async()=>Lr(),getUserId:async()=>Qd(),generatorFactory:A,enricherFactory:async()=>new yp(y,await A()),cacheStorageFactory:async R=>{let w=kt();return Ha({logger:h,orgId:R,client:b,project:w,regenerateCache:a,alwaysSaveCache:s,noCache:l})},billingReporterFactory:async()=>new gp(b),branchGetter:async()=>{try{return (await Dc(h))?.gitBranchName}catch(R){h.error({err:R},"Failed to get environment git metadata");return}},settingsFactory:async()=>{let R=kt();return {ai:{},browser:{},...R.config}},storageFactory:async R=>{let w=kt();return new _A(b,R,w)},logger:h,devicePixelRatio:i,authorization:y,knowledgeRetrievalClientFactory:async()=>b,knowledgeApiClientFactory:async()=>b,globalE2eStateManager:MCe,visualDiffStorageFactory:async R=>new sf(b)}),Ac(FY);}var j_e="25mb";function n_t(e,t,o){let n=z_e();n.use(Xxt()),n.use(U_e.json({limit:j_e})),n.use(U_e.urlencoded({extended:false,limit:j_e}));let r=Router();if(r.use("/tests",RIe),r.use("/modules",dIe),r.use("/environments",pIe),r.use("/projects",AIe),r.use("/folders",FV({allowedFileTypes:[Ue.TEST,Ue.TEST_V2,Ue.MODULE,Ue.MODULE_V2]})),r.use("/settings",wIe),r.use("/identify",gIe),r.use("/entities",mIe),r.use("/on-demand-screenshots",TIe),r.use("/mcp",bIe),r.use("/git",BV),r.use("/cache-config",DV),r.use("/product-updates",UV),n.use("/api",r),n.use((a,s,l)=>{a.path!=="/healthcheck"&&!a.path.startsWith("/assets")&&o.debug({url:a.url,path:a.path,query:a.query,method:a.method,body:a.body,headers:a.rawHeaders,client:a.ip},"Received desktop-server request"),s.on("close",()=>{s.statusCode>=400&&o.error({url:a.url,method:a.method,statusCode:s.statusCode},"Request completed in error");}),l();}),n.use((a,s,l,c)=>{if(a instanceof de){l.status(400).json({error:a.message});return}if(a instanceof Error&&a.message.includes("BadRequestError: request aborted")){l.status(400).send("Client disconnected");return}Rd(a),o.error({stack:a.stack,msg:a.message,err:a,url:s.url,method:s.method},"Unhandled exception leading to 500 on desktop-server"),C.error(`Oh no! We seem to have hit an unexpected snag \u{1F61E}. Please contact Momentic Support with the following error: ${a.message}
4304
+ `.trim()}var _3="gpt-6-luna",Hxt="claude-sonnet-4-6",$xt={openai:{reasoningEffort:"high",reasoningSummary:"auto",store:false,textVerbosity:"low"},azure:{reasoningEffort:"high",reasoningSummary:"auto",store:false,textVerbosity:"low"},anthropic:{...al,effort:"low"}},Gxt=15,F_e=8e4,Vxt=2,Wxt=z.object({shouldPermanentHeal:z.boolean(),failureReason:z.string().min(1)});async function B_e({recoveryRuns:e,orgId:t,serverId:o,project:n,logger:r,generator:i,apiClient:a,outputDir:s,abortSignal:l,output:c,timelineRecorder:u}){return e.length===0?[]:Promise.all(e.map(d=>qxt({recoveryRun:d,orgId:t,serverId:o,project:n,logger:r,generator:i,apiClient:a,outputDir:s,abortSignal:l,output:c,timelineRecorder:u})))}async function qxt(e){let{recoveryRun:t}=e;return pe({name:"heal-recovery-assessor",attributes:{"momentic.agent_name":"heal-recovery-assessor","momentic.test_id":t.testId,"momentic.run_id":t.runId},fn:()=>Kxt(e)})}async function Kxt({recoveryRun:e,orgId:t,serverId:o,project:n,logger:r,generator:i,apiClient:a,outputDir:s,abortSignal:l,output:c,timelineRecorder:u}){let d=AbortSignal.timeout(F_e),m=AbortSignal.any([l,d]),p={orgId:t,serverId:o,project:n,logger:r,generator:i,apiClient:a,extractBaseDir:bn__default.join(tmpdir(),`${o}-recovery-assessment-${e.runId}`),outputDir:s,saveChangesToDisk:false,supportsFileOutput:false,sessionIdleTimeoutMs:5*60*1e3,assessmentRunId:e.runId,submittedAssessment:void 0},h=Jxt({generator:i,logger:r,sessionId:`${o}:recovery-assessment:${e.runId}`,agentInvocationId:o}),g=Yxt({context:p,logger:r}),f=D_e(),y=c?.pane(`Recovery assessment: ${e.testName} (${e.runId.slice(0,8)})`,{compactDoneRow:true}),b=u?.registerRecoveryAssessor({label:`Recovery assessment: ${e.testName}`,testId:e.testId,runId:e.runId});try{let S,A;try{let{run:_}=await ge(Gg({runId:e.runId},p),{milliseconds:1/0,signal:m});A=_.attemptNumber,S=Yye({simplifiedResults:Zv(_,{includeFailureClassification:!0}),runAttemptNumber:A});}catch(_){if(m.aborted)throw _;r.warn({err:_,runId:e.runId,testId:e.testId},"Failed to preload recovery attempts for failure recovery assessment");}let E=[{role:"user",content:stringify({recoveryRuns:[e],finalAttemptNumber:A,recoveryAttempts:S})}],R=Eo({...h,system:f,abortSignal:m,stopWhen:[stepCountIs(Gxt),hasToolCall(sc)],messages:E,tools:g}),w=ti({usage:R.totalUsage,promptType:"heal-recovery-assessor",logger:r.child({agentInvocationId:o})});(y||b)&&await ge(Hi({streamResult:R,pane:y,timelineLane:b}),{milliseconds:1/0,signal:m});let[,O]=await ge(Promise.all([R.text,R.response]),{milliseconds:1/0,signal:m});w({message:"Failure recovery assessor completed",attributes:{runId:e.runId,testId:e.testId}}),p.submittedAssessment||(r.warn({runId:e.runId,testId:e.testId},`Failure recovery assessor stopped without ${sc}; continuing with a corrective turn`),await ge(Cs({maxAttempts:Vxt,logger:r,agentConfig:{...h,system:f,messages:E,tools:g},streamResponseMessages:O.messages,abortSignal:m,toolName:sc,isComplete:()=>p.submittedAssessment!==void 0,userMessage:`You forgot to call ${sc}. Review the prior conversation, then call ${sc} with shouldPermanentHeal and failureReason now. The run is already bound to this assessment.`}),{milliseconds:1/0,signal:m}));let I=p.submittedAssessment;if(!I)throw new Error("Failure recovery assessor did not submit an assessment.");return y?.close({state:I.shouldPermanentHeal?"done":"failed",detail:I.failureReason}),I}catch(S){if(l.aborted)throw y?.close({state:"failed",detail:"Recovery assessment cancelled."}),S;return d.aborted?(r.warn({runId:e.runId,testId:e.testId},`Failure recovery assessment timed out after ${F_e/1e3} seconds; treating run as not permanently healable`),y?.close({state:"failed",detail:"Recovery assessment timed out after 80 seconds."}),{runId:e.runId,shouldPermanentHeal:false,failureReason:"Recovery assessment timed out after 80 seconds."}):(r.error({err:S,runId:e.runId,testId:e.testId},"Failure recovery assessment failed; treating run as not permanently healable"),y?.close({state:"failed",detail:"Recovery assessment failed."}),{runId:e.runId,shouldPermanentHeal:false,failureReason:"Recovery assessment failed."})}finally{b?.close();}}function Yxt({context:e,logger:t}){let o={};for(let n of [$g,yA,pm,xF]){let r=n(e);o[r.name]=ni({tool:Nr({tool:r.tool,name:r.name,logger:t,agentName:"heal-recovery-assessor"}),name:r.name,spanName:`heal_recovery_assessment.tool.${r.name}`,attributes:{"momentic.agent_name":"heal-recovery-assessor"}});}return o[sc]=ni({tool:Nr({tool:tool({description:"Submit the permanent-healing decision for the recovered run after inspecting the required evidence.",inputSchema:Wxt,execute:async n=>(e.submittedAssessment={runId:e.assessmentRunId,...n},q(L({text:"Assessment submitted."}))),toModelOutput:({output:n})=>n}),name:sc,logger:t,agentName:"heal-recovery-assessor"}),name:sc,spanName:`heal_recovery_assessment.tool.${sc}`,attributes:{"momentic.agent_name":"heal-recovery-assessor"}}),o}function Jxt({generator:e,logger:t,sessionId:o,agentInvocationId:n}){let r={logger:t,streamType:"heal-recovery-assessor",sessionId:o,agentInvocationId:n},i=e.getOpenAIModelFactory({...r,useOpenAIResponsesWebSocket:false}),a=e.getAzureOpenAIModelFactory(r),s=e.getAnthropicModelFactory(r),l=e.getOpenAIModelFactory({...r,useOpenAIResponsesWebSocket:true});return {providerFallback:{logger:t,providers:[{id:"openai",model:i(_3)},{id:"azure",model:a(_3)},{id:"anthropic",model:s(Hxt)}],websocketFirst:{enabled:true,provider:{id:Uc,model:l(_3)}}},providerOptions:$xt}}async function H_e(e){let{momenticServerUrl:t,apiKey:o,serverPort:n,staticDir:r,devicePixelRatio:i,regenerateCache:a,alwaysSaveCache:s,noCache:l,initialProject:c}=e;t&&Cp(t),Rg({alwaysSaveCache:s,noCache:l}),cse(true),await pN({apiKey:o,mode:"interactive",runner:"editor"});let u=Lr(),d=Qd(),m=Dv(),p=hN();g0({userId:d,orgId:u,email:m,selfServe:p});let h=e.logger??Sn;h=h.child({orgId:u,userId:d}),Hh(h),h.debug({params:e},"Desktop server init and api key check done");let g=n_t(r,n,h),f=`http://localhost:${n}`,y={type:"API_KEY",baseUrl:jl(),apiKey:o,logger:h,mode:"interactive",runner:"editor"},b=new Bt(y);await Fv({project:c,apiClient:b}),await new Promise((R,w)=>{let O=I=>{"code"in I&&I.code==="EADDRINUSE"?r_t(n):C.error(`An unexpected error occurred while starting the server: ${H(I)}`),w(Wr(I));};g.once("error",O),g.listen(n,()=>{g.removeListener("error",O),h.info(`Desktop server is running at ${f}`),R();}),Ac(async()=>{Wl({type:"test_editor:app_shutdown"}),await f0(),xp(),g.close();});}),Wl({type:"test_editor:app_started"});let A=async()=>{let R=kt();return new kr(R.config.ai?.agentConfig,y)};wCe({baseServer:g,getOrgId:async()=>Lr(),getUserId:async()=>Qd(),generatorFactory:A,enricherFactory:async()=>new yp(y,await A()),cacheStorageFactory:async R=>{let w=kt();return Ha({logger:h,orgId:R,client:b,project:w,regenerateCache:a,alwaysSaveCache:s,noCache:l})},billingReporterFactory:async()=>new gp(b),branchGetter:async()=>{try{return (await Dc(h))?.gitBranchName}catch(R){h.error({err:R},"Failed to get environment git metadata");return}},settingsFactory:async()=>{let R=kt();return {ai:{},browser:{},...R.config}},storageFactory:async R=>{let w=kt();return new _A(b,R,w)},logger:h,devicePixelRatio:i,authorization:y,knowledgeRetrievalClientFactory:async()=>b,knowledgeApiClientFactory:async()=>b,globalE2eStateManager:MCe,visualDiffStorageFactory:async R=>new sf(b)}),Ac(FY);}var j_e="25mb";function n_t(e,t,o){let n=z_e();n.use(Xxt()),n.use(U_e.json({limit:j_e})),n.use(U_e.urlencoded({extended:false,limit:j_e}));let r=Router();if(r.use("/tests",RIe),r.use("/modules",dIe),r.use("/environments",pIe),r.use("/projects",AIe),r.use("/folders",FV({allowedFileTypes:[Ue.TEST,Ue.TEST_V2,Ue.MODULE,Ue.MODULE_V2]})),r.use("/settings",wIe),r.use("/identify",gIe),r.use("/entities",mIe),r.use("/on-demand-screenshots",TIe),r.use("/mcp",bIe),r.use("/git",BV),r.use("/cache-config",DV),r.use("/product-updates",UV),n.use("/api",r),n.use((a,s,l)=>{a.path!=="/healthcheck"&&!a.path.startsWith("/assets")&&o.debug({url:a.url,path:a.path,query:a.query,method:a.method,body:a.body,headers:a.rawHeaders,client:a.ip},"Received desktop-server request"),s.on("close",()=>{s.statusCode>=400&&o.error({url:a.url,method:a.method,statusCode:s.statusCode},"Request completed in error");}),l();}),n.use((a,s,l,c)=>{if(a instanceof de){l.status(400).json({error:a.message});return}if(a instanceof Error&&a.message.includes("BadRequestError: request aborted")){l.status(400).send("Client disconnected");return}Rd(a),o.error({stack:a.stack,msg:a.message,err:a,url:s.url,method:s.method},"Unhandled exception leading to 500 on desktop-server"),C.error(`Oh no! We seem to have hit an unexpected snag \u{1F61E}. Please contact Momentic Support with the following error: ${a.message}
4305
4305
  ${a.stack}`),l.status(500).send(`Internal Server Error: ${a.message}`);}),e){let a=z_e.static(e,{setHeaders:s=>{s.setHeader("Cache-Control","no-cache");},redirect:false});n.use(a),n.use("*",(s,l)=>{l.sendFile(bn__default.join(e,"index.html"));});}let i=t_t.createServer(n);return i.on("error",a=>{console.error("An unexpected server error occurred:",a.message);}),i}Zxt.setMaxListeners(25);process.on("warning",e=>{Sn.warn({err:e},`Node warning received on desktop-server: ${e.message}`);});process.on("uncaughtException",e=>{Sn.error({err:e},"Uncaught exception on desktop-server"),C.error(`Oh no! The Momentic desktop app encountered a fatal error \u{1F61E}. Error logs: ${e.message}`),Rd(e);});process.on("unhandledRejection",(e,t)=>{if(e instanceof Error&&e.name==="AbortError")return;Sn.error({err:e},"Uncaught exception on desktop-server (promise rejection)");let o=e instanceof Error&&e.stack?e.stack:H(e);C.error(`Oh no! The Momentic desktop app encountered an asynchronous error \u{1F61E}. Error logs: ${o}`),Rd(e);});function r_t(e){C.error(Pt`Port ${e} is already in use by another process. Please close the other process and try again.
4306
4306
  Using Bash on MacOS or Linux:
4307
4307
  lsof -t -i :${e} | xargs kill -9
@@ -4608,7 +4608,7 @@ ${a.length===0?"(none)":m}
4608
4608
  `);}var ju="/v1/app-graph",ff=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(`${ju}/ai-select/claim`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return LX.parse(o)}async getPlan(t){let o=new URLSearchParams({repository:t.repository,headSha:t.headSha}),n=await this.apiClient.sendRequest(`${ju}/ai-select/plan?${o.toString()}`,{method:"GET",retries:1,requestTimeoutMs:1e4});return DX.parse(n)}async finalize(t){let o=await this.apiClient.sendRequest(`${ju}/ai-select/finalize`,{method:"POST",body:t,retries:2,requestTimeoutMs:3e4});return NX.parse(o)}async release(t){await this.apiClient.sendRequest(`${ju}/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(`${ju}/ai-select/search/observed-tests`,{signal:o,method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return _j.parse(n)}async searchSegments(t,o){let n=await this.apiClient.sendRequest(`${ju}/ai-select/search/segments`,{signal:o,method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return _j.parse(n)}async getObservedTest(t,o){let n=await this.apiClient.sendRequest(`${ju}/ai-select/observed-tests/${encodeURIComponent(t)}`,{signal:o,method:"GET",retries:2,requestTimeoutMs:1e4});return FX.parse(n)}async getSegment(t,o){let n=await this.apiClient.sendRequest(`${ju}/ai-select/segments/${encodeURIComponent(t)}`,{signal:o,method:"GET",retries:2,requestTimeoutMs:1e4});return BX.parse(n)}async listObservedTestsForSegment(t,o){let n=await this.apiClient.sendRequest(`${ju}/ai-select/segments/${encodeURIComponent(t)}/observed-tests`,{signal:o,method:"GET",retries:2,requestTimeoutMs:1e4});return UX.parse(n)}async getCodeInsights(t,o){let n=await this.apiClient.sendRequest(`${ju}/ai-select/code-insights`,{signal:o,method:"POST",body:{repository:t.repository,folderPaths:t.folderPaths},retries:1,requestTimeoutMs:1e4});return zX.parse(n).insights}async createCodeInsight(t,o){let n=await this.apiClient.sendRequest(`${ju}/ai-select/code-insight`,{signal:o,method:"POST",body:t,retries:1,requestTimeoutMs:15e3});return jX.parse(n)}},Ux=class extends ff{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"}}},uOt=2e3,pOe=12e4;async function hOe(e){let t=Date.now()+(e.timeoutMs??pOe),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??pOe}ms`);e.logger.info({attempt:o,claimedBy:n.claimedBy},"ai-select plan computing on another shard; polling"),await ht(n.retryAfterMs??uOt);}}async function mOt(e){try{return await gf({repoRoot:e.repoRoot,explicitBase:"HEAD~1",logger:e.logger})}catch{return L3({repoRoot:e.repoRoot,client:e.apiClient,repository:e.repository,base:null,logger:e.logger})}}async function gOe({params:e,reason:t}){let o=e.config?.onBaseUnavailable??"use-head";switch(o){case "fail":throw new Qp(`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 mOt(e);return n?{diff:n,reason:t}:{diff:null,reason:`Could not assemble diff against the HEAD commit's parent: ${t}`}}default:return ot(o)}}async function i4(e){return pe({name:"ai_select.resolve_plan",root:true,attributes:{"momentic.repository":e.repository},fn:()=>pOt(e)})}async function pOt(e){let t=new ff(e.apiClient,e.logger),o=e.agentOutputStream?et(e.agentOutputStream):et();e.agentOutputStream&&e.agentOutputStream.write(`
4609
4609
  `);let n;try{n=await pe({name:"ai_select.assemble_diff",attributes:{"momentic.explicit_base":e.explicitBase??"auto"},fn:()=>fo({text:"Analyzing code changes...",screen:o},()=>gf({repoRoot:e.repoRoot,explicitBase:e.explicitBase,configBase:e.config?.baseRef,mainBranch:e.mainBranch,logger:e.logger}))});}catch(m){let p=m instanceof Qp?m.message:`Could not assemble diff against base ref: ${H(m)}.`,h=aPe({explicitBase:e.explicitBase,configBase:e.config?.baseRef,mainBranch:e.mainBranch}),g=h?await L3({repoRoot:e.repoRoot,client:e.apiClient,repository:e.repository,base:h,logger:e.logger}):null;if(g)n=g;else {let f=await gOe({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 gOe({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(`
4610
4610
  `)).digest("hex").slice(0,12),i=await TB({client:e.apiClient,query:SB({...e,diff:n}),environmentName:e.environmentName,logger:e.logger}),a=hOt({headSha:n.headSha,suiteHash:r,customPrompt:e.customPrompt,changeRequestDescription:e.changeRequestDescription,budgetCap:e.budgetCap,knowledgeBaseRules:i}),s=n.repoRoot,l=bn__default.relative(s,e.repoRoot),c=l?e.candidateTests.map(m=>({...m,testPath:bn__default.posix.join(l.split(bn__default.sep).join("/"),m.testPath)})):e.candidateTests;if(e.dryRun){let m=await tE({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:Ob(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 hOe({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 fp({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 tE({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:Ob(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: ${H(m)}.`,diff:n}}}function hOt({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 yOe({test:e,fragment:t,entities:o,client:n,logger:r,yes:i}){gt$1(t.schemaVersion,_t)&&(C.error(`Patch schema version (${t.schemaVersion}) is newer than this CLI supports. Update to the latest CLI and retry.`),We(ze.Failure)),Nre(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.`),We(ze.Failure));}),t.createdAt.getTime()<Date.now()-7*qS&&!i&&!await ei("The test patch you are applying is more than 7 days old. Are you sure you want to continue?")&&We(ze.Failure);let s=e.lastModified.getTime();t.createdAt.getTime()+60*60*1e3<s&&!i&&!await ei("The test patch you are applying was created before the test was last updated. Are you sure you want to continue?")&&We(ze.Failure);let l=cp(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!==_t){let{steps:f,newVersion:y}=await Pl({metadata:{id:t.id,schemaVersion:t.schemaVersion},steps:t.steps,logger:C});u=y,d=po.array().parse(f);}else d=po.array().parse(t.steps);let{stepsToSave:m}=await Ln({stepLists:{steps:d}});m.beforeSteps=l.beforeSteps??void 0,m.afterSteps=l.afterSteps??void 0;let p=ry(Ss.stringify(c),Ss.stringify(m),{n_surrounding:5}),h=et(),g=nt(h);C.info(""),C.info(g.bold("Patch preview")),C.info(""),C.info(g.code(e.relativePath));for(let f of aN(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 ei("Do you want to apply this patch?")&&(C.dimmed("Cancelled."),We(ze.Failure)),yy({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 bOt(e){switch(e){case "SUCCESS":return "passed";case "CANCELLED":return "skipped";case "FAILED":case "IDLE":case "RUNNING":return "failed";default:return ot(e)}}function SOt(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 ot(e)}}async function TOt(e){let{step:t,logger:o,debugDataStorage:n,folder:r,beforeSnapshot:i,afterSnapshot:a}=e,s=await CB({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 CB({logger:o,debugDataStorage:n,folder:r,label:"after",snapshotId:a});l&&t.attachments.push({name:"Screenshot after step",source:l,type:"image/jpeg"});}function vOt(e,t,o){let n=z.union([z.looseObject({}),z.array(z.unknown().optional())]).safeParse(o).success,r=`output-attachment-${randomUUID()}.json`;mn__default.writeFileSync(bn__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 AOt(e){let{step:t,folder:o,beforeTestContext:n,afterTestContext:r}=e;if(n){let i=`before-context-${randomUUID()}.json`;writeFileSync(bn__default.join(o,i),SOe(n.env)),t.attachments.push({name:"Test context before step",source:i,type:"application/json"});}if(r){let i=`after-context-${randomUUID()}.json`;writeFileSync(bn__default.join(o,i),SOe(r.env)),t.attachments.push({name:"Test context after step",source:i,type:"application/json"});}}function TOe(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 CB(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 mn__default.writeFileSync(bn__default.join(n,s),a),s}async function EOt(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:SOt(n.status),start:n.lastAttemptStartedAt.getTime(),stop:n.finishedAt.getTime(),parameters:[],labels:TOe({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 a4(e,t,o.folder,i.steps,n.results);let a=ROt(t,r,n.runAttemptId);a.length>0&&(i.attachments=a);let s=`${n.runAttemptId}-result.json`;mn__default.writeFileSync(bn__default.join(r,s),JSON.stringify(i,void 0,2));}async function RB(e,t,o,n){let r={name:dn(n),start:n.startedAt.getTime(),stop:n.finishedAt.getTime(),status:bOt(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 TOt({step:r,logger:e,debugDataStorage:t,folder:o,beforeSnapshot:n.beforeSnapshot,afterSnapshot:n.afterSnapshot}),n.message&&(r.statusDetails={message:n.message}),n.data)if($E.safeParse(n.data).success){let i=$E.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`;mn__default.writeFileSync(bn__default.join(o,l),JSON.stringify(a,null,2)),mn__default.writeFileSync(bn__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 vOt(r,o,n.data);return r}async function a4(e,t,o,n,r){for(let i of r){let a;switch(i.type){case "PRESET_ACTION":{a=await RB(e,t,o,i);break}case "CONDITIONAL":{a=await RB(e,t,o,i),a.steps=[],i.assertionResult&&a.steps.push(await RB(e,t,o,i.assertionResult)),await a4(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 RB(e,t,o,i),await a4(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=[]),AOt({step:a,folder:o,beforeTestContext:i.beforeTestContext,afterTestContext:i.afterTestContext}),n.push(a);}}function wOt(e,t){for(let{tests:o,quarantined:n}of [{tests:t.testsToSkip,quarantined:false},{tests:t.quarantinedTestsToSkip,quarantined:true}])for(let r of o){let i=n?t.quarantinedTestsMetadata[r.id]:void 0,a={uuid:createHash("sha256").update(JSON.stringify([t.projectConfigPath,t.suiteName,t.startedAt.getTime(),r.id])).digest("hex"),historyId:r.id,testCaseId:r.id,fullName:r.name,name:vn(r.name),status:"skipped",start:t.startedAt.getTime(),stop:t.startedAt.getTime(),parameters:[],labels:TOe({suiteName:t.suiteName,attempts:0,runId:void 0,quarantined:n,quarantinedReason:i?.quarantinedReason,quarantinedAt:i?.quarantinedAt}),steps:[]};r.platform&&a.labels.push({name:"platformType",value:r.platform}),mn__default.writeFileSync(bn__default.join(e,`${a.uuid}-result.json`),JSON.stringify(a,void 0,2));}}async function vOe(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 EOt(e,a,{folder:o,suiteName:n.suiteName},i);}finally{a.close();}}wOt(o,n);}function SOe(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 ROt(e,t,o){let n=e.listVideoAssetPaths();if(n.length===0)return [];let r=[];for(let i of n){let a=bn__default.basename(i),s=o?`${o}-${a}`:a;try{mn__default.copyFileSync(i,bn__default.join(t,s));}catch{continue}let l,c=bn__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 IB(e){if(e.status!=="FAILED")return "none";switch(e.failureReason){case "SetupFailureError":return "setup";case "TeardownFailureError":return "teardown";default:return "main"}}function IOt(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 ot(e)}}function ROe(e){let t=bn__default.relative(".",e);return t===""?e:t}function AOe(e,t){return Math.max(0,(e.getTime()-t.getTime())/1e3)}function xOt(e,t,o){let n=AOe(t,e),r=AOe(o,e);return {start_at:n,end_at:r,duration:Math.max(0,r-n)}}function COe(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 _Ot(e){if(e.status!=="FAILED"||!e.failureReason)return;let t=Ju({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 POt(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(`
4611
- `).map(n=>n.trim()).filter(Boolean)||[];if(!(t.length===0&&o.length===0))return [{expanded:t,backtrace:o}]}function OOt(e){let t=e.status==="FAILED"?IB(e):void 0;return COe([["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 kOt(e,t,o){let n=ROe(o.filePath);return {id:o.runId||randomUUID(),scope:e,name:o.testName,location:n,file_name:bn__default.basename(n),result:IOt(o.status),failure_reason:_Ot(o),failure_expanded:POt(o),history:xOt(t,o.lastAttemptStartedAt,o.finishedAt),tags:OOt(o)}}function EOe(e,t,o,n,r){let i=ROe(t);return {id:randomUUID(),scope:e,name:o,location:i,file_name:bn__default.basename(i),result:"skipped",history:{start_at:0,end_at:0,duration:0},tags:COe([["quarantined",r?.quarantined||"false"],["failure_recovery","false"]])}}function MOt(e,t){let o=t.map(i=>kOt(e.suiteName,e.startedAt,i)),n=e.testsToSkip.map(i=>EOe(e.suiteName,i.relativeFilePath,i.name,i.id,void 0)),r=e.quarantinedTestsToSkip.map(i=>EOe(e.suiteName,i.relativeFilePath,i.name,i.id,{quarantined:"true"}));return [...o,...n,...r]}function IOe(e,t,o){let n=MOt(t,o);mn__default.writeFileSync(bn__default.join(e,`${t.suiteName}.buildkite.json`),JSON.stringify(n,null,2));}function oE(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 _Oe(e,t,o){let n=l4(t,o);mn__default.writeFileSync(bn__default.join(e,`${t.suiteName}.momentic.json`),JSON.stringify(n,null,2));}function l4(e,t){let o=t.map(NOt),n=[...e.testsToSkip.map(r=>xOe(r,false)),...e.quarantinedTestsToSkip.map(r=>xOe(r,true))];return oQ.parse({version:1,runGroup:{startedAt:e.startedAt.toISOString(),finishedAt:e.finishedAt.toISOString(),durationMs:e.finishedAt.getTime()-e.startedAt.getTime()},summary:DOt(o,n),runs:o,skipped:n})}function NOt(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:bn__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 xOe(e,t){return {testId:e.id,testName:e.name,filePath:bn__default.relative(".",e.relativeFilePath),labels:e.labels,quarantined:t}}function DOt(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 POe(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 BOt(e,t){let o=IB(e);if(t.name(e.testName).className(e.testName).file(bn__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&&POe(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=Ju({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 UOt(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();BOt(d,m);}for(let d of s){let m=u.testCase();m.name(d.name).className(d.name).file(bn__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(bn__default.relative(".",d.relativeFilePath)).property("id",d.id);let p=c[d.id];p&&POe(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 OOe(e,t,o){let n=FOt.newBuilder();UOt(n,t,o),n.writeTo(bn__default.join(e,`${t.suiteName}.xml`));}var zOt="insights-collector.newrelic.com",jOt="insights-collector.eu01.nr-data.net",HOt=4e3;async function c4({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(oE),u=l4(o,c),d=kOe({...t.attributes,runGroupId:r,environment:i,suiteName:o.suiteName,gitBranch:s.gitBranchName,gitCommit:s.gitCommitSha,gitRepository:s.githubRepository??s.gitOriginUrl,ciRunUrl:$Ot()}),m=u.runs.map((g,f)=>({...d,eventType:"MomenticRun",timestamp:new Date(g.finishedAt).getTime(),...kOe({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"?jOt:zOt}/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: ${H(g)}`);}}function kOe(e){let t={};for(let[o,n]of Object.entries(e))n==null||n===""||(t[o]=typeof n=="string"?n.slice(0,HOt):n);return t}function $Ot(){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 MOe(e){return {title:dn(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(MOe):[]}}async function WOt(e,t,o,n){if(n.results?.length){let r=await CB({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 qOt(e,t,o,n){let r;if(n.status==="FAILED"&&n.failureReason){let i=Ju({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(MOe)||[],startTime:n.lastAttemptStartedAt.toISOString(),attachments:await WOt(e,t,o,n)}}async function KOt(e,t,o,n){return {expectedStatus:"passed",status:n.status==="PASSED"?"expected":"unexpected",results:[await qOt(e,t,o,n)]}}async function YOt(e,t,o,n){return {tags:[],title:n.test.name,ok:n.status==="PASSED",tests:[await KOt(e,t,o,n)],id:n.runId,file:n.filePath}}function u4(e,t){return e.reduce((o,n)=>t(n)?o+1:o,0)}async function JOt(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 cR;try{return await YOt(e,a,o,i)}finally{a.close();}}))}],errors:[],stats:{startTime:n.startedAt.toISOString(),duration:n.finishedAt.getTime()-n.startedAt.getTime(),expected:u4(r,i=>i.status==="PASSED"),unexpected:u4(r,i=>i.status!=="PASSED"),flaky:u4(r,i=>!!i.isFlake),skipped:0}}}async function LOe(e,t,o,n,r){let i=await JOt(e,t,o,n,r);mn__default.writeFileSync(bn__default.join(o,`${n.suiteName}.json`),JSON.stringify(i,null,2));}async function NOe({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(oE);_Oe(i,n,a);return}case "junit":{let a=r.map(oE);OOe(i,n,a);return}case "buildkite-json":{let a=r.map(oE);IOe(i,n,a);return}case "allure":case "allure-json":await vOe(e,t,i,n,r);return;case "playwright-json":await LOe(e,t,i,n,r);return;default:throw new Error(`Unknown reporter format requested: '${o}'`)}}function Fb(e){let t=e??rkt();return DOe()&&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 rkt(){let e=DOe(),t=e?2:1;return C.debug(`Auto-detected device pixel ratio ${t} (Mac OS Retina: ${e}).`),t}var DOe=once(()=>{if(platform()!=="darwin")return false;try{return execSync("system_profiler SPDisplaysDataType").toString().includes("Retina")}catch{return false}});async function PB(e,t=true,o=false){let n=lkt(e),r=await akt.which(n[0],true),i=n.slice(1),a=ikt.exec(skt(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 FOe="the Momentic GitHub app is missing permission to create pull requests or write branches for this repository";function ckt(e,{context:t}){return e instanceof Mo?e.rawError.includes("Resource not accessible by integration")?`Cannot create ${t} because ${FOe}.`:e.status>=400&&e.status<500?e.rawError:`Could not create ${t} due to a GitHub error.`:`Could not create ${t}: ${H(e)}`}function BOe(e){return e instanceof Mo?e.rawError.includes("Resource not accessible by integration")?FOe:e.status>=400&&e.status<500?e.rawError:"a GitHub error occurred":H(e)}function UOe(e,t){C.error(ckt(e,t));}function OB(e){return zOe(e,"runs","run")}function d4(e){return zOe(e,"run-groups","run group")}function zOe(e,t,o){let n=e.trim(),r=/^https?:\/\//i.test(n)?dkt(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 dkt(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 kB(e){return new Promise((t,o)=>{let n=[];createReadStream(e).pipe(mkt()).on("data",r=>n.push(r)).on("end",()=>t(n)).on("error",r=>o(r));})}var Kt="3.59.2",jOe={packageName:"momentic",currentVersion:Kt,changelogUrl:"https://github.com/momentic-ai/cli/releases",updateCommand:"npx momentic@latest upgrade",runUpgrade:zq__default.existsSync(vp.join(process.cwd(),"package.json"))?e=>installPackage(`momentic@${e}`,{silent:false,dev:true}):void 0},{checkCLIVersion:si,getLatestCLIVersion:HOe}=Jpe(jOe),$Oe=e=>Phe({...jOe,logger:e});Nht("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI","POSTHOG_WEB_WRITE_KEY is not set");var{captureEvent:wm,setAnalyticsIdentity:MB,shutdownAnalytics:GOe}=UO({writeKey:"phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",host:"https://p.momentic.ai",platform:"cli",identity:"stashed",flushImmediately:true,onIdentify:Whe});var bkt=3e3,LB=new Set;function VOe(e){LB.add(e),e.finally(()=>LB.delete(e));}async function WOe(){if(LB.size!==0)try{await ge(Promise.allSettled([...LB]),{milliseconds:bkt});}catch{}}async function NB(){try{await ge(Promise.all([WOe(),FO(),go.flush(),GOe(),QO(),_W(),qhe()]),{milliseconds:5e3});}catch{}}async function KOe({momenticFiles:e,project:t,logger:o}){let n;try{n=await gf({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 Qp?new de(`Could not determine the base ref to diff against for --changed. ${a}`):new de(`--changed could not compute the git diff: ${H(i)}. ${a}`)}let r=Skt({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 Skt({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(vp.resolve(t,u.path));d&&!l.has(d.id)&&l.set(d.id,{fullFilePath:d.fullFilePath,relativePath:d.relativePath,reason:"test-changed"});}let c=Tkt({momenticFiles:o,changedModuleFullPaths:i.map(u=>vp.resolve(t,u.path))});if(c.size>0)for(let u of a){if(l.has(u.id))continue;let d=hC(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 Tkt({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,hC(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 yf({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 KOe({momenticFiles:o,project:n,logger:Te})).forEach(m=>c.add(m));else if(e&&e.length>0){let d=e.some(p=>mn__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(!mn__default.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let h;try{h=mn__default.statSync(p).isDirectory();}catch(f){l.warn({err:f},`Skipping path ${p} because it cannot be read`);return}let g=bn__default.resolve(p);Object.values(o.tests).filter(f=>h?Roe(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 ei("No test paths or substrings were provided. Do you want to run all tests?")&&(l.error("Cancelled by user."),We(ze.Failure)),Object.values(o.tests).forEach(m=>{c.add(m.fullFilePath);});for(let d of c){let m=bn__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 Js(d,Te,o);if(Rp.gt(m.schemaVersion,_t)&&hne(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:bn__default.relative(n.rootDir,d),testBundleHash:LM({absoluteTestFilePath:d,momenticFiles:o,logger:Te})}}catch(m){throw l.error(`Failed to read and resolve test at '${d}': ${H(m)}`),Wr(m)}});return compact(await Promise.all(u))}function JOe({testDefinitions:e,quarantinedTestsMetadata:t,onlyQuarantined:o=false,skipQuarantined:n=false,shardIndex:r=1}){let[i,a]=partition(e,c=>c.disabled),[s,l]=partition(a,c=>c.id in t);return {testsToSkip:r===1?i:[],quarantinedTestsToSkip:r===1&&n?s:[],testsToRun:o?[]:l,quarantinedTestsToRun:n?[]:s}}function XOe({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 QOe=()=>process.exit(130),ZOe=()=>process.exit(143);process.on("SIGINT",QOe);process.on("SIGTERM",ZOe);function nE(){process.off("SIGINT",QOe),process.off("SIGTERM",ZOe);}async function eke({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 ja({orgId:e,s:l,codeEvaluator:t,logger:o,context:r});}return i}var FB=z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/),h4=FB,Rkt=h4.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"}),DB=z.discriminatedUnion("mode",[z.object({mode:z.literal("playwright")}).strict(),z.object({mode:z.literal("private-service"),connectorId:FB,serviceIds:Rkt.optional()}).strict()]),oke=z.record(z.string().regex(/^[a-z0-9]([-.a-z0-9_]{0,61}[a-z0-9])?$/),z.string()),g4=z.union([z.guid(),z.string().regex(/^[a-f0-9]{64}$/)]),f4=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:oke.optional(),network:DB.default({mode:"playwright"}),principalId:g4,tokenVersion:z.literal(2)}).strict(),nke=z.object({accessToken:z.string().min(1),expiresAt:z.iso.datetime(),tokenType:z.literal("Bearer")}),tke=z.object({host:z.string().trim().min(1).max(253),port:z.number().int().min(1).max(65535)}).strict(),Ckt=z.object({browserAddress:tke,id:h4,target:tke}).strict(),Ikt=z.object({id:h4,mode:z.literal("localhost")}).strict(),xkt=z.union([Ckt,Ikt]),rke=z.object({services:xkt.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"});}),_kt=z.object({algorithm:z.literal("RSA-OAEP-256"),chunks:z.string().min(1).array().min(1).max(128)});f4.omit({tokenVersion:true}).partial({principalId:true});var ike=z.object({metadata:oke.optional(),browser:z.literal("chromium").default("chromium"),network:DB.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(),Pkt=z.discriminatedUnion("mode",[DB.options[0].strip(),DB.options[1].strip()]),y4=z.object({id:z.string(),status:z.string(),browser:z.string().optional(),playwrightVersion:z.string().optional(),network:Pkt.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()}),ake=y4.extend({connectToken:z.string(),status:z.literal("READY"),wsEndpoint:z.string()}),ske=z.object({connectorId:z.string(),state:z.string()}),lke=z.object({encryptedEnrollmentCredential:_kt});var eh=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";}},Bb=class extends Error{constructor(t){super("Browser Fleet request failed",{cause:t}),this.name="BrowserFleetConnectionError";}},BB=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";}},$a=class extends Error{constructor(o,n){super(o);this.sessionId=n;this.name="BrowserFleetResponseError";}},UB=class extends Error{constructor(o){super(`Browser Fleet Connector did not become active (${o.state})`);this.connector=o;this.name="BrowserFleetConnectorError";}};function zB(e){return `/v1/private-connectors/${encodeURIComponent(FB.parse(e))}`}function cke(e){let t=ske.safeParse(e);if(!t.success)throw new $a("Browser Fleet returned a malformed Connector response");return t.data}var jB=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(zB(t),{body:JSON.stringify(rke.parse(o.desiredState)),headers:{"Content-Type":"application/json",...r?{"X-Browser-Fleet-Principal-Id":g4.parse(r)}:{}},method:"PUT"},n,true);return cke(i.body)}async retrieve(t,o={}){let n=await this.transport.request(zB(t),{},o,true);return cke(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 UB(i);await setTimeout$1(500,void 0,{signal:r});}}async createEnrollmentCredential(t,o,n={}){let r=await this.transport.request(`${zB(t)}/enrollment-credentials`,{body:JSON.stringify(o),headers:{"Content-Type":"application/json"},method:"POST"},n,true),i=lke.safeParse(r.body);if(!i.success)throw new $a("Browser Fleet returned a malformed enrollment response");return i.data.encryptedEnrollmentCredential}async delete(t,o={}){await this.transport.request(zB(t),{method:"DELETE"},o,true);}};var Mkt=z.object({id:z.string()}),Lkt=1e4,Nkt=2e4;function mke(e){return e+Math.random()*Math.min(250,e/4)}var HB=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(mke(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 BB(d);let p=ake.safeParse(d);if(!p.success)throw new $a("Browser Fleet returned a malformed session response",d.id);return p.data}catch(m){let p=d?.id??(m instanceof $a?m.sessionId:void 0);if(!p&&c.aborted)try{p=(await this.createResponse(n,{...r,signal:AbortSignal.timeout(Nkt)})).session.id;}catch(h){h instanceof $a&&(p=h.sessionId);}throw p&&await this.delete(p,{signal:AbortSignal.timeout(Lkt)}).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 ike.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:{...o.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=y4.safeParse(r.body);if(!i.success)throw new $a("Browser Fleet returned a malformed session response",Mkt.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 Bb||r instanceof eh&&(r.status===408||r.status===429||r.status>=500))||Date.now()>=o)throw r;let a=r instanceof eh?r.retryAfterMs:500;await setTimeout$1(Math.min(mke(a),o-Date.now()),void 0,{signal:n});}}};var $B=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}=f4.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 eh)||m.status!==400||!l.metadata)throw m;u=await c(void 0);}let d=nke.safeParse(u.body);if(!d.success)throw new $a("Browser Fleet returned a malformed token response");return {...d.data,allocationRequestId:l.allocationRequestId,network:l.network,maxSessionTtlSeconds:l.maxSessionTtlSeconds}}};var pke=64*1024;function Fkt(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 hke(e){let t=Number(e.headers.get("Content-Length"));if(Number.isFinite(t)&&t>pke)throw await e.body?.cancel(),new $a("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>pke)throw await o.cancel(),new $a("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 GB=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 Bb(d)}let u=Fkt(c.headers.get("Retry-After"));if(!c.ok){let d=await hke(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 eh(c.status,m,u)}try{return {body:await hke(c),retryAfterMs:u}}catch(d){throw n.signal?.aborted||d instanceof $a?d:new Bb(d)}}};var zx=class{baseUrl;sessions;tokens;privateConnectors;constructor(t={}){let o=new GB(t);this.baseUrl=o.baseUrl,this.sessions=new HB(o,t.accessToken),this.tokens=new $B(o,{principalId:t.principalId,concurrencyKey:t.concurrencyKey,maxConcurrentSessions:t.maxConcurrentSessions}),this.privateConnectors=new jB(o,t.principalId);}};var gt={ArgsInvalid:"MOM_ARGS_INVALID",AuthRequired:"MOM_AUTH_REQUIRED",AuthForbidden:"MOM_AUTH_FORBIDDEN",ApiError:"MOM_API_ERROR",ApiUnavailable:"MOM_API_UNAVAILABLE",ResourceNotFound:"MOM_RESOURCE_NOT_FOUND",FeatureNotEnabled:"MOM_FEATURE_NOT_ENABLED",UsageLimitReached:"MOM_USAGE_LIMIT_REACHED",ExploreIncomplete:"MOM_EXPLORE_INCOMPLETE",ProjectLintFailed:"MOM_PROJECT_LINT_FAILED",ProjectConfigError:"MOM_PROJECT_CONFIG_ERROR",ResultsRunNotFound:"MOM_RESULTS_RUN_NOT_FOUND",UserUnclassified:"MOM_USER_UNCLASSIFIED",InternalUnhandled:"MOM_INTERNAL_UNHANDLED"},Bkt={[gt.ArgsInvalid]:{group:"args",retry:"no",attribution:"user-action"},[gt.AuthRequired]:{group:"auth",retry:"no",attribution:"user-action"},[gt.AuthForbidden]:{group:"auth",retry:"no",attribution:"user-action"},[gt.ApiError]:{group:"api",retry:"case-by-case",attribution:"product"},[gt.ApiUnavailable]:{group:"api",retry:"yes",attribution:"product"},[gt.ResourceNotFound]:{group:"api",retry:"no",attribution:"user-action"},[gt.FeatureNotEnabled]:{group:"auth",retry:"no",attribution:"product"},[gt.UsageLimitReached]:{group:"auth",retry:"no",attribution:"user-action"},[gt.ExploreIncomplete]:{group:"run",retry:"case-by-case",attribution:"unknown"},[gt.ProjectLintFailed]:{group:"args",retry:"no",attribution:"user-action"},[gt.ProjectConfigError]:{group:"env",retry:"no",attribution:"user-env"},[gt.ResultsRunNotFound]:{group:"args",retry:"no",attribution:"user-action"},[gt.UserUnclassified]:{group:"internal",retry:"no",attribution:"user-action"},[gt.InternalUnhandled]:{group:"internal",retry:"case-by-case",attribution:"product"}},gke={catalog:Bkt,argsCode:gt.ArgsInvalid,userCode:gt.UserUnclassified,internalCode:gt.InternalUnhandled,extraClassifier:e=>Hhe(e,{authRequired:gt.AuthRequired,authForbidden:gt.AuthForbidden,apiError:gt.ApiError,apiUnavailable:gt.ApiUnavailable,resourceNotFound:gt.ResourceNotFound,projectConfigError:gt.ProjectConfigError})};var fke=new Set;function yke(e){return pe({name:"cli.setup_browser_and_controller",attributes:{"momentic.remote_browser":e.localBrowserConfig.remoteBrowser===true},fn:async t=>{let o=await Ukt(e);return t?.setAttribute("momentic.browser_execution_mode",o.controller.browser.executionMode),o}})}async function Ukt({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:A,attemptedRemoteBrowserProviders:E,abortSignal:R}){let w={baseUrl:n.baseUrl,apiKey:n.apiKey,logger:Te,mode:n.mode,runner:n.runner},{controller:O,context:I}=await cx({baseUrl:e,envName:t,test:r,variables:c,logger:u,orgId:l,localBrowserConfig:p,aiSettings:h,customHeaders:d,codeEvaluator:a,storage:i,enricher:new yp(w,s),generator:s,visualDiffScreenshotStorage:g,devicePixelRatio:o,browserTypeOverride:A,callbacks:{onNetworkPage:_=>f.onNetworkPage(_),onNetworkLogs:_=>f.onNetworkLogs(_)},videoOptions:f.videoOutputPath?{videoOutputPath:f.videoOutputPath,onVideoPageChange:({videoName:_,timestamp:P})=>{f.setActiveVideo(_,P);}}:void 0,validateBrowserType:_=>{jh(_)||(Te.warn({browserType:_,testName:r.name},"Browser required by test does not appear to be installed"),!fke.has(_)&&(fke.add(_),C.warn(`Browser ${_} does not appear to be installed. Run '${Th(_)}' if you hit launch errors.`)));},createRemoteBrowserConnection:p.remoteBrowser?async()=>{let _=Date.now(),P,M=E?.slice(-1),B=crypto.randomUUID(),k=async()=>{let $=await n.createRemoteBrowserConnection({attemptedProviders:M,envName:t,runAttemptId:b,runGroupId:S,runId:y,testId:r.id,testName:r.name});return P=$.provider,$.provider&&E?.push($.provider),$};try{if(M?.includes("SELF_HOSTED"))return await k();let $=await n.tryCreateBrowserFleetAccessToken({allocationRequestId:B,envName:t,runAttemptId:b,runGroupId:S,runId:y,testId:r.id,testName:r.name},R);if(!$)return await k();P=$.provider,E?.push($.provider);let Z=await new zx({accessToken:$.accessToken,baseUrl:$.fleetApiUrl,requestTimeoutMs:15e3}).sessions.createAndWait({network:$.network,ttlSeconds:3600,waitTimeoutMs:1e4},{allocationTimeoutMs:9e4,idempotencyKey:B,signal:R});return {accessToken:Z.connectToken,endpointType:"PLAYWRIGHT",operatingSystem:"linux",provider:$.provider,wsEndpoint:Z.wsEndpoint}}catch($){throw R?.aborted?$:new Yc("Browser Fleet session allocation failed",{cause:$})}finally{go.distribution("test_event_duration",Date.now()-_,["name:remote-browser-allocation",`provider:${P??"unknown"}`]);}}:void 0});try{await dx({orgId:l,test:r,testInputs:m,codeEvaluator:a,logger:u,context:I});}catch(_){try{await O.browser.cleanup();}catch(P){u.error({err:P},"Failed to clean up browser after test input resolution failed");}throw _ instanceof ux?new Ao(gt.UserUnclassified,_.message,{cause:_}):_}return {controller:O,context:I}}function bke({testAdvancedSettings:e,orgSettings:t,logger:o}){if(e.failureRecovery===false||e.failureRecovery===void 0&&!t?.failureRecovery)return false;if(!ms){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 Ske({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:A}=t,{test:E,orgSettings:R}=e;b.info(`Running test '${E.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},O={orgId:a,userId:s,runId:l,testMetadata:E,steps:E.steps,beforeSteps:E.beforeSteps,afterSteps:E.afterSteps,orgSettings:R},I={collectDebugData:true,reinitializeBrowser:true,disableHealing:!await bke({testAdvancedSettings:E.advanced,orgSettings:R.ai,logger:b})};return iCe({fixtures:w,inputs:O,options:I,callbacks:{step:i??{},test:{onTestComplete:async P=>{await p.browser.cleanup({saveRemoteVideos:r!=="on-fail"||P?.status!=="PASSED"}),await g.dispose(),b.debug("Test completion cleanup finished");}}},testParams:{attemptTracer:A},runParams:{runTracer:c,runGroupTracer:u,project:d,apiClient:m,captureEvent:wm,abortSignal:n.abortSignal}})}async function Tke(e){let{testDefinition:t,traceMetadata:o}=e;return pe({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 Hkt(e);return n?.setAttributes({"momentic.test_status":r.status,"momentic.test_attempts":r.attempts}),r}})}async function Hkt(e){let{testDefinition:t,logger:o}=e,n=new Date;try{return await $kt(e)}catch(r){Rd(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),vke({err:ui(r),parameters:c,test:t,failureReason:oe.reasonFor(r,"UnknownError"),startedAt:n,lastAttemptStartedAt:n,attempts:0,quarantined:e.quarantined,quarantinedMetadata:e.quarantinedMetadata})}}async function $kt(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 pv(r,i),S=Tp({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}),A,E,R;o?(A={envName:o.metadata.environment.envName,resolvedEnv:o.metadata.environment.resolvedEnv,environmentVariables:{...o.metadata.environment.variables},baseUrl:o.metadata.environment.baseUrl},E={steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps}):(A=Dy({test:t,envNameOverride:e.envName,urlOverride:s,resolveEnv:N=>_c(N,n,c)}),{stepListsWithCaches:E,restoredStepLists:R}=await wc({cacheStorage:S,logger:c,schemaVersion:t.schemaVersion,stepLists:{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,environment:A.envName,useSnapshotIdentityCache:n.config.fileFormat==="v2"}));let{envName:w,resolvedEnv:O,environmentVariables:I,baseUrl:_}=A,P=E.steps,M=E.beforeSteps??void 0,B=E.afterSteps??void 0,k=xw(t),$=k||(e.recordVideo??false);k&&e.recordVideo!==true&&c.info("Enabling video recording because the test defines run assertions");let Z=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:k?true:void 0}),z=c.child(Z.loggerBindings||{});Object.entries(Z.envVarBindings||{}).forEach(([N,ae])=>{I[N]=ae;});let Y=await Vkt({...e,recordVideo:$,effectiveConfig:y,variables:I,envName:w,resolvedEnv:O,baseUrl:_,storageClient:b,tracer:Z,runGroupTracer:l,logger:z,cacheStorage:S,stepsWithCaches:P,beforeStepsWithCaches:M,afterStepsWithCaches:B,usageTracker:f});return await Z.finish({logger:c,status:Y.status,finishedAt:Y.finishedAt,failureDetails:Y.failureDetails,failureReason:Y.failureReason,isFlake:Y.isFlake,failureRecoveryDetails:Y.failureRecoveryDetails,runAssertionResults:Y.runAssertionResults}),Gkt({apiClient:r,classificationEnabled:y.ai?.classification?.enabled===true,runId:m,environment:w,status:Y.status,logger:z}),{runId:Z.runId,...Y}}function Gkt({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");});VOe(a);}async function Vkt(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:A,devicePixelRatio:E,logUpdate:R,tracer:w,runGroupTracer:O,logger:I,cacheStorage:_,gitMetadata:P,quarantined:M,quarantinedMetadata:B,usageTracker:k}=e,$=o,Z=$.ai?.aiFailureAnalysis??false,z=new Date,Y=new fv(a,l,s),N={envName:h,urlOverride:g,customHeaders:f,testInputs:y},ae={...$.browser||{},...S?.browser||{},...t.advanced||{},...e.remoteBrowserOverride?{remoteBrowser:true}:{}},Q=ae.remoteBrowser===true,ne=[],K,ue=Math.abs(A??t.retries??o.retries??1),Se=[],xe=[];I.info({...P,labels:t.labels,name:t.name,cwd:process.cwd()},"Starting test run using CLI");for(let De=0;De<=ue;De++){let lt=randomUUID(),W=await w.startAttempt(lt),ee=I.child(W.loggerBindings||{}),X={...t,steps:cloneDeep(n),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)};De!==0&&R("RETRY",`attempt ${De+1}/${ue+1}`);let Ie=new Date,be=cb({tools:new Sp({httpClient:new Ts({baseUrl:l.baseUrl,apiKey:l.apiKey,logger:ee,mode:l.mode,runner:l.runner}),fakerSeed:$.advanced?.fakerConstantSeed?sR:void 0})}),ie;try{let{controller:Ve,context:Tt}=await yke({tracer:W,runId:w.runId,runAttemptId:lt,runGroupId:e.traceMetadata.runGroupId,baseUrl:u,envName:h,apiClient:l,devicePixelRatio:E,logger:ee,storageClient:d,codeEvaluator:be,test:X,generator:c,orgId:m,variables:b,customHeaders:f,testInputs:y,localBrowserConfig:ae,browserTypeOverride:e.browserTypeOverride,attemptedRemoteBrowserProviders:ne,abortSignal:e.abortSignal,aiSettings:{...$.ai||{},...X.advanced||{}},visualDiffScreenshotStorage:Y});e.abortSignal&&(e.abortSignal.aborted?Ve.executeAbortController.abort():(ie=()=>{Ve.executeAbortController.abort();},e.abortSignal.addEventListener("abort",ie,{once:!0}))),K=await Ske({attemptMetadata:{attemptNumber:De+1,orgId:m,userId:p,runId:w.runId},attemptFixtures:{logger:ee,storageClient:d,cacheStorage:_,usageTracker:k,codeEvaluator:be,context:Tt,controller:Ve,tracer:W},attemptInputs:{test:X,orgSettings:$},runFixtures:{runTracer:w,runGroupTracer:O,project:a,apiClient:l,abortSignal:e.abortSignal},recordVideo:e.recordVideo??!1,stepCallbacks:{onStepStart:e.onStepStart,onStepEnd:e.onStepEnd,onSectionStart:e.onSectionStart}});let Yt=new Date,tt={logger:I,cacheStorage:_,orgId:m,testId:t.id,environment:h,originalStepsWithCaches:{steps:cloneDeep(n),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)},updatedStepsWithCaches:{steps:X.steps,beforeSteps:X.beforeSteps,afterSteps:X.afterSteps}};await uy({logger:I,cacheStorage:_,orgId:m,testId:t.id,environment:h,stepLists:tt.updatedStepsWithCaches,useSnapshotIdentityCache:a.config.fileFormat==="v2"}),K?.status==="PASSED"||K?.status==="CANCELLED"&&o.advanced?.saveCacheOnCancel?await dy(tt):K?.status==="FAILED"&&De===ue&&await PT(tt),await W.finish({logger:ee,result:K});let Qe;if(K.status==="PASSED"&&xw(t)){e.onStepStart?.(YX);let Xo=await _we({runAssertions:t.runAssertions??[],orgId:m,project:a,generator:c,apiClient:l,runTracer:w,runGroupTracer:O,logger:ee,testPlatform:"web",captureEvent:wm,abortSignal:e.abortSignal});Yt=new Date,Xo&&(xe.push(Xo),Qe=JX(Xo.evaluations));}let Et=xe.length>0?{attempts:xe}:void 0;Se.unshift(Qe!==void 0?"FAILED":K.status);let an=await eke({orgId:m,codeEvaluator:be,logger:ee,outputDefinitions:t.outputs??[],testContext:Tt}),pn=eQ(Se),pl=De+1;if(K.status!=="FAILED"&&Qe===void 0)return {...K,runAttemptId:lt,parameters:N,test:X,filePath:X.relativeFilePath,startedAt:z,lastAttemptStartedAt:Ie,finishedAt:Yt,attempts:pl,baseUrl:u,outputs:an,isFlake:pn,runAssertionResults:Et,quarantined:M,quarantinedMetadata:B,usedRemoteBrowser:Q};let Yl=K.failedStepResult,qi=Qe??(Yl?.message||"Unknown failure"),ga=Qe?"AssertionFailureError":Yl?.failureReason??P_(qi)??"UnknownError",pr=ee.child({failureReason:ga,errorMessage:qi,numAttempts:(ue+1).toString(),name:X.name});if(De<ue){pr.warn(`Retrying failed execution attempt for run: ${qi}`);continue}pr.error({usedRemoteBrowser:Q},`Test failed after all exhausting attempts: ${qi}`);let Jl=new Error(qi),hl={errorMessage:qi,errorStack:Jl.stack},sn;if($.ai?.classification?.enabled===!0){let Xo=Yl?.failureClassification;Xo||(e.onStepStart?.(_m),Xo=await zF({runTracer:w,runGroupTracer:O,outputDir:e.outputDir,orgId:m,project:a,generator:c,apiClient:l,logger:I,testPlatform:"web",aiSettings:$.ai,captureEvent:wm,abortSignal:e.abortSignal,failedStepMessage:Qe??Yl?.message,runAssertionResults:Et})),Xo&&(sn=Xo.classification.category,ga=Xo.classification.category,hl.classification={reason:Xo.classification.category,secondaryCategories:Xo.classification.secondaryCategories,summary:Xo.classification.reasoning,recoverable:Xo.classification.recoverable,confidence:Xo.classification.confidence,action:Xo.action,citations:Xo.classification.citations,cache:Xo.classification.cache,source:"v2"});}else if(Z){let Xo;try{if(K.results&&K.results.length>0){e.onStepStart?.(_m);let{classification:ro,aiFailureReason:Xl}=await nae({logger:ee,browserStateStorage:W,generator:c,fullResults:K,failureReason:ga,error:Jl,maxItemsFromEnd:void 0,numStepsWithScreenshots:void 0,disableCache:!1});Xo=ro,sn=Xl;}}catch(ro){ee.warn({err:ro},"Failed to classify test results");}Xo&&(hl.classification=Xo,ga=sn??ga,hl.classification.source="v1");}return {...K,status:"FAILED",runAttemptId:lt,parameters:N,failureDetails:hl,failureReason:ga,test:X,filePath:X.relativeFilePath,startedAt:z,lastAttemptStartedAt:Ie,finishedAt:Yt,attempts:De+1,baseUrl:u,outputs:an,runAssertionResults:Et,quarantined:M,quarantinedMetadata:B,usedRemoteBrowser:Q}}catch(Ve){let Tt=`Encountered fatal platform error while running test '${X.name}'`;return ee.error({err:Ve},Tt),C.error({err:Ve},Tt),await W.finish({logger:ee,result:{status:"FAILED"}}),vke({err:ui(Ve),parameters:N,test:X,failureReason:oe.reasonFor(Ve,"InternalPlatformError"),startedAt:z,lastAttemptStartedAt:Ie,attempts:De+1,quarantined:M,quarantinedMetadata:B,runAttemptId:lt,baseUrl:u,usedRemoteBrowser:Q})}finally{ie&&e.abortSignal?.removeEventListener("abort",ie);}}throw new Error("This code should not be reachable")}function vke({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 Ake=3e4;async function aE({timeoutMinutes:e,cancel:t,run:o}){let n=()=>void t("SIGINT received"),r=()=>void t("SIGTERM received");nE(),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 iE=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:Ake}).catch(()=>{this.params.runGroupLogger.warn(`Graceful shutdown timeout of ${Ake}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:A,browserTypeOverride:E,remoteBrowserOverride:R,onResult:w,onFatal:O}=this.params,I=0,_=true;for(;_;){let P=Object.values(this.runQueue);if(P.length===o&&await Promise.race(P.map(Z=>Z.promise)),this.cancelled){_=false;continue}let M=await t();if(M===void 0){_=false;continue}let B=`test-${I++}`,k={...M,startedAt:new Date},$=new AbortController;this.runQueue[B]={done:false,activeRun:k,abortController:$,promise:(async({inputs:Z,quarantined:z,quarantinedMetadata:Y,testDefinition:N,snapshot:ae,runId:Q})=>{let ne=N.relativeFilePath.includes("..")?N.fullFilePath:N.relativeFilePath;n.onTestBegin(ne);let K=i.child({testId:N.id,runId:Q}),ue=new ap({logger:K,reporter:new gp(l),runType:"test-run",platform:"WEB",runId:Q,runGroupId:r.runGroupMetadata.id,envName:f,testMetadata:N,suiteMetadata:void 0,runner:"test-runner"});try{let Se=await Tke({testDefinition:N,snapshot:ae,project:s,testInputs:Z,quarantined:z,quarantinedMetadata:Y,orgId:u,userId:d,runId:Q,devicePixelRatio:m,apiClient:l,runGroupTracer:r,outputDir:p,generator:c,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:b,logUpdate:(xe,De)=>n.onTestStatus(ne,xe,De),...vhe(n,ne),logger:K,gitMetadata:S,cacheOptions:A,usageTracker:ue,browserTypeOverride:E,remoteBrowserOverride:R,recordVideo:this.params.recordVideo,abortSignal:$.signal,traceMetadata:this.params.traceMetadata});n.onTestEnd(ne,Se.status,{recovered:Se.status==="PASSED"&&!!Se.failureRecoveryDetails?.attempts}),this.runResults.push(Se),w?.(Se);}catch(Se){let xe=`Encountered unexpected fatal error when running test '${N.name}'`;K.error({err:Se},xe),C.error({err:Se},xe),Rd(Se),O?.(Se),await this.cancel("Fatal error occurred",false);}finally{let Se=this.runQueue[B];Se&&(Se.done=true),await ue.flush(a),delete this.runQueue[B];}})(k)};}return await Promise.allSettled(Object.values(this.runQueue).map(P=>P.promise)),{runResults:this.runResults,cancelledRunsById:this.cancelledRunsById,cancelled:this.cancelled,cancellationReason:this.cancellationReason}}};function VB(e){return createHash("sha1").update(e).digest("hex")}var qkt=["tab","view","mode","step"],Kkt=[/^[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 Ykt(e){return Kkt.some(t=>t.test(e))}function Eke(e,t={}){let o;try{o=new URL(e);}catch{return e}let n=new Set(t.queryAllowlist??qkt),i=o.pathname.split("/").map(c=>c.length>0&&Ykt(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 b4=new Set(["id","name","role","type","href","for","placeholder","aria-label","data-testid"]),Jkt=/^[A-Za-z0-9_-]{16,256}$|^:r[0-9a-z]{1,32}:$/,Xkt=[/\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],wke=new Set(["h1","h2","h3","h4","h5","h6"]),Qkt=new Set(["input","select","textarea"]);function Zkt(e){let t=e;for(let o of Xkt)t=t.replace(o,"{id}");return t}function Rke(e){return Zkt(e).toLowerCase().replace(/\s+/g," ").trim().replace(/[.,:;!?]+$/u,"").replace(/\s*\d+\s*$/u,"").trim()}function eMt(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 tMt(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":Jkt.test(t)?"@gen":Rke(t)}function Cke(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=>b4.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=tMt(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"||wke.has(n)?o.tokens.push(`label=${Rke(s)}`):o.tokens.push(eMt(s))),(n==="button"||r==="button")&&(o.counts.buttons+=1),(n==="a"||r==="link")&&(o.counts.links+=1),(Qkt.has(n)||r==="textbox"||r==="combobox")&&(o.counts.formFields+=1),(wke.has(n)||r==="heading")&&(o.counts.headings+=1);for(let l of e.children??[])Cke(l,t+1,o);}function Ike(e){let t={tokens:[],counts:{buttons:0,links:0,formFields:0,headings:0}};return Cke(e,0,t),{tokens:t.tokens,counts:t.counts}}function xke(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 WB=128,oMt=4294967295,nMt=(()=>{let e=[];for(let t=0;t<WB;t++)e.push(xke(`perm:${t}`,0));return e})();function _ke(e){let t=new Uint32Array(WB);for(let n=0;n<WB;n++)t[n]=oMt;let o=new Set(e);for(let n of o)for(let r=0;r<WB;r++){let i=xke(n,nMt[r]);i<t[r]&&(t[r]=i);}return t}var iMt=32;function qB(e){let t=Eke(e.url,{queryAllowlist:e.queryAllowlist}),{tokens:o,counts:n}=Ike(e.dom),r=[`url:${t}`,`counts:buttons=${n.buttons}`,`counts:links=${n.links}`,`counts:formFields=${n.formFields}`,`counts:headings=${n.headings}`,...o],i=_ke(r),a=Buffer.from(i.buffer,i.byteOffset,i.byteLength);return {fingerprintHash:createHash$1("sha256").update(a).digest("hex").slice(0,iMt),minhash:Array.from(i),canonicalUrl:t}}var aMt=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]),Jn="\uFFFD",D;(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";})(D||(D={}));var ks={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function KB(e){return e>=55296&&e<=57343}function Pke(e){return e>=56320&&e<=57343}function Oke(e,t){return (e-55296)*1024+9216+t}function YB(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function JB(e){return e>=64976&&e<=65007||aMt.has(e)}var ye;(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";})(ye||(ye={}));var lMt=65536,XB=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=lMt,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(Pke(o))return this.pos++,this._addGap(),Oke(t,o)}else if(!this.lastChunkWritten)return this.endOfChunkHit=true,D.EOF;return this._err(ye.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,D.EOF;let n=this.html.charCodeAt(o);return n===D.CARRIAGE_RETURN?D.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,D.EOF;let t=this.html.charCodeAt(this.pos);return t===D.CARRIAGE_RETURN?(this.isEol=true,this.skipNextNewLine=true,D.LINE_FEED):t===D.LINE_FEED&&(this.isEol=true,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=false,this._addGap(),this.advance()):(this.skipNextNewLine=false,KB(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===D.LINE_FEED||t===D.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){YB(t)?this._err(ye.controlCharacterInInputStream):JB(t)&&this._err(ye.noncharacterInInputStream);}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=false;}};var zo;(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";})(zo||(zo={}));function QB(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 uMt=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 kke(e){return e>=55296&&e<=57343||e>1114111?65533:uMt.get(e)??e}function Mke(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 S4=Mke("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 Ga;(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";})(Ga||(Ga={}));var vr;(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";})(vr||(vr={}));var Lke=32;function T4(e){return e>=vr.ZERO&&e<=vr.NINE}function dMt(e){return e>=vr.UPPER_A&&e<=vr.UPPER_F||e>=vr.LOWER_A&&e<=vr.LOWER_F}function mMt(e){return e>=vr.UPPER_A&&e<=vr.UPPER_Z||e>=vr.LOWER_A&&e<=vr.LOWER_Z||T4(e)}function pMt(e){return e===vr.EQUALS||mMt(e)}var Wi;(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";})(Wi||(Wi={}));var Rm;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute";})(Rm||(Rm={}));var ZB=class{decodeTree;emitCodePoint;errors;constructor(t,o,n){this.decodeTree=t,this.emitCodePoint=o,this.errors=n;}state=Wi.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=Rm.Strict;runConsumed=0;startEntity(t){this.decodeMode=t,this.state=Wi.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0;}write(t,o){switch(this.state){case Wi.EntityStart:return t.charCodeAt(o)===vr.NUM?(this.state=Wi.NumericStart,this.consumed+=1,this.stateNumericStart(t,o+1)):(this.state=Wi.NamedEntity,this.stateNamedEntity(t,o));case Wi.NumericStart:return this.stateNumericStart(t,o);case Wi.NumericDecimal:return this.stateNumericDecimal(t,o);case Wi.NumericHex:return this.stateNumericHex(t,o);case Wi.NamedEntity:return this.stateNamedEntity(t,o)}}stateNumericStart(t,o){return o>=t.length?-1:(t.charCodeAt(o)|Lke)===vr.LOWER_X?(this.state=Wi.NumericHex,this.consumed+=1,this.stateNumericHex(t,o+1)):(this.state=Wi.NumericDecimal,this.stateNumericDecimal(t,o))}stateNumericHex(t,o){for(;o<t.length;){let n=t.charCodeAt(o);if(T4(n)||dMt(n)){let r=n<=vr.NINE?n-vr.ZERO:(n|Lke)-vr.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(T4(n))this.result=this.result*10+(n-vr.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===vr.SEMI)this.consumed+=1;else if(this.decodeMode===Rm.Strict)return 0;return this.emitCodePoint(kke(this.result),this.consumed),this.errors&&(t!==vr.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,o){let{decodeTree:n}=this,r=n[this.treeIndex],i=(r&Ga.VALUE_LENGTH)>>14;for(;o<t.length;){if(i===0&&r&Ga.FLAG13){let s=(r&Ga.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let l=r&Ga.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&Ga.VALUE_LENGTH)>>14;}if(o>=t.length)break;let a=t.charCodeAt(o);if(a===vr.SEMI&&i!==0&&r&Ga.FLAG13)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);if(this.treeIndex=hMt(n,r,this.treeIndex+Math.max(1,i),a),this.treeIndex<0)return this.result===0||this.decodeMode===Rm.Attribute&&(i===0||pMt(a))?0:this.emitNotTerminatedNamedEntity();if(r=n[this.treeIndex],i=(r&Ga.VALUE_LENGTH)>>14,i!==0){if(a===vr.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==Rm.Strict&&!(r&Ga.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]&Ga.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]&~(Ga.VALUE_LENGTH|Ga.FLAG13):r[t+1],n),o===3&&this.emitCodePoint(r[t+2],n),n}end(){switch(this.state){case Wi.NamedEntity:return this.result!==0&&(this.decodeMode!==Rm.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Wi.NumericDecimal:return this.emitNumericEntity(0,2);case Wi.NumericHex:return this.emitNumericEntity(0,3);case Wi.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Wi.EntityStart:return 0}}};function hMt(e,t,o,n){let r=(t&Ga.BRANCH_LENGTH)>>7,i=t&Ga.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 Oe;(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/";})(Oe||(Oe={}));var th;(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";})(th||(th={}));var Ms;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks";})(Ms||(Ms={}));var se;(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";})(se||(se={}));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 gMt=new Map([[se.A,T.A],[se.ADDRESS,T.ADDRESS],[se.ANNOTATION_XML,T.ANNOTATION_XML],[se.APPLET,T.APPLET],[se.AREA,T.AREA],[se.ARTICLE,T.ARTICLE],[se.ASIDE,T.ASIDE],[se.B,T.B],[se.BASE,T.BASE],[se.BASEFONT,T.BASEFONT],[se.BGSOUND,T.BGSOUND],[se.BIG,T.BIG],[se.BLOCKQUOTE,T.BLOCKQUOTE],[se.BODY,T.BODY],[se.BR,T.BR],[se.BUTTON,T.BUTTON],[se.CAPTION,T.CAPTION],[se.CENTER,T.CENTER],[se.CODE,T.CODE],[se.COL,T.COL],[se.COLGROUP,T.COLGROUP],[se.DD,T.DD],[se.DESC,T.DESC],[se.DETAILS,T.DETAILS],[se.DIALOG,T.DIALOG],[se.DIR,T.DIR],[se.DIV,T.DIV],[se.DL,T.DL],[se.DT,T.DT],[se.EM,T.EM],[se.EMBED,T.EMBED],[se.FIELDSET,T.FIELDSET],[se.FIGCAPTION,T.FIGCAPTION],[se.FIGURE,T.FIGURE],[se.FONT,T.FONT],[se.FOOTER,T.FOOTER],[se.FOREIGN_OBJECT,T.FOREIGN_OBJECT],[se.FORM,T.FORM],[se.FRAME,T.FRAME],[se.FRAMESET,T.FRAMESET],[se.H1,T.H1],[se.H2,T.H2],[se.H3,T.H3],[se.H4,T.H4],[se.H5,T.H5],[se.H6,T.H6],[se.HEAD,T.HEAD],[se.HEADER,T.HEADER],[se.HGROUP,T.HGROUP],[se.HR,T.HR],[se.HTML,T.HTML],[se.I,T.I],[se.IMG,T.IMG],[se.IMAGE,T.IMAGE],[se.INPUT,T.INPUT],[se.IFRAME,T.IFRAME],[se.KEYGEN,T.KEYGEN],[se.LABEL,T.LABEL],[se.LI,T.LI],[se.LINK,T.LINK],[se.LISTING,T.LISTING],[se.MAIN,T.MAIN],[se.MALIGNMARK,T.MALIGNMARK],[se.MARQUEE,T.MARQUEE],[se.MATH,T.MATH],[se.MENU,T.MENU],[se.META,T.META],[se.MGLYPH,T.MGLYPH],[se.MI,T.MI],[se.MO,T.MO],[se.MN,T.MN],[se.MS,T.MS],[se.MTEXT,T.MTEXT],[se.NAV,T.NAV],[se.NOBR,T.NOBR],[se.NOFRAMES,T.NOFRAMES],[se.NOEMBED,T.NOEMBED],[se.NOSCRIPT,T.NOSCRIPT],[se.OBJECT,T.OBJECT],[se.OL,T.OL],[se.OPTGROUP,T.OPTGROUP],[se.OPTION,T.OPTION],[se.P,T.P],[se.PARAM,T.PARAM],[se.PLAINTEXT,T.PLAINTEXT],[se.PRE,T.PRE],[se.RB,T.RB],[se.RP,T.RP],[se.RT,T.RT],[se.RTC,T.RTC],[se.RUBY,T.RUBY],[se.S,T.S],[se.SCRIPT,T.SCRIPT],[se.SEARCH,T.SEARCH],[se.SECTION,T.SECTION],[se.SELECT,T.SELECT],[se.SOURCE,T.SOURCE],[se.SMALL,T.SMALL],[se.SPAN,T.SPAN],[se.STRIKE,T.STRIKE],[se.STRONG,T.STRONG],[se.STYLE,T.STYLE],[se.SUB,T.SUB],[se.SUMMARY,T.SUMMARY],[se.SUP,T.SUP],[se.TABLE,T.TABLE],[se.TBODY,T.TBODY],[se.TEMPLATE,T.TEMPLATE],[se.TEXTAREA,T.TEXTAREA],[se.TFOOT,T.TFOOT],[se.TD,T.TD],[se.TH,T.TH],[se.THEAD,T.THEAD],[se.TITLE,T.TITLE],[se.TR,T.TR],[se.TRACK,T.TRACK],[se.TT,T.TT],[se.U,T.U],[se.UL,T.UL],[se.SVG,T.SVG],[se.VAR,T.VAR],[se.WBR,T.WBR],[se.XMP,T.XMP]]);function Ub(e){var t;return (t=gMt.get(e))!==null&&t!==void 0?t:T.UNKNOWN}var je=T,Nke={[Oe.HTML]:new Set([je.ADDRESS,je.APPLET,je.AREA,je.ARTICLE,je.ASIDE,je.BASE,je.BASEFONT,je.BGSOUND,je.BLOCKQUOTE,je.BODY,je.BR,je.BUTTON,je.CAPTION,je.CENTER,je.COL,je.COLGROUP,je.DD,je.DETAILS,je.DIR,je.DIV,je.DL,je.DT,je.EMBED,je.FIELDSET,je.FIGCAPTION,je.FIGURE,je.FOOTER,je.FORM,je.FRAME,je.FRAMESET,je.H1,je.H2,je.H3,je.H4,je.H5,je.H6,je.HEAD,je.HEADER,je.HGROUP,je.HR,je.HTML,je.IFRAME,je.IMG,je.INPUT,je.LI,je.LINK,je.LISTING,je.MAIN,je.MARQUEE,je.MENU,je.META,je.NAV,je.NOEMBED,je.NOFRAMES,je.NOSCRIPT,je.OBJECT,je.OL,je.P,je.PARAM,je.PLAINTEXT,je.PRE,je.SCRIPT,je.SECTION,je.SELECT,je.SOURCE,je.STYLE,je.SUMMARY,je.TABLE,je.TBODY,je.TD,je.TEMPLATE,je.TEXTAREA,je.TFOOT,je.TH,je.THEAD,je.TITLE,je.TR,je.TRACK,je.UL,je.WBR,je.XMP]),[Oe.MATHML]:new Set([je.MI,je.MO,je.MN,je.MS,je.MTEXT,je.ANNOTATION_XML]),[Oe.SVG]:new Set([je.TITLE,je.FOREIGN_OBJECT,je.DESC]),[Oe.XLINK]:new Set,[Oe.XML]:new Set,[Oe.XMLNS]:new Set},jx=new Set([je.H1,je.H2,je.H3,je.H4,je.H5,je.H6]);new Set([se.STYLE,se.SCRIPT,se.XMP,se.IFRAME,se.NOEMBED,se.NOFRAMES,se.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 Va={DATA:j.DATA,RCDATA:j.RCDATA,RAWTEXT:j.RAWTEXT,SCRIPT_DATA:j.SCRIPT_DATA,PLAINTEXT:j.PLAINTEXT,CDATA_SECTION:j.CDATA_SECTION};function yMt(e){return e>=D.DIGIT_0&&e<=D.DIGIT_9}function Hx(e){return e>=D.LATIN_CAPITAL_A&&e<=D.LATIN_CAPITAL_Z}function bMt(e){return e>=D.LATIN_SMALL_A&&e<=D.LATIN_SMALL_Z}function bf(e){return bMt(e)||Hx(e)}function Dke(e){return bf(e)||yMt(e)}function eU(e){return e+32}function Bke(e){return e===D.SPACE||e===D.LINE_FEED||e===D.TABULATION||e===D.FORM_FEED}function Fke(e){return Bke(e)||e===D.SOLIDUS||e===D.GREATER_THAN_SIGN}function SMt(e){return e===D.NULL?ye.nullCharacterReference:e>1114111?ye.characterReferenceOutsideUnicodeRange:KB(e)?ye.surrogateCharacterReference:JB(e)?ye.noncharacterCharacterReference:YB(e)||e===D.CARRIAGE_RETURN?ye.controlCharacterReference:null}var $x=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 XB(o),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new ZB(S4,(n,r)=>{this.preprocessor.pos=this.entityStartPos+r-1,this._flushCodePointConsumedAsCharacterReference(n);},o.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(ye.missingSemicolonAfterCharacterReference,1);},absenceOfDigitsInNumericCharacterReference:n=>{this._err(ye.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+n);},validateNumericCharacterReference:n=>{let r=SMt(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:zo.START_TAG,tagName:"",tagID:T.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(1)};}_createEndTagToken(){this.currentToken={type:zo.END_TAG,tagName:"",tagID:T.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(2)};}_createCommentToken(t){this.currentToken={type:zo.COMMENT,data:"",location:this.getCurrentLocation(t)};}_createDoctypeToken(t){this.currentToken={type:zo.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(QB(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(ye.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=Ub(t.tagName),t.type===zo.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(ye.endTagWithAttributes),t.selfClosing&&this._err(ye.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 zo.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case zo.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case zo.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:zo.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=Bke(t)?zo.WHITESPACE_CHARACTER:t===D.NULL?zo.NULL_CHARACTER:zo.CHARACTER;this._appendCharToCurrentCharacterToken(o,t<65536?String.fromCharCode(t):String.fromCodePoint(t));}_emitChars(t){this._appendCharToCurrentCharacterToken(zo.CHARACTER,t);}_startCharacterReference(){this.returnState=this.state,this.state=j.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Rm.Attribute:Rm.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 D.LESS_THAN_SIGN:{this.state=j.TAG_OPEN;break}case D.AMPERSAND:{this._startCharacterReference();break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitCodePoint(t);break}case D.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRcdata(t){switch(t){case D.AMPERSAND:{this._startCharacterReference();break}case D.LESS_THAN_SIGN:{this.state=j.RCDATA_LESS_THAN_SIGN;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitChars(Jn);break}case D.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRawtext(t){switch(t){case D.LESS_THAN_SIGN:{this.state=j.RAWTEXT_LESS_THAN_SIGN;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitChars(Jn);break}case D.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptData(t){switch(t){case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_LESS_THAN_SIGN;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitChars(Jn);break}case D.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_statePlaintext(t){switch(t){case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitChars(Jn);break}case D.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateTagOpen(t){if(bf(t))this._createStartTagToken(),this.state=j.TAG_NAME,this._stateTagName(t);else switch(t){case D.EXCLAMATION_MARK:{this.state=j.MARKUP_DECLARATION_OPEN;break}case D.SOLIDUS:{this.state=j.END_TAG_OPEN;break}case D.QUESTION_MARK:{this._err(ye.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t);break}case D.EOF:{this._err(ye.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(ye.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=j.DATA,this._stateData(t);}}_stateEndTagOpen(t){if(bf(t))this._createEndTagToken(),this.state=j.TAG_NAME,this._stateTagName(t);else switch(t){case D.GREATER_THAN_SIGN:{this._err(ye.missingEndTagName),this.state=j.DATA;break}case D.EOF:{this._err(ye.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(ye.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t);}}_stateTagName(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this.state=j.BEFORE_ATTRIBUTE_NAME;break}case D.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.tagName+=Jn;break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:o.tagName+=String.fromCodePoint(Hx(t)?eU(t):t);}}_stateRcdataLessThanSign(t){t===D.SOLIDUS?this.state=j.RCDATA_END_TAG_OPEN:(this._emitChars("<"),this.state=j.RCDATA,this._stateRcdata(t));}_stateRcdataEndTagOpen(t){bf(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 D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=j.BEFORE_ATTRIBUTE_NAME,false;case D.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=j.SELF_CLOSING_START_TAG,false;case D.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===D.SOLIDUS?this.state=j.RAWTEXT_END_TAG_OPEN:(this._emitChars("<"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagOpen(t){bf(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 D.SOLIDUS:{this.state=j.SCRIPT_DATA_END_TAG_OPEN;break}case D.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){bf(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===D.HYPHEN_MINUS?(this.state=j.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-")):(this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStartDash(t){t===D.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 D.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitChars(Jn);break}case D.EOF:{this._err(ye.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataEscapedDash(t){switch(t){case D.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(Jn);break}case D.EOF:{this._err(ye.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedDashDash(t){switch(t){case D.HYPHEN_MINUS:{this._emitChars("-");break}case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case D.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(Jn);break}case D.EOF:{this._err(ye.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedLessThanSign(t){t===D.SOLIDUS?this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:bf(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){bf(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(ks.SCRIPT,false)&&Fke(this.preprocessor.peek(ks.SCRIPT.length))){this._emitCodePoint(t);for(let o=0;o<ks.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 D.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitChars(Jn);break}case D.EOF:{this._err(ye.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDash(t){switch(t){case D.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Jn);break}case D.EOF:{this._err(ye.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDashDash(t){switch(t){case D.HYPHEN_MINUS:{this._emitChars("-");break}case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case D.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Jn);break}case D.EOF:{this._err(ye.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedLessThanSign(t){t===D.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(ks.SCRIPT,false)&&Fke(this.preprocessor.peek(ks.SCRIPT.length))){this._emitCodePoint(t);for(let o=0;o<ks.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 D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.SOLIDUS:case D.GREATER_THAN_SIGN:case D.EOF:{this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case D.EQUALS_SIGN:{this._err(ye.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 D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:case D.SOLIDUS:case D.GREATER_THAN_SIGN:case D.EOF:{this._leaveAttrName(),this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case D.EQUALS_SIGN:{this._leaveAttrName(),this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case D.QUOTATION_MARK:case D.APOSTROPHE:case D.LESS_THAN_SIGN:{this._err(ye.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.currentAttr.name+=Jn;break}default:this.currentAttr.name+=String.fromCodePoint(Hx(t)?eU(t):t);}}_stateAfterAttributeName(t){switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case D.EQUALS_SIGN:{this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateBeforeAttributeValue(t){switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.QUOTATION_MARK:{this.state=j.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case D.APOSTROPHE:{this.state=j.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case D.GREATER_THAN_SIGN:{this._err(ye.missingAttributeValue),this.state=j.DATA,this.emitCurrentTagToken();break}default:this.state=j.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(t);}}_stateAttributeValueDoubleQuoted(t){switch(t){case D.QUOTATION_MARK:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case D.AMPERSAND:{this._startCharacterReference();break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.currentAttr.value+=Jn;break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueSingleQuoted(t){switch(t){case D.APOSTROPHE:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case D.AMPERSAND:{this._startCharacterReference();break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.currentAttr.value+=Jn;break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueUnquoted(t){switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case D.AMPERSAND:{this._startCharacterReference();break}case D.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.currentAttr.value+=Jn;break}case D.QUOTATION_MARK:case D.APOSTROPHE:case D.LESS_THAN_SIGN:case D.EQUALS_SIGN:case D.GRAVE_ACCENT:{this._err(ye.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAfterAttributeValueQuoted(t){switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case D.SOLIDUS:{this._leaveAttrValue(),this.state=j.SELF_CLOSING_START_TAG;break}case D.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:this._err(ye.missingWhitespaceBetweenAttributes),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateSelfClosingStartTag(t){switch(t){case D.GREATER_THAN_SIGN:{let o=this.currentToken;o.selfClosing=true,this.state=j.DATA,this.emitCurrentTagToken();break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:this._err(ye.unexpectedSolidusInTag),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateBogusComment(t){let o=this.currentToken;switch(t){case D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(o);break}case D.EOF:{this.emitCurrentComment(o),this._emitEOFToken();break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.data+=Jn;break}default:o.data+=String.fromCodePoint(t);}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(ks.DASH_DASH,true)?(this._createCommentToken(ks.DASH_DASH.length+1),this.state=j.COMMENT_START):this._consumeSequenceIfMatch(ks.DOCTYPE,false)?(this.currentLocation=this.getCurrentLocation(ks.DOCTYPE.length+1),this.state=j.DOCTYPE):this._consumeSequenceIfMatch(ks.CDATA_START,true)?this.inForeignNode?this.state=j.CDATA_SECTION:(this._err(ye.cdataInHtmlContent),this._createCommentToken(ks.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=j.BOGUS_COMMENT):this._ensureHibernation()||(this._err(ye.incorrectlyOpenedComment),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t));}_stateCommentStart(t){switch(t){case D.HYPHEN_MINUS:{this.state=j.COMMENT_START_DASH;break}case D.GREATER_THAN_SIGN:{this._err(ye.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 D.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case D.GREATER_THAN_SIGN:{this._err(ye.abruptClosingOfEmptyComment),this.state=j.DATA,this.emitCurrentComment(o);break}case D.EOF:{this._err(ye.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 D.HYPHEN_MINUS:{this.state=j.COMMENT_END_DASH;break}case D.LESS_THAN_SIGN:{o.data+="<",this.state=j.COMMENT_LESS_THAN_SIGN;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.data+=Jn;break}case D.EOF:{this._err(ye.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+=String.fromCodePoint(t);}}_stateCommentLessThanSign(t){let o=this.currentToken;switch(t){case D.EXCLAMATION_MARK:{o.data+="!",this.state=j.COMMENT_LESS_THAN_SIGN_BANG;break}case D.LESS_THAN_SIGN:{o.data+="<";break}default:this.state=j.COMMENT,this._stateComment(t);}}_stateCommentLessThanSignBang(t){t===D.HYPHEN_MINUS?this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=j.COMMENT,this._stateComment(t));}_stateCommentLessThanSignBangDash(t){t===D.HYPHEN_MINUS?this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=j.COMMENT_END_DASH,this._stateCommentEndDash(t));}_stateCommentLessThanSignBangDashDash(t){t!==D.GREATER_THAN_SIGN&&t!==D.EOF&&this._err(ye.nestedComment),this.state=j.COMMENT_END,this._stateCommentEnd(t);}_stateCommentEndDash(t){let o=this.currentToken;switch(t){case D.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case D.EOF:{this._err(ye.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 D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(o);break}case D.EXCLAMATION_MARK:{this.state=j.COMMENT_END_BANG;break}case D.HYPHEN_MINUS:{o.data+="-";break}case D.EOF:{this._err(ye.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 D.HYPHEN_MINUS:{o.data+="--!",this.state=j.COMMENT_END_DASH;break}case D.GREATER_THAN_SIGN:{this._err(ye.incorrectlyClosedComment),this.state=j.DATA,this.emitCurrentComment(o);break}case D.EOF:{this._err(ye.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+="--!",this.state=j.COMMENT,this._stateComment(t);}}_stateDoctype(t){switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_NAME;break}case D.GREATER_THAN_SIGN:{this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);break}case D.EOF:{this._err(ye.eofInDoctype),this._createDoctypeToken(null);let o=this.currentToken;o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingWhitespaceBeforeDoctypeName),this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);}}_stateBeforeDoctypeName(t){if(Hx(t))this._createDoctypeToken(String.fromCharCode(eU(t))),this.state=j.DOCTYPE_NAME;else switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.NULL:{this._err(ye.unexpectedNullCharacter),this._createDoctypeToken(Jn),this.state=j.DOCTYPE_NAME;break}case D.GREATER_THAN_SIGN:{this._err(ye.missingDoctypeName),this._createDoctypeToken(null);let o=this.currentToken;o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.EOF:{this._err(ye.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 D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this.state=j.AFTER_DOCTYPE_NAME;break}case D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.name+=Jn;break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:o.name+=String.fromCodePoint(Hx(t)?eU(t):t);}}_stateAfterDoctypeName(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(ks.PUBLIC,false)?this.state=j.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(ks.SYSTEM,false)?this.state=j.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(ye.invalidCharacterSequenceAfterDoctypeName),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t));}}_stateAfterDoctypePublicKeyword(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case D.QUOTATION_MARK:{this._err(ye.missingWhitespaceAfterDoctypePublicKeyword),o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case D.APOSTROPHE:{this._err(ye.missingWhitespaceAfterDoctypePublicKeyword),o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case D.GREATER_THAN_SIGN:{this._err(ye.missingDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingQuoteBeforeDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypePublicIdentifier(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.QUOTATION_MARK:{o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case D.APOSTROPHE:{o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case D.GREATER_THAN_SIGN:{this._err(ye.missingDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingQuoteBeforeDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypePublicIdentifierDoubleQuoted(t){let o=this.currentToken;switch(t){case D.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.publicId+=Jn;break}case D.GREATER_THAN_SIGN:{this._err(ye.abruptDoctypePublicIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.EOF:{this._err(ye.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 D.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.publicId+=Jn;break}case D.GREATER_THAN_SIGN:{this._err(ye.abruptDoctypePublicIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.EOF:{this._err(ye.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 D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this.state=j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.QUOTATION_MARK:{this._err(ye.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case D.APOSTROPHE:{this._err(ye.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBetweenDoctypePublicAndSystemIdentifiers(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.GREATER_THAN_SIGN:{this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.QUOTATION_MARK:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case D.APOSTROPHE:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateAfterDoctypeSystemKeyword(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case D.QUOTATION_MARK:{this._err(ye.missingWhitespaceAfterDoctypeSystemKeyword),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case D.APOSTROPHE:{this._err(ye.missingWhitespaceAfterDoctypeSystemKeyword),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case D.GREATER_THAN_SIGN:{this._err(ye.missingDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypeSystemIdentifier(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.QUOTATION_MARK:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case D.APOSTROPHE:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case D.GREATER_THAN_SIGN:{this._err(ye.missingDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypeSystemIdentifierDoubleQuoted(t){let o=this.currentToken;switch(t){case D.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.systemId+=Jn;break}case D.GREATER_THAN_SIGN:{this._err(ye.abruptDoctypeSystemIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.EOF:{this._err(ye.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 D.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.systemId+=Jn;break}case D.GREATER_THAN_SIGN:{this._err(ye.abruptDoctypeSystemIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.EOF:{this._err(ye.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 D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.GREATER_THAN_SIGN:{this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBogusDoctype(t){let o=this.currentToken;switch(t){case D.GREATER_THAN_SIGN:{this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.NULL:{this._err(ye.unexpectedNullCharacter);break}case D.EOF:{this.emitCurrentDoctype(o),this._emitEOFToken();break}}}_stateCdataSection(t){switch(t){case D.RIGHT_SQUARE_BRACKET:{this.state=j.CDATA_SECTION_BRACKET;break}case D.EOF:{this._err(ye.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateCdataSectionBracket(t){t===D.RIGHT_SQUARE_BRACKET?this.state=j.CDATA_SECTION_END:(this._emitChars("]"),this.state=j.CDATA_SECTION,this._stateCdataSection(t));}_stateCdataSectionEnd(t){switch(t){case D.GREATER_THAN_SIGN:{this.state=j.DATA;break}case D.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(D.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&Dke(this.preprocessor.peek(1))?j.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState;}_stateAmbiguousAmpersand(t){Dke(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===D.SEMICOLON&&this._err(ye.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t));}};var Hke=new Set([T.DD,T.DT,T.LI,T.OPTGROUP,T.OPTION,T.P,T.RB,T.RP,T.RT,T.RTC]),Uke=new Set([...Hke,T.CAPTION,T.COLGROUP,T.TBODY,T.TD,T.TFOOT,T.TH,T.THEAD,T.TR]),tU=new Set([T.APPLET,T.CAPTION,T.HTML,T.MARQUEE,T.OBJECT,T.TABLE,T.TD,T.TEMPLATE,T.TH]),TMt=new Set([...tU,T.OL,T.UL]),vMt=new Set([...tU,T.BUTTON]),zke=new Set([T.ANNOTATION_XML,T.MI,T.MN,T.MO,T.MS,T.MTEXT]),jke=new Set([T.DESC,T.FOREIGN_OBJECT,T.TITLE]),AMt=new Set([T.TR,T.TEMPLATE,T.HTML]),EMt=new Set([T.TBODY,T.TFOOT,T.THEAD,T.TEMPLATE,T.HTML]),wMt=new Set([T.TABLE,T.TEMPLATE,T.HTML]),RMt=new Set([T.TD,T.TH]),oU=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)===Oe.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])!==Oe.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(jx,Oe.HTML);}popUntilTableCellPopped(){this.popUntilPopped(RMt,Oe.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(wMt,Oe.HTML);}clearBackToTableBodyContext(){this.clearBackTo(EMt,Oe.HTML);}clearBackToTableRowContext(){this.clearBackTo(AMt,Oe.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 Oe.HTML:{if(r===t)return true;if(o.has(r))return false;break}case Oe.SVG:{if(jke.has(r))return false;break}case Oe.MATHML:{if(zke.has(r))return false;break}}}return true}hasInScope(t){return this.hasInDynamicScope(t,tU)}hasInListItemScope(t){return this.hasInDynamicScope(t,TMt)}hasInButtonScope(t){return this.hasInDynamicScope(t,vMt)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){let o=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case Oe.HTML:{if(jx.has(o))return true;if(tU.has(o))return false;break}case Oe.SVG:{if(jke.has(o))return false;break}case Oe.MATHML:{if(zke.has(o))return false;break}}}return true}hasInTableScope(t){for(let o=this.stackTop;o>=0;o--)if(this.treeAdapter.getNamespaceURI(this.items[o])===Oe.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])===Oe.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])===Oe.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&&Hke.has(this.currentTagId);)this.pop();}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&Uke.has(this.currentTagId);)this.pop();}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&Uke.has(this.currentTagId);)this.pop();}};var $u;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element";})($u||($u={}));var $ke={type:$u.Marker},nU=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===$u.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($ke);}pushElement(t,o){this._ensureNoahArkCondition(t),this.entries.unshift({type:$u.Element,element:t,token:o});}insertElementAfterBookmark(t,o){let n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:$u.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($ke);t===-1?this.entries.length=0:this.entries.splice(0,t+1);}getElementEntryInScopeWithTagName(t){let o=this.entries.find(n=>n.type===$u.Marker||this.treeAdapter.getTagName(n.element)===t);return o&&o.type===$u.Element?o:null}getElementEntry(t){return this.entries.find(o=>o.type===$u.Element&&o.element===t)}};var Gu={createDocument(){return {nodeName:"#document",mode:Ms.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};Gu.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(Gu.isTextNode(o)){o.value+=t;return}}Gu.appendChild(e,Gu.createTextNode(t));},insertTextBefore(e,t,o){let n=e.childNodes[e.childNodes.indexOf(o)-1];n&&Gu.isTextNode(n)?n.value+=t:Gu.insertBefore(e,Gu.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 Vke="html",CMt="about:legacy-compat",IMt="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",Wke=["+//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//"],xMt=[...Wke,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],_Mt=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),qke=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],PMt=[...qke,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function Gke(e,t){return t.some(o=>e.startsWith(o))}function Kke(e){return e.name===Vke&&e.publicId===null&&(e.systemId===null||e.systemId===CMt)}function Yke(e){if(e.name!==Vke)return Ms.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===IMt)return Ms.QUIRKS;let{publicId:o}=e;if(o!==null){if(o=o.toLowerCase(),_Mt.has(o))return Ms.QUIRKS;let n=t===null?xMt:Wke;if(Gke(o,n))return Ms.QUIRKS;if(n=t===null?qke:PMt,Gke(o,n))return Ms.LIMITED_QUIRKS}return Ms.NO_QUIRKS}var Jke={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},kMt="definitionurl",MMt="definitionURL",LMt=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])),NMt=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:Oe.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:Oe.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:Oe.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:Oe.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:Oe.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:Oe.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:Oe.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:Oe.XML}],["xml:space",{prefix:"xml",name:"space",namespace:Oe.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:Oe.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:Oe.XMLNS}]]),DMt=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])),FMt=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 Xke(e){let t=e.tagID;return t===T.FONT&&e.attrs.some(({name:n})=>n===th.COLOR||n===th.SIZE||n===th.FACE)||FMt.has(t)}function v4(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===kMt){e.attrs[t].name=MMt;break}}function A4(e){for(let t=0;t<e.attrs.length;t++){let o=LMt.get(e.attrs[t].name);o!=null&&(e.attrs[t].name=o);}}function rU(e){for(let t=0;t<e.attrs.length;t++){let o=NMt.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 Qke(e){let t=DMt.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=Ub(e.tagName));}function BMt(e,t){return t===Oe.MATHML&&(e===T.MI||e===T.MO||e===T.MN||e===T.MS||e===T.MTEXT)}function UMt(e,t,o){if(t===Oe.MATHML&&e===T.ANNOTATION_XML){for(let n=0;n<o.length;n++)if(o[n].name===th.ENCODING){let r=o[n].value.toLowerCase();return r===Jke.TEXT_HTML||r===Jke.APPLICATION_XML}}return t===Oe.SVG&&(e===T.FOREIGN_OBJECT||e===T.DESC||e===T.TITLE)}function Zke(e,t,o,n){return (!n||n===Oe.HTML)&&UMt(e,t,o)||(!n||n===Oe.MATHML)&&BMt(e,t)}var zMt="hidden",jMt=8,HMt=3,V;(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";})(V||(V={}));var $Mt={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},rMe=new Set([T.TABLE,T.TBODY,T.TFOOT,T.THEAD,T.TR]),tMe={scriptingEnabled:true,sourceCodeLocationInfo:false,treeAdapter:Gu,onParseError:null},Xx=class{constructor(t,o,n=null,r=null){this.fragmentContext=n,this.scriptHandler=r,this.currentToken=null,this.stopped=false,this.insertionMode=V.INITIAL,this.originalInsertionMode=V.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={...tMe,...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 $x(this.options,this),this.activeFormattingElements=new nU(this.treeAdapter),this.fragmentContextID=n?Ub(this.treeAdapter.getTagName(n)):T.UNKNOWN,this._setContextModes(n??this.document,this.fragmentContextID),this.openElements=new oU(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={...tMe,...o};t??(t=n.treeAdapter.createElement(se.TEMPLATE,Oe.HTML,[]));let r=n.treeAdapter.createElement("documentmock",Oe.HTML,[]),i=new this(n,r,t);return i.fragmentContextID===T.TEMPLATE&&i.tmplInsertionModeStack.unshift(V.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:$Mt,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)===Oe.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&t!==void 0&&o!==void 0&&!this._isIntegrationPoint(o,t);}_switchToTextParsing(t,o){this._insertElement(t,Oe.HTML),this.tokenizer.state=o,this.originalInsertionMode=this.insertionMode,this.insertionMode=V.TEXT;}switchToPlaintextParsing(){this.insertionMode=V.TEXT,this.originalInsertionMode=V.IN_BODY,this.tokenizer.state=Va.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)===se.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t);}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==Oe.HTML))switch(this.fragmentContextID){case T.TITLE:case T.TEXTAREA:{this.tokenizer.state=Va.RCDATA;break}case T.STYLE:case T.XMP:case T.IFRAME:case T.NOEMBED:case T.NOFRAMES:case T.NOSCRIPT:{this.tokenizer.state=Va.RAWTEXT;break}case T.SCRIPT:{this.tokenizer.state=Va.SCRIPT_DATA;break}case T.PLAINTEXT:{this.tokenizer.state=Va.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,Oe.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,o);}_insertTemplate(t){let o=this.treeAdapter.createElement(t.tagName,Oe.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(se.HTML,Oe.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===zo.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)===se.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(o)===Oe.MATHML?false:this.tokenizer.inForeignNode||(t.tagID===T.MGLYPH||t.tagID===T.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,o,Oe.HTML)}_processToken(t){switch(t.type){case zo.CHARACTER:{this.onCharacter(t);break}case zo.NULL_CHARACTER:{this.onNullCharacter(t);break}case zo.COMMENT:{this.onComment(t);break}case zo.DOCTYPE:{this.onDoctype(t);break}case zo.START_TAG:{this._processStartTag(t);break}case zo.END_TAG:{this.onEndTag(t);break}case zo.EOF:{this.onEof(t);break}case zo.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,o,n){let r=this.treeAdapter.getNamespaceURI(o),i=this.treeAdapter.getAttrList(o);return Zke(t,r,i,n)}_reconstructActiveFormattingElements(){let t=this.activeFormattingElements.entries.length;if(t){let o=this.activeFormattingElements.entries.findIndex(r=>r.type===$u.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=V.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=V.IN_ROW;return}case T.TBODY:case T.THEAD:case T.TFOOT:{this.insertionMode=V.IN_TABLE_BODY;return}case T.CAPTION:{this.insertionMode=V.IN_CAPTION;return}case T.COLGROUP:{this.insertionMode=V.IN_COLUMN_GROUP;return}case T.TABLE:{this.insertionMode=V.IN_TABLE;return}case T.BODY:{this.insertionMode=V.IN_BODY;return}case T.FRAMESET:{this.insertionMode=V.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?V.AFTER_HEAD:V.BEFORE_HEAD;return}case T.TD:case T.TH:{if(t>0){this.insertionMode=V.IN_CELL;return}break}case T.HEAD:{if(t>0){this.insertionMode=V.IN_HEAD;return}break}}this.insertionMode=V.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=V.IN_SELECT_IN_TABLE;return}}this.insertionMode=V.IN_SELECT;}_isElementCausesFosterParenting(t){return rMe.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)===Oe.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 Nke[n].has(o)}onCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){SNt(this,t);return}switch(this.insertionMode){case V.INITIAL:{Gx(this,t);break}case V.BEFORE_HTML:{Wx(this,t);break}case V.BEFORE_HEAD:{qx(this,t);break}case V.IN_HEAD:{Kx(this,t);break}case V.IN_HEAD_NO_SCRIPT:{Yx(this,t);break}case V.AFTER_HEAD:{Jx(this,t);break}case V.IN_BODY:case V.IN_CAPTION:case V.IN_CELL:case V.IN_TEMPLATE:{aMe(this,t);break}case V.TEXT:case V.IN_SELECT:case V.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case V.IN_TABLE:case V.IN_TABLE_BODY:case V.IN_ROW:{E4(this,t);break}case V.IN_TABLE_TEXT:{mMe(this,t);break}case V.IN_COLUMN_GROUP:{aU(this,t);break}case V.AFTER_BODY:{sU(this,t);break}case V.AFTER_AFTER_BODY:{iU(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){bNt(this,t);return}switch(this.insertionMode){case V.INITIAL:{Gx(this,t);break}case V.BEFORE_HTML:{Wx(this,t);break}case V.BEFORE_HEAD:{qx(this,t);break}case V.IN_HEAD:{Kx(this,t);break}case V.IN_HEAD_NO_SCRIPT:{Yx(this,t);break}case V.AFTER_HEAD:{Jx(this,t);break}case V.TEXT:{this._insertCharacters(t);break}case V.IN_TABLE:case V.IN_TABLE_BODY:case V.IN_ROW:{E4(this,t);break}case V.IN_COLUMN_GROUP:{aU(this,t);break}case V.AFTER_BODY:{sU(this,t);break}case V.AFTER_AFTER_BODY:{iU(this,t);break}}}onComment(t){if(this.skipNextNewLine=false,this.currentNotInHTML){w4(this,t);return}switch(this.insertionMode){case V.INITIAL:case V.BEFORE_HTML:case V.BEFORE_HEAD:case V.IN_HEAD:case V.IN_HEAD_NO_SCRIPT:case V.AFTER_HEAD:case V.IN_BODY:case V.IN_TABLE:case V.IN_CAPTION:case V.IN_COLUMN_GROUP:case V.IN_TABLE_BODY:case V.IN_ROW:case V.IN_CELL:case V.IN_SELECT:case V.IN_SELECT_IN_TABLE:case V.IN_TEMPLATE:case V.IN_FRAMESET:case V.AFTER_FRAMESET:{w4(this,t);break}case V.IN_TABLE_TEXT:{Vx(this,t);break}case V.AFTER_BODY:{JMt(this,t);break}case V.AFTER_AFTER_BODY:case V.AFTER_AFTER_FRAMESET:{XMt(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=false,this.insertionMode){case V.INITIAL:{QMt(this,t);break}case V.BEFORE_HEAD:case V.IN_HEAD:case V.IN_HEAD_NO_SCRIPT:case V.AFTER_HEAD:{this._err(t,ye.misplacedDoctype);break}case V.IN_TABLE_TEXT:{Vx(this,t);break}}}onStartTag(t){this.skipNextNewLine=false,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,ye.nonVoidHtmlElementStartTagWithTrailingSolidus);}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?TNt(this,t):this._startTagOutsideForeignContent(t);}_startTagOutsideForeignContent(t){switch(this.insertionMode){case V.INITIAL:{Gx(this,t);break}case V.BEFORE_HTML:{ZMt(this,t);break}case V.BEFORE_HEAD:{tLt(this,t);break}case V.IN_HEAD:{Vu(this,t);break}case V.IN_HEAD_NO_SCRIPT:{rLt(this,t);break}case V.AFTER_HEAD:{aLt(this,t);break}case V.IN_BODY:{Wa(this,t);break}case V.IN_TABLE:{sE(this,t);break}case V.IN_TABLE_TEXT:{Vx(this,t);break}case V.IN_CAPTION:{oNt(this,t);break}case V.IN_COLUMN_GROUP:{x4(this,t);break}case V.IN_TABLE_BODY:{uU(this,t);break}case V.IN_ROW:{dU(this,t);break}case V.IN_CELL:{iNt(this,t);break}case V.IN_SELECT:{gMe(this,t);break}case V.IN_SELECT_IN_TABLE:{sNt(this,t);break}case V.IN_TEMPLATE:{cNt(this,t);break}case V.AFTER_BODY:{dNt(this,t);break}case V.IN_FRAMESET:{mNt(this,t);break}case V.AFTER_FRAMESET:{hNt(this,t);break}case V.AFTER_AFTER_BODY:{fNt(this,t);break}case V.AFTER_AFTER_FRAMESET:{yNt(this,t);break}}}onEndTag(t){this.skipNextNewLine=false,this.currentToken=t,this.currentNotInHTML?vNt(this,t):this._endTagOutsideForeignContent(t);}_endTagOutsideForeignContent(t){switch(this.insertionMode){case V.INITIAL:{Gx(this,t);break}case V.BEFORE_HTML:{eLt(this,t);break}case V.BEFORE_HEAD:{oLt(this,t);break}case V.IN_HEAD:{nLt(this,t);break}case V.IN_HEAD_NO_SCRIPT:{iLt(this,t);break}case V.AFTER_HEAD:{sLt(this,t);break}case V.IN_BODY:{cU(this,t);break}case V.TEXT:{WLt(this,t);break}case V.IN_TABLE:{Qx(this,t);break}case V.IN_TABLE_TEXT:{Vx(this,t);break}case V.IN_CAPTION:{nNt(this,t);break}case V.IN_COLUMN_GROUP:{rNt(this,t);break}case V.IN_TABLE_BODY:{R4(this,t);break}case V.IN_ROW:{hMe(this,t);break}case V.IN_CELL:{aNt(this,t);break}case V.IN_SELECT:{fMe(this,t);break}case V.IN_SELECT_IN_TABLE:{lNt(this,t);break}case V.IN_TEMPLATE:{uNt(this,t);break}case V.AFTER_BODY:{bMe(this,t);break}case V.IN_FRAMESET:{pNt(this,t);break}case V.AFTER_FRAMESET:{gNt(this,t);break}case V.AFTER_AFTER_BODY:{iU(this,t);break}}}onEof(t){switch(this.insertionMode){case V.INITIAL:{Gx(this,t);break}case V.BEFORE_HTML:{Wx(this,t);break}case V.BEFORE_HEAD:{qx(this,t);break}case V.IN_HEAD:{Kx(this,t);break}case V.IN_HEAD_NO_SCRIPT:{Yx(this,t);break}case V.AFTER_HEAD:{Jx(this,t);break}case V.IN_BODY:case V.IN_TABLE:case V.IN_CAPTION:case V.IN_COLUMN_GROUP:case V.IN_TABLE_BODY:case V.IN_ROW:case V.IN_CELL:case V.IN_SELECT:case V.IN_SELECT_IN_TABLE:{uMe(this,t);break}case V.TEXT:{qLt(this,t);break}case V.IN_TABLE_TEXT:{Vx(this,t);break}case V.IN_TEMPLATE:{yMe(this,t);break}case V.AFTER_BODY:case V.IN_FRAMESET:case V.AFTER_FRAMESET:case V.AFTER_AFTER_BODY:case V.AFTER_AFTER_FRAMESET:{I4(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=false,t.chars.charCodeAt(0)===D.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 V.IN_HEAD:case V.IN_HEAD_NO_SCRIPT:case V.AFTER_HEAD:case V.TEXT:case V.IN_COLUMN_GROUP:case V.IN_SELECT:case V.IN_SELECT_IN_TABLE:case V.IN_FRAMESET:case V.AFTER_FRAMESET:{this._insertCharacters(t);break}case V.IN_BODY:case V.IN_CAPTION:case V.IN_CELL:case V.IN_TEMPLATE:case V.AFTER_BODY:case V.AFTER_AFTER_BODY:case V.AFTER_AFTER_FRAMESET:{iMe(this,t);break}case V.IN_TABLE:case V.IN_TABLE_BODY:case V.IN_ROW:{E4(this,t);break}case V.IN_TABLE_TEXT:{dMe(this,t);break}}}};function GMt(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):cMe(e,t),o}function VMt(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 WMt(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>=HMt;!s||l?(l&&e.activeFormattingElements.removeEntry(s),e.openElements.remove(a)):(a=qMt(e,s),n===t&&(e.activeFormattingElements.bookmark=s),e.treeAdapter.detachNode(n),e.treeAdapter.appendChild(a,n),n=a);}return n}function qMt(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 KMt(e,t,o){let n=e.treeAdapter.getTagName(t),r=Ub(n);if(e._isElementCausesFosterParenting(r))e._fosterParentElement(o);else {let i=e.treeAdapter.getNamespaceURI(t);r===T.TEMPLATE&&i===Oe.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,o);}}function YMt(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 C4(e,t){for(let o=0;o<jMt;o++){let n=GMt(e,t);if(!n)break;let r=VMt(e,n);if(!r)break;e.activeFormattingElements.bookmark=n;let i=WMt(e,r,n.element),a=e.openElements.getCommonAncestor(n.element);e.treeAdapter.detachNode(i),a&&KMt(e,a,i),YMt(e,r,n);}}function w4(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode);}function JMt(e,t){e._appendCommentNode(t,e.openElements.items[0]);}function XMt(e,t){e._appendCommentNode(t,e.document);}function I4(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 QMt(e,t){e._setDocumentType(t);let o=t.forceQuirks?Ms.QUIRKS:Yke(t);Kke(t)||e._err(t,ye.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,o),e.insertionMode=V.BEFORE_HTML;}function Gx(e,t){e._err(t,ye.missingDoctype,true),e.treeAdapter.setDocumentMode(e.document,Ms.QUIRKS),e.insertionMode=V.BEFORE_HTML,e._processToken(t);}function ZMt(e,t){t.tagID===T.HTML?(e._insertElement(t,Oe.HTML),e.insertionMode=V.BEFORE_HEAD):Wx(e,t);}function eLt(e,t){let o=t.tagID;(o===T.HTML||o===T.HEAD||o===T.BODY||o===T.BR)&&Wx(e,t);}function Wx(e,t){e._insertFakeRootElement(),e.insertionMode=V.BEFORE_HEAD,e._processToken(t);}function tLt(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.HEAD:{e._insertElement(t,Oe.HTML),e.headElement=e.openElements.current,e.insertionMode=V.IN_HEAD;break}default:qx(e,t);}}function oLt(e,t){let o=t.tagID;o===T.HEAD||o===T.BODY||o===T.HTML||o===T.BR?qx(e,t):e._err(t,ye.endTagWithoutMatchingOpenElement);}function qx(e,t){e._insertFakeElement(se.HEAD,T.HEAD),e.headElement=e.openElements.current,e.insertionMode=V.IN_HEAD,e._processToken(t);}function Vu(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:{e._appendElement(t,Oe.HTML),t.ackSelfClosing=true;break}case T.TITLE:{e._switchToTextParsing(t,Va.RCDATA);break}case T.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,Va.RAWTEXT):(e._insertElement(t,Oe.HTML),e.insertionMode=V.IN_HEAD_NO_SCRIPT);break}case T.NOFRAMES:case T.STYLE:{e._switchToTextParsing(t,Va.RAWTEXT);break}case T.SCRIPT:{e._switchToTextParsing(t,Va.SCRIPT_DATA);break}case T.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=false,e.insertionMode=V.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(V.IN_TEMPLATE);break}case T.HEAD:{e._err(t,ye.misplacedStartTagForHeadElement);break}default:Kx(e,t);}}function nLt(e,t){switch(t.tagID){case T.HEAD:{e.openElements.pop(),e.insertionMode=V.AFTER_HEAD;break}case T.BODY:case T.BR:case T.HTML:{Kx(e,t);break}case T.TEMPLATE:{zb(e,t);break}default:e._err(t,ye.endTagWithoutMatchingOpenElement);}}function zb(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==T.TEMPLATE&&e._err(t,ye.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,ye.endTagWithoutMatchingOpenElement);}function Kx(e,t){e.openElements.pop(),e.insertionMode=V.AFTER_HEAD,e._processToken(t);}function rLt(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.BASEFONT:case T.BGSOUND:case T.HEAD:case T.LINK:case T.META:case T.NOFRAMES:case T.STYLE:{Vu(e,t);break}case T.NOSCRIPT:{e._err(t,ye.nestedNoscriptInHead);break}default:Yx(e,t);}}function iLt(e,t){switch(t.tagID){case T.NOSCRIPT:{e.openElements.pop(),e.insertionMode=V.IN_HEAD;break}case T.BR:{Yx(e,t);break}default:e._err(t,ye.endTagWithoutMatchingOpenElement);}}function Yx(e,t){let o=t.type===zo.EOF?ye.openElementsLeftAfterEof:ye.disallowedContentInNoscriptInHead;e._err(t,o),e.openElements.pop(),e.insertionMode=V.IN_HEAD,e._processToken(t);}function aLt(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.BODY:{e._insertElement(t,Oe.HTML),e.framesetOk=false,e.insertionMode=V.IN_BODY;break}case T.FRAMESET:{e._insertElement(t,Oe.HTML),e.insertionMode=V.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,ye.abandonedHeadElementChild),e.openElements.push(e.headElement,T.HEAD),Vu(e,t),e.openElements.remove(e.headElement);break}case T.HEAD:{e._err(t,ye.misplacedStartTagForHeadElement);break}default:Jx(e,t);}}function sLt(e,t){switch(t.tagID){case T.BODY:case T.HTML:case T.BR:{Jx(e,t);break}case T.TEMPLATE:{zb(e,t);break}default:e._err(t,ye.endTagWithoutMatchingOpenElement);}}function Jx(e,t){e._insertFakeElement(se.BODY,T.BODY),e.insertionMode=V.IN_BODY,lU(e,t);}function lU(e,t){switch(t.type){case zo.CHARACTER:{aMe(e,t);break}case zo.WHITESPACE_CHARACTER:{iMe(e,t);break}case zo.COMMENT:{w4(e,t);break}case zo.START_TAG:{Wa(e,t);break}case zo.END_TAG:{cU(e,t);break}case zo.EOF:{uMe(e,t);break}}}function iMe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t);}function aMe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=false;}function lLt(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs);}function cLt(e,t){let o=e.openElements.tryPeekProperlyNestedBodyElement();o&&e.openElements.tmplCount===0&&(e.framesetOk=false,e.treeAdapter.adoptAttributes(o,t.attrs));}function uLt(e,t){let o=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&o&&(e.treeAdapter.detachNode(o),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,Oe.HTML),e.insertionMode=V.IN_FRAMESET);}function dLt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Oe.HTML);}function mLt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&jx.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,Oe.HTML);}function pLt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Oe.HTML),e.skipNextNewLine=true,e.framesetOk=false;}function hLt(e,t){let o=e.openElements.tmplCount>0;(!e.formElement||o)&&(e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Oe.HTML),o||(e.formElement=e.openElements.current));}function gLt(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,Oe.HTML);}function fLt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Oe.HTML),e.tokenizer.state=Va.PLAINTEXT;}function yLt(e,t){e.openElements.hasInScope(T.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML),e.framesetOk=false;}function bLt(e,t){let o=e.activeFormattingElements.getElementEntryInScopeWithTagName(se.A);o&&(C4(e,t),e.openElements.remove(o.element),e.activeFormattingElements.removeEntry(o)),e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function SLt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function TLt(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(T.NOBR)&&(C4(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,Oe.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function vLt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=false;}function ALt(e,t){e.treeAdapter.getDocumentMode(e.document)!==Ms.QUIRKS&&e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Oe.HTML),e.framesetOk=false,e.insertionMode=V.IN_TABLE;}function sMe(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Oe.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function lMe(e){let t=QB(e,th.TYPE);return t!=null&&t.toLowerCase()===zMt}function ELt(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Oe.HTML),lMe(t)||(e.framesetOk=false),t.ackSelfClosing=true;}function wLt(e,t){e._appendElement(t,Oe.HTML),t.ackSelfClosing=true;}function RLt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._appendElement(t,Oe.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function CLt(e,t){t.tagName=se.IMG,t.tagID=T.IMG,sMe(e,t);}function ILt(e,t){e._insertElement(t,Oe.HTML),e.skipNextNewLine=true,e.tokenizer.state=Va.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=false,e.insertionMode=V.TEXT;}function xLt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=false,e._switchToTextParsing(t,Va.RAWTEXT);}function _Lt(e,t){e.framesetOk=false,e._switchToTextParsing(t,Va.RAWTEXT);}function oMe(e,t){e._switchToTextParsing(t,Va.RAWTEXT);}function PLt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML),e.framesetOk=false,e.insertionMode=e.insertionMode===V.IN_TABLE||e.insertionMode===V.IN_CAPTION||e.insertionMode===V.IN_TABLE_BODY||e.insertionMode===V.IN_ROW||e.insertionMode===V.IN_CELL?V.IN_SELECT_IN_TABLE:V.IN_SELECT;}function OLt(e,t){e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML);}function kLt(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,Oe.HTML);}function MLt(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(T.RTC),e._insertElement(t,Oe.HTML);}function LLt(e,t){e._reconstructActiveFormattingElements(),v4(t),rU(t),t.selfClosing?e._appendElement(t,Oe.MATHML):e._insertElement(t,Oe.MATHML),t.ackSelfClosing=true;}function NLt(e,t){e._reconstructActiveFormattingElements(),A4(t),rU(t),t.selfClosing?e._appendElement(t,Oe.SVG):e._insertElement(t,Oe.SVG),t.ackSelfClosing=true;}function nMe(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML);}function Wa(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:{SLt(e,t);break}case T.A:{bLt(e,t);break}case T.H1:case T.H2:case T.H3:case T.H4:case T.H5:case T.H6:{mLt(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:{dLt(e,t);break}case T.LI:case T.DD:case T.DT:{gLt(e,t);break}case T.BR:case T.IMG:case T.WBR:case T.AREA:case T.EMBED:case T.KEYGEN:{sMe(e,t);break}case T.HR:{RLt(e,t);break}case T.RB:case T.RTC:{kLt(e,t);break}case T.RT:case T.RP:{MLt(e,t);break}case T.PRE:case T.LISTING:{pLt(e,t);break}case T.XMP:{xLt(e,t);break}case T.SVG:{NLt(e,t);break}case T.HTML:{lLt(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:{Vu(e,t);break}case T.BODY:{cLt(e,t);break}case T.FORM:{hLt(e,t);break}case T.NOBR:{TLt(e,t);break}case T.MATH:{LLt(e,t);break}case T.TABLE:{ALt(e,t);break}case T.INPUT:{ELt(e,t);break}case T.PARAM:case T.TRACK:case T.SOURCE:{wLt(e,t);break}case T.IMAGE:{CLt(e,t);break}case T.BUTTON:{yLt(e,t);break}case T.APPLET:case T.OBJECT:case T.MARQUEE:{vLt(e,t);break}case T.IFRAME:{_Lt(e,t);break}case T.SELECT:{PLt(e,t);break}case T.OPTION:case T.OPTGROUP:{OLt(e,t);break}case T.NOEMBED:case T.NOFRAMES:{oMe(e,t);break}case T.FRAMESET:{uLt(e,t);break}case T.TEXTAREA:{ILt(e,t);break}case T.NOSCRIPT:{e.options.scriptingEnabled?oMe(e,t):nMe(e,t);break}case T.PLAINTEXT:{fLt(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:nMe(e,t);}}function DLt(e,t){if(e.openElements.hasInScope(T.BODY)&&(e.insertionMode=V.AFTER_BODY,e.options.sourceCodeLocationInfo)){let o=e.openElements.tryPeekProperlyNestedBodyElement();o&&e._setEndLocation(o,t);}}function FLt(e,t){e.openElements.hasInScope(T.BODY)&&(e.insertionMode=V.AFTER_BODY,bMe(e,t));}function BLt(e,t){let o=t.tagID;e.openElements.hasInScope(o)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o));}function ULt(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 zLt(e){e.openElements.hasInButtonScope(T.P)||e._insertFakeElement(se.P,T.P),e._closePElement();}function jLt(e){e.openElements.hasInListItemScope(T.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(T.LI),e.openElements.popUntilTagNamePopped(T.LI));}function HLt(e,t){let o=t.tagID;e.openElements.hasInScope(o)&&(e.openElements.generateImpliedEndTagsWithExclusion(o),e.openElements.popUntilTagNamePopped(o));}function $Lt(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped());}function GLt(e,t){let o=t.tagID;e.openElements.hasInScope(o)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o),e.activeFormattingElements.clearToLastMarker());}function VLt(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(se.BR,T.BR),e.openElements.pop(),e.framesetOk=false;}function cMe(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 cU(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:{C4(e,t);break}case T.P:{zLt(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:{BLt(e,t);break}case T.LI:{jLt(e);break}case T.DD:case T.DT:{HLt(e,t);break}case T.H1:case T.H2:case T.H3:case T.H4:case T.H5:case T.H6:{$Lt(e);break}case T.BR:{VLt(e);break}case T.BODY:{DLt(e,t);break}case T.HTML:{FLt(e,t);break}case T.FORM:{ULt(e);break}case T.APPLET:case T.OBJECT:case T.MARQUEE:{GLt(e,t);break}case T.TEMPLATE:{zb(e,t);break}default:cMe(e,t);}}function uMe(e,t){e.tmplInsertionModeStack.length>0?yMe(e,t):I4(e,t);}function WLt(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 qLt(e,t){e._err(t,ye.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t);}function E4(e,t){if(e.openElements.currentTagId!==void 0&&rMe.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=false,e.originalInsertionMode=e.insertionMode,e.insertionMode=V.IN_TABLE_TEXT,t.type){case zo.CHARACTER:{mMe(e,t);break}case zo.WHITESPACE_CHARACTER:{dMe(e,t);break}}else Zx(e,t);}function KLt(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,Oe.HTML),e.insertionMode=V.IN_CAPTION;}function YLt(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Oe.HTML),e.insertionMode=V.IN_COLUMN_GROUP;}function JLt(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(se.COLGROUP,T.COLGROUP),e.insertionMode=V.IN_COLUMN_GROUP,x4(e,t);}function XLt(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Oe.HTML),e.insertionMode=V.IN_TABLE_BODY;}function QLt(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(se.TBODY,T.TBODY),e.insertionMode=V.IN_TABLE_BODY,uU(e,t);}function ZLt(e,t){e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode(),e._processStartTag(t));}function eNt(e,t){lMe(t)?e._appendElement(t,Oe.HTML):Zx(e,t),t.ackSelfClosing=true;}function tNt(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,Oe.HTML),e.formElement=e.openElements.current,e.openElements.pop());}function sE(e,t){switch(t.tagID){case T.TD:case T.TH:case T.TR:{QLt(e,t);break}case T.STYLE:case T.SCRIPT:case T.TEMPLATE:{Vu(e,t);break}case T.COL:{JLt(e,t);break}case T.FORM:{tNt(e,t);break}case T.TABLE:{ZLt(e,t);break}case T.TBODY:case T.TFOOT:case T.THEAD:{XLt(e,t);break}case T.INPUT:{eNt(e,t);break}case T.CAPTION:{KLt(e,t);break}case T.COLGROUP:{YLt(e,t);break}default:Zx(e,t);}}function Qx(e,t){switch(t.tagID){case T.TABLE:{e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode());break}case T.TEMPLATE:{zb(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:Zx(e,t);}}function Zx(e,t){let o=e.fosterParentingEnabled;e.fosterParentingEnabled=true,lU(e,t),e.fosterParentingEnabled=o;}function dMe(e,t){e.pendingCharacterTokens.push(t);}function mMe(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=true;}function Vx(e,t){let o=0;if(e.hasNonWhitespacePendingCharacterToken)for(;o<e.pendingCharacterTokens.length;o++)Zx(e,e.pendingCharacterTokens[o]);else for(;o<e.pendingCharacterTokens.length;o++)e._insertCharacters(e.pendingCharacterTokens[o]);e.insertionMode=e.originalInsertionMode,e._processToken(t);}var pMe=new Set([T.CAPTION,T.COL,T.COLGROUP,T.TBODY,T.TD,T.TFOOT,T.TH,T.THEAD,T.TR]);function oNt(e,t){let o=t.tagID;pMe.has(o)?e.openElements.hasInTableScope(T.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=V.IN_TABLE,sE(e,t)):Wa(e,t);}function nNt(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=V.IN_TABLE,o===T.TABLE&&Qx(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:cU(e,t);}}function x4(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.COL:{e._appendElement(t,Oe.HTML),t.ackSelfClosing=true;break}case T.TEMPLATE:{Vu(e,t);break}default:aU(e,t);}}function rNt(e,t){switch(t.tagID){case T.COLGROUP:{e.openElements.currentTagId===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=V.IN_TABLE);break}case T.TEMPLATE:{zb(e,t);break}case T.COL:break;default:aU(e,t);}}function aU(e,t){e.openElements.currentTagId===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=V.IN_TABLE,e._processToken(t));}function uU(e,t){switch(t.tagID){case T.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,Oe.HTML),e.insertionMode=V.IN_ROW;break}case T.TH:case T.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(se.TR,T.TR),e.insertionMode=V.IN_ROW,dU(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=V.IN_TABLE,sE(e,t));break}default:sE(e,t);}}function R4(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=V.IN_TABLE);break}case T.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=V.IN_TABLE,Qx(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:Qx(e,t);}}function dU(e,t){switch(t.tagID){case T.TH:case T.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,Oe.HTML),e.insertionMode=V.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=V.IN_TABLE_BODY,uU(e,t));break}default:sE(e,t);}}function hMe(e,t){switch(t.tagID){case T.TR:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=V.IN_TABLE_BODY);break}case T.TABLE:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=V.IN_TABLE_BODY,R4(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=V.IN_TABLE_BODY,R4(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:Qx(e,t);}}function iNt(e,t){let o=t.tagID;pMe.has(o)?(e.openElements.hasInTableScope(T.TD)||e.openElements.hasInTableScope(T.TH))&&(e._closeTableCell(),dU(e,t)):Wa(e,t);}function aNt(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=V.IN_ROW);break}case T.TABLE:case T.TBODY:case T.TFOOT:case T.THEAD:case T.TR:{e.openElements.hasInTableScope(o)&&(e._closeTableCell(),hMe(e,t));break}case T.BODY:case T.CAPTION:case T.COL:case T.COLGROUP:case T.HTML:break;default:cU(e,t);}}function gMe(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.OPTION:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e._insertElement(t,Oe.HTML);break}case T.OPTGROUP:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop(),e._insertElement(t,Oe.HTML);break}case T.HR:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop(),e._appendElement(t,Oe.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:{Vu(e,t);break}}}function fMe(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:{zb(e,t);break}}}function sNt(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)):gMe(e,t);}function lNt(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)):fMe(e,t);}function cNt(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:{Vu(e,t);break}case T.CAPTION:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:{e.tmplInsertionModeStack[0]=V.IN_TABLE,e.insertionMode=V.IN_TABLE,sE(e,t);break}case T.COL:{e.tmplInsertionModeStack[0]=V.IN_COLUMN_GROUP,e.insertionMode=V.IN_COLUMN_GROUP,x4(e,t);break}case T.TR:{e.tmplInsertionModeStack[0]=V.IN_TABLE_BODY,e.insertionMode=V.IN_TABLE_BODY,uU(e,t);break}case T.TD:case T.TH:{e.tmplInsertionModeStack[0]=V.IN_ROW,e.insertionMode=V.IN_ROW,dU(e,t);break}default:e.tmplInsertionModeStack[0]=V.IN_BODY,e.insertionMode=V.IN_BODY,Wa(e,t);}}function uNt(e,t){t.tagID===T.TEMPLATE&&zb(e,t);}function yMe(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):I4(e,t);}function dNt(e,t){t.tagID===T.HTML?Wa(e,t):sU(e,t);}function bMe(e,t){var o;if(t.tagID===T.HTML){if(e.fragmentContext||(e.insertionMode=V.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 sU(e,t);}function sU(e,t){e.insertionMode=V.IN_BODY,lU(e,t);}function mNt(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.FRAMESET:{e._insertElement(t,Oe.HTML);break}case T.FRAME:{e._appendElement(t,Oe.HTML),t.ackSelfClosing=true;break}case T.NOFRAMES:{Vu(e,t);break}}}function pNt(e,t){t.tagID===T.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==T.FRAMESET&&(e.insertionMode=V.AFTER_FRAMESET));}function hNt(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.NOFRAMES:{Vu(e,t);break}}}function gNt(e,t){t.tagID===T.HTML&&(e.insertionMode=V.AFTER_AFTER_FRAMESET);}function fNt(e,t){t.tagID===T.HTML?Wa(e,t):iU(e,t);}function iU(e,t){e.insertionMode=V.IN_BODY,lU(e,t);}function yNt(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.NOFRAMES:{Vu(e,t);break}}}function bNt(e,t){t.chars=Jn,e._insertCharacters(t);}function SNt(e,t){e._insertCharacters(t),e.framesetOk=false;}function SMe(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==Oe.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop();}function TNt(e,t){if(Xke(t))SMe(e),e._startTagOutsideForeignContent(t);else {let o=e._getAdjustedCurrentElement(),n=e.treeAdapter.getNamespaceURI(o);n===Oe.MATHML?v4(t):n===Oe.SVG&&(Qke(t),A4(t)),rU(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=true;}}function vNt(e,t){if(t.tagID===T.P||t.tagID===T.BR){SMe(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)===Oe.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([se.AREA,se.BASE,se.BASEFONT,se.BGSOUND,se.BR,se.COL,se.EMBED,se.FRAME,se.HR,se.IMG,se.INPUT,se.KEYGEN,se.LINK,se.META,se.PARAM,se.SOURCE,se.TRACK,se.WBR]);function TMe(e,t,o){typeof e=="string"&&(o=t,t=e,e=null);let n=Xx.getFragmentParser(e,o);return n.tokenizer.write(t,true),n.getFragment()}var ANt=5e3,cE=1024;function lE(e){return typeof e.tagName=="string"&&Array.isArray(e.attrs)}function mU(e){return e.nodeName==="#text"}function pU(e,t){let o=TMe(e),n={nodesLeft:ANt};for(let a of o.childNodes)if(lE(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(lE(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 ENt=new Set(["html","head","meta","link","template","script","style","noscript","path","br","polygon","defs"]),wNt=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 RNt(e,t){return wNt.has(t)?true:e.attrs.some(({name:o})=>b4.has(o.toLowerCase()))}function vMe(e,t){if(t.nodesLeft<=0)return;let o=e.tagName.toLowerCase();if(ENt.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(mU(c)){let u=c.value;if(u&&u.trim().length>0){let d=u.length>cE?u.slice(0,cE):u;i=i===void 0?d:`${i} ${d}`;}}else if(lE(c)){let u=vMe(c,t);u!==void 0&&a.push(u);}}let s=o==="body"||RNt(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 _4(e){return pU(e,vMe)}function AMe(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(mU(l)){let c=l.value;if(c&&c.trim().length>0){let u=c.length>cE?c.slice(0,cE):c;i=i===void 0?u:`${i} ${u}`;}}else if(lE(l)){let c=AMe(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 P4(e){return pU(e,AMe)}var CNt=new Set(["PRESET_ACTION","AI_ACTION_DYNAMIC"]),jb=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(`${ds}/${o}.jpeg`)}async getHtmlSnapshot(t,o){return this.diskStorage.readFile(`${ds}/${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))go.increment("test_step_execution",o,[`type:${t}`,"platform:browser","executor:cli",`orgId:${this.orgId}`]);}flushResults(t){return 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 O4(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:pQ(t.status),finishedAt:t.finishedAt}))),this.sendFinalizedStepStats());}};function INt(e){switch(e){case "SUCCESS":return "PASSED";case "FAILED":return "FAILED";case "CANCELLED":return "CANCELLED";case "RUNNING":return "RUNNING";case "IDLE":return "PENDING";default:return ot(e)}}function hU(e){return e.some(t=>t.status==="FAILED")?"FAILED":e.some(t=>t.status==="CANCELLED")?"CANCELLED":"RUNNING"}var O4=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 cm({storeTraceAsset:u=>this.storeTraceAsset(u)}),lm.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:`${ds}/${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:`${ds}/${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&&CNt.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";go.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:`${ds}/${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:INt(t.status),finishedAt:t.finishedAt})).concat(this.pendingAssetWrites)));}recordStepDuration(t,o,n){nk({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:hU(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:Ol(r.steps)})),elseSteps:t.elseSteps?Ol(t.elseSteps):void 0,status:hU(o),startedAt:this.metadata.startedAt,finishedAt:new Date,results:o});case "WHILE_LOOP":return o=>({...t,steps:Ol(t.steps),status:hU(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:hU(o),startedAt:this.metadata.startedAt,finishedAt:new Date,results:o});default:return ot(t)}}async startSubSteps(){let t=this.getResultBuilderForCurrentStep(),o=new jb(this.orgId,this.testId,this.testName,this.diskStorage,n=>{let r=t(n);return this.parentFlushResults(r)});return this.children.push(o),o}};var gU=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(ds),this.harWriter=new lb(this.diskStorage.createFileStream(`${ds}/har-pages.log`),this.diskStorage.createFileStream(`${ds}/har-entries.log`)),this.resourceUsageStream=this.diskStorage.createFileStream(`${ds}/resource-usage.ndjson`),this.resourceUsageSampler=qoe({keepSamples:false,onSample:c=>{this.resourceUsageStream.write(`${JSON.stringify(c)}
4611
+ `).map(n=>n.trim()).filter(Boolean)||[];if(!(t.length===0&&o.length===0))return [{expanded:t,backtrace:o}]}function OOt(e){let t=e.status==="FAILED"?IB(e):void 0;return COe([["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 kOt(e,t,o){let n=ROe(o.filePath);return {id:o.runId||randomUUID(),scope:e,name:o.testName,location:n,file_name:bn__default.basename(n),result:IOt(o.status),failure_reason:_Ot(o),failure_expanded:POt(o),history:xOt(t,o.lastAttemptStartedAt,o.finishedAt),tags:OOt(o)}}function EOe(e,t,o,n,r){let i=ROe(t);return {id:randomUUID(),scope:e,name:o,location:i,file_name:bn__default.basename(i),result:"skipped",history:{start_at:0,end_at:0,duration:0},tags:COe([["quarantined",r?.quarantined||"false"],["failure_recovery","false"]])}}function MOt(e,t){let o=t.map(i=>kOt(e.suiteName,e.startedAt,i)),n=e.testsToSkip.map(i=>EOe(e.suiteName,i.relativeFilePath,i.name,i.id,void 0)),r=e.quarantinedTestsToSkip.map(i=>EOe(e.suiteName,i.relativeFilePath,i.name,i.id,{quarantined:"true"}));return [...o,...n,...r]}function IOe(e,t,o){let n=MOt(t,o);mn__default.writeFileSync(bn__default.join(e,`${t.suiteName}.buildkite.json`),JSON.stringify(n,null,2));}function oE(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 _Oe(e,t,o){let n=l4(t,o);mn__default.writeFileSync(bn__default.join(e,`${t.suiteName}.momentic.json`),JSON.stringify(n,null,2));}function l4(e,t){let o=t.map(NOt),n=[...e.testsToSkip.map(r=>xOe(r,false)),...e.quarantinedTestsToSkip.map(r=>xOe(r,true))];return oQ.parse({version:1,runGroup:{startedAt:e.startedAt.toISOString(),finishedAt:e.finishedAt.toISOString(),durationMs:e.finishedAt.getTime()-e.startedAt.getTime()},summary:DOt(o,n),runs:o,skipped:n})}function NOt(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:bn__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 xOe(e,t){return {testId:e.id,testName:e.name,filePath:bn__default.relative(".",e.relativeFilePath),labels:e.labels,quarantined:t}}function DOt(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 POe(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 BOt(e,t){let o=IB(e);if(t.name(e.testName).className(e.testName).file(bn__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&&POe(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=Ju({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 UOt(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();BOt(d,m);}for(let d of s){let m=u.testCase();m.name(d.name).className(d.name).file(bn__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(bn__default.relative(".",d.relativeFilePath)).property("id",d.id);let p=c[d.id];p&&POe(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 OOe(e,t,o){let n=FOt.newBuilder();UOt(n,t,o),n.writeTo(bn__default.join(e,`${t.suiteName}.xml`));}var zOt="insights-collector.newrelic.com",jOt="insights-collector.eu01.nr-data.net",HOt=4e3;async function c4({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(oE),u=l4(o,c),d=kOe({...t.attributes,runGroupId:r,environment:i,suiteName:o.suiteName,gitBranch:s.gitBranchName,gitCommit:s.gitCommitSha,gitRepository:s.githubRepository??s.gitOriginUrl,ciRunUrl:$Ot()}),m=u.runs.map((g,f)=>({...d,eventType:"MomenticRun",timestamp:new Date(g.finishedAt).getTime(),...kOe({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"?jOt:zOt}/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: ${H(g)}`);}}function kOe(e){let t={};for(let[o,n]of Object.entries(e))n==null||n===""||(t[o]=typeof n=="string"?n.slice(0,HOt):n);return t}function $Ot(){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 MOe(e){return {title:dn(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(MOe):[]}}async function WOt(e,t,o,n){if(n.results?.length){let r=await CB({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 qOt(e,t,o,n){let r;if(n.status==="FAILED"&&n.failureReason){let i=Ju({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(MOe)||[],startTime:n.lastAttemptStartedAt.toISOString(),attachments:await WOt(e,t,o,n)}}async function KOt(e,t,o,n){return {expectedStatus:"passed",status:n.status==="PASSED"?"expected":"unexpected",results:[await qOt(e,t,o,n)]}}async function YOt(e,t,o,n){return {tags:[],title:n.test.name,ok:n.status==="PASSED",tests:[await KOt(e,t,o,n)],id:n.runId,file:n.filePath}}function u4(e,t){return e.reduce((o,n)=>t(n)?o+1:o,0)}async function JOt(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 cR;try{return await YOt(e,a,o,i)}finally{a.close();}}))}],errors:[],stats:{startTime:n.startedAt.toISOString(),duration:n.finishedAt.getTime()-n.startedAt.getTime(),expected:u4(r,i=>i.status==="PASSED"),unexpected:u4(r,i=>i.status!=="PASSED"),flaky:u4(r,i=>!!i.isFlake),skipped:0}}}async function LOe(e,t,o,n,r){let i=await JOt(e,t,o,n,r);mn__default.writeFileSync(bn__default.join(o,`${n.suiteName}.json`),JSON.stringify(i,null,2));}async function NOe({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(oE);_Oe(i,n,a);return}case "junit":{let a=r.map(oE);OOe(i,n,a);return}case "buildkite-json":{let a=r.map(oE);IOe(i,n,a);return}case "allure":case "allure-json":await vOe(e,t,i,n,r);return;case "playwright-json":await LOe(e,t,i,n,r);return;default:throw new Error(`Unknown reporter format requested: '${o}'`)}}function Fb(e){let t=e??rkt();return DOe()&&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 rkt(){let e=DOe(),t=e?2:1;return C.debug(`Auto-detected device pixel ratio ${t} (Mac OS Retina: ${e}).`),t}var DOe=once(()=>{if(platform()!=="darwin")return false;try{return execSync("system_profiler SPDisplaysDataType").toString().includes("Retina")}catch{return false}});async function PB(e,t=true,o=false){let n=lkt(e),r=await akt.which(n[0],true),i=n.slice(1),a=ikt.exec(skt(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 FOe="the Momentic GitHub app is missing permission to create pull requests or write branches for this repository";function ckt(e,{context:t}){return e instanceof Mo?e.rawError.includes("Resource not accessible by integration")?`Cannot create ${t} because ${FOe}.`:e.status>=400&&e.status<500?e.rawError:`Could not create ${t} due to a GitHub error.`:`Could not create ${t}: ${H(e)}`}function BOe(e){return e instanceof Mo?e.rawError.includes("Resource not accessible by integration")?FOe:e.status>=400&&e.status<500?e.rawError:"a GitHub error occurred":H(e)}function UOe(e,t){C.error(ckt(e,t));}function OB(e){return zOe(e,"runs","run")}function d4(e){return zOe(e,"run-groups","run group")}function zOe(e,t,o){let n=e.trim(),r=/^https?:\/\//i.test(n)?dkt(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 dkt(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 kB(e){return new Promise((t,o)=>{let n=[];createReadStream(e).pipe(mkt()).on("data",r=>n.push(r)).on("end",()=>t(n)).on("error",r=>o(r));})}var Kt="3.59.3",jOe={packageName:"momentic",currentVersion:Kt,changelogUrl:"https://github.com/momentic-ai/cli/releases",updateCommand:"npx momentic@latest upgrade",runUpgrade:zq__default.existsSync(vp.join(process.cwd(),"package.json"))?e=>installPackage(`momentic@${e}`,{silent:false,dev:true}):void 0},{checkCLIVersion:si,getLatestCLIVersion:HOe}=Jpe(jOe),$Oe=e=>Phe({...jOe,logger:e});Nht("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI","POSTHOG_WEB_WRITE_KEY is not set");var{captureEvent:wm,setAnalyticsIdentity:MB,shutdownAnalytics:GOe}=UO({writeKey:"phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",host:"https://p.momentic.ai",platform:"cli",identity:"stashed",flushImmediately:true,onIdentify:Whe});var bkt=3e3,LB=new Set;function VOe(e){LB.add(e),e.finally(()=>LB.delete(e));}async function WOe(){if(LB.size!==0)try{await ge(Promise.allSettled([...LB]),{milliseconds:bkt});}catch{}}async function NB(){try{await ge(Promise.all([WOe(),FO(),go.flush(),GOe(),QO(),_W(),qhe()]),{milliseconds:5e3});}catch{}}async function KOe({momenticFiles:e,project:t,logger:o}){let n;try{n=await gf({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 Qp?new de(`Could not determine the base ref to diff against for --changed. ${a}`):new de(`--changed could not compute the git diff: ${H(i)}. ${a}`)}let r=Skt({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 Skt({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(vp.resolve(t,u.path));d&&!l.has(d.id)&&l.set(d.id,{fullFilePath:d.fullFilePath,relativePath:d.relativePath,reason:"test-changed"});}let c=Tkt({momenticFiles:o,changedModuleFullPaths:i.map(u=>vp.resolve(t,u.path))});if(c.size>0)for(let u of a){if(l.has(u.id))continue;let d=hC(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 Tkt({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,hC(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 yf({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 KOe({momenticFiles:o,project:n,logger:Te})).forEach(m=>c.add(m));else if(e&&e.length>0){let d=e.some(p=>mn__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(!mn__default.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let h;try{h=mn__default.statSync(p).isDirectory();}catch(f){l.warn({err:f},`Skipping path ${p} because it cannot be read`);return}let g=bn__default.resolve(p);Object.values(o.tests).filter(f=>h?Roe(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 ei("No test paths or substrings were provided. Do you want to run all tests?")&&(l.error("Cancelled by user."),We(ze.Failure)),Object.values(o.tests).forEach(m=>{c.add(m.fullFilePath);});for(let d of c){let m=bn__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 Js(d,Te,o);if(Rp.gt(m.schemaVersion,_t)&&hne(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:bn__default.relative(n.rootDir,d),testBundleHash:LM({absoluteTestFilePath:d,momenticFiles:o,logger:Te})}}catch(m){throw l.error(`Failed to read and resolve test at '${d}': ${H(m)}`),Wr(m)}});return compact(await Promise.all(u))}function JOe({testDefinitions:e,quarantinedTestsMetadata:t,onlyQuarantined:o=false,skipQuarantined:n=false,shardIndex:r=1}){let[i,a]=partition(e,c=>c.disabled),[s,l]=partition(a,c=>c.id in t);return {testsToSkip:r===1?i:[],quarantinedTestsToSkip:r===1&&n?s:[],testsToRun:o?[]:l,quarantinedTestsToRun:n?[]:s}}function XOe({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 QOe=()=>process.exit(130),ZOe=()=>process.exit(143);process.on("SIGINT",QOe);process.on("SIGTERM",ZOe);function nE(){process.off("SIGINT",QOe),process.off("SIGTERM",ZOe);}async function eke({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 ja({orgId:e,s:l,codeEvaluator:t,logger:o,context:r});}return i}var FB=z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/),h4=FB,Rkt=h4.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"}),DB=z.discriminatedUnion("mode",[z.object({mode:z.literal("playwright")}).strict(),z.object({mode:z.literal("private-service"),connectorId:FB,serviceIds:Rkt.optional()}).strict()]),oke=z.record(z.string().regex(/^[a-z0-9]([-.a-z0-9_]{0,61}[a-z0-9])?$/),z.string()),g4=z.union([z.guid(),z.string().regex(/^[a-f0-9]{64}$/)]),f4=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:oke.optional(),network:DB.default({mode:"playwright"}),principalId:g4,tokenVersion:z.literal(2)}).strict(),nke=z.object({accessToken:z.string().min(1),expiresAt:z.iso.datetime(),tokenType:z.literal("Bearer")}),tke=z.object({host:z.string().trim().min(1).max(253),port:z.number().int().min(1).max(65535)}).strict(),Ckt=z.object({browserAddress:tke,id:h4,target:tke}).strict(),Ikt=z.object({id:h4,mode:z.literal("localhost")}).strict(),xkt=z.union([Ckt,Ikt]),rke=z.object({services:xkt.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"});}),_kt=z.object({algorithm:z.literal("RSA-OAEP-256"),chunks:z.string().min(1).array().min(1).max(128)});f4.omit({tokenVersion:true}).partial({principalId:true});var ike=z.object({metadata:oke.optional(),browser:z.literal("chromium").default("chromium"),network:DB.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(),Pkt=z.discriminatedUnion("mode",[DB.options[0].strip(),DB.options[1].strip()]),y4=z.object({id:z.string(),status:z.string(),browser:z.string().optional(),playwrightVersion:z.string().optional(),network:Pkt.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()}),ake=y4.extend({connectToken:z.string(),status:z.literal("READY"),wsEndpoint:z.string()}),ske=z.object({connectorId:z.string(),state:z.string()}),lke=z.object({encryptedEnrollmentCredential:_kt});var eh=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";}},Bb=class extends Error{constructor(t){super("Browser Fleet request failed",{cause:t}),this.name="BrowserFleetConnectionError";}},BB=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";}},$a=class extends Error{constructor(o,n){super(o);this.sessionId=n;this.name="BrowserFleetResponseError";}},UB=class extends Error{constructor(o){super(`Browser Fleet Connector did not become active (${o.state})`);this.connector=o;this.name="BrowserFleetConnectorError";}};function zB(e){return `/v1/private-connectors/${encodeURIComponent(FB.parse(e))}`}function cke(e){let t=ske.safeParse(e);if(!t.success)throw new $a("Browser Fleet returned a malformed Connector response");return t.data}var jB=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(zB(t),{body:JSON.stringify(rke.parse(o.desiredState)),headers:{"Content-Type":"application/json",...r?{"X-Browser-Fleet-Principal-Id":g4.parse(r)}:{}},method:"PUT"},n,true);return cke(i.body)}async retrieve(t,o={}){let n=await this.transport.request(zB(t),{},o,true);return cke(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 UB(i);await setTimeout$1(500,void 0,{signal:r});}}async createEnrollmentCredential(t,o,n={}){let r=await this.transport.request(`${zB(t)}/enrollment-credentials`,{body:JSON.stringify(o),headers:{"Content-Type":"application/json"},method:"POST"},n,true),i=lke.safeParse(r.body);if(!i.success)throw new $a("Browser Fleet returned a malformed enrollment response");return i.data.encryptedEnrollmentCredential}async delete(t,o={}){await this.transport.request(zB(t),{method:"DELETE"},o,true);}};var Mkt=z.object({id:z.string()}),Lkt=1e4,Nkt=2e4;function mke(e){return e+Math.random()*Math.min(250,e/4)}var HB=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(mke(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 BB(d);let p=ake.safeParse(d);if(!p.success)throw new $a("Browser Fleet returned a malformed session response",d.id);return p.data}catch(m){let p=d?.id??(m instanceof $a?m.sessionId:void 0);if(!p&&c.aborted)try{p=(await this.createResponse(n,{...r,signal:AbortSignal.timeout(Nkt)})).session.id;}catch(h){h instanceof $a&&(p=h.sessionId);}throw p&&await this.delete(p,{signal:AbortSignal.timeout(Lkt)}).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 ike.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:{...o.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=y4.safeParse(r.body);if(!i.success)throw new $a("Browser Fleet returned a malformed session response",Mkt.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 Bb||r instanceof eh&&(r.status===408||r.status===429||r.status>=500))||Date.now()>=o)throw r;let a=r instanceof eh?r.retryAfterMs:500;await setTimeout$1(Math.min(mke(a),o-Date.now()),void 0,{signal:n});}}};var $B=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}=f4.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 eh)||m.status!==400||!l.metadata)throw m;u=await c(void 0);}let d=nke.safeParse(u.body);if(!d.success)throw new $a("Browser Fleet returned a malformed token response");return {...d.data,allocationRequestId:l.allocationRequestId,network:l.network,maxSessionTtlSeconds:l.maxSessionTtlSeconds}}};var pke=64*1024;function Fkt(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 hke(e){let t=Number(e.headers.get("Content-Length"));if(Number.isFinite(t)&&t>pke)throw await e.body?.cancel(),new $a("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>pke)throw await o.cancel(),new $a("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 GB=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 Bb(d)}let u=Fkt(c.headers.get("Retry-After"));if(!c.ok){let d=await hke(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 eh(c.status,m,u)}try{return {body:await hke(c),retryAfterMs:u}}catch(d){throw n.signal?.aborted||d instanceof $a?d:new Bb(d)}}};var zx=class{baseUrl;sessions;tokens;privateConnectors;constructor(t={}){let o=new GB(t);this.baseUrl=o.baseUrl,this.sessions=new HB(o,t.accessToken),this.tokens=new $B(o,{principalId:t.principalId,concurrencyKey:t.concurrencyKey,maxConcurrentSessions:t.maxConcurrentSessions}),this.privateConnectors=new jB(o,t.principalId);}};var gt={ArgsInvalid:"MOM_ARGS_INVALID",AuthRequired:"MOM_AUTH_REQUIRED",AuthForbidden:"MOM_AUTH_FORBIDDEN",ApiError:"MOM_API_ERROR",ApiUnavailable:"MOM_API_UNAVAILABLE",ResourceNotFound:"MOM_RESOURCE_NOT_FOUND",FeatureNotEnabled:"MOM_FEATURE_NOT_ENABLED",UsageLimitReached:"MOM_USAGE_LIMIT_REACHED",ExploreIncomplete:"MOM_EXPLORE_INCOMPLETE",ProjectLintFailed:"MOM_PROJECT_LINT_FAILED",ProjectConfigError:"MOM_PROJECT_CONFIG_ERROR",ResultsRunNotFound:"MOM_RESULTS_RUN_NOT_FOUND",UserUnclassified:"MOM_USER_UNCLASSIFIED",InternalUnhandled:"MOM_INTERNAL_UNHANDLED"},Bkt={[gt.ArgsInvalid]:{group:"args",retry:"no",attribution:"user-action"},[gt.AuthRequired]:{group:"auth",retry:"no",attribution:"user-action"},[gt.AuthForbidden]:{group:"auth",retry:"no",attribution:"user-action"},[gt.ApiError]:{group:"api",retry:"case-by-case",attribution:"product"},[gt.ApiUnavailable]:{group:"api",retry:"yes",attribution:"product"},[gt.ResourceNotFound]:{group:"api",retry:"no",attribution:"user-action"},[gt.FeatureNotEnabled]:{group:"auth",retry:"no",attribution:"product"},[gt.UsageLimitReached]:{group:"auth",retry:"no",attribution:"user-action"},[gt.ExploreIncomplete]:{group:"run",retry:"case-by-case",attribution:"unknown"},[gt.ProjectLintFailed]:{group:"args",retry:"no",attribution:"user-action"},[gt.ProjectConfigError]:{group:"env",retry:"no",attribution:"user-env"},[gt.ResultsRunNotFound]:{group:"args",retry:"no",attribution:"user-action"},[gt.UserUnclassified]:{group:"internal",retry:"no",attribution:"user-action"},[gt.InternalUnhandled]:{group:"internal",retry:"case-by-case",attribution:"product"}},gke={catalog:Bkt,argsCode:gt.ArgsInvalid,userCode:gt.UserUnclassified,internalCode:gt.InternalUnhandled,extraClassifier:e=>Hhe(e,{authRequired:gt.AuthRequired,authForbidden:gt.AuthForbidden,apiError:gt.ApiError,apiUnavailable:gt.ApiUnavailable,resourceNotFound:gt.ResourceNotFound,projectConfigError:gt.ProjectConfigError})};var fke=new Set;function yke(e){return pe({name:"cli.setup_browser_and_controller",attributes:{"momentic.remote_browser":e.localBrowserConfig.remoteBrowser===true},fn:async t=>{let o=await Ukt(e);return t?.setAttribute("momentic.browser_execution_mode",o.controller.browser.executionMode),o}})}async function Ukt({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:A,attemptedRemoteBrowserProviders:E,abortSignal:R}){let w={baseUrl:n.baseUrl,apiKey:n.apiKey,logger:Te,mode:n.mode,runner:n.runner},{controller:O,context:I}=await cx({baseUrl:e,envName:t,test:r,variables:c,logger:u,orgId:l,localBrowserConfig:p,aiSettings:h,customHeaders:d,codeEvaluator:a,storage:i,enricher:new yp(w,s),generator:s,visualDiffScreenshotStorage:g,devicePixelRatio:o,browserTypeOverride:A,callbacks:{onNetworkPage:_=>f.onNetworkPage(_),onNetworkLogs:_=>f.onNetworkLogs(_)},videoOptions:f.videoOutputPath?{videoOutputPath:f.videoOutputPath,onVideoPageChange:({videoName:_,timestamp:P})=>{f.setActiveVideo(_,P);}}:void 0,validateBrowserType:_=>{jh(_)||(Te.warn({browserType:_,testName:r.name},"Browser required by test does not appear to be installed"),!fke.has(_)&&(fke.add(_),C.warn(`Browser ${_} does not appear to be installed. Run '${Th(_)}' if you hit launch errors.`)));},createRemoteBrowserConnection:p.remoteBrowser?async()=>{let _=Date.now(),P,M=E?.slice(-1),B=crypto.randomUUID(),k=async()=>{let $=await n.createRemoteBrowserConnection({attemptedProviders:M,envName:t,runAttemptId:b,runGroupId:S,runId:y,testId:r.id,testName:r.name});return P=$.provider,$.provider&&E?.push($.provider),$};try{if(M?.includes("SELF_HOSTED"))return await k();let $=await n.tryCreateBrowserFleetAccessToken({allocationRequestId:B,envName:t,runAttemptId:b,runGroupId:S,runId:y,testId:r.id,testName:r.name},R);if(!$)return await k();P=$.provider,E?.push($.provider);let Z=await new zx({accessToken:$.accessToken,baseUrl:$.fleetApiUrl,requestTimeoutMs:15e3}).sessions.createAndWait({network:$.network,ttlSeconds:3600,waitTimeoutMs:1e4},{allocationTimeoutMs:9e4,idempotencyKey:B,signal:R});return {accessToken:Z.connectToken,endpointType:"PLAYWRIGHT",operatingSystem:"linux",provider:$.provider,wsEndpoint:Z.wsEndpoint}}catch($){throw R?.aborted?$:new Yc("Browser Fleet session allocation failed",{cause:$})}finally{go.distribution("test_event_duration",Date.now()-_,["name:remote-browser-allocation",`provider:${P??"unknown"}`]);}}:void 0});try{await dx({orgId:l,test:r,testInputs:m,codeEvaluator:a,logger:u,context:I});}catch(_){try{await O.browser.cleanup();}catch(P){u.error({err:P},"Failed to clean up browser after test input resolution failed");}throw _ instanceof ux?new Ao(gt.UserUnclassified,_.message,{cause:_}):_}return {controller:O,context:I}}function bke({testAdvancedSettings:e,orgSettings:t,logger:o}){if(e.failureRecovery===false||e.failureRecovery===void 0&&!t?.failureRecovery)return false;if(!ms){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 Ske({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:A}=t,{test:E,orgSettings:R}=e;b.info(`Running test '${E.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},O={orgId:a,userId:s,runId:l,testMetadata:E,steps:E.steps,beforeSteps:E.beforeSteps,afterSteps:E.afterSteps,orgSettings:R},I={collectDebugData:true,reinitializeBrowser:true,disableHealing:!await bke({testAdvancedSettings:E.advanced,orgSettings:R.ai,logger:b})};return iCe({fixtures:w,inputs:O,options:I,callbacks:{step:i??{},test:{onTestComplete:async P=>{await p.browser.cleanup({saveRemoteVideos:r!=="on-fail"||P?.status!=="PASSED"}),await g.dispose(),b.debug("Test completion cleanup finished");}}},testParams:{attemptTracer:A},runParams:{runTracer:c,runGroupTracer:u,project:d,apiClient:m,captureEvent:wm,abortSignal:n.abortSignal}})}async function Tke(e){let{testDefinition:t,traceMetadata:o}=e;return pe({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 Hkt(e);return n?.setAttributes({"momentic.test_status":r.status,"momentic.test_attempts":r.attempts}),r}})}async function Hkt(e){let{testDefinition:t,logger:o}=e,n=new Date;try{return await $kt(e)}catch(r){Rd(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),vke({err:ui(r),parameters:c,test:t,failureReason:oe.reasonFor(r,"UnknownError"),startedAt:n,lastAttemptStartedAt:n,attempts:0,quarantined:e.quarantined,quarantinedMetadata:e.quarantinedMetadata})}}async function $kt(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 pv(r,i),S=Tp({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}),A,E,R;o?(A={envName:o.metadata.environment.envName,resolvedEnv:o.metadata.environment.resolvedEnv,environmentVariables:{...o.metadata.environment.variables},baseUrl:o.metadata.environment.baseUrl},E={steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps}):(A=Dy({test:t,envNameOverride:e.envName,urlOverride:s,resolveEnv:N=>_c(N,n,c)}),{stepListsWithCaches:E,restoredStepLists:R}=await wc({cacheStorage:S,logger:c,schemaVersion:t.schemaVersion,stepLists:{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,environment:A.envName,useSnapshotIdentityCache:n.config.fileFormat==="v2"}));let{envName:w,resolvedEnv:O,environmentVariables:I,baseUrl:_}=A,P=E.steps,M=E.beforeSteps??void 0,B=E.afterSteps??void 0,k=xw(t),$=k||(e.recordVideo??false);k&&e.recordVideo!==true&&c.info("Enabling video recording because the test defines run assertions");let Z=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:k?true:void 0}),z=c.child(Z.loggerBindings||{});Object.entries(Z.envVarBindings||{}).forEach(([N,ae])=>{I[N]=ae;});let Y=await Vkt({...e,recordVideo:$,effectiveConfig:y,variables:I,envName:w,resolvedEnv:O,baseUrl:_,storageClient:b,tracer:Z,runGroupTracer:l,logger:z,cacheStorage:S,stepsWithCaches:P,beforeStepsWithCaches:M,afterStepsWithCaches:B,usageTracker:f});return await Z.finish({logger:c,status:Y.status,finishedAt:Y.finishedAt,failureDetails:Y.failureDetails,failureReason:Y.failureReason,isFlake:Y.isFlake,failureRecoveryDetails:Y.failureRecoveryDetails,runAssertionResults:Y.runAssertionResults}),Gkt({apiClient:r,classificationEnabled:y.ai?.classification?.enabled===true,runId:m,environment:w,status:Y.status,logger:z}),{runId:Z.runId,...Y}}function Gkt({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");});VOe(a);}async function Vkt(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:A,devicePixelRatio:E,logUpdate:R,tracer:w,runGroupTracer:O,logger:I,cacheStorage:_,gitMetadata:P,quarantined:M,quarantinedMetadata:B,usageTracker:k}=e,$=o,Z=$.ai?.aiFailureAnalysis??false,z=new Date,Y=new fv(a,l,s),N={envName:h,urlOverride:g,customHeaders:f,testInputs:y},ae={...$.browser||{},...S?.browser||{},...t.advanced||{},...e.remoteBrowserOverride?{remoteBrowser:true}:{}},Q=ae.remoteBrowser===true,ne=[],K,ue=Math.abs(A??t.retries??o.retries??1),Se=[],xe=[];I.info({...P,labels:t.labels,name:t.name,cwd:process.cwd()},"Starting test run using CLI");for(let De=0;De<=ue;De++){let lt=randomUUID(),W=await w.startAttempt(lt),ee=I.child(W.loggerBindings||{}),X={...t,steps:cloneDeep(n),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)};De!==0&&R("RETRY",`attempt ${De+1}/${ue+1}`);let Ie=new Date,be=cb({tools:new Sp({httpClient:new Ts({baseUrl:l.baseUrl,apiKey:l.apiKey,logger:ee,mode:l.mode,runner:l.runner}),fakerSeed:$.advanced?.fakerConstantSeed?sR:void 0})}),ie;try{let{controller:Ve,context:Tt}=await yke({tracer:W,runId:w.runId,runAttemptId:lt,runGroupId:e.traceMetadata.runGroupId,baseUrl:u,envName:h,apiClient:l,devicePixelRatio:E,logger:ee,storageClient:d,codeEvaluator:be,test:X,generator:c,orgId:m,variables:b,customHeaders:f,testInputs:y,localBrowserConfig:ae,browserTypeOverride:e.browserTypeOverride,attemptedRemoteBrowserProviders:ne,abortSignal:e.abortSignal,aiSettings:{...$.ai||{},...X.advanced||{}},visualDiffScreenshotStorage:Y});e.abortSignal&&(e.abortSignal.aborted?Ve.executeAbortController.abort():(ie=()=>{Ve.executeAbortController.abort();},e.abortSignal.addEventListener("abort",ie,{once:!0}))),K=await Ske({attemptMetadata:{attemptNumber:De+1,orgId:m,userId:p,runId:w.runId},attemptFixtures:{logger:ee,storageClient:d,cacheStorage:_,usageTracker:k,codeEvaluator:be,context:Tt,controller:Ve,tracer:W},attemptInputs:{test:X,orgSettings:$},runFixtures:{runTracer:w,runGroupTracer:O,project:a,apiClient:l,abortSignal:e.abortSignal},recordVideo:e.recordVideo??!1,stepCallbacks:{onStepStart:e.onStepStart,onStepEnd:e.onStepEnd,onSectionStart:e.onSectionStart}});let Yt=new Date,tt={logger:I,cacheStorage:_,orgId:m,testId:t.id,environment:h,originalStepsWithCaches:{steps:cloneDeep(n),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)},updatedStepsWithCaches:{steps:X.steps,beforeSteps:X.beforeSteps,afterSteps:X.afterSteps}};await uy({logger:I,cacheStorage:_,orgId:m,testId:t.id,environment:h,stepLists:tt.updatedStepsWithCaches,useSnapshotIdentityCache:a.config.fileFormat==="v2"}),K?.status==="PASSED"||K?.status==="CANCELLED"&&o.advanced?.saveCacheOnCancel?await dy(tt):K?.status==="FAILED"&&De===ue&&await PT(tt),await W.finish({logger:ee,result:K});let Qe;if(K.status==="PASSED"&&xw(t)){e.onStepStart?.(YX);let Xo=await _we({runAssertions:t.runAssertions??[],orgId:m,project:a,generator:c,apiClient:l,runTracer:w,runGroupTracer:O,logger:ee,testPlatform:"web",captureEvent:wm,abortSignal:e.abortSignal});Yt=new Date,Xo&&(xe.push(Xo),Qe=JX(Xo.evaluations));}let Et=xe.length>0?{attempts:xe}:void 0;Se.unshift(Qe!==void 0?"FAILED":K.status);let an=await eke({orgId:m,codeEvaluator:be,logger:ee,outputDefinitions:t.outputs??[],testContext:Tt}),pn=eQ(Se),pl=De+1;if(K.status!=="FAILED"&&Qe===void 0)return {...K,runAttemptId:lt,parameters:N,test:X,filePath:X.relativeFilePath,startedAt:z,lastAttemptStartedAt:Ie,finishedAt:Yt,attempts:pl,baseUrl:u,outputs:an,isFlake:pn,runAssertionResults:Et,quarantined:M,quarantinedMetadata:B,usedRemoteBrowser:Q};let Yl=K.failedStepResult,qi=Qe??(Yl?.message||"Unknown failure"),ga=Qe?"AssertionFailureError":Yl?.failureReason??P_(qi)??"UnknownError",pr=ee.child({failureReason:ga,errorMessage:qi,numAttempts:(ue+1).toString(),name:X.name});if(De<ue){pr.warn(`Retrying failed execution attempt for run: ${qi}`);continue}pr.error({usedRemoteBrowser:Q},`Test failed after all exhausting attempts: ${qi}`);let Jl=new Error(qi),hl={errorMessage:qi,errorStack:Jl.stack},sn;if($.ai?.classification?.enabled===!0){let Xo=Yl?.failureClassification;Xo||(e.onStepStart?.(_m),Xo=await zF({runTracer:w,runGroupTracer:O,outputDir:e.outputDir,orgId:m,project:a,generator:c,apiClient:l,logger:I,testPlatform:"web",aiSettings:$.ai,captureEvent:wm,abortSignal:e.abortSignal,failedStepMessage:Qe??Yl?.message,runAssertionResults:Et})),Xo&&(sn=Xo.classification.category,ga=Xo.classification.category,hl.classification={reason:Xo.classification.category,secondaryCategories:Xo.classification.secondaryCategories,summary:Xo.classification.reasoning,recoverable:Xo.classification.recoverable,confidence:Xo.classification.confidence,action:Xo.action,citations:Xo.classification.citations,cache:Xo.classification.cache,source:"v2"});}else if(Z){let Xo;try{if(K.results&&K.results.length>0){e.onStepStart?.(_m);let{classification:ro,aiFailureReason:Xl}=await nae({logger:ee,browserStateStorage:W,generator:c,fullResults:K,failureReason:ga,error:Jl,maxItemsFromEnd:void 0,numStepsWithScreenshots:void 0,disableCache:!1});Xo=ro,sn=Xl;}}catch(ro){ee.warn({err:ro},"Failed to classify test results");}Xo&&(hl.classification=Xo,ga=sn??ga,hl.classification.source="v1");}return {...K,status:"FAILED",runAttemptId:lt,parameters:N,failureDetails:hl,failureReason:ga,test:X,filePath:X.relativeFilePath,startedAt:z,lastAttemptStartedAt:Ie,finishedAt:Yt,attempts:De+1,baseUrl:u,outputs:an,runAssertionResults:Et,quarantined:M,quarantinedMetadata:B,usedRemoteBrowser:Q}}catch(Ve){let Tt=`Encountered fatal platform error while running test '${X.name}'`;return ee.error({err:Ve},Tt),C.error({err:Ve},Tt),await W.finish({logger:ee,result:{status:"FAILED"}}),vke({err:ui(Ve),parameters:N,test:X,failureReason:oe.reasonFor(Ve,"InternalPlatformError"),startedAt:z,lastAttemptStartedAt:Ie,attempts:De+1,quarantined:M,quarantinedMetadata:B,runAttemptId:lt,baseUrl:u,usedRemoteBrowser:Q})}finally{ie&&e.abortSignal?.removeEventListener("abort",ie);}}throw new Error("This code should not be reachable")}function vke({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 Ake=3e4;async function aE({timeoutMinutes:e,cancel:t,run:o}){let n=()=>void t("SIGINT received"),r=()=>void t("SIGTERM received");nE(),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 iE=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:Ake}).catch(()=>{this.params.runGroupLogger.warn(`Graceful shutdown timeout of ${Ake}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:A,browserTypeOverride:E,remoteBrowserOverride:R,onResult:w,onFatal:O}=this.params,I=0,_=true;for(;_;){let P=Object.values(this.runQueue);if(P.length===o&&await Promise.race(P.map(Z=>Z.promise)),this.cancelled){_=false;continue}let M=await t();if(M===void 0){_=false;continue}let B=`test-${I++}`,k={...M,startedAt:new Date},$=new AbortController;this.runQueue[B]={done:false,activeRun:k,abortController:$,promise:(async({inputs:Z,quarantined:z,quarantinedMetadata:Y,testDefinition:N,snapshot:ae,runId:Q})=>{let ne=N.relativeFilePath.includes("..")?N.fullFilePath:N.relativeFilePath;n.onTestBegin(ne);let K=i.child({testId:N.id,runId:Q}),ue=new ap({logger:K,reporter:new gp(l),runType:"test-run",platform:"WEB",runId:Q,runGroupId:r.runGroupMetadata.id,envName:f,testMetadata:N,suiteMetadata:void 0,runner:"test-runner"});try{let Se=await Tke({testDefinition:N,snapshot:ae,project:s,testInputs:Z,quarantined:z,quarantinedMetadata:Y,orgId:u,userId:d,runId:Q,devicePixelRatio:m,apiClient:l,runGroupTracer:r,outputDir:p,generator:c,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:b,logUpdate:(xe,De)=>n.onTestStatus(ne,xe,De),...vhe(n,ne),logger:K,gitMetadata:S,cacheOptions:A,usageTracker:ue,browserTypeOverride:E,remoteBrowserOverride:R,recordVideo:this.params.recordVideo,abortSignal:$.signal,traceMetadata:this.params.traceMetadata});n.onTestEnd(ne,Se.status,{recovered:Se.status==="PASSED"&&!!Se.failureRecoveryDetails?.attempts}),this.runResults.push(Se),w?.(Se);}catch(Se){let xe=`Encountered unexpected fatal error when running test '${N.name}'`;K.error({err:Se},xe),C.error({err:Se},xe),Rd(Se),O?.(Se),await this.cancel("Fatal error occurred",false);}finally{let Se=this.runQueue[B];Se&&(Se.done=true),await ue.flush(a),delete this.runQueue[B];}})(k)};}return await Promise.allSettled(Object.values(this.runQueue).map(P=>P.promise)),{runResults:this.runResults,cancelledRunsById:this.cancelledRunsById,cancelled:this.cancelled,cancellationReason:this.cancellationReason}}};function VB(e){return createHash("sha1").update(e).digest("hex")}var qkt=["tab","view","mode","step"],Kkt=[/^[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 Ykt(e){return Kkt.some(t=>t.test(e))}function Eke(e,t={}){let o;try{o=new URL(e);}catch{return e}let n=new Set(t.queryAllowlist??qkt),i=o.pathname.split("/").map(c=>c.length>0&&Ykt(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 b4=new Set(["id","name","role","type","href","for","placeholder","aria-label","data-testid"]),Jkt=/^[A-Za-z0-9_-]{16,256}$|^:r[0-9a-z]{1,32}:$/,Xkt=[/\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],wke=new Set(["h1","h2","h3","h4","h5","h6"]),Qkt=new Set(["input","select","textarea"]);function Zkt(e){let t=e;for(let o of Xkt)t=t.replace(o,"{id}");return t}function Rke(e){return Zkt(e).toLowerCase().replace(/\s+/g," ").trim().replace(/[.,:;!?]+$/u,"").replace(/\s*\d+\s*$/u,"").trim()}function eMt(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 tMt(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":Jkt.test(t)?"@gen":Rke(t)}function Cke(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=>b4.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=tMt(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"||wke.has(n)?o.tokens.push(`label=${Rke(s)}`):o.tokens.push(eMt(s))),(n==="button"||r==="button")&&(o.counts.buttons+=1),(n==="a"||r==="link")&&(o.counts.links+=1),(Qkt.has(n)||r==="textbox"||r==="combobox")&&(o.counts.formFields+=1),(wke.has(n)||r==="heading")&&(o.counts.headings+=1);for(let l of e.children??[])Cke(l,t+1,o);}function Ike(e){let t={tokens:[],counts:{buttons:0,links:0,formFields:0,headings:0}};return Cke(e,0,t),{tokens:t.tokens,counts:t.counts}}function xke(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 WB=128,oMt=4294967295,nMt=(()=>{let e=[];for(let t=0;t<WB;t++)e.push(xke(`perm:${t}`,0));return e})();function _ke(e){let t=new Uint32Array(WB);for(let n=0;n<WB;n++)t[n]=oMt;let o=new Set(e);for(let n of o)for(let r=0;r<WB;r++){let i=xke(n,nMt[r]);i<t[r]&&(t[r]=i);}return t}var iMt=32;function qB(e){let t=Eke(e.url,{queryAllowlist:e.queryAllowlist}),{tokens:o,counts:n}=Ike(e.dom),r=[`url:${t}`,`counts:buttons=${n.buttons}`,`counts:links=${n.links}`,`counts:formFields=${n.formFields}`,`counts:headings=${n.headings}`,...o],i=_ke(r),a=Buffer.from(i.buffer,i.byteOffset,i.byteLength);return {fingerprintHash:createHash$1("sha256").update(a).digest("hex").slice(0,iMt),minhash:Array.from(i),canonicalUrl:t}}var aMt=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]),Jn="\uFFFD",D;(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";})(D||(D={}));var ks={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function KB(e){return e>=55296&&e<=57343}function Pke(e){return e>=56320&&e<=57343}function Oke(e,t){return (e-55296)*1024+9216+t}function YB(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function JB(e){return e>=64976&&e<=65007||aMt.has(e)}var ye;(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";})(ye||(ye={}));var lMt=65536,XB=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=lMt,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(Pke(o))return this.pos++,this._addGap(),Oke(t,o)}else if(!this.lastChunkWritten)return this.endOfChunkHit=true,D.EOF;return this._err(ye.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,D.EOF;let n=this.html.charCodeAt(o);return n===D.CARRIAGE_RETURN?D.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,D.EOF;let t=this.html.charCodeAt(this.pos);return t===D.CARRIAGE_RETURN?(this.isEol=true,this.skipNextNewLine=true,D.LINE_FEED):t===D.LINE_FEED&&(this.isEol=true,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=false,this._addGap(),this.advance()):(this.skipNextNewLine=false,KB(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===D.LINE_FEED||t===D.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){YB(t)?this._err(ye.controlCharacterInInputStream):JB(t)&&this._err(ye.noncharacterInInputStream);}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=false;}};var zo;(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";})(zo||(zo={}));function QB(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 uMt=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 kke(e){return e>=55296&&e<=57343||e>1114111?65533:uMt.get(e)??e}function Mke(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 S4=Mke("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 Ga;(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";})(Ga||(Ga={}));var vr;(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";})(vr||(vr={}));var Lke=32;function T4(e){return e>=vr.ZERO&&e<=vr.NINE}function dMt(e){return e>=vr.UPPER_A&&e<=vr.UPPER_F||e>=vr.LOWER_A&&e<=vr.LOWER_F}function mMt(e){return e>=vr.UPPER_A&&e<=vr.UPPER_Z||e>=vr.LOWER_A&&e<=vr.LOWER_Z||T4(e)}function pMt(e){return e===vr.EQUALS||mMt(e)}var Wi;(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";})(Wi||(Wi={}));var Rm;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute";})(Rm||(Rm={}));var ZB=class{decodeTree;emitCodePoint;errors;constructor(t,o,n){this.decodeTree=t,this.emitCodePoint=o,this.errors=n;}state=Wi.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=Rm.Strict;runConsumed=0;startEntity(t){this.decodeMode=t,this.state=Wi.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0;}write(t,o){switch(this.state){case Wi.EntityStart:return t.charCodeAt(o)===vr.NUM?(this.state=Wi.NumericStart,this.consumed+=1,this.stateNumericStart(t,o+1)):(this.state=Wi.NamedEntity,this.stateNamedEntity(t,o));case Wi.NumericStart:return this.stateNumericStart(t,o);case Wi.NumericDecimal:return this.stateNumericDecimal(t,o);case Wi.NumericHex:return this.stateNumericHex(t,o);case Wi.NamedEntity:return this.stateNamedEntity(t,o)}}stateNumericStart(t,o){return o>=t.length?-1:(t.charCodeAt(o)|Lke)===vr.LOWER_X?(this.state=Wi.NumericHex,this.consumed+=1,this.stateNumericHex(t,o+1)):(this.state=Wi.NumericDecimal,this.stateNumericDecimal(t,o))}stateNumericHex(t,o){for(;o<t.length;){let n=t.charCodeAt(o);if(T4(n)||dMt(n)){let r=n<=vr.NINE?n-vr.ZERO:(n|Lke)-vr.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(T4(n))this.result=this.result*10+(n-vr.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===vr.SEMI)this.consumed+=1;else if(this.decodeMode===Rm.Strict)return 0;return this.emitCodePoint(kke(this.result),this.consumed),this.errors&&(t!==vr.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,o){let{decodeTree:n}=this,r=n[this.treeIndex],i=(r&Ga.VALUE_LENGTH)>>14;for(;o<t.length;){if(i===0&&r&Ga.FLAG13){let s=(r&Ga.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let l=r&Ga.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&Ga.VALUE_LENGTH)>>14;}if(o>=t.length)break;let a=t.charCodeAt(o);if(a===vr.SEMI&&i!==0&&r&Ga.FLAG13)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);if(this.treeIndex=hMt(n,r,this.treeIndex+Math.max(1,i),a),this.treeIndex<0)return this.result===0||this.decodeMode===Rm.Attribute&&(i===0||pMt(a))?0:this.emitNotTerminatedNamedEntity();if(r=n[this.treeIndex],i=(r&Ga.VALUE_LENGTH)>>14,i!==0){if(a===vr.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==Rm.Strict&&!(r&Ga.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]&Ga.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]&~(Ga.VALUE_LENGTH|Ga.FLAG13):r[t+1],n),o===3&&this.emitCodePoint(r[t+2],n),n}end(){switch(this.state){case Wi.NamedEntity:return this.result!==0&&(this.decodeMode!==Rm.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Wi.NumericDecimal:return this.emitNumericEntity(0,2);case Wi.NumericHex:return this.emitNumericEntity(0,3);case Wi.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Wi.EntityStart:return 0}}};function hMt(e,t,o,n){let r=(t&Ga.BRANCH_LENGTH)>>7,i=t&Ga.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 Oe;(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/";})(Oe||(Oe={}));var th;(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";})(th||(th={}));var Ms;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks";})(Ms||(Ms={}));var se;(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";})(se||(se={}));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 gMt=new Map([[se.A,T.A],[se.ADDRESS,T.ADDRESS],[se.ANNOTATION_XML,T.ANNOTATION_XML],[se.APPLET,T.APPLET],[se.AREA,T.AREA],[se.ARTICLE,T.ARTICLE],[se.ASIDE,T.ASIDE],[se.B,T.B],[se.BASE,T.BASE],[se.BASEFONT,T.BASEFONT],[se.BGSOUND,T.BGSOUND],[se.BIG,T.BIG],[se.BLOCKQUOTE,T.BLOCKQUOTE],[se.BODY,T.BODY],[se.BR,T.BR],[se.BUTTON,T.BUTTON],[se.CAPTION,T.CAPTION],[se.CENTER,T.CENTER],[se.CODE,T.CODE],[se.COL,T.COL],[se.COLGROUP,T.COLGROUP],[se.DD,T.DD],[se.DESC,T.DESC],[se.DETAILS,T.DETAILS],[se.DIALOG,T.DIALOG],[se.DIR,T.DIR],[se.DIV,T.DIV],[se.DL,T.DL],[se.DT,T.DT],[se.EM,T.EM],[se.EMBED,T.EMBED],[se.FIELDSET,T.FIELDSET],[se.FIGCAPTION,T.FIGCAPTION],[se.FIGURE,T.FIGURE],[se.FONT,T.FONT],[se.FOOTER,T.FOOTER],[se.FOREIGN_OBJECT,T.FOREIGN_OBJECT],[se.FORM,T.FORM],[se.FRAME,T.FRAME],[se.FRAMESET,T.FRAMESET],[se.H1,T.H1],[se.H2,T.H2],[se.H3,T.H3],[se.H4,T.H4],[se.H5,T.H5],[se.H6,T.H6],[se.HEAD,T.HEAD],[se.HEADER,T.HEADER],[se.HGROUP,T.HGROUP],[se.HR,T.HR],[se.HTML,T.HTML],[se.I,T.I],[se.IMG,T.IMG],[se.IMAGE,T.IMAGE],[se.INPUT,T.INPUT],[se.IFRAME,T.IFRAME],[se.KEYGEN,T.KEYGEN],[se.LABEL,T.LABEL],[se.LI,T.LI],[se.LINK,T.LINK],[se.LISTING,T.LISTING],[se.MAIN,T.MAIN],[se.MALIGNMARK,T.MALIGNMARK],[se.MARQUEE,T.MARQUEE],[se.MATH,T.MATH],[se.MENU,T.MENU],[se.META,T.META],[se.MGLYPH,T.MGLYPH],[se.MI,T.MI],[se.MO,T.MO],[se.MN,T.MN],[se.MS,T.MS],[se.MTEXT,T.MTEXT],[se.NAV,T.NAV],[se.NOBR,T.NOBR],[se.NOFRAMES,T.NOFRAMES],[se.NOEMBED,T.NOEMBED],[se.NOSCRIPT,T.NOSCRIPT],[se.OBJECT,T.OBJECT],[se.OL,T.OL],[se.OPTGROUP,T.OPTGROUP],[se.OPTION,T.OPTION],[se.P,T.P],[se.PARAM,T.PARAM],[se.PLAINTEXT,T.PLAINTEXT],[se.PRE,T.PRE],[se.RB,T.RB],[se.RP,T.RP],[se.RT,T.RT],[se.RTC,T.RTC],[se.RUBY,T.RUBY],[se.S,T.S],[se.SCRIPT,T.SCRIPT],[se.SEARCH,T.SEARCH],[se.SECTION,T.SECTION],[se.SELECT,T.SELECT],[se.SOURCE,T.SOURCE],[se.SMALL,T.SMALL],[se.SPAN,T.SPAN],[se.STRIKE,T.STRIKE],[se.STRONG,T.STRONG],[se.STYLE,T.STYLE],[se.SUB,T.SUB],[se.SUMMARY,T.SUMMARY],[se.SUP,T.SUP],[se.TABLE,T.TABLE],[se.TBODY,T.TBODY],[se.TEMPLATE,T.TEMPLATE],[se.TEXTAREA,T.TEXTAREA],[se.TFOOT,T.TFOOT],[se.TD,T.TD],[se.TH,T.TH],[se.THEAD,T.THEAD],[se.TITLE,T.TITLE],[se.TR,T.TR],[se.TRACK,T.TRACK],[se.TT,T.TT],[se.U,T.U],[se.UL,T.UL],[se.SVG,T.SVG],[se.VAR,T.VAR],[se.WBR,T.WBR],[se.XMP,T.XMP]]);function Ub(e){var t;return (t=gMt.get(e))!==null&&t!==void 0?t:T.UNKNOWN}var je=T,Nke={[Oe.HTML]:new Set([je.ADDRESS,je.APPLET,je.AREA,je.ARTICLE,je.ASIDE,je.BASE,je.BASEFONT,je.BGSOUND,je.BLOCKQUOTE,je.BODY,je.BR,je.BUTTON,je.CAPTION,je.CENTER,je.COL,je.COLGROUP,je.DD,je.DETAILS,je.DIR,je.DIV,je.DL,je.DT,je.EMBED,je.FIELDSET,je.FIGCAPTION,je.FIGURE,je.FOOTER,je.FORM,je.FRAME,je.FRAMESET,je.H1,je.H2,je.H3,je.H4,je.H5,je.H6,je.HEAD,je.HEADER,je.HGROUP,je.HR,je.HTML,je.IFRAME,je.IMG,je.INPUT,je.LI,je.LINK,je.LISTING,je.MAIN,je.MARQUEE,je.MENU,je.META,je.NAV,je.NOEMBED,je.NOFRAMES,je.NOSCRIPT,je.OBJECT,je.OL,je.P,je.PARAM,je.PLAINTEXT,je.PRE,je.SCRIPT,je.SECTION,je.SELECT,je.SOURCE,je.STYLE,je.SUMMARY,je.TABLE,je.TBODY,je.TD,je.TEMPLATE,je.TEXTAREA,je.TFOOT,je.TH,je.THEAD,je.TITLE,je.TR,je.TRACK,je.UL,je.WBR,je.XMP]),[Oe.MATHML]:new Set([je.MI,je.MO,je.MN,je.MS,je.MTEXT,je.ANNOTATION_XML]),[Oe.SVG]:new Set([je.TITLE,je.FOREIGN_OBJECT,je.DESC]),[Oe.XLINK]:new Set,[Oe.XML]:new Set,[Oe.XMLNS]:new Set},jx=new Set([je.H1,je.H2,je.H3,je.H4,je.H5,je.H6]);new Set([se.STYLE,se.SCRIPT,se.XMP,se.IFRAME,se.NOEMBED,se.NOFRAMES,se.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 Va={DATA:j.DATA,RCDATA:j.RCDATA,RAWTEXT:j.RAWTEXT,SCRIPT_DATA:j.SCRIPT_DATA,PLAINTEXT:j.PLAINTEXT,CDATA_SECTION:j.CDATA_SECTION};function yMt(e){return e>=D.DIGIT_0&&e<=D.DIGIT_9}function Hx(e){return e>=D.LATIN_CAPITAL_A&&e<=D.LATIN_CAPITAL_Z}function bMt(e){return e>=D.LATIN_SMALL_A&&e<=D.LATIN_SMALL_Z}function bf(e){return bMt(e)||Hx(e)}function Dke(e){return bf(e)||yMt(e)}function eU(e){return e+32}function Bke(e){return e===D.SPACE||e===D.LINE_FEED||e===D.TABULATION||e===D.FORM_FEED}function Fke(e){return Bke(e)||e===D.SOLIDUS||e===D.GREATER_THAN_SIGN}function SMt(e){return e===D.NULL?ye.nullCharacterReference:e>1114111?ye.characterReferenceOutsideUnicodeRange:KB(e)?ye.surrogateCharacterReference:JB(e)?ye.noncharacterCharacterReference:YB(e)||e===D.CARRIAGE_RETURN?ye.controlCharacterReference:null}var $x=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 XB(o),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new ZB(S4,(n,r)=>{this.preprocessor.pos=this.entityStartPos+r-1,this._flushCodePointConsumedAsCharacterReference(n);},o.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(ye.missingSemicolonAfterCharacterReference,1);},absenceOfDigitsInNumericCharacterReference:n=>{this._err(ye.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+n);},validateNumericCharacterReference:n=>{let r=SMt(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:zo.START_TAG,tagName:"",tagID:T.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(1)};}_createEndTagToken(){this.currentToken={type:zo.END_TAG,tagName:"",tagID:T.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(2)};}_createCommentToken(t){this.currentToken={type:zo.COMMENT,data:"",location:this.getCurrentLocation(t)};}_createDoctypeToken(t){this.currentToken={type:zo.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(QB(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(ye.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=Ub(t.tagName),t.type===zo.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(ye.endTagWithAttributes),t.selfClosing&&this._err(ye.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 zo.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case zo.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case zo.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:zo.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=Bke(t)?zo.WHITESPACE_CHARACTER:t===D.NULL?zo.NULL_CHARACTER:zo.CHARACTER;this._appendCharToCurrentCharacterToken(o,t<65536?String.fromCharCode(t):String.fromCodePoint(t));}_emitChars(t){this._appendCharToCurrentCharacterToken(zo.CHARACTER,t);}_startCharacterReference(){this.returnState=this.state,this.state=j.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Rm.Attribute:Rm.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 D.LESS_THAN_SIGN:{this.state=j.TAG_OPEN;break}case D.AMPERSAND:{this._startCharacterReference();break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitCodePoint(t);break}case D.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRcdata(t){switch(t){case D.AMPERSAND:{this._startCharacterReference();break}case D.LESS_THAN_SIGN:{this.state=j.RCDATA_LESS_THAN_SIGN;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitChars(Jn);break}case D.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRawtext(t){switch(t){case D.LESS_THAN_SIGN:{this.state=j.RAWTEXT_LESS_THAN_SIGN;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitChars(Jn);break}case D.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptData(t){switch(t){case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_LESS_THAN_SIGN;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitChars(Jn);break}case D.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_statePlaintext(t){switch(t){case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitChars(Jn);break}case D.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateTagOpen(t){if(bf(t))this._createStartTagToken(),this.state=j.TAG_NAME,this._stateTagName(t);else switch(t){case D.EXCLAMATION_MARK:{this.state=j.MARKUP_DECLARATION_OPEN;break}case D.SOLIDUS:{this.state=j.END_TAG_OPEN;break}case D.QUESTION_MARK:{this._err(ye.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t);break}case D.EOF:{this._err(ye.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(ye.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=j.DATA,this._stateData(t);}}_stateEndTagOpen(t){if(bf(t))this._createEndTagToken(),this.state=j.TAG_NAME,this._stateTagName(t);else switch(t){case D.GREATER_THAN_SIGN:{this._err(ye.missingEndTagName),this.state=j.DATA;break}case D.EOF:{this._err(ye.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(ye.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t);}}_stateTagName(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this.state=j.BEFORE_ATTRIBUTE_NAME;break}case D.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.tagName+=Jn;break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:o.tagName+=String.fromCodePoint(Hx(t)?eU(t):t);}}_stateRcdataLessThanSign(t){t===D.SOLIDUS?this.state=j.RCDATA_END_TAG_OPEN:(this._emitChars("<"),this.state=j.RCDATA,this._stateRcdata(t));}_stateRcdataEndTagOpen(t){bf(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 D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=j.BEFORE_ATTRIBUTE_NAME,false;case D.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=j.SELF_CLOSING_START_TAG,false;case D.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===D.SOLIDUS?this.state=j.RAWTEXT_END_TAG_OPEN:(this._emitChars("<"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagOpen(t){bf(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 D.SOLIDUS:{this.state=j.SCRIPT_DATA_END_TAG_OPEN;break}case D.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){bf(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===D.HYPHEN_MINUS?(this.state=j.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-")):(this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStartDash(t){t===D.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 D.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitChars(Jn);break}case D.EOF:{this._err(ye.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataEscapedDash(t){switch(t){case D.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(Jn);break}case D.EOF:{this._err(ye.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedDashDash(t){switch(t){case D.HYPHEN_MINUS:{this._emitChars("-");break}case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case D.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(Jn);break}case D.EOF:{this._err(ye.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedLessThanSign(t){t===D.SOLIDUS?this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:bf(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){bf(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(ks.SCRIPT,false)&&Fke(this.preprocessor.peek(ks.SCRIPT.length))){this._emitCodePoint(t);for(let o=0;o<ks.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 D.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this._emitChars(Jn);break}case D.EOF:{this._err(ye.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDash(t){switch(t){case D.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Jn);break}case D.EOF:{this._err(ye.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDashDash(t){switch(t){case D.HYPHEN_MINUS:{this._emitChars("-");break}case D.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case D.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Jn);break}case D.EOF:{this._err(ye.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedLessThanSign(t){t===D.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(ks.SCRIPT,false)&&Fke(this.preprocessor.peek(ks.SCRIPT.length))){this._emitCodePoint(t);for(let o=0;o<ks.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 D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.SOLIDUS:case D.GREATER_THAN_SIGN:case D.EOF:{this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case D.EQUALS_SIGN:{this._err(ye.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 D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:case D.SOLIDUS:case D.GREATER_THAN_SIGN:case D.EOF:{this._leaveAttrName(),this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case D.EQUALS_SIGN:{this._leaveAttrName(),this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case D.QUOTATION_MARK:case D.APOSTROPHE:case D.LESS_THAN_SIGN:{this._err(ye.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.currentAttr.name+=Jn;break}default:this.currentAttr.name+=String.fromCodePoint(Hx(t)?eU(t):t);}}_stateAfterAttributeName(t){switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case D.EQUALS_SIGN:{this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateBeforeAttributeValue(t){switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.QUOTATION_MARK:{this.state=j.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case D.APOSTROPHE:{this.state=j.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case D.GREATER_THAN_SIGN:{this._err(ye.missingAttributeValue),this.state=j.DATA,this.emitCurrentTagToken();break}default:this.state=j.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(t);}}_stateAttributeValueDoubleQuoted(t){switch(t){case D.QUOTATION_MARK:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case D.AMPERSAND:{this._startCharacterReference();break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.currentAttr.value+=Jn;break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueSingleQuoted(t){switch(t){case D.APOSTROPHE:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case D.AMPERSAND:{this._startCharacterReference();break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.currentAttr.value+=Jn;break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueUnquoted(t){switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case D.AMPERSAND:{this._startCharacterReference();break}case D.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case D.NULL:{this._err(ye.unexpectedNullCharacter),this.currentAttr.value+=Jn;break}case D.QUOTATION_MARK:case D.APOSTROPHE:case D.LESS_THAN_SIGN:case D.EQUALS_SIGN:case D.GRAVE_ACCENT:{this._err(ye.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAfterAttributeValueQuoted(t){switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case D.SOLIDUS:{this._leaveAttrValue(),this.state=j.SELF_CLOSING_START_TAG;break}case D.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:this._err(ye.missingWhitespaceBetweenAttributes),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateSelfClosingStartTag(t){switch(t){case D.GREATER_THAN_SIGN:{let o=this.currentToken;o.selfClosing=true,this.state=j.DATA,this.emitCurrentTagToken();break}case D.EOF:{this._err(ye.eofInTag),this._emitEOFToken();break}default:this._err(ye.unexpectedSolidusInTag),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateBogusComment(t){let o=this.currentToken;switch(t){case D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(o);break}case D.EOF:{this.emitCurrentComment(o),this._emitEOFToken();break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.data+=Jn;break}default:o.data+=String.fromCodePoint(t);}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(ks.DASH_DASH,true)?(this._createCommentToken(ks.DASH_DASH.length+1),this.state=j.COMMENT_START):this._consumeSequenceIfMatch(ks.DOCTYPE,false)?(this.currentLocation=this.getCurrentLocation(ks.DOCTYPE.length+1),this.state=j.DOCTYPE):this._consumeSequenceIfMatch(ks.CDATA_START,true)?this.inForeignNode?this.state=j.CDATA_SECTION:(this._err(ye.cdataInHtmlContent),this._createCommentToken(ks.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=j.BOGUS_COMMENT):this._ensureHibernation()||(this._err(ye.incorrectlyOpenedComment),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t));}_stateCommentStart(t){switch(t){case D.HYPHEN_MINUS:{this.state=j.COMMENT_START_DASH;break}case D.GREATER_THAN_SIGN:{this._err(ye.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 D.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case D.GREATER_THAN_SIGN:{this._err(ye.abruptClosingOfEmptyComment),this.state=j.DATA,this.emitCurrentComment(o);break}case D.EOF:{this._err(ye.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 D.HYPHEN_MINUS:{this.state=j.COMMENT_END_DASH;break}case D.LESS_THAN_SIGN:{o.data+="<",this.state=j.COMMENT_LESS_THAN_SIGN;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.data+=Jn;break}case D.EOF:{this._err(ye.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+=String.fromCodePoint(t);}}_stateCommentLessThanSign(t){let o=this.currentToken;switch(t){case D.EXCLAMATION_MARK:{o.data+="!",this.state=j.COMMENT_LESS_THAN_SIGN_BANG;break}case D.LESS_THAN_SIGN:{o.data+="<";break}default:this.state=j.COMMENT,this._stateComment(t);}}_stateCommentLessThanSignBang(t){t===D.HYPHEN_MINUS?this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=j.COMMENT,this._stateComment(t));}_stateCommentLessThanSignBangDash(t){t===D.HYPHEN_MINUS?this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=j.COMMENT_END_DASH,this._stateCommentEndDash(t));}_stateCommentLessThanSignBangDashDash(t){t!==D.GREATER_THAN_SIGN&&t!==D.EOF&&this._err(ye.nestedComment),this.state=j.COMMENT_END,this._stateCommentEnd(t);}_stateCommentEndDash(t){let o=this.currentToken;switch(t){case D.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case D.EOF:{this._err(ye.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 D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(o);break}case D.EXCLAMATION_MARK:{this.state=j.COMMENT_END_BANG;break}case D.HYPHEN_MINUS:{o.data+="-";break}case D.EOF:{this._err(ye.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 D.HYPHEN_MINUS:{o.data+="--!",this.state=j.COMMENT_END_DASH;break}case D.GREATER_THAN_SIGN:{this._err(ye.incorrectlyClosedComment),this.state=j.DATA,this.emitCurrentComment(o);break}case D.EOF:{this._err(ye.eofInComment),this.emitCurrentComment(o),this._emitEOFToken();break}default:o.data+="--!",this.state=j.COMMENT,this._stateComment(t);}}_stateDoctype(t){switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_NAME;break}case D.GREATER_THAN_SIGN:{this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);break}case D.EOF:{this._err(ye.eofInDoctype),this._createDoctypeToken(null);let o=this.currentToken;o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingWhitespaceBeforeDoctypeName),this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);}}_stateBeforeDoctypeName(t){if(Hx(t))this._createDoctypeToken(String.fromCharCode(eU(t))),this.state=j.DOCTYPE_NAME;else switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.NULL:{this._err(ye.unexpectedNullCharacter),this._createDoctypeToken(Jn),this.state=j.DOCTYPE_NAME;break}case D.GREATER_THAN_SIGN:{this._err(ye.missingDoctypeName),this._createDoctypeToken(null);let o=this.currentToken;o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.EOF:{this._err(ye.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 D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this.state=j.AFTER_DOCTYPE_NAME;break}case D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.name+=Jn;break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:o.name+=String.fromCodePoint(Hx(t)?eU(t):t);}}_stateAfterDoctypeName(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(ks.PUBLIC,false)?this.state=j.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(ks.SYSTEM,false)?this.state=j.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(ye.invalidCharacterSequenceAfterDoctypeName),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t));}}_stateAfterDoctypePublicKeyword(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case D.QUOTATION_MARK:{this._err(ye.missingWhitespaceAfterDoctypePublicKeyword),o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case D.APOSTROPHE:{this._err(ye.missingWhitespaceAfterDoctypePublicKeyword),o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case D.GREATER_THAN_SIGN:{this._err(ye.missingDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingQuoteBeforeDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypePublicIdentifier(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.QUOTATION_MARK:{o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case D.APOSTROPHE:{o.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case D.GREATER_THAN_SIGN:{this._err(ye.missingDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingQuoteBeforeDoctypePublicIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypePublicIdentifierDoubleQuoted(t){let o=this.currentToken;switch(t){case D.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.publicId+=Jn;break}case D.GREATER_THAN_SIGN:{this._err(ye.abruptDoctypePublicIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.EOF:{this._err(ye.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 D.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.publicId+=Jn;break}case D.GREATER_THAN_SIGN:{this._err(ye.abruptDoctypePublicIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.EOF:{this._err(ye.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 D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this.state=j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case D.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.QUOTATION_MARK:{this._err(ye.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case D.APOSTROPHE:{this._err(ye.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBetweenDoctypePublicAndSystemIdentifiers(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.GREATER_THAN_SIGN:{this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.QUOTATION_MARK:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case D.APOSTROPHE:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateAfterDoctypeSystemKeyword(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case D.QUOTATION_MARK:{this._err(ye.missingWhitespaceAfterDoctypeSystemKeyword),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case D.APOSTROPHE:{this._err(ye.missingWhitespaceAfterDoctypeSystemKeyword),o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case D.GREATER_THAN_SIGN:{this._err(ye.missingDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypeSystemIdentifier(t){let o=this.currentToken;switch(t){case D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.QUOTATION_MARK:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case D.APOSTROPHE:{o.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case D.GREATER_THAN_SIGN:{this._err(ye.missingDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(o);break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.missingQuoteBeforeDoctypeSystemIdentifier),o.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypeSystemIdentifierDoubleQuoted(t){let o=this.currentToken;switch(t){case D.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.systemId+=Jn;break}case D.GREATER_THAN_SIGN:{this._err(ye.abruptDoctypeSystemIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.EOF:{this._err(ye.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 D.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case D.NULL:{this._err(ye.unexpectedNullCharacter),o.systemId+=Jn;break}case D.GREATER_THAN_SIGN:{this._err(ye.abruptDoctypeSystemIdentifier),o.forceQuirks=true,this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.EOF:{this._err(ye.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 D.SPACE:case D.LINE_FEED:case D.TABULATION:case D.FORM_FEED:break;case D.GREATER_THAN_SIGN:{this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.EOF:{this._err(ye.eofInDoctype),o.forceQuirks=true,this.emitCurrentDoctype(o),this._emitEOFToken();break}default:this._err(ye.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBogusDoctype(t){let o=this.currentToken;switch(t){case D.GREATER_THAN_SIGN:{this.emitCurrentDoctype(o),this.state=j.DATA;break}case D.NULL:{this._err(ye.unexpectedNullCharacter);break}case D.EOF:{this.emitCurrentDoctype(o),this._emitEOFToken();break}}}_stateCdataSection(t){switch(t){case D.RIGHT_SQUARE_BRACKET:{this.state=j.CDATA_SECTION_BRACKET;break}case D.EOF:{this._err(ye.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateCdataSectionBracket(t){t===D.RIGHT_SQUARE_BRACKET?this.state=j.CDATA_SECTION_END:(this._emitChars("]"),this.state=j.CDATA_SECTION,this._stateCdataSection(t));}_stateCdataSectionEnd(t){switch(t){case D.GREATER_THAN_SIGN:{this.state=j.DATA;break}case D.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(D.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&Dke(this.preprocessor.peek(1))?j.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState;}_stateAmbiguousAmpersand(t){Dke(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===D.SEMICOLON&&this._err(ye.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t));}};var Hke=new Set([T.DD,T.DT,T.LI,T.OPTGROUP,T.OPTION,T.P,T.RB,T.RP,T.RT,T.RTC]),Uke=new Set([...Hke,T.CAPTION,T.COLGROUP,T.TBODY,T.TD,T.TFOOT,T.TH,T.THEAD,T.TR]),tU=new Set([T.APPLET,T.CAPTION,T.HTML,T.MARQUEE,T.OBJECT,T.TABLE,T.TD,T.TEMPLATE,T.TH]),TMt=new Set([...tU,T.OL,T.UL]),vMt=new Set([...tU,T.BUTTON]),zke=new Set([T.ANNOTATION_XML,T.MI,T.MN,T.MO,T.MS,T.MTEXT]),jke=new Set([T.DESC,T.FOREIGN_OBJECT,T.TITLE]),AMt=new Set([T.TR,T.TEMPLATE,T.HTML]),EMt=new Set([T.TBODY,T.TFOOT,T.THEAD,T.TEMPLATE,T.HTML]),wMt=new Set([T.TABLE,T.TEMPLATE,T.HTML]),RMt=new Set([T.TD,T.TH]),oU=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)===Oe.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])!==Oe.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(jx,Oe.HTML);}popUntilTableCellPopped(){this.popUntilPopped(RMt,Oe.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(wMt,Oe.HTML);}clearBackToTableBodyContext(){this.clearBackTo(EMt,Oe.HTML);}clearBackToTableRowContext(){this.clearBackTo(AMt,Oe.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 Oe.HTML:{if(r===t)return true;if(o.has(r))return false;break}case Oe.SVG:{if(jke.has(r))return false;break}case Oe.MATHML:{if(zke.has(r))return false;break}}}return true}hasInScope(t){return this.hasInDynamicScope(t,tU)}hasInListItemScope(t){return this.hasInDynamicScope(t,TMt)}hasInButtonScope(t){return this.hasInDynamicScope(t,vMt)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){let o=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case Oe.HTML:{if(jx.has(o))return true;if(tU.has(o))return false;break}case Oe.SVG:{if(jke.has(o))return false;break}case Oe.MATHML:{if(zke.has(o))return false;break}}}return true}hasInTableScope(t){for(let o=this.stackTop;o>=0;o--)if(this.treeAdapter.getNamespaceURI(this.items[o])===Oe.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])===Oe.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])===Oe.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&&Hke.has(this.currentTagId);)this.pop();}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&Uke.has(this.currentTagId);)this.pop();}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&Uke.has(this.currentTagId);)this.pop();}};var $u;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element";})($u||($u={}));var $ke={type:$u.Marker},nU=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===$u.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($ke);}pushElement(t,o){this._ensureNoahArkCondition(t),this.entries.unshift({type:$u.Element,element:t,token:o});}insertElementAfterBookmark(t,o){let n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:$u.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($ke);t===-1?this.entries.length=0:this.entries.splice(0,t+1);}getElementEntryInScopeWithTagName(t){let o=this.entries.find(n=>n.type===$u.Marker||this.treeAdapter.getTagName(n.element)===t);return o&&o.type===$u.Element?o:null}getElementEntry(t){return this.entries.find(o=>o.type===$u.Element&&o.element===t)}};var Gu={createDocument(){return {nodeName:"#document",mode:Ms.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};Gu.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(Gu.isTextNode(o)){o.value+=t;return}}Gu.appendChild(e,Gu.createTextNode(t));},insertTextBefore(e,t,o){let n=e.childNodes[e.childNodes.indexOf(o)-1];n&&Gu.isTextNode(n)?n.value+=t:Gu.insertBefore(e,Gu.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 Vke="html",CMt="about:legacy-compat",IMt="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",Wke=["+//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//"],xMt=[...Wke,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],_Mt=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),qke=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],PMt=[...qke,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function Gke(e,t){return t.some(o=>e.startsWith(o))}function Kke(e){return e.name===Vke&&e.publicId===null&&(e.systemId===null||e.systemId===CMt)}function Yke(e){if(e.name!==Vke)return Ms.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===IMt)return Ms.QUIRKS;let{publicId:o}=e;if(o!==null){if(o=o.toLowerCase(),_Mt.has(o))return Ms.QUIRKS;let n=t===null?xMt:Wke;if(Gke(o,n))return Ms.QUIRKS;if(n=t===null?qke:PMt,Gke(o,n))return Ms.LIMITED_QUIRKS}return Ms.NO_QUIRKS}var Jke={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},kMt="definitionurl",MMt="definitionURL",LMt=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])),NMt=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:Oe.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:Oe.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:Oe.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:Oe.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:Oe.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:Oe.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:Oe.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:Oe.XML}],["xml:space",{prefix:"xml",name:"space",namespace:Oe.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:Oe.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:Oe.XMLNS}]]),DMt=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])),FMt=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 Xke(e){let t=e.tagID;return t===T.FONT&&e.attrs.some(({name:n})=>n===th.COLOR||n===th.SIZE||n===th.FACE)||FMt.has(t)}function v4(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===kMt){e.attrs[t].name=MMt;break}}function A4(e){for(let t=0;t<e.attrs.length;t++){let o=LMt.get(e.attrs[t].name);o!=null&&(e.attrs[t].name=o);}}function rU(e){for(let t=0;t<e.attrs.length;t++){let o=NMt.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 Qke(e){let t=DMt.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=Ub(e.tagName));}function BMt(e,t){return t===Oe.MATHML&&(e===T.MI||e===T.MO||e===T.MN||e===T.MS||e===T.MTEXT)}function UMt(e,t,o){if(t===Oe.MATHML&&e===T.ANNOTATION_XML){for(let n=0;n<o.length;n++)if(o[n].name===th.ENCODING){let r=o[n].value.toLowerCase();return r===Jke.TEXT_HTML||r===Jke.APPLICATION_XML}}return t===Oe.SVG&&(e===T.FOREIGN_OBJECT||e===T.DESC||e===T.TITLE)}function Zke(e,t,o,n){return (!n||n===Oe.HTML)&&UMt(e,t,o)||(!n||n===Oe.MATHML)&&BMt(e,t)}var zMt="hidden",jMt=8,HMt=3,V;(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";})(V||(V={}));var $Mt={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},rMe=new Set([T.TABLE,T.TBODY,T.TFOOT,T.THEAD,T.TR]),tMe={scriptingEnabled:true,sourceCodeLocationInfo:false,treeAdapter:Gu,onParseError:null},Xx=class{constructor(t,o,n=null,r=null){this.fragmentContext=n,this.scriptHandler=r,this.currentToken=null,this.stopped=false,this.insertionMode=V.INITIAL,this.originalInsertionMode=V.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={...tMe,...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 $x(this.options,this),this.activeFormattingElements=new nU(this.treeAdapter),this.fragmentContextID=n?Ub(this.treeAdapter.getTagName(n)):T.UNKNOWN,this._setContextModes(n??this.document,this.fragmentContextID),this.openElements=new oU(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={...tMe,...o};t??(t=n.treeAdapter.createElement(se.TEMPLATE,Oe.HTML,[]));let r=n.treeAdapter.createElement("documentmock",Oe.HTML,[]),i=new this(n,r,t);return i.fragmentContextID===T.TEMPLATE&&i.tmplInsertionModeStack.unshift(V.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:$Mt,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)===Oe.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&t!==void 0&&o!==void 0&&!this._isIntegrationPoint(o,t);}_switchToTextParsing(t,o){this._insertElement(t,Oe.HTML),this.tokenizer.state=o,this.originalInsertionMode=this.insertionMode,this.insertionMode=V.TEXT;}switchToPlaintextParsing(){this.insertionMode=V.TEXT,this.originalInsertionMode=V.IN_BODY,this.tokenizer.state=Va.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)===se.FORM){this.formElement=t;break}t=this.treeAdapter.getParentNode(t);}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==Oe.HTML))switch(this.fragmentContextID){case T.TITLE:case T.TEXTAREA:{this.tokenizer.state=Va.RCDATA;break}case T.STYLE:case T.XMP:case T.IFRAME:case T.NOEMBED:case T.NOFRAMES:case T.NOSCRIPT:{this.tokenizer.state=Va.RAWTEXT;break}case T.SCRIPT:{this.tokenizer.state=Va.SCRIPT_DATA;break}case T.PLAINTEXT:{this.tokenizer.state=Va.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,Oe.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,o);}_insertTemplate(t){let o=this.treeAdapter.createElement(t.tagName,Oe.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(se.HTML,Oe.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===zo.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)===se.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(o)===Oe.MATHML?false:this.tokenizer.inForeignNode||(t.tagID===T.MGLYPH||t.tagID===T.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,o,Oe.HTML)}_processToken(t){switch(t.type){case zo.CHARACTER:{this.onCharacter(t);break}case zo.NULL_CHARACTER:{this.onNullCharacter(t);break}case zo.COMMENT:{this.onComment(t);break}case zo.DOCTYPE:{this.onDoctype(t);break}case zo.START_TAG:{this._processStartTag(t);break}case zo.END_TAG:{this.onEndTag(t);break}case zo.EOF:{this.onEof(t);break}case zo.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,o,n){let r=this.treeAdapter.getNamespaceURI(o),i=this.treeAdapter.getAttrList(o);return Zke(t,r,i,n)}_reconstructActiveFormattingElements(){let t=this.activeFormattingElements.entries.length;if(t){let o=this.activeFormattingElements.entries.findIndex(r=>r.type===$u.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=V.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=V.IN_ROW;return}case T.TBODY:case T.THEAD:case T.TFOOT:{this.insertionMode=V.IN_TABLE_BODY;return}case T.CAPTION:{this.insertionMode=V.IN_CAPTION;return}case T.COLGROUP:{this.insertionMode=V.IN_COLUMN_GROUP;return}case T.TABLE:{this.insertionMode=V.IN_TABLE;return}case T.BODY:{this.insertionMode=V.IN_BODY;return}case T.FRAMESET:{this.insertionMode=V.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?V.AFTER_HEAD:V.BEFORE_HEAD;return}case T.TD:case T.TH:{if(t>0){this.insertionMode=V.IN_CELL;return}break}case T.HEAD:{if(t>0){this.insertionMode=V.IN_HEAD;return}break}}this.insertionMode=V.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=V.IN_SELECT_IN_TABLE;return}}this.insertionMode=V.IN_SELECT;}_isElementCausesFosterParenting(t){return rMe.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)===Oe.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 Nke[n].has(o)}onCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){SNt(this,t);return}switch(this.insertionMode){case V.INITIAL:{Gx(this,t);break}case V.BEFORE_HTML:{Wx(this,t);break}case V.BEFORE_HEAD:{qx(this,t);break}case V.IN_HEAD:{Kx(this,t);break}case V.IN_HEAD_NO_SCRIPT:{Yx(this,t);break}case V.AFTER_HEAD:{Jx(this,t);break}case V.IN_BODY:case V.IN_CAPTION:case V.IN_CELL:case V.IN_TEMPLATE:{aMe(this,t);break}case V.TEXT:case V.IN_SELECT:case V.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case V.IN_TABLE:case V.IN_TABLE_BODY:case V.IN_ROW:{E4(this,t);break}case V.IN_TABLE_TEXT:{mMe(this,t);break}case V.IN_COLUMN_GROUP:{aU(this,t);break}case V.AFTER_BODY:{sU(this,t);break}case V.AFTER_AFTER_BODY:{iU(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){bNt(this,t);return}switch(this.insertionMode){case V.INITIAL:{Gx(this,t);break}case V.BEFORE_HTML:{Wx(this,t);break}case V.BEFORE_HEAD:{qx(this,t);break}case V.IN_HEAD:{Kx(this,t);break}case V.IN_HEAD_NO_SCRIPT:{Yx(this,t);break}case V.AFTER_HEAD:{Jx(this,t);break}case V.TEXT:{this._insertCharacters(t);break}case V.IN_TABLE:case V.IN_TABLE_BODY:case V.IN_ROW:{E4(this,t);break}case V.IN_COLUMN_GROUP:{aU(this,t);break}case V.AFTER_BODY:{sU(this,t);break}case V.AFTER_AFTER_BODY:{iU(this,t);break}}}onComment(t){if(this.skipNextNewLine=false,this.currentNotInHTML){w4(this,t);return}switch(this.insertionMode){case V.INITIAL:case V.BEFORE_HTML:case V.BEFORE_HEAD:case V.IN_HEAD:case V.IN_HEAD_NO_SCRIPT:case V.AFTER_HEAD:case V.IN_BODY:case V.IN_TABLE:case V.IN_CAPTION:case V.IN_COLUMN_GROUP:case V.IN_TABLE_BODY:case V.IN_ROW:case V.IN_CELL:case V.IN_SELECT:case V.IN_SELECT_IN_TABLE:case V.IN_TEMPLATE:case V.IN_FRAMESET:case V.AFTER_FRAMESET:{w4(this,t);break}case V.IN_TABLE_TEXT:{Vx(this,t);break}case V.AFTER_BODY:{JMt(this,t);break}case V.AFTER_AFTER_BODY:case V.AFTER_AFTER_FRAMESET:{XMt(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=false,this.insertionMode){case V.INITIAL:{QMt(this,t);break}case V.BEFORE_HEAD:case V.IN_HEAD:case V.IN_HEAD_NO_SCRIPT:case V.AFTER_HEAD:{this._err(t,ye.misplacedDoctype);break}case V.IN_TABLE_TEXT:{Vx(this,t);break}}}onStartTag(t){this.skipNextNewLine=false,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,ye.nonVoidHtmlElementStartTagWithTrailingSolidus);}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?TNt(this,t):this._startTagOutsideForeignContent(t);}_startTagOutsideForeignContent(t){switch(this.insertionMode){case V.INITIAL:{Gx(this,t);break}case V.BEFORE_HTML:{ZMt(this,t);break}case V.BEFORE_HEAD:{tLt(this,t);break}case V.IN_HEAD:{Vu(this,t);break}case V.IN_HEAD_NO_SCRIPT:{rLt(this,t);break}case V.AFTER_HEAD:{aLt(this,t);break}case V.IN_BODY:{Wa(this,t);break}case V.IN_TABLE:{sE(this,t);break}case V.IN_TABLE_TEXT:{Vx(this,t);break}case V.IN_CAPTION:{oNt(this,t);break}case V.IN_COLUMN_GROUP:{x4(this,t);break}case V.IN_TABLE_BODY:{uU(this,t);break}case V.IN_ROW:{dU(this,t);break}case V.IN_CELL:{iNt(this,t);break}case V.IN_SELECT:{gMe(this,t);break}case V.IN_SELECT_IN_TABLE:{sNt(this,t);break}case V.IN_TEMPLATE:{cNt(this,t);break}case V.AFTER_BODY:{dNt(this,t);break}case V.IN_FRAMESET:{mNt(this,t);break}case V.AFTER_FRAMESET:{hNt(this,t);break}case V.AFTER_AFTER_BODY:{fNt(this,t);break}case V.AFTER_AFTER_FRAMESET:{yNt(this,t);break}}}onEndTag(t){this.skipNextNewLine=false,this.currentToken=t,this.currentNotInHTML?vNt(this,t):this._endTagOutsideForeignContent(t);}_endTagOutsideForeignContent(t){switch(this.insertionMode){case V.INITIAL:{Gx(this,t);break}case V.BEFORE_HTML:{eLt(this,t);break}case V.BEFORE_HEAD:{oLt(this,t);break}case V.IN_HEAD:{nLt(this,t);break}case V.IN_HEAD_NO_SCRIPT:{iLt(this,t);break}case V.AFTER_HEAD:{sLt(this,t);break}case V.IN_BODY:{cU(this,t);break}case V.TEXT:{WLt(this,t);break}case V.IN_TABLE:{Qx(this,t);break}case V.IN_TABLE_TEXT:{Vx(this,t);break}case V.IN_CAPTION:{nNt(this,t);break}case V.IN_COLUMN_GROUP:{rNt(this,t);break}case V.IN_TABLE_BODY:{R4(this,t);break}case V.IN_ROW:{hMe(this,t);break}case V.IN_CELL:{aNt(this,t);break}case V.IN_SELECT:{fMe(this,t);break}case V.IN_SELECT_IN_TABLE:{lNt(this,t);break}case V.IN_TEMPLATE:{uNt(this,t);break}case V.AFTER_BODY:{bMe(this,t);break}case V.IN_FRAMESET:{pNt(this,t);break}case V.AFTER_FRAMESET:{gNt(this,t);break}case V.AFTER_AFTER_BODY:{iU(this,t);break}}}onEof(t){switch(this.insertionMode){case V.INITIAL:{Gx(this,t);break}case V.BEFORE_HTML:{Wx(this,t);break}case V.BEFORE_HEAD:{qx(this,t);break}case V.IN_HEAD:{Kx(this,t);break}case V.IN_HEAD_NO_SCRIPT:{Yx(this,t);break}case V.AFTER_HEAD:{Jx(this,t);break}case V.IN_BODY:case V.IN_TABLE:case V.IN_CAPTION:case V.IN_COLUMN_GROUP:case V.IN_TABLE_BODY:case V.IN_ROW:case V.IN_CELL:case V.IN_SELECT:case V.IN_SELECT_IN_TABLE:{uMe(this,t);break}case V.TEXT:{qLt(this,t);break}case V.IN_TABLE_TEXT:{Vx(this,t);break}case V.IN_TEMPLATE:{yMe(this,t);break}case V.AFTER_BODY:case V.IN_FRAMESET:case V.AFTER_FRAMESET:case V.AFTER_AFTER_BODY:case V.AFTER_AFTER_FRAMESET:{I4(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=false,t.chars.charCodeAt(0)===D.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 V.IN_HEAD:case V.IN_HEAD_NO_SCRIPT:case V.AFTER_HEAD:case V.TEXT:case V.IN_COLUMN_GROUP:case V.IN_SELECT:case V.IN_SELECT_IN_TABLE:case V.IN_FRAMESET:case V.AFTER_FRAMESET:{this._insertCharacters(t);break}case V.IN_BODY:case V.IN_CAPTION:case V.IN_CELL:case V.IN_TEMPLATE:case V.AFTER_BODY:case V.AFTER_AFTER_BODY:case V.AFTER_AFTER_FRAMESET:{iMe(this,t);break}case V.IN_TABLE:case V.IN_TABLE_BODY:case V.IN_ROW:{E4(this,t);break}case V.IN_TABLE_TEXT:{dMe(this,t);break}}}};function GMt(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):cMe(e,t),o}function VMt(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 WMt(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>=HMt;!s||l?(l&&e.activeFormattingElements.removeEntry(s),e.openElements.remove(a)):(a=qMt(e,s),n===t&&(e.activeFormattingElements.bookmark=s),e.treeAdapter.detachNode(n),e.treeAdapter.appendChild(a,n),n=a);}return n}function qMt(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 KMt(e,t,o){let n=e.treeAdapter.getTagName(t),r=Ub(n);if(e._isElementCausesFosterParenting(r))e._fosterParentElement(o);else {let i=e.treeAdapter.getNamespaceURI(t);r===T.TEMPLATE&&i===Oe.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,o);}}function YMt(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 C4(e,t){for(let o=0;o<jMt;o++){let n=GMt(e,t);if(!n)break;let r=VMt(e,n);if(!r)break;e.activeFormattingElements.bookmark=n;let i=WMt(e,r,n.element),a=e.openElements.getCommonAncestor(n.element);e.treeAdapter.detachNode(i),a&&KMt(e,a,i),YMt(e,r,n);}}function w4(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode);}function JMt(e,t){e._appendCommentNode(t,e.openElements.items[0]);}function XMt(e,t){e._appendCommentNode(t,e.document);}function I4(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 QMt(e,t){e._setDocumentType(t);let o=t.forceQuirks?Ms.QUIRKS:Yke(t);Kke(t)||e._err(t,ye.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,o),e.insertionMode=V.BEFORE_HTML;}function Gx(e,t){e._err(t,ye.missingDoctype,true),e.treeAdapter.setDocumentMode(e.document,Ms.QUIRKS),e.insertionMode=V.BEFORE_HTML,e._processToken(t);}function ZMt(e,t){t.tagID===T.HTML?(e._insertElement(t,Oe.HTML),e.insertionMode=V.BEFORE_HEAD):Wx(e,t);}function eLt(e,t){let o=t.tagID;(o===T.HTML||o===T.HEAD||o===T.BODY||o===T.BR)&&Wx(e,t);}function Wx(e,t){e._insertFakeRootElement(),e.insertionMode=V.BEFORE_HEAD,e._processToken(t);}function tLt(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.HEAD:{e._insertElement(t,Oe.HTML),e.headElement=e.openElements.current,e.insertionMode=V.IN_HEAD;break}default:qx(e,t);}}function oLt(e,t){let o=t.tagID;o===T.HEAD||o===T.BODY||o===T.HTML||o===T.BR?qx(e,t):e._err(t,ye.endTagWithoutMatchingOpenElement);}function qx(e,t){e._insertFakeElement(se.HEAD,T.HEAD),e.headElement=e.openElements.current,e.insertionMode=V.IN_HEAD,e._processToken(t);}function Vu(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:{e._appendElement(t,Oe.HTML),t.ackSelfClosing=true;break}case T.TITLE:{e._switchToTextParsing(t,Va.RCDATA);break}case T.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,Va.RAWTEXT):(e._insertElement(t,Oe.HTML),e.insertionMode=V.IN_HEAD_NO_SCRIPT);break}case T.NOFRAMES:case T.STYLE:{e._switchToTextParsing(t,Va.RAWTEXT);break}case T.SCRIPT:{e._switchToTextParsing(t,Va.SCRIPT_DATA);break}case T.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=false,e.insertionMode=V.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(V.IN_TEMPLATE);break}case T.HEAD:{e._err(t,ye.misplacedStartTagForHeadElement);break}default:Kx(e,t);}}function nLt(e,t){switch(t.tagID){case T.HEAD:{e.openElements.pop(),e.insertionMode=V.AFTER_HEAD;break}case T.BODY:case T.BR:case T.HTML:{Kx(e,t);break}case T.TEMPLATE:{zb(e,t);break}default:e._err(t,ye.endTagWithoutMatchingOpenElement);}}function zb(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==T.TEMPLATE&&e._err(t,ye.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,ye.endTagWithoutMatchingOpenElement);}function Kx(e,t){e.openElements.pop(),e.insertionMode=V.AFTER_HEAD,e._processToken(t);}function rLt(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.BASEFONT:case T.BGSOUND:case T.HEAD:case T.LINK:case T.META:case T.NOFRAMES:case T.STYLE:{Vu(e,t);break}case T.NOSCRIPT:{e._err(t,ye.nestedNoscriptInHead);break}default:Yx(e,t);}}function iLt(e,t){switch(t.tagID){case T.NOSCRIPT:{e.openElements.pop(),e.insertionMode=V.IN_HEAD;break}case T.BR:{Yx(e,t);break}default:e._err(t,ye.endTagWithoutMatchingOpenElement);}}function Yx(e,t){let o=t.type===zo.EOF?ye.openElementsLeftAfterEof:ye.disallowedContentInNoscriptInHead;e._err(t,o),e.openElements.pop(),e.insertionMode=V.IN_HEAD,e._processToken(t);}function aLt(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.BODY:{e._insertElement(t,Oe.HTML),e.framesetOk=false,e.insertionMode=V.IN_BODY;break}case T.FRAMESET:{e._insertElement(t,Oe.HTML),e.insertionMode=V.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,ye.abandonedHeadElementChild),e.openElements.push(e.headElement,T.HEAD),Vu(e,t),e.openElements.remove(e.headElement);break}case T.HEAD:{e._err(t,ye.misplacedStartTagForHeadElement);break}default:Jx(e,t);}}function sLt(e,t){switch(t.tagID){case T.BODY:case T.HTML:case T.BR:{Jx(e,t);break}case T.TEMPLATE:{zb(e,t);break}default:e._err(t,ye.endTagWithoutMatchingOpenElement);}}function Jx(e,t){e._insertFakeElement(se.BODY,T.BODY),e.insertionMode=V.IN_BODY,lU(e,t);}function lU(e,t){switch(t.type){case zo.CHARACTER:{aMe(e,t);break}case zo.WHITESPACE_CHARACTER:{iMe(e,t);break}case zo.COMMENT:{w4(e,t);break}case zo.START_TAG:{Wa(e,t);break}case zo.END_TAG:{cU(e,t);break}case zo.EOF:{uMe(e,t);break}}}function iMe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t);}function aMe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=false;}function lLt(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs);}function cLt(e,t){let o=e.openElements.tryPeekProperlyNestedBodyElement();o&&e.openElements.tmplCount===0&&(e.framesetOk=false,e.treeAdapter.adoptAttributes(o,t.attrs));}function uLt(e,t){let o=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&o&&(e.treeAdapter.detachNode(o),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,Oe.HTML),e.insertionMode=V.IN_FRAMESET);}function dLt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Oe.HTML);}function mLt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&jx.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,Oe.HTML);}function pLt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Oe.HTML),e.skipNextNewLine=true,e.framesetOk=false;}function hLt(e,t){let o=e.openElements.tmplCount>0;(!e.formElement||o)&&(e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Oe.HTML),o||(e.formElement=e.openElements.current));}function gLt(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,Oe.HTML);}function fLt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Oe.HTML),e.tokenizer.state=Va.PLAINTEXT;}function yLt(e,t){e.openElements.hasInScope(T.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML),e.framesetOk=false;}function bLt(e,t){let o=e.activeFormattingElements.getElementEntryInScopeWithTagName(se.A);o&&(C4(e,t),e.openElements.remove(o.element),e.activeFormattingElements.removeEntry(o)),e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function SLt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function TLt(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(T.NOBR)&&(C4(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,Oe.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function vLt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=false;}function ALt(e,t){e.treeAdapter.getDocumentMode(e.document)!==Ms.QUIRKS&&e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Oe.HTML),e.framesetOk=false,e.insertionMode=V.IN_TABLE;}function sMe(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Oe.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function lMe(e){let t=QB(e,th.TYPE);return t!=null&&t.toLowerCase()===zMt}function ELt(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Oe.HTML),lMe(t)||(e.framesetOk=false),t.ackSelfClosing=true;}function wLt(e,t){e._appendElement(t,Oe.HTML),t.ackSelfClosing=true;}function RLt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._appendElement(t,Oe.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function CLt(e,t){t.tagName=se.IMG,t.tagID=T.IMG,sMe(e,t);}function ILt(e,t){e._insertElement(t,Oe.HTML),e.skipNextNewLine=true,e.tokenizer.state=Va.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=false,e.insertionMode=V.TEXT;}function xLt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=false,e._switchToTextParsing(t,Va.RAWTEXT);}function _Lt(e,t){e.framesetOk=false,e._switchToTextParsing(t,Va.RAWTEXT);}function oMe(e,t){e._switchToTextParsing(t,Va.RAWTEXT);}function PLt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML),e.framesetOk=false,e.insertionMode=e.insertionMode===V.IN_TABLE||e.insertionMode===V.IN_CAPTION||e.insertionMode===V.IN_TABLE_BODY||e.insertionMode===V.IN_ROW||e.insertionMode===V.IN_CELL?V.IN_SELECT_IN_TABLE:V.IN_SELECT;}function OLt(e,t){e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML);}function kLt(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,Oe.HTML);}function MLt(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(T.RTC),e._insertElement(t,Oe.HTML);}function LLt(e,t){e._reconstructActiveFormattingElements(),v4(t),rU(t),t.selfClosing?e._appendElement(t,Oe.MATHML):e._insertElement(t,Oe.MATHML),t.ackSelfClosing=true;}function NLt(e,t){e._reconstructActiveFormattingElements(),A4(t),rU(t),t.selfClosing?e._appendElement(t,Oe.SVG):e._insertElement(t,Oe.SVG),t.ackSelfClosing=true;}function nMe(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Oe.HTML);}function Wa(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:{SLt(e,t);break}case T.A:{bLt(e,t);break}case T.H1:case T.H2:case T.H3:case T.H4:case T.H5:case T.H6:{mLt(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:{dLt(e,t);break}case T.LI:case T.DD:case T.DT:{gLt(e,t);break}case T.BR:case T.IMG:case T.WBR:case T.AREA:case T.EMBED:case T.KEYGEN:{sMe(e,t);break}case T.HR:{RLt(e,t);break}case T.RB:case T.RTC:{kLt(e,t);break}case T.RT:case T.RP:{MLt(e,t);break}case T.PRE:case T.LISTING:{pLt(e,t);break}case T.XMP:{xLt(e,t);break}case T.SVG:{NLt(e,t);break}case T.HTML:{lLt(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:{Vu(e,t);break}case T.BODY:{cLt(e,t);break}case T.FORM:{hLt(e,t);break}case T.NOBR:{TLt(e,t);break}case T.MATH:{LLt(e,t);break}case T.TABLE:{ALt(e,t);break}case T.INPUT:{ELt(e,t);break}case T.PARAM:case T.TRACK:case T.SOURCE:{wLt(e,t);break}case T.IMAGE:{CLt(e,t);break}case T.BUTTON:{yLt(e,t);break}case T.APPLET:case T.OBJECT:case T.MARQUEE:{vLt(e,t);break}case T.IFRAME:{_Lt(e,t);break}case T.SELECT:{PLt(e,t);break}case T.OPTION:case T.OPTGROUP:{OLt(e,t);break}case T.NOEMBED:case T.NOFRAMES:{oMe(e,t);break}case T.FRAMESET:{uLt(e,t);break}case T.TEXTAREA:{ILt(e,t);break}case T.NOSCRIPT:{e.options.scriptingEnabled?oMe(e,t):nMe(e,t);break}case T.PLAINTEXT:{fLt(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:nMe(e,t);}}function DLt(e,t){if(e.openElements.hasInScope(T.BODY)&&(e.insertionMode=V.AFTER_BODY,e.options.sourceCodeLocationInfo)){let o=e.openElements.tryPeekProperlyNestedBodyElement();o&&e._setEndLocation(o,t);}}function FLt(e,t){e.openElements.hasInScope(T.BODY)&&(e.insertionMode=V.AFTER_BODY,bMe(e,t));}function BLt(e,t){let o=t.tagID;e.openElements.hasInScope(o)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o));}function ULt(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 zLt(e){e.openElements.hasInButtonScope(T.P)||e._insertFakeElement(se.P,T.P),e._closePElement();}function jLt(e){e.openElements.hasInListItemScope(T.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(T.LI),e.openElements.popUntilTagNamePopped(T.LI));}function HLt(e,t){let o=t.tagID;e.openElements.hasInScope(o)&&(e.openElements.generateImpliedEndTagsWithExclusion(o),e.openElements.popUntilTagNamePopped(o));}function $Lt(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped());}function GLt(e,t){let o=t.tagID;e.openElements.hasInScope(o)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(o),e.activeFormattingElements.clearToLastMarker());}function VLt(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(se.BR,T.BR),e.openElements.pop(),e.framesetOk=false;}function cMe(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 cU(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:{C4(e,t);break}case T.P:{zLt(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:{BLt(e,t);break}case T.LI:{jLt(e);break}case T.DD:case T.DT:{HLt(e,t);break}case T.H1:case T.H2:case T.H3:case T.H4:case T.H5:case T.H6:{$Lt(e);break}case T.BR:{VLt(e);break}case T.BODY:{DLt(e,t);break}case T.HTML:{FLt(e,t);break}case T.FORM:{ULt(e);break}case T.APPLET:case T.OBJECT:case T.MARQUEE:{GLt(e,t);break}case T.TEMPLATE:{zb(e,t);break}default:cMe(e,t);}}function uMe(e,t){e.tmplInsertionModeStack.length>0?yMe(e,t):I4(e,t);}function WLt(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 qLt(e,t){e._err(t,ye.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t);}function E4(e,t){if(e.openElements.currentTagId!==void 0&&rMe.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=false,e.originalInsertionMode=e.insertionMode,e.insertionMode=V.IN_TABLE_TEXT,t.type){case zo.CHARACTER:{mMe(e,t);break}case zo.WHITESPACE_CHARACTER:{dMe(e,t);break}}else Zx(e,t);}function KLt(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,Oe.HTML),e.insertionMode=V.IN_CAPTION;}function YLt(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Oe.HTML),e.insertionMode=V.IN_COLUMN_GROUP;}function JLt(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(se.COLGROUP,T.COLGROUP),e.insertionMode=V.IN_COLUMN_GROUP,x4(e,t);}function XLt(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Oe.HTML),e.insertionMode=V.IN_TABLE_BODY;}function QLt(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(se.TBODY,T.TBODY),e.insertionMode=V.IN_TABLE_BODY,uU(e,t);}function ZLt(e,t){e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode(),e._processStartTag(t));}function eNt(e,t){lMe(t)?e._appendElement(t,Oe.HTML):Zx(e,t),t.ackSelfClosing=true;}function tNt(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,Oe.HTML),e.formElement=e.openElements.current,e.openElements.pop());}function sE(e,t){switch(t.tagID){case T.TD:case T.TH:case T.TR:{QLt(e,t);break}case T.STYLE:case T.SCRIPT:case T.TEMPLATE:{Vu(e,t);break}case T.COL:{JLt(e,t);break}case T.FORM:{tNt(e,t);break}case T.TABLE:{ZLt(e,t);break}case T.TBODY:case T.TFOOT:case T.THEAD:{XLt(e,t);break}case T.INPUT:{eNt(e,t);break}case T.CAPTION:{KLt(e,t);break}case T.COLGROUP:{YLt(e,t);break}default:Zx(e,t);}}function Qx(e,t){switch(t.tagID){case T.TABLE:{e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode());break}case T.TEMPLATE:{zb(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:Zx(e,t);}}function Zx(e,t){let o=e.fosterParentingEnabled;e.fosterParentingEnabled=true,lU(e,t),e.fosterParentingEnabled=o;}function dMe(e,t){e.pendingCharacterTokens.push(t);}function mMe(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=true;}function Vx(e,t){let o=0;if(e.hasNonWhitespacePendingCharacterToken)for(;o<e.pendingCharacterTokens.length;o++)Zx(e,e.pendingCharacterTokens[o]);else for(;o<e.pendingCharacterTokens.length;o++)e._insertCharacters(e.pendingCharacterTokens[o]);e.insertionMode=e.originalInsertionMode,e._processToken(t);}var pMe=new Set([T.CAPTION,T.COL,T.COLGROUP,T.TBODY,T.TD,T.TFOOT,T.TH,T.THEAD,T.TR]);function oNt(e,t){let o=t.tagID;pMe.has(o)?e.openElements.hasInTableScope(T.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=V.IN_TABLE,sE(e,t)):Wa(e,t);}function nNt(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=V.IN_TABLE,o===T.TABLE&&Qx(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:cU(e,t);}}function x4(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.COL:{e._appendElement(t,Oe.HTML),t.ackSelfClosing=true;break}case T.TEMPLATE:{Vu(e,t);break}default:aU(e,t);}}function rNt(e,t){switch(t.tagID){case T.COLGROUP:{e.openElements.currentTagId===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=V.IN_TABLE);break}case T.TEMPLATE:{zb(e,t);break}case T.COL:break;default:aU(e,t);}}function aU(e,t){e.openElements.currentTagId===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=V.IN_TABLE,e._processToken(t));}function uU(e,t){switch(t.tagID){case T.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,Oe.HTML),e.insertionMode=V.IN_ROW;break}case T.TH:case T.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(se.TR,T.TR),e.insertionMode=V.IN_ROW,dU(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=V.IN_TABLE,sE(e,t));break}default:sE(e,t);}}function R4(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=V.IN_TABLE);break}case T.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=V.IN_TABLE,Qx(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:Qx(e,t);}}function dU(e,t){switch(t.tagID){case T.TH:case T.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,Oe.HTML),e.insertionMode=V.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=V.IN_TABLE_BODY,uU(e,t));break}default:sE(e,t);}}function hMe(e,t){switch(t.tagID){case T.TR:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=V.IN_TABLE_BODY);break}case T.TABLE:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=V.IN_TABLE_BODY,R4(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=V.IN_TABLE_BODY,R4(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:Qx(e,t);}}function iNt(e,t){let o=t.tagID;pMe.has(o)?(e.openElements.hasInTableScope(T.TD)||e.openElements.hasInTableScope(T.TH))&&(e._closeTableCell(),dU(e,t)):Wa(e,t);}function aNt(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=V.IN_ROW);break}case T.TABLE:case T.TBODY:case T.TFOOT:case T.THEAD:case T.TR:{e.openElements.hasInTableScope(o)&&(e._closeTableCell(),hMe(e,t));break}case T.BODY:case T.CAPTION:case T.COL:case T.COLGROUP:case T.HTML:break;default:cU(e,t);}}function gMe(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.OPTION:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e._insertElement(t,Oe.HTML);break}case T.OPTGROUP:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop(),e._insertElement(t,Oe.HTML);break}case T.HR:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop(),e._appendElement(t,Oe.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:{Vu(e,t);break}}}function fMe(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:{zb(e,t);break}}}function sNt(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)):gMe(e,t);}function lNt(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)):fMe(e,t);}function cNt(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:{Vu(e,t);break}case T.CAPTION:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:{e.tmplInsertionModeStack[0]=V.IN_TABLE,e.insertionMode=V.IN_TABLE,sE(e,t);break}case T.COL:{e.tmplInsertionModeStack[0]=V.IN_COLUMN_GROUP,e.insertionMode=V.IN_COLUMN_GROUP,x4(e,t);break}case T.TR:{e.tmplInsertionModeStack[0]=V.IN_TABLE_BODY,e.insertionMode=V.IN_TABLE_BODY,uU(e,t);break}case T.TD:case T.TH:{e.tmplInsertionModeStack[0]=V.IN_ROW,e.insertionMode=V.IN_ROW,dU(e,t);break}default:e.tmplInsertionModeStack[0]=V.IN_BODY,e.insertionMode=V.IN_BODY,Wa(e,t);}}function uNt(e,t){t.tagID===T.TEMPLATE&&zb(e,t);}function yMe(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):I4(e,t);}function dNt(e,t){t.tagID===T.HTML?Wa(e,t):sU(e,t);}function bMe(e,t){var o;if(t.tagID===T.HTML){if(e.fragmentContext||(e.insertionMode=V.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 sU(e,t);}function sU(e,t){e.insertionMode=V.IN_BODY,lU(e,t);}function mNt(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.FRAMESET:{e._insertElement(t,Oe.HTML);break}case T.FRAME:{e._appendElement(t,Oe.HTML),t.ackSelfClosing=true;break}case T.NOFRAMES:{Vu(e,t);break}}}function pNt(e,t){t.tagID===T.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==T.FRAMESET&&(e.insertionMode=V.AFTER_FRAMESET));}function hNt(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.NOFRAMES:{Vu(e,t);break}}}function gNt(e,t){t.tagID===T.HTML&&(e.insertionMode=V.AFTER_AFTER_FRAMESET);}function fNt(e,t){t.tagID===T.HTML?Wa(e,t):iU(e,t);}function iU(e,t){e.insertionMode=V.IN_BODY,lU(e,t);}function yNt(e,t){switch(t.tagID){case T.HTML:{Wa(e,t);break}case T.NOFRAMES:{Vu(e,t);break}}}function bNt(e,t){t.chars=Jn,e._insertCharacters(t);}function SNt(e,t){e._insertCharacters(t),e.framesetOk=false;}function SMe(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==Oe.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop();}function TNt(e,t){if(Xke(t))SMe(e),e._startTagOutsideForeignContent(t);else {let o=e._getAdjustedCurrentElement(),n=e.treeAdapter.getNamespaceURI(o);n===Oe.MATHML?v4(t):n===Oe.SVG&&(Qke(t),A4(t)),rU(t),t.selfClosing?e._appendElement(t,n):e._insertElement(t,n),t.ackSelfClosing=true;}}function vNt(e,t){if(t.tagID===T.P||t.tagID===T.BR){SMe(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)===Oe.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([se.AREA,se.BASE,se.BASEFONT,se.BGSOUND,se.BR,se.COL,se.EMBED,se.FRAME,se.HR,se.IMG,se.INPUT,se.KEYGEN,se.LINK,se.META,se.PARAM,se.SOURCE,se.TRACK,se.WBR]);function TMe(e,t,o){typeof e=="string"&&(o=t,t=e,e=null);let n=Xx.getFragmentParser(e,o);return n.tokenizer.write(t,true),n.getFragment()}var ANt=5e3,cE=1024;function lE(e){return typeof e.tagName=="string"&&Array.isArray(e.attrs)}function mU(e){return e.nodeName==="#text"}function pU(e,t){let o=TMe(e),n={nodesLeft:ANt};for(let a of o.childNodes)if(lE(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(lE(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 ENt=new Set(["html","head","meta","link","template","script","style","noscript","path","br","polygon","defs"]),wNt=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 RNt(e,t){return wNt.has(t)?true:e.attrs.some(({name:o})=>b4.has(o.toLowerCase()))}function vMe(e,t){if(t.nodesLeft<=0)return;let o=e.tagName.toLowerCase();if(ENt.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(mU(c)){let u=c.value;if(u&&u.trim().length>0){let d=u.length>cE?u.slice(0,cE):u;i=i===void 0?d:`${i} ${d}`;}}else if(lE(c)){let u=vMe(c,t);u!==void 0&&a.push(u);}}let s=o==="body"||RNt(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 _4(e){return pU(e,vMe)}function AMe(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(mU(l)){let c=l.value;if(c&&c.trim().length>0){let u=c.length>cE?c.slice(0,cE):c;i=i===void 0?u:`${i} ${u}`;}}else if(lE(l)){let c=AMe(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 P4(e){return pU(e,AMe)}var CNt=new Set(["PRESET_ACTION","AI_ACTION_DYNAMIC"]),jb=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(`${ds}/${o}.jpeg`)}async getHtmlSnapshot(t,o){return this.diskStorage.readFile(`${ds}/${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))go.increment("test_step_execution",o,[`type:${t}`,"platform:browser","executor:cli",`orgId:${this.orgId}`]);}flushResults(t){return 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 O4(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:pQ(t.status),finishedAt:t.finishedAt}))),this.sendFinalizedStepStats());}};function INt(e){switch(e){case "SUCCESS":return "PASSED";case "FAILED":return "FAILED";case "CANCELLED":return "CANCELLED";case "RUNNING":return "RUNNING";case "IDLE":return "PENDING";default:return ot(e)}}function hU(e){return e.some(t=>t.status==="FAILED")?"FAILED":e.some(t=>t.status==="CANCELLED")?"CANCELLED":"RUNNING"}var O4=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 cm({storeTraceAsset:u=>this.storeTraceAsset(u)}),lm.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:`${ds}/${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:`${ds}/${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&&CNt.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";go.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:`${ds}/${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:INt(t.status),finishedAt:t.finishedAt})).concat(this.pendingAssetWrites)));}recordStepDuration(t,o,n){nk({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:hU(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:Ol(r.steps)})),elseSteps:t.elseSteps?Ol(t.elseSteps):void 0,status:hU(o),startedAt:this.metadata.startedAt,finishedAt:new Date,results:o});case "WHILE_LOOP":return o=>({...t,steps:Ol(t.steps),status:hU(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:hU(o),startedAt:this.metadata.startedAt,finishedAt:new Date,results:o});default:return ot(t)}}async startSubSteps(){let t=this.getResultBuilderForCurrentStep(),o=new jb(this.orgId,this.testId,this.testName,this.diskStorage,n=>{let r=t(n);return this.parentFlushResults(r)});return this.children.push(o),o}};var gU=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(ds),this.harWriter=new lb(this.diskStorage.createFileStream(`${ds}/har-pages.log`),this.diskStorage.createFileStream(`${ds}/har-entries.log`)),this.resourceUsageStream=this.diskStorage.createFileStream(`${ds}/resource-usage.ndjson`),this.resourceUsageSampler=qoe({keepSamples:false,onSample:c=>{this.resourceUsageStream.write(`${JSON.stringify(c)}
4612
4612
  `),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;finishPromise;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 bn__default.resolve(this.diskStorage.cwd(),ds)}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(K8)),this.uiStatesStream.write(`${JSON.stringify(t)}
4613
4613
  `));}buildAppGraphSink(){return ({html:t,archivalHtml:o,url:n,stepId:r,parentStepIdChain:i,logger:a})=>{let s=VB(t),l=s===this.previousHtmlByteHash?this.previousFingerprint:void 0;if(!l){try{l=qB({url:n,dom:P4(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=VB(t);if(i===this.previousArchivalHtmlByteHash)return this.previousArchivalFingerprint;try{let a=qB({url:o,dom:_4(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 aq;i.addLocalFolder(r,void 0,a=>a!==".DS_Store"),this.diskStorage.storeFile({name:`${ds}/${v$}`,contents:i.toBuffer()}),n.info({browserCrashZipName:v$},"Attached browser crash ZIP");}writeMetadata(t){this.diskStorage.storeFile({name:ft,contents:JSON.stringify(t,null,2)});}flushResults(t){let{results:o,beforeResults:n,afterResults:r}=$G({results:t?.mainResults??this.mainResults,beforeResults:t?.beforeResults??this.beforeResults,afterResults:t?.afterResults??this.afterResults},Ca);return this.writeMetadata({...this.metadata,results:o,beforeResults:n,afterResults:r}),this.reportProgress(n,o,r),this.harWriter.waitForPendingWrites()}reportProgress(t,o,n){try{this.progressHandle.reportCompletedSteps(Mk(t??[])+Mk(o)+Mk(n??[]));}catch(r){Ca.warn({err:r},"Failed to report run progress");}}finish(t){return this.finishPromise?(t.logger.info({runAttemptId:this.runAttemptId,callerStatus:t.result.status},"CliRunAttemptTracer.finish() called while already finishing \u2014 waiting for the original finalization"),this.finishPromise):(this.finished=true,this.finishPromise=this.finishAttempt(t),this.finishPromise)}async finishAttempt(t){let{logger:o,result:n}=t,{results:r,beforeResults:i,afterResults:a}=$G({...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"&&(wre(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 jb(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 jb(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 jb(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(`${ds}/${o}.jpeg`)}async getHtmlSnapshot(t,o){return this.diskStorage.readFile(`${ds}/${o}.html`)?.toString()}};var fU=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 {[eCe]: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:_t,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:ft,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=_t,this.diskStorage.storeFile({name:ft,contents:JSON.stringify(this.metadata,null,2)});let o=this.diskStorage.cd(`attempts/${this.metadata.attempts}`),n={id:t,schemaVersion:_t,runAttemptSchemaVersion:yoe,startedAt:new Date,status:"RUNNING"};o.storeFile({name:ft,contents:JSON.stringify(n,null,2)});let r=new gU(this.orgId,this.testId,this.testName,t,n,o,this.recordVideo,this.progressHandle);return this.children.push(r),r}};var Hb=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:El.CLI,startedAt:new Date,status:"RUNNING",cliVersion:Kt,labels:l??[],ai:u,browser:d},y=new NC(a,h,g);return g&&y.storeFile({name:ft,contents:JSON.stringify(f,null,2)}),new e(r,i,f,y,c??false,g,p??new kk(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 pe({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:ft,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:Kt,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:ft,contents:JSON.stringify(n,null,2)});let r=this.progressWriter.registerRun({runId:t.runId,testId:t.testId,testName:t.testName,directory:t.directory,totalSteps:Cre([...t.originalSteps.beforeSteps??[],...t.originalSteps.steps,...t.originalSteps.afterSteps??[]])}),i=new fU(this.orgId,t.testId,t.testName,t.runId,n,o,t.recordVideoOverride??this.recordVideo,r);return this.children.push(i),i}};async function EMe(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 yU=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 e_="__run-worker";function PNt(){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 k4=class{constructor(t){this.emit=t;}registerRun(t){return this.emit({type:"progressRegister",params:t}),new GR(this,t.runId)}updateRun(t,o){this.emit({type:"progressUpdate",runId:t,update:o});}finish(){}getRunStatusCounts(){}};async function M4(){let e=process.send?.bind(process);e||(C.error("Worker process started without an IPC channel."),We(ze.Failure));let t=f=>new Promise(y=>e(f,void 0,void 0,()=>y())),o=PNt(),n=[],r=await new Promise((f,y)=>{let b=false,S=()=>{process.off("message",R),process.off("disconnect",w);},A=O=>{b||(b=true,S(),y(O));},E=O=>{b||(b=true,S(),f(O));},R=O=>{if(O.type==="init"){E(O.config);return}n.push(O);},w=()=>{A(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 vc({serviceName:"cli",enabled:true});let l=new Bt({baseUrl:r.serverUrl??"",apiKey:r.apiKey??"",logger:Te,mode:"runner",runner:"test-runner"}),c=new kr(r.project.config.ai?.agentConfig,{baseUrl:l.baseUrl,apiKey:l.apiKey,logger:Te,mode:"runner",runner:"test-runner"}),u=await Hb.start({orgId:r.orgId,runGroupId:r.runGroupId,projectName:r.project.config.name,relativeProjectDir:await yv(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 k4(f=>void t(f)),logger:Te}),d=Te,m=d.child(u.loggerBindings||{}),p=new yU(f=>void t(f));i=new iE({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:H(f)})});for(let f of a)s(f);let h=await aE({cancel:f=>i.cancel(f),run:()=>i.run()});process.off("message",s);let g=h.cancelled?"CANCELLED":LP(h.runResults);await u.finish({logger:m,status:g}),await t({type:"done",cancelledRuns:[...h.cancelledRunsById.values()],cancelled:h.cancelled,cancellationReason:h.cancellationReason}),We(ze.Success);}var kNt=3e4,MNt=5e3,LNt="MOMENTIC_WORKER_PROCESSES";function wMe({parallel:e,testCount:t,override:o=process.env[LNt]}){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 NNt(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 L4=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=NNt(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,[e_],{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");},MNt),t.forceKillTimer.unref());},kNt),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 RMe(e){let t=new L4({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"),aE({timeoutMinutes:e.timeoutMinutes,cancel:o=>t.cancel(o),run:()=>t.start()})}async function F4({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 FNt({resources:[o],interval:2500,timeout:r*1e3,headers:{Accept:"*/*"},followRedirect:true,verbose:false,log:i,strictSSL:false,proxy:s});}async function IMe(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:A,labels:E,reporterDir:R=Vde,outputDir:w=Cu,uploadResults:O=false,waitOnTimeout:I=60,parallel:_,shardIndex:P=1,shardCount:M=1,regenerateGoldenFiles:B,gitMetadata:k,cacheOptions:$,ignoreQuarantine:Z,skipQuarantined:z,onlyQuarantined:Y,runGroupId:N,recordVideo:ae,timeoutMinutes:Q,workers:ne,browserTypeOverride:K,remoteBrowserOverride:ue,aiSelect:Se=false,aiSelectBase:xe,aiSelectBudget:De,aiSelectDryRun:lt=false,aiSelectPrompts:W=[],shareDiagnostics:ee}=e,X=Se||lt,Ie=X&&!r;lt||(a&&(o.info({orgId:h},`Executing start command: ${a}`),await PB(a,false)),s&&await F4({logger:o,orgId:h,waitOn:s,waitOnProxy:l,waitOnTimeout:I}));let be=new kr(u.config.ai?.agentConfig,{baseUrl:c.baseUrl,apiKey:c.apiKey,logger:o,mode:"runner",runner:"test-runner"}),ie=null,Ve=null,Tt=[],Yt=[],tt={},Qe,Et=[];if(r)Qe=r.map(Ut=>({inputs:void 0,testDefinition:Ut.testDefinition,snapshot:Ut}));else {let Ut=await it(u);Et=await yf({tests:n,momenticFiles:Ut,yes:i,project:u,include:S,exclude:A,labels:E,logger:C}),Ie&&C.log(`Momentic CLI v${Kt}`);let or=await UNt({envName:p,aiSelect:X,aiSelectBase:xe,aiSelectBudget:De,aiSelectDryRun:lt,aiSelectPrompts:W,allTestDefinitions:Et,client:c,gitMetadata:k,logger:o,orgId:h,project:u});ie=or.selectionPlanResult,Ve=or.aiSelectMetadata;let qa=or.testDefinitions;tt=await EMe(o,c,Z);let Ku=JOe({testDefinitions:qa,quarantinedTestsMetadata:tt,onlyQuarantined:Y,skipQuarantined:z,shardIndex:P});Tt=Ku.testsToSkip,Yt=Ku.quarantinedTestsToSkip,Qe=XOe({testsToRun:Ku.testsToRun,quarantinedTestsToRun:Ku.quarantinedTestsToRun,quarantinedTestsMetadata:tt,testInputMatrix:b});}let an=Une({items:Qe,shardIndex:P,shardCount:M,sortKey:Ut=>`${Ut.testDefinition.fullFilePath}:${Ut.inputIndex??0}`}),pn=an.some(Ut=>xw(Ut.testDefinition));pn&&jR(),o.info({tests:an.length,shardCount:M,shardIndex:P,parallel:_},"Running local tests");let pl=an.filter(Ut=>Ut.quarantined).length,Yl=an.length-pl,qi=wMe({parallel:_,testCount:an.length,override:ne!==void 0?String(ne):void 0}),ga=[...Tt.map(Ut=>({relativeFilePath:Ut.relativeFilePath,skipped:{kind:"disabled"}})),...Yt.map(Ut=>({relativeFilePath:Ut.relativeFilePath,quarantined:true,skipped:{kind:"quarantined",reason:tt[Ut.id]?.quarantinedReason??void 0}}))],pr=et(),Jl=ue??u.config.browser?.remoteBrowser??false;C.log(Npe({cliName:Ie?void 0:"Momentic CLI",cliVersion:Ie?void 0:Kt,parallel:_,workerCount:qi,timeoutMinutes:Q,runningCount:Yl,quarantinedCount:pl,skippedCount:ga.length,shardIndex:P,shardCount:M},pr));let{live:hl,files:sn,network:Xo}=xhe({reporter:e.reporter,screen:pr});C.log(""),hl.onBegin({parallel:_,shardCount:M,shardIndex:P,tests:[...ga,...an.map(Ut=>({relativeFilePath:Ut.testDefinition.relativeFilePath,inputIndex:Ut.inputIndex,quarantined:Ut.quarantined}))]});let ro=[],Xl=new Map,qu=false,U,_e=new Date,Ot=async()=>{let Ut=c.getAppUrl(),or=[...Xl.values(),...ro.filter(ln=>!ln.runId||!Xl.has(ln.runId))].map(ln=>ln.status==="CANCELLED"&&!ln.cancellationReason?{...ln,cancellationReason:U}:ln),qa=V$(or),Ku=or.filter(ln=>ln.status==="PASSED"&&!!ln.failureRecoveryDetails?.attempts).length,f_={results:or,startTime:_e.getTime(),getPath:ln=>ln.filePath,getUrl:ln=>ln.runId?`${Ut}/runs/${ln.runId}`:void 0,getFailureSummary:ln=>ln.failureReason?Ju({failureReason:ln.failureReason,classification:ln.failureDetails?.classification,manualClassification:ln.failureDetails?.manualClassification}).title??ln.failureReason:"Test failed",printFailureBody:sk,getCancellationReason:ln=>ln.cancellationReason,recoveredCount:Ku,skippedCount:ga.length,videoRecordingActive:(!!ae||pn)&&Jl};if(hl.onEnd(f_),W$(f_),nhe({errorMessages:or.map(ln=>ln.failureDetails?.errorMessage),doctorCommand:"`npx momentic doctor`"}),C.log(""),O){let ln=await fo({text:"Uploading to Momentic\u2026",screen:pr},()=>pe({name:"file-storage.upload_test_outputs",serviceName:"file-storage",fn:()=>LC({client:c,resultsPath:w})}));ln.success?(C.success("Uploaded to Momentic."),C.dimmed(` ${lr(ln.runGroupUrl,pr)}`)):(C.error(`Upload failed: ${ln.error}.`),C.success(`Saved to ${w}/`),C.dimmed(` upload: npx momentic results upload ${w}`),C.dimmed(` view: npx momentic results view ${w}`)),wm({type:"cli:results_uploaded",test_platform:"web",success:ln.success});}else if(C.success(`Saved to ${w}/`),C.dimmed(` upload: npx momentic results upload ${w}`),C.dimmed(` view: npx momentic results view ${w}`),M>1||P>1){let y_=vp.dirname(w)||".";C.dimmed(` merge shards: npx momentic results merge ${y_} --output-dir ${vp.join(y_,"merged")}`);}else {let y_=`${Ut}/run-groups/${N}`;C.dimmed(` after upload: ${lr(y_,pr)}`);}return qa},Jt=await Hb.start({suiteName:t,projectName:u.config.name,relativeProjectDir:await yv(u.rootDir),orgId:h,runGroupId:N,outputDir:w,gitMetadata:k,labels:E,recordVideo:ae,ai:u.config.ai,browser:u.config.browser,logger:o});Ve&&Jt.setAiSelectMetadata(Ve);let Ri=o.child(Jt.loggerBindings||{}),Ql=an.map(Ut=>({...Ut,runId:randomUUID()}));if(qi>1){let Ut=await RMe({engineTests:Ql,parallel:_,workerCount:qi,timeoutMinutes:Q,reporter:hl,logger:Ri,runGroupTracer:Jt,baseConfig:{project:u,serverUrl:c.baseUrl,apiKey:c.apiKey,orgId:h,userId:g,runGroupId:N,devicePixelRatio:f,outputDir:w,retriesOverride:d,urlOverride:m,envName:p,customHeaders:y,regenerateGoldenFiles:B,gitMetadata:k,cacheOptions:$,browserTypeOverride:K,remoteBrowserOverride:ue,recordVideo:ae,shareDiagnostics:ee,runParallel:_,workerCount:qi,remoteBrowser:Jl}});ro.push(...Ut.runResults);for(let[or,qa]of Ut.cancelledRunsById)Xl.set(or,qa);qu=Ut.cancelled,U=Ut.cancellationReason;}else {let Ut=new iE({testsToRun:Ql,parallel:_,reporter:hl,runGroupTracer:Jt,runGroupLogger:Ri,logger:o,project:u,client:c,generator:be,orgId:h,userId:g,devicePixelRatio:f,outputDir:w,retriesOverride:d,urlOverride:m,envName:p,customHeaders:y,regenerateGoldenFiles:B,gitMetadata:k,cacheOptions:$,browserTypeOverride:K,remoteBrowserOverride:ue,recordVideo:ae,traceMetadata:{runGroupId:N,parallel:_,workerCount:qi,workerIndex:0,remoteBrowser:Jl}}),or=await aE({timeoutMinutes:Q,cancel:qa=>Ut.cancel(qa),run:()=>Ut.run()});ro.push(...or.runResults);for(let[qa,Ku]of or.cancelledRunsById)Xl.set(qa,Ku);qu=or.cancelled,U=or.cancellationReason;}let xm=qu?"CANCELLED":LP(ro,{onlyQuarantined:Y});await Jt.finish({logger:Ri,status:xm}),wm({type:"cli:run_completed",test_platform:"web",status:xm,test_count:ro.length,duration_ms:Date.now()-_e.getTime()});for(let Ut of sn)await pe({name:"reporting.write_standard_report",serviceName:"reporting",fn:()=>NOe({logger:Ri,callbacks:{createDebugDataReaderForRunAttempt:(or,qa)=>new OL(w,or,qa)},format:Ut,params:{projectConfigPath:u.configFilePath,suiteName:t??u.config.name,startedAt:_e,finishedAt:new Date,testsToSkip:Tt,quarantinedTestsToSkip:Yt,quarantinedTestsMetadata:tt},runs:ro,folder:R})});if(Xo.includes("newrelic")){let Ut=u.config.reporting?.newrelic;if(!Ut)C.error("The newrelic reporter requires a reporting.newrelic block in momentic.config.yaml.");else try{await pe({name:"reporting.send_new_relic_report",serviceName:"reporting",fn:()=>c4({logger:C,config:{...Ut,accountId:Ll(Ut.accountId),licenseKey:Ut.licenseKey?Ll(Ut.licenseKey):void 0,attributes:Ut.attributes?Object.fromEntries(Object.entries(Ut.attributes).map(([or,qa])=>[or,Ll(qa)])):void 0},params:{projectConfigPath:u.configFilePath,suiteName:t??u.config.name,startedAt:_e,finishedAt:new Date,testsToSkip:Tt,quarantinedTestsToSkip:Yt,quarantinedTestsMetadata:tt},runs:ro,runGroupId:N,envName:p,appUrl:c.getAppUrl(),gitMetadata:k})});}catch(or){C.error(`Failed to send report to New Relic: ${H(or)}`);}}let SDe=await Ot();if(BNt(),ie){let Ut=k.githubRepository??k.gitOriginUrl??"",or=ie.diff?.headSha??"";if(Ut.length>0&&or.length>0){let qa=ie.kind==="ready"?ie.plan.selectedTests.map(f_=>f_.testId):[],Ku=ie.kind==="ready"?ie.planId:null;o.info({event:"ai_select.run_outcome",repository:Ut,headSha:or,runGroupId:N,planId:Ku,mode:lt?"SHADOW":"SELECTED",totalCandidates:Et.length,selectedCount:qa.length,excludedCount:0,unobservedRunCount:Ve?.forcedTests.length??0},"ai-select run outcome");}}return SDe}function BNt(){if(!Nu.isEnabled()||Nu.getTotalRecords()===0)return;let e=Nu.getSummary(),t=Nu.getTotalRecords(),o=e.reduce((n,r)=>n+r.totalMs,0);C.log(""),C.dimmed(`CDP Performance Summary (${t} calls, ${t_(o)} total)`),C.dimmed(CMe("Method",40)+Cm("Count",8)+Cm("Total",12)+Cm("Avg",12)+Cm("Min",12)+Cm("Max",12));for(let n of e)C.dimmed(CMe(n.method,40)+Cm(String(n.count),8)+Cm(t_(n.totalMs),12)+Cm(t_(n.avgMs),12)+Cm(t_(n.minMs),12)+Cm(t_(n.maxMs),12));C.log("");}function t_(e){return e>=1e3?`${(e/1e3).toFixed(2)}s`:`${e.toFixed(1)}ms`}async function UNt(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 Bt(h),f=new kr(d.config.ai?.agentConfig,h),y=await CL({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 A;try{A=await i4({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:Fx(i),environmentName:e.envName,changeRequestDescription:y,candidateTests:a.map(I=>({testPath:I.relativeFilePath.split(vp.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: ${H(I)}.`,diff:null},P=N4({selectionPlanResult:_,aiSelectDryRun:r,totalCandidates:a.length,selectedCount:a.length,forcedTests:[]});return D4(P),{selectionPlanResult:_,aiSelectMetadata:P,testDefinitions:a}}let E=A.kind==="ready"&&A.diff?_x({allTestDefinitions:a,changedFiles:A.diff.changedFiles,repoRoot:A.diff.repoRoot,projectRoot:d.rootDir??process.cwd()}):[],R=A.kind==="ready"?zNt(a,A.plan.selectedTests,E,c):{tests:[],planMatchedCount:0};if(A.kind==="ready"&&!r&&a.length>0&&R.tests.length===0&&A.plan.selectedTests.length>0){c.warn({planId:A.planId,planSize:A.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:A.diff},_=N4({selectionPlanResult:I,aiSelectDryRun:r,totalCandidates:a.length,selectedCount:a.length,forcedTests:E});return D4(_),{selectionPlanResult:I,aiSelectMetadata:_,testDefinitions:a}}let w=a;A.kind==="ready"&&!r?w=R.tests:A.kind==="run-none"&&!r&&(w=[]);let O=N4({selectionPlanResult:A,aiSelectDryRun:r,totalCandidates:a.length,selectedCount:R.planMatchedCount,forcedTests:E});return D4(O),r&&We(ze.Success),{selectionPlanResult:A,aiSelectMetadata:O,testDefinitions:w}}function N4(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 D4(e){let t=et(),o=nt(t),n=[],r=i=>da({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:ot(e.mode);}n.push(""),C.log(n.join(`
4614
4614
  `));}function zNt(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(vp.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 CMe(e,t){return e.length>t?e.substring(0,t-1)+"\u2026":e+" ".repeat(t-e.length)}function Cm(e,t){return e.length>=t?e:" ".repeat(t-e.length)+e}var xMe=30,GNt=1e3,SU=32;function PMe(e){let t=new Set([...e.recoveredPromotedRunIds??[],...e.quarantinedSelectedRunIds??[]]);return e.selectedForHealing.filter(o=>!t.has(o.runId))}function OMe(e){return PMe(e).length+e.failed.length}function kMe(e,t){return t?aJ({failureCount:OMe(e),totalCount:VNt(e)}):{withinBudget:true}}function VNt(e){return OMe(e)+(e.quarantinedSelectedRunIds??[]).length+e.quarantined.failed.length+e.passed.length+e.recovered.length+e.quarantined.passed.length}function uE(){return {selectedForHealing:[],recovered:[],passed:[],failed:[],quarantined:{passed:[],failed:[]}}}async function MMe({resultsDir:e,excludePatterns:t,...o}){let n=bn__default.resolve(e);await Wu("load_target");let r=await pe({name:"heal.load_target",attributes:{"momentic.heal_target_kind":"results"},fn:async()=>KNt({resultsDir:n,logger:o.logger})}),{healableFailures:i,triageInputSummary:a}=EU({runs:r,excludePatterns:t,skipQuarantined:o.skipQuarantined,ignoreQuarantine:o.ignoreQuarantine}),s=o.agentOutputStream?new Ua(o.agentOutputStream):void 0,l=mE(o);try{let{recoveryAssessments:c,permanentRecoveryCandidates:u}=await vU({candidates:r,excludePatterns:t,triageInputSummary:a,isCompleteRunGroup:!0,outputDir:n,output:s,timelineRecorder:l,shared:o}),d=[...i,...u];return {...await dE({...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 LMe({runGroupId:e,excludePatterns:t,...o}){await Wu("load_target");let n=await pe({name:"heal.load_target",attributes:{"momentic.heal_target_kind":"run-group"},fn:()=>B4({agentOutputStream:o.agentOutputStream,text:`Loading run group ${e}...`,fn:()=>qNt({apiClient:o.apiClient,logger:o.logger,runGroupId:e})})}),{healableFailures:r,triageInputSummary:i}=EU({runs:n,excludePatterns:t,skipQuarantined:o.skipQuarantined,ignoreQuarantine:o.ignoreQuarantine}),a=o.agentOutputStream?new Ua(o.agentOutputStream):void 0,s=mE(o);try{let{recoveryAssessments:l,permanentRecoveryCandidates:c}=await vU({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 dE({...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 NMe({runIds:e,excludePatterns:t,...o}){await Wu("load_target");let n=await pe({name:"heal.load_target",attributes:{"momentic.heal_target_kind":"run","momentic.run_count":e.length},fn:()=>B4({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 de(`Run ${c} was not found. Check the run ID and that your API key belongs to the same organization.`);return AU({run:u,logger:o.logger,scopeLabel:`run ${c}`})}))})}),{healableFailures:r,triageInputSummary:i}=EU({runs:n,excludePatterns:t,skipQuarantined:o.skipQuarantined,ignoreQuarantine:o.ignoreQuarantine}),a=e.length===1?`run ${e[0]}`:`${e.length} runs`,s=o.agentOutputStream?new Ua(o.agentOutputStream):void 0,l=mE(o);try{let{recoveryAssessments:c,permanentRecoveryCandidates:u}=await vU({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 dE({...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 DMe({gitCommitSha:e,excludePatterns:t,...o}){await Wu("load_target");let r=(await pe({name:"heal.load_target",attributes:{"momentic.heal_target_kind":"commit"},fn:()=>B4({agentOutputStream:o.agentOutputStream,text:`Loading runs for commit ${e}...`,fn:()=>o.apiClient.getRunsByCommit(e)})})).map(c=>AU({run:c,logger:o.logger,scopeLabel:`commit ${e}`})),{healableFailures:i,triageInputSummary:a}=EU({runs:r,excludePatterns:t,skipQuarantined:o.skipQuarantined,ignoreQuarantine:o.ignoreQuarantine}),s=o.agentOutputStream?new Ua(o.agentOutputStream):void 0,l=mE(o);try{let{recoveryAssessments:c,permanentRecoveryCandidates:u}=await vU({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 dE({...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 FMe({output:e,generator:t,logger:o,serverId:n,dryRun:r,categoryDefinitions:i,healingConfig:a,abortSignal:s}){if(e)return N_e({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 BMe({resultsDir:e,summary:t}){let o=bn__default.join(bn__default.resolve(e),ft),n=Sc.parse(JSON.parse(mn__default.readFileSync(o,"utf-8")));mn__default.writeFileSync(o,JSON.stringify({...n,healRiskSummary:t},null,2));}async function vU({candidates:e,excludePatterns:t,triageInputSummary:o,isCompleteRunGroup:n,outputDir:r,output:i,timelineRecorder:a,shared:s}){if(!kMe(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)&&!$Me({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 Wu("recovery_assessment");let u;try{u=await pe({name:"heal.recovery_assessment",attributes:{"momentic.recovery_run_count":c.length},fn:()=>B_e({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 dE({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:A,parallel:E,resolveGitMetadataForCache:R,resolveGitMetadata:w,source:O,sessionManager:I,dryRun:_,jsonOutput:P,abortController:M,healingAbortSignal:B,prepareCheckoutForHealing:k,healingConfig:$,reclassifyContradictions:Z,output:z,timelineRecorder:Y,isCompleteRunGroup:N}){if(B.throwIfAborted(),i!==void 0&&e.length>i)return {...TU({triageInputSummary:t,err:new Error(`Found ${e.length} healing candidate${e.length===1?"":"s"}, which exceeds the configured limit of ${i}.`)}),...Sf(Y)};let ae=kMe(t,N);if(!ae.withinBudget)return C.warn(ae.reason??"Skipping AI triage for this run group."),{heals:[],bucketingIterations:[],existingFixes:[],triageInputSummary:{...t,declinedForOutage:PMe(t)},healPatches:[],...Sf(Y)};if(e.length===0)return C.info(n),{heals:[],bucketingIterations:[],existingFixes:[],triageInputSummary:t,healPatches:[],...Sf(Y)};let Q=et();await Wu("resolve_git_cache_metadata");let ne=await pe({name:"heal.resolve_git_cache_metadata",fn:()=>P?R():fo({text:"Resolving git cache context...",screen:Q},R)});if(c.info({gitCacheMetadata:ne},"Got local git cache metadata"),!P){let Qe=nt(Q),Et=[`${E} ${E===1?"worker":"workers"}`];A!==void 0&&A>0&&Et.push(`timeout=${A}m`);let an=[{label:"source",value:O}];ne.gitBranchName&&an.push({label:"branch",value:ne.gitBranchName});let pn=[`Healing ${e.length} ${e.length===1?"test":"tests"}`,...Et].join(Qe.separator);C.log(`Momentic CLI v${Kt}
@@ -4982,4 +4982,4 @@ smol-toml/dist/index.js:
4982
4982
  */
4983
4983
  //# sourceMappingURL=out.js.map
4984
4984
  //# sourceMappingURL=cli.js.map
4985
- //# debugId=46992051-dbb9-55ae-9b49-3e50a6c9cf59
4985
+ //# debugId=15fe00cb-0d91-5b70-87cd-9fa7077b6721