momentic 3.56.1 → 3.56.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +12 -12
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/bin/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
3
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="93f85515-0b13-50f5-9019-c9d17d973be2")}catch(e){}}();
|
|
4
4
|
import * as oo from 'fs';
|
|
5
5
|
import oo__default, { statSync, mkdirSync, readFileSync, existsSync, readdir, readdirSync, createReadStream, writeFileSync, appendFileSync, rmSync, unlinkSync, renameSync } from 'fs';
|
|
6
6
|
import * as mo from 'path';
|
|
@@ -176,17 +176,17 @@ What the agent did: ${o}`:t}var wv=xa.extend({type:z$1.literal("AI_ACTION_DYNAMI
|
|
|
176
176
|
`)}logWithLevelHelper(t,n,...o){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)},s;Array.isArray(o[0])?(s=o[0],o=o.slice(1)):typeof o[0]=="object"&&!(o[0]instanceof Error)&&Object.entries(o[0]).length&&(s={...o[0],...this.logBindings},o=o.slice(1));let a=Jl.level===0,l=a&&t===50?"Error:":a&&t===40?"Warning:":"",c=[];if(l&&c.push(l),c.push(...o),i(n(...c)),s&&!Array.isArray(s)){let u=Object.entries(s);for(let[d,m]of u){let p=m;if(m instanceof Error){p=m.message,i(n(` ${d}:`,p)),i(n(" 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(n(` ${d}.${f}:`,y.message)),y.stack&&i(n(` ${d}.${f}.stack:`,y.stack));continue}if(typeof y=="object"&&y!==null){let S=this.indentMultiline(Gc(y,void 0,2)," ");i(n(` ${d}.${f}:`,S));continue}i(n(` ${d}.${f}:`,y));}}else typeof m=="object"?(p=Gc(m,void 0,2),p=this.indentMultiline(p),i(n(` ${d}:`,p))):i(n(` ${d}:`,p));}}else if(s)for(let u of s){let d=u;typeof u=="object"&&(d=Gc(u,void 0,2),d=d.split(`
|
|
177
177
|
`).map((m,p)=>p>0?` ${m}`:m).join(`
|
|
178
178
|
`)),i(" ",n(d));}}setMinLevel(t){typeof t=="string"?this.minLogLevel=tw[t]:this.minLogLevel=t;}setOutputStream(t){this.forcedStream=t;}log(...t){this.logWithLevel(30,Jl.reset,...t);}info(...t){this.logWithLevel(30,Jl.white,...t);}debug(...t){this.logWithLevel(20,Jl.dim,...t);}warn(...t){this.logWithLevel(40,Jl.yellow,...t);}error(...t){this.logWithLevel(50,Jl.red,...t);}success(...t){this.logWithLevel(30,Jl.green,...t);}dimmed(...t){this.logWithLevel(30,Jl.dim,...t);}underline(...t){this.logWithLevel(30,Jl.underline,...t);}bold(...t){this.logWithLevel(30,Jl.bold,...t);}grey(...t){this.logWithLevel(30,Jl.grey,...t);}child(t){let n=new e(this.minLogLevel,{...this.logBindings,...t});return n.forcedStream=this.forcedStream,n}async flush(){}bindings(){return this.logBindings}},qH=class{debug=()=>{};info=()=>{};warn=()=>{};error=()=>{};success=()=>{};dimmed=()=>{};underline=()=>{};bold=()=>{};grey=()=>{};child=()=>this;flush=async()=>{};bindings=()=>({})},bs=new qH,C=WH._internalSingleton(),K_={},KH=({logger:e,logKey:t,maxCount:n,intervalMs:o},r,i,...s)=>{let a=K_[t];a?clearTimeout(a.timer):(a={count:0,totalCount:0},K_[t]=a),a.totalCount++,a.count<n&&(a.count++,e.debug(r,i,...s)),a.timer=setTimeout(()=>{let l=K_[t];l?.totalCount!==l?.count&&e.debug({logKey:t,totalCount:l?.totalCount,count:l?.count},`Debug logs were rate-limited for ${t}`),delete K_[t];},o);};var Y5=1e4;var ub=jc.extend({browserType:z$1.enum(Hc).optional(),slowMoMs:z$1.number().optional().refine(e=>e===void 0||e<=Y5&&e>=-1,{message:`Slow motion must be between 0 and ${Y5} milliseconds`}),basicAuthorization:z$1.object({username:z$1.string().optional(),password:z$1.string().optional()}).optional(),geolocation:z$1.object({latitude:z$1.number().refine(e=>e>=-90&&e<=90,{message:"Latitude must be between -90 and 90 degrees"}),longitude:z$1.number().refine(e=>e>=-180&&e<=180,{message:"Longitude must be between -180 and 180 degrees"})}).optional(),disableJavaScript:z$1.boolean().optional(),locale:z$1.string().optional(),timezone:z$1.enum(x_).optional(),colorScheme:z$1.enum(["light","dark"]).optional()}),J5=["extraHeaders","basicAuthorization","localChromeExtensionPaths","proxy"],YH=z$1.object({useMemory:z$1.boolean().optional(),failureRecovery:z$1.boolean().optional().describe("undefined means inherit org settings")}),JH=YH.extend({disableAICaching:z$1.boolean().optional()}),F0e=z$1.object({viewport:vm.optional()}),Ks=F0e.extend(JH.shape).extend(ub.shape),Y_=z$1.object({cron:z$1.string().refine(e=>isValidCron(e),{error:"Invalid cron expression."}).default("0 0 */1 * *"),enabled:z$1.boolean().default(false),env:z$1.string().optional(),timeZone:z$1.string().default("America/Los_Angeles"),jobKey:z$1.string().optional()}),J_=z$1.object({onSuccess:z$1.boolean().default(false),failureMessage:z$1.string().optional(),onFailure:z$1.boolean().default(true),successMessage:z$1.string().optional()}),B0e=z$1.object({name:z$1.string(),required:z$1.boolean().optional(),defaultValue:z$1.string().describe("this is not optional because we need a value when the editor is first loaded")}),X5=B0e.array(),U0e=z$1.object({name:z$1.string(),value:z$1.string()}),X_=U0e.array(),Q5=z$1.object({name:z$1.string(),default:z$1.boolean().optional(),fixtures:LX.array().optional()});var Na=YH.extend({agentConfig:z$1.record(z$1.string(),z$1.string()).optional(),aiFailureAnalysis:z$1.boolean().optional(),classification:fJ.optional(),healing:RS.optional(),explore:Kx.optional(),select:F5.optional()}),H0e=z$1.object({cliOnly:z$1.boolean().optional(),moDefault:z$1.boolean().optional(),neverShowUsageBanner:z$1.boolean().optional(),hideInternalTraceInfo:z$1.boolean().optional(),bypassUsageLimits:z$1.boolean().optional()}),nw=z$1.object({aiActionShorthand:z$1.boolean().optional().describe("Serialize eligible multi-word AI action V3 goals as bare strings in simplified YAML."),fakerConstantSeed:z$1.boolean().optional(),isolateCachesByEnvironment:z$1.boolean().optional(),saveCacheOnCancel:z$1.boolean().optional()}),j0e=z$1.enum(["flaky_tests","low_test_coverage","frequent_bugs","fix_flaky_tests","migrate_tests","increase_test_coverage","catch_more_bugs"]),$0e=z$1.enum(["ios","android","web"]),G0e=z$1.enum(["selenium","playwright","cypress","puppeteer","maestro","appium","detox","manual_qa","nothing_yet","other"]),QH=z$1.enum(["advertisement","ai_search","google_search","hacker_news","linkedin","reddit","referral_from_customer","twitter_x","word_of_mouth","youtube","other"]),z0e=z$1.object({helpIntents:z$1.array(j0e).optional(),helpIntentOtherText:z$1.string().optional(),deviceTypeIntent:$0e.optional(),currentTestingTool:G0e.optional(),heardAboutSource:QH.optional(),heardAboutSourceOtherText:z$1.string().max(200).optional()}),V0e=z$1.object({discovery:z0e.optional(),needsToCompleteOnboarding:z$1.boolean().optional(),wizardCompletedAt:z$1.iso.datetime().optional()}),db=z$1.object({ai:Na.optional(),githubAppInstallationId:z$1.number().nullish(),githubAppSummaryMessageEnabled:z$1.boolean().nullish(),githubReleaseAppInstallationId:z$1.number().nullish(),gitlabAppAccessToken:z$1.string().nullish(),gitlabAppBaseUrl:z$1.string().nullish(),browser:pH.optional(),internal:H0e.optional(),advanced:nw.optional(),onboarding:V0e.optional()}),W0e=5;function Z5(e){let t=e,n=[];for(let o=0;o<W0e;o++){let r=db.safeParse(t);if(r.success)return n.length>0&&C.warn(`Ignoring cloud settings this version of the CLI does not support: ${n.join(", ")}. Please upgrade. Everything else was applied.`),r.data;let i=q0e(r.error.issues.map(l=>[...l.path]).filter(l=>l.length>0));if(i.length===0)break;let s=structuredClone(t),a=[...i].sort(K0e);for(let l of a)XH(s,l);if(JSON.stringify(s)===JSON.stringify(t)){for(let l of a)l.length>1&&XH(s,l.slice(0,-1));if(JSON.stringify(s)===JSON.stringify(t))break}n.push(...i.map(l=>l.join("."))),t=s;}return C.warn("Cloud settings could not be read by this version of the CLI. Please upgrade. Falling back to defaults."),db.parse({})}function q0e(e){return [...new Map(e.map(n=>[n.join("\0"),n])).values()]}function K0e(e,t){if(e.length!==t.length)return t.length-e.length;for(let n=e.length-1;n>=0;n--){let o=e[n],r=t[n];if(typeof o=="number"&&typeof r=="number"&&o!==r)return r-o}return 0}function XH(e,t){let[n,...o]=t;if(!(n===void 0||typeof e!="object"||e===null)){if(o.length===0){Array.isArray(e)&&typeof n=="number"?e.splice(n,1):delete e[n];return}XH(e[n],o);}}z$1.object({globalOverrides:z$1.record(z$1.string(),z$1.string()).optional(),agentConfig:z$1.record(z$1.string(),z$1.string()).optional()});z$1.record(z$1.string(),z$1.string()).nullish();var eQ="Evaluating run assertions",Q_=z$1.string();function ow(e){return (e.runAssertions?.length??0)>0}var Y0e=z$1.object({videoName:z$1.string(),startSeconds:z$1.number(),endSeconds:z$1.number().optional()}),ZH=z$1.discriminatedUnion("type",[z$1.object({type:z$1.literal("videoMoment"),moment:Y0e})]),ej=(r=>(r.PASSED="passed",r.FAILED="failed",r.SKIPPED="skipped",r.INCONCLUSIVE="inconclusive",r))(ej||{}),J0e=z$1.nativeEnum(ej),X0e=z$1.array(z$1.unknown()).default([]).transform(e=>e.flatMap(t=>{let n=ZH.safeParse(t);return n.success?[n.data]:[]})),Q0e=z$1.object({description:z$1.string(),status:J0e,reasoning:z$1.string(),evidence:X0e}),Z0e=z$1.object({attemptNumber:z$1.number(),evaluations:Q0e.array(),durationMs:z$1.number()});function tQ(e){let t=e.filter(n=>n.status==="failed");if(t.length!==0)return `Run assertion(s) not met: ${t.map(n=>n.description).join("; ")}`}var nQ=z$1.object({attempts:Z0e.array()}),eBe=/\[\[e(\d+)\]\]/g;function oQ(e){return [...e.matchAll(eBe)].map(t=>Number(t[1]))}var ml={WEBHOOK:"WEBHOOK",CRON:"CRON",MANUAL:"MANUAL",CLI:"CLI"},Ht=(a=>(a.PENDING="PENDING",a.RUNNING="RUNNING",a.PASSED="PASSED",a.FAILED="FAILED",a.CANCELLED="CANCELLED",a.RETRYING="RETRYING",a.WAITING_FOR_USER="WAITING_FOR_USER",a))(Ht||{});var mb=(s=>(s.NOT_ATTEMPTED="NOT_ATTEMPTED",s.PERM_HEAL_SUCCEEDED="PERM_HEAL_SUCCEEDED",s.PERM_HEAL_FAILED="PERM_HEAL_FAILED",s.PERM_HEAL_UNATTEMPTED="PERM_HEAL_UNATTEMPTED",s.PERM_HEAL_ON_SUCCESS_FAILED="PERM_HEAL_ON_SUCCESS_FAILED",s.PERM_HEAL_NOT_NEEDED="PERM_HEAL_NOT_NEEDED",s))(mb||{});var bf=z$1.enum(mb).default("NOT_ATTEMPTED"),Z_=(n=>(n.BEFORE_ALL="BEFORE_ALL",n.AFTER_ALL="AFTER_ALL",n))(Z_||{});var tBe=z$1.object({attempts:z$1.int().nonnegative()}),Fo=z$1.string().pipe(z$1.coerce.date()).or(z$1.date()),Ys=z$1.object({id:z$1.string(),runKey:z$1.string(),organizationId:z$1.string(),executionType:lh.optional().default("WEB"),createdAt:Fo,createdBy:z$1.string(),flake:z$1.boolean().nullish(),scheduledAt:Fo.or(z$1.null()),startedAt:Fo.or(z$1.null()),updatedAt:Fo.nullish(),finishedAt:Fo.or(z$1.null()),resolvedBaseUrl:z$1.string().nullish(),environmentName:z$1.string().nullish(),gitBranchName:z$1.string().nullish(),gitMainBranch:z$1.string().nullish(),githubRepository:z$1.string().nullish(),gitlabProjectPath:z$1.string().nullish(),labels:z$1.array(z$1.string()).optional(),gitOriginUrl:z$1.string().nullish(),gitCommitSha:z$1.string().nullish(),gitCommitShaShort:z$1.string().nullish(),gitCommitAuthorName:z$1.string().nullish(),gitCommitTimestamp:Fo.nullish(),gitCommitMessage:z$1.string().nullish(),schemaVersion:z$1.string().nullish(),cliVersion:z$1.string().nullish(),section:z$1.enum(Z_).nullish(),status:z$1.enum(Ht),healStatus:bf,healDetails:zX.nullish(),trigger:z$1.enum(ml),attempts:z$1.number(),runAttempts:z$1.array(z$1.object({id:z$1.string(),status:z$1.enum(Ht),startedAt:Fo.or(z$1.null()),finishedAt:Fo.or(z$1.null())})).optional(),videos:z$1.array(z$1.string()).optional(),failureReason:z$1.string().nullish(),failureDetails:RJ.nullish(),failureRecoveryDetails:tBe.nullish(),pipelineId:z$1.string().nullish(),resolvedInputs:z$1.record(z$1.string(),z$1.string()).nullish(),quarantined:z$1.boolean().nullish().default(false),quarantinedReason:z$1.string().nullish(),localTestId:z$1.string().nullish(),testId:z$1.string().nullish(),testName:z$1.string().nullish(),description:z$1.string().nullish(),directory:z$1.string().nullish(),test:z$1.object({name:z$1.string(),id:z$1.string()}).nullish().default(null),suiteId:z$1.string().nullish(),aiSettings:Na.nullish(),stepsSnapshot:z$1.array(z$1.record(z$1.string(),z$1.unknown().optional())).nullish(),beforeStepsSnapshot:z$1.array(z$1.record(z$1.string(),z$1.unknown().optional())).nullish(),afterStepsSnapshot:z$1.array(z$1.record(z$1.string(),z$1.unknown().optional())).nullish(),runAssertionResults:nQ.nullish()}),nBe={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},eP=Ys.pick({...nBe,test:true}),rQ=Ys.omit({failureReason:true,failureDetails:true,test:true}),tj=Ys.extend({stepsSnapshot:z$1.array(z$1.record(z$1.string(),z$1.unknown().optional())).nullish(),beforeStepsSnapshot:z$1.array(z$1.record(z$1.string(),z$1.unknown().optional())).nullish(),afterStepsSnapshot:z$1.array(z$1.record(z$1.string(),z$1.unknown().optional())).nullish(),resolvedInputs:z$1.record(z$1.string(),z$1.string()).nullish(),test:z$1.object({name:z$1.string(),id:z$1.string(),description:z$1.string().nullish(),baseUrl:z$1.string().nullish(),advanced:Ks.nullish()}).nullish()}).extend(BH.shape),iQ=e=>e.includes("PASSED")&&e.includes("FAILED");var oBe=z$1.object({region:z$1.enum(["US","EU"]).optional().describe("New Relic data center region. Defaults to US."),accountId:z$1.string().describe("New Relic account ID to send events to. Supports ${ENV_VAR} interpolation."),licenseKey:z$1.string().optional().describe("New Relic ingest license key. Supports ${ENV_VAR} interpolation. Defaults to the NEW_RELIC_LICENSE_KEY environment variable."),attributes:z$1.record(z$1.string(),z$1.string()).optional().describe("Static attributes (e.g. service, team) added to every event sent to New Relic. Values support ${ENV_VAR} interpolation.")}),sQ=z$1.object({newrelic:oBe.optional()}),rBe=z$1.object({category:z$1.string(),reasoning:z$1.string(),citations:z$1.array(ho).optional()}),iBe=z$1.object({testInputs:z$1.record(z$1.string(),z$1.string()).optional(),envName:z$1.string().optional(),urlOverride:z$1.string().optional()}),sBe=z$1.object({reason:z$1.string().optional(),message:z$1.string().optional()}),aBe=z$1.object({runId:z$1.string().optional(),testId:z$1.string(),testName:z$1.string(),filePath:z$1.string(),labels:z$1.array(z$1.string()).optional(),status:z$1.enum(Ht),startedAt:z$1.string(),finishedAt:z$1.string(),durationMs:z$1.number(),attempts:z$1.number(),quarantined:z$1.boolean(),recovered:z$1.boolean(),parameters:iBe.optional(),failure:sBe.nullable(),classification:rBe.nullable()}),lBe=z$1.object({testId:z$1.string(),testName:z$1.string(),filePath:z$1.string(),labels:z$1.array(z$1.string()).optional(),quarantined:z$1.boolean()}),cBe=z$1.object({total:z$1.number(),executed:z$1.number(),skipped:z$1.number(),passed:z$1.number(),failed:z$1.number(),cancelled:z$1.number(),quarantined:z$1.number(),recovered:z$1.number()}),aQ=z$1.object({version:z$1.literal(1),runGroup:z$1.object({startedAt:z$1.string(),finishedAt:z$1.string(),durationMs:z$1.number()}),summary:cBe,runs:z$1.array(aBe),skipped:z$1.array(lBe)});var lQ=z$1.enum(["error","warning","passing"]);var cQ=z$1.enum(["safe_to_merge","confirm_intended_change","investigate_regression","fix_test","resolve_infra","review_coverage"]),dBe=cQ.exclude(["review_coverage"]);var mBe="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 uQ=z$1.object({kind:cQ,detail:z$1.string().min(1).max(280)}),Tf=z$1.object({riskLevel:z$1.string(),headline:z$1.string().min(1).max(200).describe("One-sentence summary of what happened in this run. Plain text, no markdown."),overview:z$1.string().min(1).max(280).optional().describe("One plain-text sentence giving the bottom line of the run. No markdown."),summaryMarkdown:z$1.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:uQ.optional()}),dQ=Tf.extend({riskLevel:lQ.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$1.string().min(1).max(120).describe(mBe),overview:z$1.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$1.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:uQ.extend({kind:dBe.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$1.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 gBe=z$1.enum(["SELECTED","RUN_ALL","RUN_NONE","SHADOW"]),rw=z$1.object({mode:gBe,baseRef:z$1.string().nullable(),headSha:z$1.string(),planId:z$1.string().nullable(),totalCandidates:z$1.number().int().nonnegative(),selectedCount:z$1.number().int().nonnegative(),anchorSegmentIds:z$1.array(z$1.string()),userSummary:z$1.string(),toolCallCount:z$1.number().int().nonnegative(),selectedTests:z$1.array(q_),forcedTests:z$1.array(z$1.object({name:z$1.string(),testPath:z$1.string(),status:z$1.enum(["A","M","R","C","T"])})).optional().default([]),runAllReason:z$1.string().nullable()});function mQ(e){return uniqWith([...e],isEqual)}var pQ=z$1.object({id:z$1.string(),status:z$1.enum(Ht),trigger:z$1.enum(ml),createdAt:Fo,startedAt:Fo.nullish(),finishedAt:Fo.nullish(),gitCommitSha:z$1.string().nullish(),gitCommitShaShort:z$1.string().nullish(),gitCommitTimestamp:Fo.nullish(),gitBranchName:z$1.string().nullish(),gitOriginUrl:z$1.string().nullish(),gitCommitMessage:z$1.string().nullish(),gitCommitAuthorName:z$1.string().nullish(),projectName:z$1.string().nullish(),relativeProjectDir:z$1.string().nullish(),githubRepository:z$1.string().nullish(),gitlabProjectPath:z$1.string().nullish(),pipelineId:z$1.string().nullish(),ciProvider:z$1.string().nullish(),cliVersion:z$1.string().nullish(),labels:z$1.string().array().optional(),healRiskSummary:Tf.optional(),aiSelect:rw.array().optional(),environments:z$1.string().array().optional(),executionTypes:lh.array().optional(),localSuiteName:z$1.string().optional(),suite:z$1.object({id:z$1.string(),name:z$1.string()}).nullish(),runs:z$1.object({status:z$1.enum(Ht)}).array()}),hQ=pQ.pick({id:true,createdAt:true,startedAt:true,finishedAt:true,status:true,trigger:true,suite:true,localSuiteName:true}).extend({runs:eP.array()}),tP=pQ.extend({runs:Ys.array()});var fBe=z$1.object({type:z$1.literal("TARGETING"),name:z$1.string().optional().describe("Target name to disambiguate for steps with multiple targets"),elementLocationDecisions:x5.array(),pageState:z$1.string().optional(),targetSource:z$1.enum(Nu).optional(),targetUpdateTime:z$1.string().optional()}),yBe=z$1.object({type:z$1.literal("AI_LOCATION"),matched:z$1.boolean(),pageState:z$1.string().optional(),ragUsed:z$1.boolean().optional(),thoughts:z$1.string().optional()}),SBe=z$1.object({type:z$1.literal("ASSERTION"),relevantElementsSerialized:z$1.string().array().optional(),pageState:z$1.string().optional(),ragUsed:z$1.boolean().optional()}),nP=z$1.discriminatedUnion("type",[fBe,yBe,SBe]);var bBe=z$1.object({id:z$1.string(),name:z$1.string()});bBe.extend(z$1.object({createdAt:Fo,createdBy:z$1.string(),schedule:Y_,notification:J_,environment:z$1.object({name:z$1.string()}).nullish(),beforeTests:z$1.object({id:z$1.string()}).array().nullish(),afterTests:z$1.object({id:z$1.string()}).array().nullish()}).shape);var gQ=z$1.object({id:z$1.guid(),orgId:z$1.string(),createdAt:Fo,startedAt:Fo.or(z$1.null()),finishedAt:Fo.or(z$1.null()),status:z$1.enum(Ht),trigger:z$1.enum(ml),suite:z$1.object({id:z$1.string(),name:z$1.string()}).nullish(),runs:Ys.array()});gQ.pick({id:true,createdAt:true,startedAt:true,finishedAt:true,status:true,trigger:true,suite:true});var fQ=gQ.extend({runs:eP.array()});function yQ({beforeStatus:e,mainStatus:t,afterStatus:n}){return e==="FAILED"?"FAILED":e==="CANCELLED"?"CANCELLED":n==="FAILED"?"FAILED":n==="CANCELLED"?"CANCELLED":t==="FAILED"?"FAILED":t==="CANCELLED"?"CANCELLED":"PASSED"}function oP(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 SQ(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 nj=z$1.object({content:z$1.string(),ids:z$1.string().array(),tokenLength:z$1.number()}),TBe=z$1.object({chunks:nj.array()});z$1.object({ids:z$1.string().array(),score:z$1.number(),tokenLength:z$1.number()});TBe.extend({description:z$1.string().describe("Input to pass to RAG engine"),tokenLimit:z$1.number()});var bQ=z$1.object({ids:z$1.number().array()}),TQ=z$1.object({indices:z$1.number().array()});var zc=(n=>(n.Interactive="interactive",n.Runner="runner",n))(zc||{}),ABe=z$1.enum(zc),zr=z$1.object({disableCache:z$1.boolean().optional(),useMemory:z$1.boolean().optional(),clientMode:ABe.optional(),loggerTags:z$1.record(z$1.string(),z$1.string()).optional(),langfuseSessionId:z$1.string().optional(),agentConfigVersion:z$1.string().optional(),effort:pt.optional(),cacheBustReason:z$1.enum(uv).optional()});zr.extend({chunks:nj.array(),description:z$1.string().describe("Input to pass to AI"),type:z$1.union([z$1.literal("locator"),z$1.literal("assertion"),z$1.literal("ai-action")]),softTokenLimit:z$1.number(),mediumTokenLimit:z$1.number().optional(),hardTokenLimit:z$1.number(),callId:z$1.string().optional()});var EBe=z$1.object({screenshotBase64AfterCommand:z$1.string(),urlAfterCommand:z$1.string(),serializedCommand:z$1.string(),elementInteracted:z$1.string().optional(),thoughts:z$1.string().optional()}),AQ=z$1.object({goal:z$1.string(),browserState:z$1.string(),screenshot:z$1.string(),source:C5.optional().catch(void 0),isTieBreakerCall:z$1.boolean().optional(),memory:z$1.discriminatedUnion("type",[Nc,z$1.object({type:z$1.literal("RESOLVED_TRACES"),traces:z$1.unknown().optional().array()})]).optional(),firstPassModelResults:H_.array().optional(),knowledgeBaseSection:z$1.string().optional()}),EQ=z$1.object({target:z$1.string().or(z$1.number()),browserState:z$1.string().optional(),screenshot:z$1.string().optional(),boundingBox:z$1.object({x:z$1.number(),y:z$1.number(),height:z$1.number(),width:z$1.number()}).optional()}),vQ=z$1.object({goal:z$1.string(),browserState:z$1.string(),screenshot:z$1.string().optional(),returnSchema:z$1.string().optional()}),wQ=z$1.object({goal:z$1.string(),emulatorState:z$1.string(),screenshot:z$1.string().optional(),returnSchema:z$1.string().optional()}),oj=z$1.union([z$1.literal("NEGATED_CHECK"),z$1.literal("CONDITIONAL_CHECK")]),RQ=z$1.object({goal:z$1.string(),browserState:z$1.string(),screenshot:z$1.string(),url:z$1.string(),contextChoice:mf.optional(),memory:z$1.discriminatedUnion("type",[cf,z$1.object({type:z$1.literal("RESOLVED_TRACES"),traces:z$1.unknown().optional().array()})]).optional(),source:oj.optional(),recoveryHint:z$1.string().optional(),knowledgeBaseSection:z$1.string().optional()}),CQ=z$1.object({command:Jp}),rj=z$1.object({goal:z$1.string(),browserState:z$1.string(),startingScreenshot:z$1.string().optional(),screenshot:z$1.string(),url:z$1.string(),history:EBe.array(),actionHint:z$1.string().optional(),lastError:z$1.string().optional()}),IQ=z$1.object({results:M_.array(),errorMessage:z$1.string(),errorStack:z$1.string().optional()}),xQ=z$1.object({results:M_.array(),goal:z$1.string(),errorMessage:z$1.string()}),_Q=z$1.object({failedResults:M_.array(),nextStepsSerialized:z$1.string().array(),currentUrl:z$1.string(),currentPageState:z$1.string(),currentScreenshot:z$1.string(),testDescription:z$1.string().optional()});z$1.object({description:z$1.string(),type:z$1.union([z$1.literal("locator"),z$1.literal("assertion"),z$1.literal("ai-action")]),excerpt:z$1.string()});var PQ=z$1.object({type:z$1.string(),browserContext:z$1.string(),currentStep:z$1.string(),screenshot:z$1.string()}),OQ=z$1.object({description:z$1.string(),browserState:z$1.string().optional(),screenshot:z$1.string()}),MQ=z$1.object({description:z$1.string().optional(),screenshot:z$1.string(),platform:P5}),vBe=z$1.enum(["locator","assertion"]);z$1.object({completionType:vBe,currentGoal:z$1.string(),pastGoal:z$1.string().optional(),currentScreenshot:z$1.string(),pastScreenshot:z$1.string(),pastResult:z$1.union([z$1.boolean(),z$1.number()])});z$1.object({goal:z$1.string()});var kQ=z$1.object({keywords:z$1.array(z$1.string())});var Vc=x__default.object({id:x__default.guid(),envKey:x__default.string().optional(),skipped:x__default.boolean().optional(),retries:x__default.number().optional()});var Wc=(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))(Wc||{});var uh=Vc.extend({type:x__default.literal("MOBILE_CONDITIONAL_STEP")});var Ts=z$1.object({id:z$1.string(),name:y_,baseUrl:S_,description:z$1.string().optional().nullish(),schemaVersion:z$1.string(),advanced:Ks,retries:z$1.number().optional().nullish(),envs:z$1.array(Q5).nullish(),parameters:X5.nullish(),disabled:z$1.boolean().optional(),labels:z$1.array(z$1.string()).optional().catch([]),runAssertions:Q_.array().nullish()}),ij=z$1.enum(["INHERIT","ENABLED","DISABLED"]);var RBe=Ks.shape.geolocation.unwrap().partial().superRefine(({latitude:e,longitude:t},n)=>{e!==void 0&&t===void 0&&n.addIssue({code:"custom",message:"Longitude is required when latitude is provided",path:["longitude"]}),t!==void 0&&e===void 0&&n.addIssue({code:"custom",message:"Latitude is required when longitude is provided",path:["latitude"]});}),CBe=Ks.shape.proxy.unwrap().partial().superRefine(({server:e,username:t,password:n},o)=>{!e&&(t||n)&&o.addIssue({code:"custom",message:"Proxy host is required when credentials are provided",path:["server"]});}),IBe=Ks.extend({failureRecovery:ij.optional(),geolocation:RBe.optional(),proxy:CBe.optional(),turbo:ij.optional(),useMemory:ij.optional()});Ts.pick({name:true,description:true,baseUrl:true,retries:true,disabled:true,parameters:true,runAssertions:true}).extend({advanced:IBe});Ts.pick({name:true,description:true,baseUrl:true,retries:true,disabled:true,advanced:true,parameters:true,runAssertions:true});var xBe=z$1.object({labels:z$1.array(z$1.string()).optional(),outputs:X_.nullish()}),Wo=Ts.extend(xBe.shape),_Be=z$1.object({createdAt:z$1.coerce.date(),updatedAt:z$1.coerce.date(),updatedBy:z$1.string().nullable(),schedule:Y_,notification:J_,createdBy:z$1.string(),organizationId:z$1.string(),folderId:z$1.string().nullable().optional()}),PBe=Ts.extend(_Be.shape);PBe.extend(cl.shape);var sj=Ts.extend(cl.shape);Ts.extend(fm.shape);var OBe="test",MBe="module",kBe="mobile-test",LBe="mobile-module",NBe="test/v2",DBe="module/v2",FBe="mobile-test/v2",BBe="mobile-module/v2";var De=(l=>(l.TEST=`momentic/${OBe}`,l.MODULE=`momentic/${MBe}`,l.TEST_V2=`momentic/${NBe}`,l.MODULE_V2=`momentic/${DBe}`,l.MOBILE_TEST=`momentic/${kBe}`,l.MOBILE_MODULE=`momentic/${LBe}`,l.MOBILE_TEST_V2=`momentic/${FBe}`,l.MOBILE_MODULE_V2=`momentic/${BBe}`,l))(De||{});Ts.merge(fm);var UBe=Jo.extend({steps:z$1.array(z$1.record(z$1.string(),z$1.unknown().optional())),schemaVersion:z$1.string()}),aw=UBe.extend({fileType:z$1.literal(De.MODULE)});z$1.object({test:z$1.string().describe("YAML for the test, including metadata and steps"),modules:z$1.record(z$1.string(),z$1.string()).describe("Map of module name to YAML for the module")});function rP(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(rP);let t={};for(let[n,o]of Object.entries(e))t[n]=rP(o);return t}var HBe=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,LQ=36,Qo=z$1.union([z$1.guid().max(LQ,"V2 IDs must be 36 characters or fewer"),z$1.string().max(LQ,"V2 IDs must be 36 characters or fewer").regex(HBe,"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 iP=x.discriminatedUnion("type",[x.object({type:x.literal("SCREEN")}),x.object({type:x.literal("OPEN_APP")}),x.object({type:x.literal("OPEN_WEBVIEW")})]),Rm=x.object({type:x.literal("description"),description:x.string()}),lj=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")}),sP=x.discriminatedUnion("type",[...iP.options,x.object({type:x.literal("CUSTOM"),target:Rm}),lj]);function jBe(e){return e.toLowerCase().replaceAll("_"," ")}function cj(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 jBe(e.type);default:{throw new Error("Unreachable")}}}var $Be=x.object({type:x.literal("coordinates"),xPercent:x.number(),yPercent:x.number()}),GBe=x.object({type:x.literal("absolute_percent"),x:x.number(),y:x.number()}),pb=x.discriminatedUnion("type",[Rm,$Be,GBe]);var zBe=x.object({x1:x.number(),y1:x.number(),x2:x.number(),y2:x.number(),tolerance:x.nativeEnum(Ia),preciseTolerance:x.boolean().optional()}),VBe=x.object({width:x.number(),height:x.number(),tolerance:x.nativeEnum(Ia),preciseTolerance:x.boolean().optional()}),uj=x.object({requiredText:x.string().optional(),requiredAttributes:x.record(x.string(),x.string()).optional(),requiredBounds:x.boolean().optional(),position:zBe.optional(),shape:VBe.optional()}),NQ=x.object({xPath:x.string(),requirements:uj.optional()}),WBe=x.object({type:x.literal("CUSTOM"),target:Rm,cache:x.lazy(()=>DQ).optional()}),qBe=x.object({pixelDelta:x.number().describe("Number of pixels to scroll in the specified direction"),scrollableElement:x.union([iP,WBe,lj]),direction:x.enum(["up","down"])}),DQ=x.object({type:x.literal("NATIVE"),bounds:x.number().array().optional(),resolvedDescription:x.string().optional(),xPath:x.string().optional(),elementOnlySerializedXml:x.string().optional(),scrollDetails:qBe.optional(),requirements:uj.optional(),requiredRelatedElements:NQ.array().optional(),memory:Nc.optional()}),KBe=x.object({type:x.literal("WEBVIEW"),resolvedDescription:x.string().optional(),xPath:x.string().optional(),browserCache:Du.optional(),memory:Nc.optional()}),aP=x.union([DQ,KBe]);var YBe=x.object({left:x.number(),top:x.number(),right:x.number(),bottom:x.number()});x.object({newViewportBounds:YBe});var JBe=x.object({type:x.literal("CUSTOM"),target:Rm,cache:x.lazy(()=>HQ).optional()}),FQ=x.object({pixelDelta:x.number().describe("Number of pixels to scroll in the specified direction"),scrollableElement:x.union([iP,JBe,lj]),direction:x.enum(["up","down"])}),BQ=(n=>(n.Native="native",n.Appium="appium",n))(BQ||{}),dj=x.tuple([x.number(),x.number(),x.number(),x.number()]),UQ=NQ.extend({bounds:dj.optional(),browserCache:Du.optional()}),HQ=x.object({type:x.literal("NATIVE"),bounds:dj.optional(),resolvedDescription:x.string().optional(),sourceTree:x.nativeEnum(BQ).optional(),xPath:x.string().optional(),elementOnlySerializedXml:x.string().optional(),scrollDetails:FQ.optional(),requirements:uj.optional(),requiredRelatedElements:UQ.array().optional(),memory:Nc.optional()}),XBe=x.object({type:x.literal("WEBVIEW"),bounds:dj.optional(),resolvedDescription:x.string().optional(),xPath:x.string().optional(),scrollDetails:FQ.optional(),browserCache:Du.optional(),requiredRelatedElements:UQ.array().optional(),memory:Nc.optional()}),lP=x.discriminatedUnion("type",[HQ,XBe]);var yn=(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))(yn||{});var ot=x__default.object({id:x__default.guid(),disableCache:x__default.boolean().optional()}),hb=x__default.object({updatedAt:x__default.coerce.date().optional(),updatedAtLoggerTags:x__default.record(x__default.string(),x__default.string()).optional()}),Ql=hb.extend({target:aP}),cP=hb.extend({fromTarget:aP,toTarget:aP}),Zu=hb.extend({target:lP}),jQ=hb.extend({fromTarget:lP,toTarget:lP}),Cm=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 $Q=ot.extend({type:x__default.literal("ADB_COMMAND"),command:x__default.string(),jsonArgs:x__default.string().optional()});var GQ=ot.extend({type:x__default.literal("OPEN_NOTIFICATION_DRAWER")});var lw=(r=>(r.AIRPLANE_MODE="AIRPLANE_MODE",r.DATA="DATA",r.WIFI="WIFI",r.LOCATION="LOCATION",r))(lw||{}),VQ=ot.extend({type:x__default.literal("TOGGLE_SETTINGS"),settingsType:x__default.nativeEnum(lw)});var qQ=ot.extend({type:x__default.literal("UNINSTALL_APP"),packageName:x__default.string()});var uP=ot.extend({type:x__default.literal("APPIUM_EXECUTE"),command:x__default.string(),jsonArgs:x__default.string().optional()});var KQ=ot.extend({type:x__default.literal("ADD_FILE"),file:x__default.string(),storageLocation:x__default.string()});var Im=ot.extend({type:x__default.literal("AI_CHECK"),assertion:x__default.string(),timeoutSecs:x__default.number().optional(),contextChoice:mf.optional(),cache:hb.extend({memory:cf.optional()}).optional()});var YQ=ot.extend({type:x__default.literal("AI_EXTRACT"),goal:x__default.string(),schema:x__default.string().optional()});var XQ=ot.extend({type:x__default.literal("INSTALL_APP"),uri:x__default.string().trim()});var gb=ot.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=ot.extend({type:x__default.literal("KILL_APP")});var uw=(n=>(n.HOME="HOME",n.POWER="POWER",n))(uw||{}),dP=(s=>(s.BACK="BACK",s.APP_SWITCHER="APP_SWITCHER",s.SEARCH="SEARCH",s.VOLUME_UP="VOLUME_UP",s.VOLUME_DOWN="VOLUME_DOWN",s.VOLUME_MUTE="VOLUME_MUTE",s))(dP||{}),mP=ot.extend({type:x__default.literal("PRESS"),key:x__default.nativeEnum(uw),longPress:x__default.boolean().optional()}),ZQ=mP.extend({key:x__default.nativeEnum(dP).or(x__default.nativeEnum(uw))}),e6=mP;var t6=ot.extend({type:x__default.literal("REQUEST")}).merge(pv);var Sj=(n=>(n.PORTRAIT="PORTRAIT",n.LANDSCAPE="LANDSCAPE",n))(Sj||{}),o6=ot.extend({type:x__default.literal("ROTATE_ORIENTATION"),orientation:x__default.nativeEnum(Sj)});var tUe=x__default.object({type:x__default.literal("CONTENT"),negated:x__default.boolean().optional(),value:x__default.string()}),yb=ot.extend({type:x__default.literal("SCREEN_CHECK"),assertion:tUe,timeout:x__default.number().int().min(0).max($u).optional().describe("max seconds to wait for the assertion to be true")});var r6=ot.extend({type:x__default.literal("STATE")});var i6=ot.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 a6=ot.extend({type:x__default.literal("WAIT"),timeoutSecs:x__default.number()});var dw=x__default.discriminatedUnion("type",[r6,Im,YQ,gb,a6,t6,o6,yb,i6,KQ,XQ,QQ]);x__default.discriminatedUnion("type",[...dw.options,mP]);var Tj=ot.extend({type:x__default.literal("DRAG_AND_DROP"),fromTarget:Rm,toTarget:Rm,hoverDuration:x__default.number().optional(),dragDuration:x__default.number().optional()}),mw=Tj.extend({cache:cP.optional()}),pw=Tj.extend({cache:jQ.optional()});var Aj=ot.extend({type:x__default.literal("ELEMENT_CHECK"),target:pb,assertion:l_,timeout:x__default.number().int().min(0).max($u).optional().describe("max seconds to wait for the assertion to be true")}),Af=Aj.extend({cache:Ql.optional()}),Ef=Aj.extend({cache:Zu.optional()});var hw=(n=>(n.ENTER="ENTER",n.BACKSPACE="BACKSPACE",n))(hw||{}),pP=(t=>(t.CLOSE_KEYBOARD="CLOSE_KEYBOARD",t))(pP||{}),u6={repeat:x__default.number().int().min(1).optional(),keyPressDelayMs:x__default.number().min(0).optional()},d6=ot.extend({type:x__default.literal("PRESS_KEYBOARD"),key:x__default.nativeEnum(hw),...u6}),m6=ot.extend({type:x__default.literal("PRESS_KEYBOARD"),key:x__default.nativeEnum(pP).or(x__default.nativeEnum(hw)),...u6});var p6=ot.extend({type:x__default.literal("OPEN_APP"),packageName:x__default.string(),activityName:x__default.string().optional(),intentExtras:x__default.string().optional()}),h6=ot.extend({type:x__default.literal("OPEN_APP"),packageName:x__default.string(),intentExtras:x__default.string().optional()});var Ej=ot.extend({type:x__default.literal("SCROLL_TO"),target:Rm,direction:x__default.enum(["down","up"]),scrollableElement:sP,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.")}),gw=Ej.extend({cache:Ql.optional()}),fw=Ej.extend({cache:Zu.optional()});var vj=ot.extend({type:x__default.literal("SWIPE"),direction:x__default.enum(["up","down","left","right"]),scrollableElement:sP,viewportPercent:x__default.number().optional(),durationMs:x__default.number().optional(),relativePosition:s_.optional()}),yw=vj.extend({cache:Ql.optional()}),Sw=vj.extend({cache:Zu.optional()});var wj=ot.extend({type:x__default.literal("TAP"),target:pb,longPress:x__default.boolean().optional(),longPressDurationMs:x__default.number().optional(),iterations:x__default.number().optional(),tapDelayMs:x__default.number().optional(),relativePosition:s_.optional(),doubleTap:x__default.boolean().optional(),doubleTapDelayMs:x__default.number().optional()}),bw=wj.extend({cache:Ql.optional()}),Tw=wj.extend({cache:Zu.optional()});var Aw=(r=>(r.AUTO="auto",r.PROGRAMMATIC="programmatic",r.LONG_PRESS="long-press",r.BACKSPACE="backspace",r))(Aw||{});var Rj=ot.extend({type:x__default.literal("TYPE"),target:pb.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(Aw).optional()});var Ew=Rj.extend({cache:Ql.optional()}),vw=Rj.extend({cache:Zu.optional()});var ww=x__default.discriminatedUnion("type",[...dw.options,bw,Ew,ZQ,m6,qQ,$Q,uP,mw,GQ,gw,yw,VQ,Af,p6]);var f6=ot.extend({type:x__default.literal("SET_CAMERA"),file:x__default.string(),loop:x__default.boolean().optional(),playAudio:x__default.boolean().optional()}),y6=ot.extend({type:x__default.literal("CLEAR_CAMERA")});var S6=ot.extend({type:x__default.literal("SET_MICROPHONE"),file:x__default.string(),once:x__default.boolean().optional()}),b6=ot.extend({type:x__default.literal("CLEAR_MICROPHONE")});var Cw=x__default.discriminatedUnion("type",[...dw.options,Tw,vw,e6,d6,h6,Sw,pw,fw,Ef,uP,f6,y6,S6,b6]);var xm=Vc.extend({type:x__default.literal("MOBILE_WHILE_LOOP_STEP"),maxIterations:x__default.number().int().positive().optional()});var E6=x__default.union([x__default.string(),x__default.record(x__default.string(),x__default.unknown().optional())]),yP=Vc.extend({type:x__default.literal("MOBILE_PRESET_STEP"),keyPressDelayMs:x__default.number().optional()}),Sb=yP.extend({command:ww}),bb=yP.extend({command:Cw}),Tb=x__default.object({moduleId:x__default.string(),inputs:x__default.record(x__default.string(),x__default.string()).optional()}),_w=Vc.merge(Tb.extend({type:x__default.literal("MOBILE_MODULE_STEP")}));Tb.extend({steps:x__default.lazy(()=>Kc.array())});Tb.extend({steps:x__default.lazy(()=>ed.array())});var Cj=(n=>(n.V2="2",n.V3="3",n))(Cj||{});var v6="3",Ij=x__default.nativeEnum(Cj),Pw=x__default.object({status:x__default.literal("SUCCESS"),message:x__default.string().optional(),results:x__default.object({description:x__default.string(),status:x__default.enum(Ft),message:x__default.string().optional()}).array(),finalScreenshot:il.optional()}),Iw=x__default.lazy(()=>x__default.discriminatedUnion("type",[Sb,pUe])),xw=x__default.lazy(()=>x__default.discriminatedUnion("type",[bb,hUe]));var sUe=Lu.extend({platform:x__default.literal("ANDROID"),resolvedGoal:x__default.string(),steps:x__default.lazy(()=>Iw.array()),lastSuccessfulRun:Pw.optional()}),aUe=Lu.extend({platform:x__default.literal("IOS"),resolvedGoal:x__default.string(),steps:x__default.lazy(()=>xw.array()),lastSuccessfulRun:Pw.optional()}),xj=x__default.discriminatedUnion("platform",[sUe,aUe]),mh=Vc.extend({type:x__default.literal("MOBILE_AI_ACTION_STEP"),text:x__default.string(),version:Ij.optional(),cache:xj.optional(),disableCache:x__default.boolean().optional(),precondition:x__default.string().optional(),postcondition:x__default.string().optional()});var cUe=x__default.discriminatedUnion("type",[Im,yb,Af,gb]),ph=yP.extend({command:cUe}),uUe=x__default.discriminatedUnion("type",[Im,yb,Ef,gb]),hh=yP.extend({command:uUe}),dUe=x__default.object({assertion:ph,steps:x__default.lazy(()=>Kc.array())}),mUe=x__default.object({assertion:hh,steps:x__default.lazy(()=>ed.array())}),pUe=uh.extend({blocks:x__default.lazy(()=>x__default.object({assertion:ph,steps:Iw.array()}).array()),elseSteps:x__default.lazy(()=>Iw.array()).optional()}),hUe=uh.extend({blocks:x__default.lazy(()=>x__default.object({assertion:hh,steps:xw.array()}).array()),elseSteps:x__default.lazy(()=>xw.array()).optional()}),gUe=uh.extend({blocks:x__default.lazy(()=>dUe.array()),elseSteps:x__default.lazy(()=>Kc.array()).optional()}),fUe=uh.extend({blocks:x__default.lazy(()=>mUe.array()),elseSteps:x__default.lazy(()=>ed.array()).optional()}),yUe=xm.extend({condition:ph.optional(),steps:x__default.lazy(()=>Kc.array())}),SUe=xm.extend({condition:hh.optional(),steps:x__default.lazy(()=>ed.array())}),Kc=x__default.discriminatedUnion("type",[Sb,_w,mh,gUe,yUe]),ed=x__default.discriminatedUnion("type",[bb,_w,mh,fUe,SUe]);x__default.union([Kc.array(),ed.array()]);var _j=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()}),SP=x__default.object({moduleId:Qo,name:x__default.string(),description:x__default.string().nullish(),platform:x__default.nativeEnum(Yl).optional().default("ANDROID"),parameters:_j.optional(),enabled:x__default.boolean().nullish(),schemaVersion:x__default.string()}),Pj=SP.omit({name:true}),bUe=Pj.extend({steps:E6.array()});x__default.object({fileType:x__default.literal(De.MOBILE_MODULE)}).merge(bUe);var w6=SP.omit({platform:true,schemaVersion:true});({ANDROID:w6.extend({platform:x__default.literal("ANDROID"),steps:Kc.array()}),IOS:w6.extend({platform:x__default.literal("IOS"),steps:ed.array()})});var If=(t=>(t.MODULE="RESOLVED_MOBILE_MODULE",t))(If||{}),R6=x__default.object({description:x__default.string().optional(),name:x__default.string().describe("name of the module"),parameters:_j.optional()}),C6=Tb.merge(R6).extend({platform:x__default.literal("ANDROID"),get steps(){return Zl.array()}}),I6=Tb.merge(R6).extend({platform:x__default.literal("IOS"),get steps(){return ec.array()}});x__default.discriminatedUnion("platform",[C6,I6]);var Oj=Vc.merge(C6).extend({type:x__default.literal("RESOLVED_MOBILE_MODULE")}),Mj=Vc.merge(I6).extend({type:x__default.literal("RESOLVED_MOBILE_MODULE")});x__default.discriminatedUnion("platform",[Oj,Mj]);var TUe=x__default.object({assertion:ph,get steps(){return Zl.array()}}),kj=uh.extend({get blocks(){return TUe.array()},get elseSteps(){return Zl.array().optional()}}),AUe=x__default.object({assertion:hh,get steps(){return ec.array()}}),Lj=uh.extend({get blocks(){return AUe.array()},get elseSteps(){return ec.array().optional()}}),EUe=xm.extend({condition:ph.optional(),get steps(){return Zl.array()}}),vUe=xm.extend({condition:hh.optional(),get steps(){return ec.array()}}),Zl=x__default.discriminatedUnion("type",[Oj,Sb,mh,kj,EUe]),ec=x__default.discriminatedUnion("type",[Mj,bb,mh,Lj,vUe]);function x6(e){return Object.values(If).includes(e)||Object.values(Wc).includes(e)}var _6=(s=>(s.PRECONDITION="PRECONDITION",s.REPLAY="REPLAY",s.GENERATE="GENERATE",s.AUTOHEAL="AUTOHEAL",s.POSTCONDITION="POSTCONDITION",s.GOAL_CHECK="GOAL_CHECK",s))(_6||{}),P6=z$1.enum(["pending","running","success","failed"]),O6=z$1.object({type:z$1.literal("THOUGHT"),text:z$1.string(),blockId:z$1.string().optional()}),M6=z$1.object({type:z$1.literal("TOOL_CALL"),toolName:z$1.string()}),k6=z$1.object({type:z$1.literal("PHASE"),phase:z$1.nativeEnum(_6),failureMessage:z$1.string().optional()}),wUe=z$1.object({type:z$1.literal("STEP_UPDATE"),stepIndex:z$1.number(),step:Zl,status:P6,conditionMet:z$1.boolean().optional(),message:z$1.string().optional(),afterSnapshotId:z$1.string().optional()}),RUe=z$1.object({type:z$1.literal("STEP_UPDATE"),stepIndex:z$1.number(),step:ec,status:P6,conditionMet:z$1.boolean().optional(),message:z$1.string().optional(),afterSnapshotId:z$1.string().optional()}),L6=z$1.object({type:z$1.literal("SCREENSHOT"),stepIndex:z$1.number(),screenshotId:z$1.string()}),N6=z$1.object({type:z$1.literal("POSTCONDITION_AUTOGENERATED"),postcondition:z$1.string()}),D6=z$1.object({type:z$1.literal("POSTCONDITION_REVISED"),postcondition:z$1.string(),previousPostcondition:z$1.string()}),F6=z$1.object({type:z$1.literal("GOAL_CHECK"),achieved:z$1.boolean(),reasoning:z$1.string(),violatedUserRule:z$1.boolean().default(false)}),CUe=z$1.object({type:z$1.literal("CACHED_STEPS_GENERATED"),cachedSteps:Iw.array(),resolvedGoal:z$1.string(),lastSuccessfulRun:Pw.optional()}),IUe=z$1.object({type:z$1.literal("CACHED_STEPS_GENERATED"),cachedSteps:xw.array(),resolvedGoal:z$1.string(),lastSuccessfulRun:Pw.optional()}),xUe=z$1.discriminatedUnion("type",[O6,M6,k6,wUe,L6,CUe,N6,D6,F6]),_Ue=z$1.discriminatedUnion("type",[O6,M6,k6,RUe,L6,IUe,N6,D6,F6]);function B6(e){let t=z$1.object({version:z$1.literal(1),events:e.array(),spans:yH.array().optional()});return z$1.union([t,e.array()]).transform(n=>Array.isArray(n)?{version:1,events:n}:n)}var U6=B6(xUe),H6=B6(_Ue);var tc=x__default.object({message:x__default.string().optional(),startTime:x__default.number(),endTime:x__default.number(),status:x__default.nativeEnum(Ft),trace:x__default.unknown().optional().optional(),beforeSnapshot:x__default.string().optional(),afterSnapshot:x__default.string().optional(),data:x__default.unknown().optional().optional().describe("output data from the step"),aiSuggested:x__default.boolean().optional(),beforeTestContext:rb.optional(),afterTestContext:rb.optional()}),j6=tc.merge(Sb).extend({previousAttempts:x__default.lazy(()=>Xs.array()).optional()}),PUe=tc.merge(_w).extend({steps:x__default.lazy(()=>Xs.array()),name:x__default.string().optional(),previousAttempts:x__default.lazy(()=>Xs.array()).optional()}),OUe=tc.merge(mh).extend({steps:x__default.lazy(()=>Xs.array()),previousAttempts:x__default.lazy(()=>Xs.array()).optional(),failureRecoveryReason:x__default.string().optional(),trajectory:U6.optional()}),MUe=tc.merge(kj).extend({assertionResult:j6.optional(),steps:x__default.lazy(()=>Xs.array()),previousAttempts:x__default.lazy(()=>Xs.array()).optional()}),kUe=tc.merge(xm).extend({condition:ph.optional(),steps:x__default.lazy(()=>Xs.array()),iterationCount:x__default.number().optional(),iterationResultCounts:x__default.number().array().optional(),firstIterationConditionSkipped:x__default.boolean().optional(),previousAttempts:x__default.lazy(()=>Xs.array()).optional()}),Xs=x__default.discriminatedUnion("type",[j6,PUe,OUe,MUe,kUe]),$6=tc.merge(bb).extend({previousAttempts:x__default.lazy(()=>Qs.array()).optional()}),LUe=tc.merge(_w).extend({steps:x__default.lazy(()=>Qs.array()),name:x__default.string().optional(),previousAttempts:x__default.lazy(()=>Qs.array()).optional()}),NUe=tc.merge(mh).extend({steps:x__default.lazy(()=>Qs.array()),previousAttempts:x__default.lazy(()=>Qs.array()).optional(),failureRecoveryReason:x__default.string().optional(),trajectory:H6.optional()}),DUe=tc.merge(Lj).extend({assertionResult:$6.optional(),steps:x__default.lazy(()=>Qs.array()),previousAttempts:x__default.lazy(()=>Qs.array()).optional()}),FUe=tc.merge(xm).extend({condition:hh.optional(),steps:x__default.lazy(()=>Qs.array()),iterationCount:x__default.number().optional(),iterationResultCounts:x__default.number().array().optional(),firstIterationConditionSkipped:x__default.boolean().optional(),previousAttempts:x__default.lazy(()=>Qs.array()).optional()}),Qs=x__default.discriminatedUnion("type",[$6,LUe,NUe,DUe,FUe]);var BUe=tc.extend({index:x__default.number().optional(),userFacingStepReference:x__default.string().optional(),description:x__default.string()}),G6=BUe.extend({beforeScreenshot:x__default.string().optional(),afterScreenshot:x__default.string().optional()});var z6=z$1.object({attributesRequired:z$1.array(z$1.string()).optional(),textRequired:z$1.boolean().optional(),boundsRequired:z$1.boolean().optional(),positionSpecificity:z$1.enum(Ia).optional(),shapeSpecificity:z$1.enum(Ia).optional()}),UUe=z$1.object({id:z$1.number(),requirements:z6}).array();z$1.object({thoughts:z$1.string(),id:z$1.number(),updatedMemory:lv.optional(),inWebview:z$1.boolean().optional(),requirements:z6.optional(),additionalElements:UUe.optional()});var HUe=z$1.literal("SCROLL_TO"),V6=z$1.object({description:z$1.string(),screenXml:z$1.string(),screenshot:z$1.string(),source:HUe.optional(),memory:z$1.discriminatedUnion("type",[Nc,z$1.object({type:z$1.literal("RESOLVED_TRACES"),traces:z$1.unknown().optional().array()})]).optional()}),W6=z$1.object({assertion:z$1.string(),screenXml:z$1.string(),screenshot:z$1.string(),contextChoice:mf.optional(),knowledgeBaseSection:z$1.string().optional(),memory:z$1.discriminatedUnion("type",[cf,z$1.object({type:z$1.literal("RESOLVED_TRACES"),traces:z$1.unknown().optional().array()})]).optional()});z$1.object({thoughts:z$1.string(),result:z$1.boolean(),relevantElements:z$1.array(z$1.number()).optional(),updatedMemory:cv.optional(),citations:ho.array().optional()});var q6=z$1.object({failedResults:G6.array(),nextStepsSerialized:z$1.string().array(),currentScreenXml:z$1.string(),currentScreenshot:z$1.string(),testDescription:z$1.string()}),K6=(o=>(o.LEGITIMATE="LEGITIMATE",o.RECOVERABLE="RECOVERABLE",o.INELIGIBLE="INELIGIBLE",o))(K6||{});z$1.object({thoughts:z$1.string(),scenario:z$1.enum(K6),instructions:z$1.string().nullish(),reasonSummary:z$1.string().nullish()});z$1.looseObject({type:z$1.literal("response.create")});var Y6=z$1.union([z$1.looseObject({response:z$1.looseObject({id:z$1.string()}),sequence_number:z$1.number(),type:z$1.literal("response.completed")}),z$1.looseObject({code:z$1.string().nullable(),message:z$1.string(),sequence_number:z$1.number(),type:z$1.literal("error")})]);var _m="1",J6=z$1.enum(["GENERATED","CACHE"]),Nj=J6.enum,X6=z$1.enum(["PULL_REQUEST","DIRECT_COMMIT","PATCH","LOCAL_CHANGES","OWNER_PULL_REQUEST","ALREADY_FIXED_ELSEWHERE"]),Pm=X6.enum,jUe=z$1.object({patchId:z$1.uuid(),sourceRunId:z$1.string().min(1).optional(),testId:z$1.string().min(1),testPath:z$1.string().min(1),writtenPaths:z$1.array(z$1.string().min(1)).min(1).optional(),environment:z$1.string().min(1).optional()}),$Ue=z$1.object({applicationId:z$1.uuid(),patchId:z$1.uuid(),sourceRunId:z$1.string().min(1).optional(),source:J6,delivery:X6,environment:z$1.string().min(1).optional(),repository:z$1.string().min(1).optional(),baseBranch:z$1.string().min(1).optional(),headBranch:z$1.string().min(1).optional(),prNumber:z$1.int().positive().optional(),commitSha:z$1.string().min(1).optional(),appliedAt:z$1.iso.datetime().optional(),patchedTestBundleHash:z$1.string().min(1).optional(),baseTestBundleHash:z$1.string().min(1).optional()});z$1.object({patches:z$1.array(jUe).max(1e3),applications:z$1.array($Ue).max(1e3)});var Dj=200,Fj=50,GUe=z$1.object({testId:z$1.string().min(1),patchIds:z$1.array(z$1.string().min(1)).max(Fj).min(1)});z$1.object({repository:z$1.string().min(1),baseBranch:z$1.string().min(1),excludeHeadBranch:z$1.string().min(1).optional(),failures:z$1.array(GUe).min(1).max(Dj)});var Q6=z$1.object({existingFixes:z$1.array(MU)});var Z6="ui_states.jsonl";z$1.object({stepId:z$1.string(),parentStepIdChain:z$1.array(z$1.string()),fingerprintHash:z$1.string(),minhash:z$1.array(z$1.number().int()),canonicalUrl:z$1.string(),capturedAt:z$1.number().describe("Unix timestamp in milliseconds"),archivalFingerprintHash:z$1.string().optional(),archivalMinhash:z$1.array(z$1.number().int()).optional()});var zUe=z$1.object({testId:z$1.string(),name:z$1.string(),relativeFilePath:z$1.string(),coverage:z$1.string(),note:z$1.string().optional()}),VUe=z$1.object({name:z$1.string(),summary:z$1.string(),status:z$1.string().optional(),existingCoverage:z$1.array(zUe).default([])}),WUe=z$1.object({name:z$1.string(),summary:z$1.string(),importance:z$1.string().optional(),relatedJourney:z$1.string().optional(),mode:z$1.string().optional(),preconditions:z$1.array(z$1.string()).default([]),outline:z$1.array(z$1.string()).default([]),acceptanceCriteria:z$1.array(z$1.string()).default([]),existingTestId:z$1.string().optional(),existingTestPath:z$1.string().optional(),customAttributes:z$1.record(z$1.string(),z$1.unknown()).optional()}),qUe=z$1.object({testPlanName:z$1.string(),status:z$1.string(),testPath:z$1.string().optional(),summary:z$1.string(),notes:z$1.array(z$1.string()).optional()}),KUe=z$1.object({status:z$1.string(),builtTests:z$1.array(qUe).default([]),summary:z$1.string().optional(),notes:z$1.string().optional()}),YUe=z$1.object({control:z$1.string(),status:z$1.string(),result:z$1.string()}),JUe=z$1.object({testPlanName:z$1.string(),status:z$1.string(),summary:z$1.string(),verified:z$1.array(z$1.string()).default([]),gaps:z$1.array(z$1.string()).default([]),reportedBugs:z$1.array(z$1.string()).default([]),controls:z$1.array(YUe).default([]),customAttributes:z$1.record(z$1.string(),z$1.unknown()).optional()}),XUe=z$1.object({status:z$1.string(),planReports:z$1.array(JUe).default([]),summary:z$1.string().optional(),notes:z$1.string().optional()});z$1.object({summary:z$1.string().optional(),changedJourneys:z$1.array(VUe).default([]),testPlans:z$1.array(WUe).default([]),buildSummary:KUe.optional(),bugbashSummary:XUe.optional()});var QUe=z$1.object({agentId:z$1.string().optional(),video:z$1.string().optional(),startedAt:z$1.number().optional(),finishedAt:z$1.number().optional(),videoStartMs:z$1.number().optional(),videoEndMs:z$1.number().optional()});z$1.object({name:z$1.string(),summary:z$1.string(),expected:z$1.string(),actual:z$1.string(),severity:z$1.string().optional(),reproSteps:z$1.array(z$1.string()).default([]),recording:QUe.optional()});function eZ(e){return [...new Map(e.map(t=>[t.name,t])).values()]}var xf=(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))(xf||{}),gh=(r=>(r.Select="select",r.Classify="classify",r.Triage="triage",r.Mo="mo",r))(gh||{}),Ab=(r=>(r.Fixed="fixed",r.CannotFix="cannot-fix",r.NoFixNeeded="no-fix-needed",r.Error="error",r))(Ab||{}),Es=(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))(Es||{}),tZ="sessionId";var ZUe=3;function eHe(e){return e==="MODULE"||e==="CONDITIONAL"||e==="WHILE_LOOP"||e==="SECTION"||e==="RESOLVED_MODULE"}function nZ(e){if(!eHe(e))switch(e){case "PRESET_ACTION":return 0;case "AI_ACTION":return 3;case "AI_ACTION_DYNAMIC":return 5;default:(n=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})();}}function bP(e){switch(e.type){case "AI_EXTRACT":case "AI_ASSERTION":return ZUe;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:(n=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})();}}var Bj=z$1.object({name:z$1.string(),value:z$1.string(),url:z$1.string().optional(),domain:z$1.string().optional(),path:z$1.string().optional(),expires:z$1.number().default(Date.now()/1e3+60*60*24*365),httpOnly:z$1.boolean().optional(),secure:z$1.boolean().default(true),sameSite:z$1.union([z$1.literal("Strict"),z$1.literal("Lax"),z$1.literal("None")]).default("None")});function TP(e,t){let n=[],o=splitCookiesString(e);for(let r of o){let i=parseString(r,{decodeValues:false});if(!i.name)throw new Error("Name missing from cookie");if(!i.value)continue;let s;if(i.sameSite){let u=i.sameSite.trim().toLowerCase();if(u==="strict")s="Strict";else if(u==="lax")s="Lax";else if(u==="none")s="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 a=Bj.parse({...i,expires:i.expires?i.expires.getTime()/1e3:void 0,sameSite:s});n.push(a);let l=[a.name,...Object.keys(a)].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())||n.push({...a,name:d,value:m});}}return n}var oHe=z$1.object({origin:z$1.string(),localStorage:z$1.array(z$1.object({name:z$1.string(),value:z$1.string()})),sessionStorage:z$1.array(z$1.object({name:z$1.string(),value:z$1.string()})).optional()}),rHe=z$1.object({entries:z$1.record(z$1.string(),z$1.array(z$1.tuple([z$1.unknown().optional(),z$1.unknown().optional()]))),version:z$1.number().optional()}),AP=z$1.object({cookies:Bj.array().optional(),origins:oHe.array().optional(),idb:z$1.record(z$1.string(),rHe).optional().describe("key is db name")});function oZ(e,t){let n=[];return e.cloneSync()?.serializeSync()?.cookies.forEach(o=>{let r=Bj.safeParse({name:o.key,...o});if(!r.success)return;let i=r.data;!i.domain&&!i.url&&(i.domain=t),n.push(i);}),n}var Da={type:true,cache:true},rZ=[Im.pick(Da),Af.pick(Da),bw.pick(Da),Ew.pick(Da),yw.pick(Da),gw.pick(Da),mw.pick(Da)],Uj=x__default.discriminatedUnion("type",rZ),iZ=[Im.pick(Da),Ef.pick(Da),Tw.pick(Da),vw.pick(Da),Sw.pick(Da),pw.pick(Da),fw.pick(Da)],Hj=x__default.discriminatedUnion("type",iZ);Object.values(yn).filter(e=>rZ.some(t=>t.shape.type.safeParse(e).success));Object.values(yn).filter(e=>iZ.some(t=>t.shape.type.safeParse(e).success));var jj=x__default.object({type:x__default.literal("MOBILE_AI_ACTION_STEP"),cache:xj}),EP=x__default.union([Uj,jj]),vP=x__default.union([Hj,jj]);var $j=(s=>(s.US_EAST_1="us-east1",s.US_EAST_2="us-east2",s.US_WEST_1="us-west1",s.US_WEST_2="us-west2",s.EU_NORTH_1="eu-north1",s.AS_SOUTH_1="as-south1",s))($j||{}),wP=(o=>(o.US="us",o.EU="eu",o.AS="as",o))(wP||{}),sZ=(t=>(t.LOCAL="local",t))(sZ||{}),Mw=x__default.nativeEnum(wP),Gj=x__default.nativeEnum($j).or(x__default.nativeEnum(wP)),zj=x__default.nativeEnum($j).or(x__default.nativeEnum(wP)).or(x__default.nativeEnum(sZ)),sHe="closest";zj.or(x__default.literal(sHe));var vb=(n=>(n.ANDROID_14="14",n.ANDROID_15="15",n))(vb||{});var RP=(t=>(t.IOS_26="26",t))(RP||{});var aHe=["1.56.1-lim.1","1.60.0-lim.1"],aZ=x__default.enum(aHe);var lZ=x__default.nativeEnum(vb).or(x__default.nativeEnum(RP));var lHe=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:ub.optional(),locale:x__default.string().optional().describe("Device locale code (e.g. 'fr', 'en-us'). Sets the device language and region. iOS and Android.")}),cHe="avdId",uHe="iosDeviceType",dHe="iosVersion",mHe="localEmulatorStartTimeout",cZ=x__default.number().int().positive(),pHe=x__default.object({downloadKbps:cZ.optional().describe("Maximum download bandwidth in kilobits per second."),uploadKbps:cZ.optional().describe("Maximum upload bandwidth in kilobits per second.")}),Vj=lHe.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:zj.optional().describe('Where the emulator runs: "local" for an emulator on your machine, or a region for hosted emulators. Defaults to hosted emulators.'),jurisdiction:Mw.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(vb).optional()}).optional(),localEmulatorSettings:x__default.object({[cHe]:cb,[uHe]:cb,[dHe]:cb}).optional(),[mHe]: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:pHe.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($u).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 kw=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:cb.describe("APK to install when using the emulator in the local region."),defaultAppFilePath:cb.describe("App file (e.g. .app or .ipa) to install when using the emulator in the local region."),emulator:Vj.optional().describe("Emulator configuration for local or remote mobile execution, including region and local emulator overrides."),ai:JH.optional().describe("AI behavior overrides for this mobile test, such as memory and failure recovery settings.")}),uZ=x__default.object({id:Qo,description:x__default.string(),schemaVersion:x__default.string(),settings:kw.optional(),disabled:x__default.boolean().optional(),labels:x__default.array(x__default.string()).optional()}),wb=uZ.extend({platform:x__default.literal("ANDROID").optional().default("ANDROID")}),Rb=uZ.extend({platform:x__default.literal("IOS")}),dZ=x__default.discriminatedUnion("platform",[wb,Rb]),mZ=x__default.object({fileType:x__default.literal(De.MOBILE_TEST)}),pZ=mZ.merge(wb),hZ=mZ.merge(Rb);x__default.discriminatedUnion("platform",[pZ,hZ]);var gZ=wb.merge(x__default.object({steps:x__default.array(Kc)})),fZ=Rb.merge(x__default.object({steps:x__default.array(ed)}));x__default.discriminatedUnion("platform",[gZ,fZ]);var hHe=pZ.merge(gZ),gHe=hZ.merge(fZ);x__default.discriminatedUnion("platform",[hHe,gHe]);x__default.object({name:x__default.string(),steps:x__default.array(Kc).optional(),settings:kw.optional()});var yZ=wb.extend({steps:Zl.array(),beforeSteps:Zl.array().optional(),afterSteps:Zl.array().optional()}),SZ=Rb.extend({steps:ec.array(),beforeSteps:ec.array().optional(),afterSteps:ec.array().optional()});x__default.discriminatedUnion("platform",[yZ,SZ]);var fHe=yZ.extend({name:x__default.string()}),yHe=SZ.extend({name:x__default.string()});x__default.discriminatedUnion("platform",[fHe,yHe]);var Ii=x__default.object({startTime:x__default.number(),endTime:x__default.number().optional(),durationMs:x__default.number().optional(),error:x__default.string().optional(),result:x__default.unknown().optional().optional(),attributes:x__default.record(x__default.string(),x__default.unknown().optional()),subSpans:x__default.lazy(()=>NHe.array())});var Lw=Ii.extend({type:x__default.literal("SECTION"),name:x__default.string()}),SHe=Ii.extend({type:x__default.literal("GET_PAGE_STATE")}),bHe=Ii.extend({type:x__default.literal("GET_PAGE_SCREENSHOT")}),THe=Ii.extend({type:x__default.literal("SMART_WAITING")}),AHe=Ii.extend({type:x__default.literal("SCROLL_ELEMENT_INTO_VIEW")}),EHe=Ii.extend({type:x__default.literal("AI_LOCATOR_CALL"),screenshotSnapshotId:x__default.string().optional(),result:x__default.object({id:x__default.number(),thoughts:x__default.string(),citations:ho.array().optional()}).optional()}),vHe=Ii.extend({type:x__default.literal("AI_ASSERTION_CALL"),screenshotSnapshotId:x__default.string().optional(),elementScreenshotSnapshotId:x__default.string().optional(),result:x__default.object({thoughts:x__default.string(),result:x__default.boolean(),citations:ho.array().optional()}).optional()}),wHe=Ii.extend({type:x__default.literal("AI_EXTRACTION_CALL"),screenshotSnapshotId:x__default.string().optional(),browserStateSnapshotId:x__default.string().optional(),result:x__default.object({thoughts:x__default.string().optional(),result:x__default.unknown().optional().optional()}).optional()}),RHe=Ii.extend({type:x__default.literal("ELEMENT_ASSERTION"),name:x__default.string(),result:x__default.object({success:x__default.boolean(),message:x__default.string().optional()}).optional()}),CHe=Ii.extend({type:x__default.literal("BROWSER_INTERACTION"),name:x__default.string(),coordinates:x__default.object({x:x__default.number(),y:x__default.number()}).optional(),value:x__default.string().optional(),selector:x__default.string().optional()}),IHe=Ii.extend({type:x__default.literal("CACHE_RESOLUTION"),resolutionMethod:x__default.string().optional(),cacheMissReason:x__default.nativeEnum(PS).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()}),xHe=Ii.extend({type:x__default.literal("TARGET_RESOLUTION"),elementScreenshotSnapshotId:x__default.string().optional(),result:x__default.object({serializedElement:x__default.string()}).optional()}),_He=Ii.extend({type:x__default.literal("LOCATOR_REDIRECT"),elementScreenshotSnapshotId:x__default.string().optional(),result:x__default.object({outcome:x__default.string(),logs:x__default.string().array().optional(),serializedElement:x__default.string().optional(),relativeClickPoint:x__default.object({x:x__default.number(),y:x__default.number()}).optional(),force:x__default.boolean().optional()}).optional()}),PHe=Ii.extend({type:x__default.literal("WAIT_FOR_STABILITY")}),OHe=Ii.extend({type:x__default.literal("GENERIC"),name:x__default.string()}),MHe=Ii.extend({type:x__default.literal("PAGE_ASSERTION"),name:x__default.string(),result:x__default.object({success:x__default.boolean(),message:x__default.string().optional()}).optional()}),kHe=Ii.extend({type:x__default.literal("AUTO_FOLLOW_NEW_TABS"),result:x__default.object({followed:x__default.boolean()}).optional()}),LHe=Ii.extend({type:x__default.literal("VISUAL_DIFF"),name:x__default.string(),result:x__default.object({success:x__default.boolean(),message:x__default.string().optional()}).optional()});function bZ(e){return e.type==="CACHE_RESOLUTION"||e.type==="TARGET_RESOLUTION"}var NHe=x__default.discriminatedUnion("type",[Lw,SHe,bHe,THe,AHe,EHe,vHe,wHe,RHe,CHe,xHe,IHe,_He,PHe,MHe,LHe,OHe,kHe]);z$1.object({testId:z$1.string(),sessionId:z$1.string()});var TZ=z$1.object({uploadUrl:z$1.string(),id:z$1.string()});new Set(Object.values(To));var Vn={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 DHe=z$1.string().refine(e=>lp.valid(e),{error:"must be a valid semver string"});function Wj(e){return lp.parse(e)||void 0}function Nw(e){if(e!==void 0)return e===true||e==="true"||e==="1"}function EZ(e){if(e!=="true"&&e!=="false")throw new ue(`Expected true or false, got "${e}".`);return e==="true"}var vZ="on-fail";function qj(e){return e==="on-fail"?"on-fail":e==="false"?false:!!e}var wZ=(n=>(n.CLI="cli",n.MobileCLI="mobile-cli",n))(wZ||{}),FHe=z$1.nativeEnum(wZ),RZ=(o=>(o.Error="error",o.Warn="warn",o.Info="info",o))(RZ||{}),BHe=z$1.nativeEnum(RZ),UHe=z$1.object({id:z$1.string(),level:BHe,versionRange:z$1.string(),announcement:z$1.string()});z$1.object({cliType:FHe,version:DHe});var CZ=z$1.object({announcements:z$1.array(UHe)});var Dw=55555,CP="momentic-code-eval.js";z$1.object({body:z$1.string(),to:z$1.string(),from:z$1.string()});z$1.object({from:z$1.string().optional(),to:z$1.string(),timeout:z$1.number().optional(),beforeDate:z$1.string().pipe(z$1.coerce.date()).or(z$1.date()).optional(),afterDate:z$1.string().pipe(z$1.coerce.date()).or(z$1.date()).optional()});z$1.object({timeoutMs:z$1.number().nonnegative().optional()}).optional();z$1.object({phoneNumber:z$1.string(),leaseToken:z$1.string()});var HHe=z$1.union([z$1.string(),z$1.date()]).transform(e=>e instanceof Date?e:new Date(e)),IZ=z$1.object({phoneNumber:z$1.string(),expiresAt:HHe,leaseToken:z$1.string()});z$1.object({to:z$1.email(),from:z$1.string(),subject:z$1.string(),body:z$1.string(),html:z$1.string().optional()});z$1.object({inbox:z$1.string().transform(e=>e.toLowerCase()),afterDate:z$1.string().pipe(z$1.coerce.date()).or(z$1.date()).optional(),timeout:z$1.number().optional(),trimWhitespace:z$1.boolean().optional()});z$1.object({inbox:z$1.string(),limit:z$1.number().optional(),afterDate:z$1.string().pipe(z$1.coerce.date()).or(z$1.date()).optional(),trimWhitespace:z$1.boolean().optional()});var xZ=z$1.object({email:z$1.string(),prefix:z$1.string(),expiresAt:z$1.coerce.date()}),IP=(n=>(n.RAW="RAW",n.RESPONSE="RESPONSE",n))(IP||{}),_Z=z$1.object({body:z$1.string().nullish(),status:z$1.number().optional(),headers:z$1.array(z$1.tuple([z$1.string(),z$1.string()])).optional()}),jHe=z$1.object({url:z$1.string(),options:z$1.object({method:z$1.string(),body:z$1.string().nullish(),headers:z$1.array(z$1.tuple([z$1.string(),z$1.string()])).optional()}).optional()}).optional(),$He=z$1.object({body:z$1.string().nullish(),options:z$1.object({status:z$1.number(),statusText:z$1.string().optional(),headers:z$1.array(z$1.tuple([z$1.string(),z$1.string()])).optional()}).optional()}).optional(),PZ=z$1.object({result:z$1.unknown().optional(),variableUpdates:z$1.record(z$1.string(),z$1.unknown().optional()).optional(),persistentVariableUpdates:z$1.record(z$1.string(),z$1.unknown().optional()).optional(),error:z$1.string().optional(),success:z$1.boolean()});z$1.object({id:z$1.string().optional(),orgId:z$1.string(),momenticLambdaAuthHash:z$1.string(),momenticLambdaAuthTimestamp:z$1.number(),code:z$1.string(),fragment:z$1.boolean(),state:z$1.object({env:z$1.record(z$1.string(),z$1.unknown().optional()),request:jHe,response:$He,additionalBindings:z$1.record(z$1.string(),z$1.unknown().optional()).optional()}),timeoutMs:z$1.number().optional(),disallowVariableUpdates:z$1.boolean().optional(),responseSerialization:z$1.enum(IP).optional()});var fh=9e4;function OZ({orgId:e,timestamp:t}){return `${e}:${t}`}var GHe=x.object({url:x.string(),lineNumber:x.number(),columnNumber:x.number()}),MZ=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:GHe.optional()}),kZ=MZ.array(),Fw=kZ.array();var Bw=class{async getConsoleLogsForRunAttempt(t,n,o){}async getNetworkLogsForRunAttempt(t,n,o){}async getHtmlSnapshot(t,n){}async getA11yTreeSnapshot(t,n){}async getScreenshot(t,n){}async storeConsoleLogsForRunAttempt(t,n,o,r){}async storeNetworkLogsForRunAttempt(t,n,o,r){}listVideoAssetPaths(){return []}close(){}async storeScreenshot(t,n,o){}async storeOnDemandScreenshotById(t,n,o,r){}async storeHtmlSnapshot(t,n,o){}};var zHe=z$1.object({name:z$1.string(),version:z$1.string(),comment:z$1.string().optional()}),VHe=z$1.object({name:z$1.string(),version:z$1.string(),comment:z$1.string().optional()}),WHe=z$1.object({onContentLoad:z$1.number().optional(),onLoad:z$1.number().optional(),comment:z$1.string().optional()}),Uw=z$1.object({startedDateTime:z$1.string(),id:z$1.string(),title:z$1.string().optional(),pageTimings:WHe,comment:z$1.string().optional()}),qHe=z$1.array(Uw),KHe=z$1.object({name:z$1.string(),value:z$1.string(),path:z$1.string().optional(),domain:z$1.string().optional(),expires:z$1.string().optional(),httpOnly:z$1.boolean().optional(),secure:z$1.boolean().optional(),comment:z$1.string().optional()}),NZ=z$1.array(KHe),YHe=z$1.object({name:z$1.string(),value:z$1.string(),comment:z$1.string().optional()}),DZ=z$1.array(YHe),JHe=z$1.object({name:z$1.string(),value:z$1.string(),comment:z$1.string().optional()}),XHe=z$1.array(JHe),QHe=z$1.object({name:z$1.string(),value:z$1.string().optional(),fileName:z$1.string().optional(),contentType:z$1.string().optional(),comment:z$1.string().optional()}),ZHe=z$1.array(QHe),eje=z$1.object({mimeType:z$1.string(),params:ZHe,text:z$1.string(),comment:z$1.string().optional(),_redactedReason:z$1.string().optional()}),tje=z$1.object({method:z$1.string(),url:z$1.string(),httpVersion:z$1.string().optional(),cookies:NZ,headers:DZ,queryString:XHe,postData:eje.optional(),headersSize:z$1.number().optional(),bodySize:z$1.number().optional(),comment:z$1.string().optional()}),nje=z$1.object({size:z$1.number().optional(),compression:z$1.number().optional(),mimeType:z$1.string().optional(),text:z$1.string().optional(),encoding:z$1.string().optional(),comment:z$1.string().optional(),_redactedReason:z$1.string().optional()}),oje=z$1.object({status:z$1.number(),statusText:z$1.string(),httpVersion:z$1.string().optional(),cookies:NZ,headers:DZ,content:nje,redirectURL:z$1.string().optional(),headersSize:z$1.number().optional(),bodySize:z$1.number().optional(),comment:z$1.string().optional(),_mocked:z$1.boolean().optional()}),LZ=z$1.object({expires:z$1.string().optional(),lastAccess:z$1.string(),eTag:z$1.string(),hitCount:z$1.number(),comment:z$1.string().optional()}),rje=z$1.object({beforeRequest:LZ.optional(),afterRequest:LZ.optional(),comment:z$1.string().optional()}),ije=z$1.object({blocked:z$1.number().optional(),dns:z$1.number().optional(),connect:z$1.number().optional(),send:z$1.number(),wait:z$1.number(),receive:z$1.number(),ssl:z$1.number().optional(),comment:z$1.string().optional()}),Om=z$1.object({pageref:z$1.string().optional(),startedDateTime:z$1.string(),time:z$1.number().optional(),request:tje,response:oje.optional(),cache:rje.optional(),timings:ije,serverIPAddress:z$1.string().optional(),connection:z$1.string().optional(),comment:z$1.string().optional(),_resourceType:z$1.string().optional(),_responseState:z$1.enum(["pending","received","finished","failed"]).optional()});function Kj(e){return e._responseState?e._responseState==="finished"||e._responseState==="failed":!!e.response}var sje=z$1.array(Om),aje=z$1.object({version:z$1.string().default("1.1"),creator:zHe.optional(),browser:VHe.optional(),pages:qHe.optional(),entries:sje,comment:z$1.string().optional()}),Yj=z$1.object({log:aje});z$1.record(z$1.string(),Uw);z$1.record(z$1.string(),Om);function Jj(e,t){return {log:{version:"1.2",creator:{name:"Momentic, Inc.",version:"1.0.0"},pages:Object.values(e).sort((n,o)=>new Date(n.startedDateTime).getTime()-new Date(o.startedDateTime).getTime()),entries:Object.values(t).sort((n,o)=>new Date(n.startedDateTime).getTime()-new Date(o.startedDateTime).getTime())}}}var FZ=3,BZ=z$1.object({failureCount:z$1.number().int().nonnegative(),lastSuccess:z$1.object({actionSummary:z$1.string().min(1),recordedAt:z$1.coerce.date()}).optional()});sf.extend({succeeded:z$1.boolean(),actionSummary:z$1.string().min(1).optional()});var xP=(J=>(J.DisableClickhouseCaches="disable_clickhouse_caches",J.ShowZeroOpacityElements="show_zero_opacity_elements",J.VisualActions="visual_actions",J.RagV2="rag_v2",J.DisableSecondaryCacheResolution="disable_secondary_cache_resolution",J.GlobalLocatorRedirect="global_locator_redirect",J.FakerConstantSeed="faker_constant_seed",J.AutoExpandIframes="auto_expand_iframes",J.MobileNewAiActionStepsUseV3="mobile_new_ai_action_steps_use_v3",J.PerformanceInsights="performance_insights",J.ShowKnowledgeBase="show_knowledge_base",J.AppGraphBackend="app_graph_backend",J.AppGraphUI="app_graph_ui",J.ClassificationUI="classification_ui",J.HealingUI="healing_ui",J.ExploreUI="explore_ui",J.SlackNotifications="slack_notifications",J.SlackNotificationDms="slack_notification_dms",J.NotificationFailedTestTable="notification_failed_test_table",J.HealTraceUI="heal_trace_ui",J.ExploreTraceUI="explore_trace_ui",J.LinearIntegration="linear_integration",J.AtlassianIntegration="atlassian_integration",J.PosthogIntegration="posthog_integration",J.QaseIntegration="qase_integration",J.HostingIntegrations="hosting_integrations",J.TestinyIntegration="testiny_integration",J.TestRailIntegration="testrail_integration",J.RunAssertions="run_assertions",J.Mo="mo",J.InternalMoSettings="internal_mo_settings",J.MoMobile="mo_mobile",J))(xP||{});var yh=z$1.union([z$1.string(),z$1.number(),z$1.boolean(),z$1.null(),z$1.record(z$1.string(),z$1.lazy(()=>yh)),z$1.array(z$1.lazy(()=>yh))]),Pf=class{flags;payloads;constructor(t,n){this.flags=t,this.payloads=n;}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(([n,o])=>{typeof o=="boolean"&&Object.values(xP).includes(n)&&(t[n]=this.isBooleanFlagEnabled(n));}),t}getAllFlagPayloads(){return cloneDeep(this.payloads)}getFlagPayload(t){let n=this.payloads[t];if(n!==void 0){if(typeof n=="string")try{return JSON.parse(n)}catch{return n}return n}}refresh(){throw new Error("Not implemented")}};var Hw={".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"},HZ=[".sh",".exe",".app",".bat",".cmd",".msi",".apk",".jar",".py",".js",".cron",".php",".asp"];var $Z=z$1.discriminatedUnion("operation",[z$1.object({operation:z$1.literal("upsert"),path:z$1.string().min(1),content:z$1.string()}),z$1.object({operation:z$1.literal("delete"),path:z$1.string().min(1)})]),lje=z$1.object({baseSha:z$1.string().min(1),headSha:z$1.string().min(1)}),cje=z$1.object({baseBranch:z$1.string().min(1).max(255),baseCommitSha:z$1.string().min(1),expectedHeadSha:z$1.string().min(1).nullable().optional(),expectedBaseSha:z$1.string().min(1).optional(),headBranch:z$1.string().min(1).max(255).optional(),branchPrefix:z$1.string().min(1).max(255).optional(),idempotencyKey:z$1.string().min(1).optional()}),uje=5,dje=z$1.object({commitMessage:z$1.string().min(1),title:z$1.string().min(1),body:z$1.string(),reviewers:z$1.array(z$1.string().min(1)).optional(),teamReviewers:z$1.array(z$1.string().min(1)).optional(),fallbackReviewers:z$1.array(z$1.string().min(1)).max(uje).optional(),draft:z$1.boolean().optional()});cje.extend(dje.shape).extend({changes:z$1.array($Z).min(1),coAuthorRange:lje.optional(),requestCommitAuthorsAsReviewers:z$1.boolean().optional(),assignCommitAuthorsAsAssignees:z$1.boolean().optional(),assignees:z$1.array(z$1.string().min(1)).optional(),omitBaseCommitCoAuthors:z$1.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 GZ=z$1.object({pullRequestUrl:z$1.url(),pullRequestNumber:z$1.number(),headBranch:z$1.string(),commitSha:z$1.string(),created:z$1.boolean(),authors:z$1.array(JE).optional(),assignees:z$1.array(z$1.string()).optional(),reviewers:z$1.array(z$1.string()).optional()});z$1.object({branch:z$1.string().min(1).max(255),expectedHeadSha:z$1.string().min(1).optional(),commitMessage:z$1.string().min(1),changes:z$1.array($Z).min(1)});var zZ=z$1.object({branch:z$1.string(),commitSha:z$1.string(),committed:z$1.boolean()});z$1.object({usernames:z$1.array(z$1.string().min(1)).min(1).max(50)});var VZ=z$1.object({usernamesWithMergeAccess:z$1.array(z$1.string())}),WZ=z$1.object({shas:z$1.array(z$1.string().min(1)).min(1).max(20)}),qZ=z$1.object({authorsBySha:z$1.record(z$1.string(),z$1.array(JE)),filesBySha:z$1.record(z$1.string(),z$1.array(z$1.string())).optional(),candidatesBySha:z$1.record(z$1.string(),z$1.array(z$1.object({githubLogin:z$1.string(),via:z$1.string(),isApp:z$1.boolean().optional()}))).optional(),touchedPaths:z$1.array(z$1.string())});z$1.object({query:z$1.string().min(1).max(256)});var Qj=z$1.object({number:z$1.number(),title:z$1.string(),state:z$1.enum(["open","merged","closed"]),authorLogin:z$1.string().optional(),updatedAt:z$1.string().optional(),htmlUrl:z$1.string().optional(),body:z$1.string().optional(),changedPaths:z$1.array(z$1.string()).optional()}),KZ=z$1.object({pullRequests:z$1.array(Qj),scanned:z$1.number(),truncated:z$1.boolean()}),YZ=z$1.object({authorLogin:z$1.string().min(1).optional(),authorIsBot:z$1.boolean().optional(),humanAssigneeLogins:z$1.array(z$1.string().min(1)).optional()}),JZ=YZ.extend({issueNumber:z$1.number(),htmlUrl:z$1.url(),headBranch:z$1.string().min(1),baseBranch:z$1.string().min(1),latestCommitSha:z$1.string().min(1),mergeCommitSha:z$1.string().min(1).optional(),draft:z$1.boolean().optional(),title:z$1.string().optional(),body:z$1.string().optional()});function XZ(e){return e.authorLogin&&e.authorIsBot===false?e.authorLogin:e.humanAssigneeLogins?.[0]}YZ.extend({number:z$1.number(),htmlUrl:z$1.url()});var Zj=100;z$1.object({path:z$1.string().min(1),ref:z$1.string().min(1),limit:z$1.coerce.number().int().min(1).max(Zj)});var mje=z$1.object({path:z$1.string().min(1),status:z$1.string().min(1),additions:z$1.number(),deletions:z$1.number(),previousPath:z$1.string().optional(),patch:z$1.string().optional()}),QZ=z$1.object({sha:z$1.string().min(1),author:z$1.string().optional(),email:z$1.string().optional(),date:z$1.string().optional(),message:z$1.string()}),ZZ=z$1.object({mergeBaseSha:z$1.string().min(1),totalCommits:z$1.number(),commits:z$1.array(QZ),files:z$1.array(mje)}),e8=z$1.object({commits:z$1.array(QZ)}),t8=z$1.object({content:z$1.string().nullable()}),n8=z$1.object({name:z$1.string().min(1),protected:z$1.boolean()}),o8=z$1.object({iid:z$1.number(),webUrl:z$1.url(),sourceBranch:z$1.string().min(1),targetBranch:z$1.string().min(1),latestCommitSha:z$1.string().min(1),description:z$1.string().optional()}),pje=z$1.object({name:z$1.string(),path:z$1.string(),body:z$1.string()}),i8=z$1.object({template:pje});function PP({githubRepository:e,gitlabProjectPath:t,gitOriginUrl:n}){let o=hje(n);return e?Xj(o?.host??"github.com",e):t?Xj(o?.host??"gitlab.com",t):o?Xj(o.host,o.repositoryPath):void 0}function Sh(e){let t=e?.trim();if(!t)return;let n="refs/heads/";return t.startsWith(n)?t.slice(n.length):t}function hje(e){let t=e?.trim();if(!t)return;if(t.includes("://"))try{let s=new URL(t);return ["git:","http:","https:","ssh:"].includes(s.protocol)?{host:s.host,repositoryPath:s.pathname}:void 0}catch{return}let n=t.indexOf(":");if(n<=0)return;let o=t.slice(0,n),r=t.slice(n+1),i=o.slice(o.lastIndexOf("@")+1);return i&&r?{host:i,repositoryPath:r}:void 0}function yr(e){let[t,n,...o]=e.split("/");if(!(!t||!n||o.length>0))return {owner:t,repo:n}}function Xj(e,t){let n=e.trim().toLowerCase(),o=t.trim().split("/").filter(i=>i.length>0);if(!n||o.length===0)return;if(n===`ssh.${_P}`)n=_P,o[0]?.toLowerCase()==="v3"&&(o=o.slice(1));else if(n.endsWith(jZ)){let i=n.slice(0,-jZ.length);if(!i)return;n=_P,o=[i,...o];}n===_P&&(o=o.filter(i=>i.toLowerCase()!=="_git"));let r=o.at(-1);if(r?.toLowerCase().endsWith(".git")){let i=r.slice(0,-4);if(!i)return;o[o.length-1]=i;}return `${n}/${o.join("/")}`.toLowerCase()}function s8(e){let t=yr(e);if(t)return t;throw new Gt(`Invalid GitHub repository string: ${e}. Expected format "owner/repo".`)}var _P="dev.azure.com",jZ=".visualstudio.com",gje=/^co-authored-by:\s*.*?<([^>]+)>\s*$/gim,fje=/^(?:\d+\+)?([^@]+)@users\.noreply\.github\.com$/i;function e$(e){return e.match(fje)?.[1]}function yje(e){let t=[];for(let n of e.matchAll(gje)){let o=n[1]?.trim();o&&t.push({email:o,githubLogin:e$(o)});}return t}function a8(e){let t=[];for(let n of e.split("\0")){let o=n.trim();if(!o)continue;let r=o.indexOf(`
|
|
179
|
-
`),i=r===-1?o:o.slice(0,r),s=r===-1?"":o.slice(r+1),a=[];i&&a.push({email:i,githubLogin:e$(i)}),a.push(...yje(s)),t.push(a);}return t}function Sje(e){return (e.githubLogin??(e.email?e$(e.email):void 0))?.toLowerCase().endsWith("[bot]")??false}function l8(e){return e.filter(t=>!Sje(t))}var c8="https://static.momentic.ai";function jw(e,t){return {light:`${c8}/${e}.svg`,dark:`${c8}/${e}-dark.svg`,alt:t}}var $w={runGroup:jw("run-group-button","View run group"),basePr:jw("view-base-pr-button","View base PR"),branch:jw("view-branch-button","View branch"),commit:jw("view-commit-button","View commit")};function Gw({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 bh=z$1.object({limit:z$1.number().min(1).max(100).optional(),page:z$1.number().min(1).optional()}),t$=z$1.object({page:z$1.number(),pageSize:z$1.number(),pageCount:z$1.number()});var n$=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 bje=z$1.array(n$.extend({id:z$1.string(),name:z$1.string(),description:z$1.string().optional(),labels:z$1.string().array().optional()})),Tje=n$.extend({id:z$1.string(),name:z$1.string(),description:z$1.string().optional(),content:f_}),Aje=z$1.array(Tje);z$1.object({tests:bje,modules:Aje,labels:z$1.string().array()});z$1.string().array();var u8=z$1.object({pathSegments:z$1.string().array()});sj.merge(Wo);var d8=z$1.object({schemaVersion:z$1.string(),stepLists:cl}),m8=Wo.partial().merge(Ts.pick({id:true})),Mf="1-255 chars; Only letters/numbers/dashes. Cannot start/end with '-'. Not '.yaml', 'none', or UUID.",o$={name:z$1.string().min(1).max(255).describe(Mf),description:z$1.string().optional(),baseUrl:z$1.url().optional().describe("For LLM: Ask the user for the base URL if they don't provide it."),environment:z$1.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$1.enum(Hc).optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),viewport:vm.optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),pathSegments:z$1.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.")},p8=z$1.object(o$);sj.extend(z$1.object({relativeFilePath:z$1.string().describe("relative to project root")}).shape);var h8=z$1.object({name:z$1.string()});z$1.object({relativeFilePath:z$1.string()});var g8=z$1.object({name:z$1.string(),sourceModuleContent:f_});z$1.object({relativeFilePath:z$1.string()});var f8=z$1.object({name:z$1.string(),description:z$1.string(),enabled:z$1.boolean(),steps:z$1.lazy(()=>cn.array()),testFilePath:z$1.string().describe("relative to the project root"),folderPath:z$1.string().optional().describe("user selected folder path")}),y8=z$1.object({name:z$1.string(),description:z$1.string(),enabled:z$1.boolean()}).partial(),S8=z$1.object({folderPath:z$1.string()}),b8=z$1.object({folderPath:z$1.string()});z$1.array(Gv);var T8=z$1.object({defaultEnv:z$1.string().optional().describe("name of the default env, or undefined to unset")}),A8=z$1.object({configFilePath:z$1.string().describe("full path on disk")});z$1.object({hasEntities:z$1.boolean()});z$1.string().array();z$1.object({message:z$1.string(),newRelativeTestPath:z$1.string().optional()});var r$=z$1.object({name:z$1.string(),absolutePath:z$1.string(),relativePath:z$1.string(),pathSegments:z$1.array(z$1.string()),isDirectory:z$1.boolean(),size:z$1.number(),createdAt:z$1.coerce.date(),modifiedAt:z$1.coerce.date(),accessedAt:z$1.coerce.date()}),E8=z$1.object({pathSegments:z$1.array(z$1.string()),directoriesOnly:z$1.boolean().optional()});z$1.object({absolutePath:z$1.string(),pathSegments:z$1.array(z$1.string()),contents:z$1.array(r$)});var v8=z$1.object({sourceDirectoryPath:z$1.string().optional(),value:z$1.string(),allowedExtensions:z$1.array(z$1.string()).optional()}),Eje=z$1.object({name:z$1.string(),value:z$1.string(),isDirectory:z$1.boolean()});z$1.object({suggestions:z$1.array(Eje)});var w8=z$1.object({pathSegments:z$1.array(z$1.string())}),R8=z$1.object({pathSegments:z$1.array(z$1.string()),newPathSegments:z$1.array(z$1.string())}),C8=z$1.object({pathSegments:z$1.array(z$1.string()),recursive:z$1.boolean().optional()});z$1.object({success:z$1.boolean(),message:z$1.string(),pathSegments:z$1.array(z$1.string()).optional()});z$1.object({gitBranch:z$1.string(),fileMtime:z$1.coerce.date(),gitCommitSha:z$1.string()});var I8=typeof process<"u"&&true&&true,OP=58889,Ib=24*60*60*1e3;var x8=z$1.record(z$1.string(),z$1.string()),vje=z$1.object({type:z$1.literal("stdio").optional(),command:z$1.string().min(1),args:z$1.array(z$1.string()).optional(),env:x8.optional(),cwd:z$1.string().optional()}),wje=z$1.object({type:z$1.enum(["http","sse"]).optional(),url:z$1.string().min(1),headers:x8.optional()}),Rje=z$1.union([vje,wje]),_8=z$1.record(z$1.string().min(1),Rje);var P8=z$1.string().trim().min(1).max(255).regex(/^[^/\\]+$/).refine(e=>e!=="."&&e!=="..");z$1.object({source:z$1.string().trim().min(1).max(500).refine(e=>P8.safeParse(e.split("/").at(-1)).success)});var O8=z$1.object({filename:P8,downloadUrl:z$1.url()});z$1.object({filename:z$1.string().trim().min(1),destination:z$1.string().trim().min(1).optional()});var M8=z$1.object({destination:z$1.string(),uploadUrl:z$1.url()});var Vw=(o=>(o.DARWIN="darwin",o.LINUX="linux",o.WINDOWS="win32",o))(Vw||{}),k8=z$1.enum(Vw),Ww=(r=>(r.AZURE="AZURE",r.KERNEL="KERNEL",r.BROWSERBASE="BROWSERBASE",r.SELF_HOSTED="SELF_HOSTED",r))(Ww||{}),MP=z$1.enum(Ww);z$1.object({azureRegion:z$1.string().optional(),azureWorkspaceId:z$1.string().optional()});z$1.object({});z$1.object({});var Cje=z$1.enum(["us-west-2","us-east-1","eu-central-1","ap-southeast-1"]);z$1.object({region:Cje.optional()});var i$=(t=>(t.TEST_REVIEW="TEST_REVIEW",t))(i$||{});var Ije=z$1.object({type:z$1.literal("DESCRIPTION_UPDATE"),thoughts:z$1.string()}),kP=z$1.discriminatedUnion("type",[Ije]),xje=z$1.object({testId:z$1.string(),name:z$1.string(),orgId:z$1.string(),runId:z$1.string(),steps:cn.array(),purpose:z$1.enum(i$),details:kP.or(kP.array()).optional()});xje.pick({name:true,orgId:true});var _je=z$1.object({id:z$1.string(),name:z$1.string().nullish(),createdAt:z$1.string().pipe(z$1.coerce.date()).or(z$1.date()),organizationId:z$1.string(),schemaVersion:z$1.string(),runId:z$1.string().nullish(),purpose:z$1.enum(i$),details:kP.or(kP.array()).optional(),applied:z$1.boolean().nullish(),appliedAt:z$1.coerce.date().nullish()}),L8=_je.extend({steps:cn.array()});var N8=z$1.enum(["v1","v2"]);var Oje=z$1.enum(["element","content","attribute","tag_name","style"]),LP=z$1.enum(["exists","visible","enabled","editable","focused","contains","equals","starts_with"]);[...kJ,...MJ].forEach(e=>{if(!LP.options.includes(e.toLowerCase()))throw new Error(`V2CheckConditionSchema is missing option: ${e}`)});var s$={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}},B8={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"}},U8={ELEMENT_EXISTENCE:"element",ELEMENT_CONTENT:"content",ELEMENT_ATTRIBUTE:"attribute",ELEMENT_NAME:"tag_name",ELEMENT_STYLE:"style"};function D8(e){return {alias:a$(e),subject:e.subject,condition:e.condition,negated:e.negated,assertionType:s$[e.subject].assertionType,requiresName:s$[e.subject].requiresName,requiresValue:e.subject!=="element"&&e.condition!=="exists"}}function a$(e){let t=s$[e.subject],n=B8[e.condition];if(!H8(e.subject,e.condition))throw new Error(`Unsupported element check alias for subject '${e.subject}' and condition '${e.condition}'.`);let o=e.negated?n.negativeAliasSuffix:n.positiveAliasSuffix;return `checkElement${t.aliasPrefix}${o}`}function H8(e,t){let n=B8[t],o=n.elementCondition,r=n.contentOperation;return e==="element"?o!==void 0:r!==void 0}var Mje=Oje.options.flatMap(e=>LP.options.flatMap(t=>H8(e,t)?[D8({subject:e,condition:t,negated:false}),D8({subject:e,condition:t,negated:true})]:[])),NP=new Map(Mje.map(e=>[e.alias,e]));var kje=z$1.enum(Hu),Lje=z$1.enum(sl);function na(e){return NP.get(e)}function $8(e){let t=U8[e.type],n=e.type==="ELEMENT_EXISTENCE"?e.condition:e.operation;return a$({subject:t,condition:Nje(n),negated:e.negated})}function G8(e){return kje.parse(e.toUpperCase())}function qw(e){return Lje.parse(e.toUpperCase())}function Nje(e){return LP.parse(e.toLowerCase())}var _b=z$1.string().regex(/\S+\s+\S+/,"Bare AI action goals must contain multiple words.").describe("Multi-word natural-language goal for an AI action V3 step."),St={saveAs:z$1.string().optional(),retries:z$1.number().optional(),skipped:z$1.boolean().optional(),comment:z$1.string().optional()};z$1.object(St);var Pb=Object.keys(St);function nt(e){return z$1.union([z$1.strictObject({[e.key]:e.simplified}),z$1.strictObject({[e.key]:e.detailed})])}function ko(e){return z$1.strictObject({[e.key]:e.detailed})}function Dje(e,t){let n=Array.from({length:t.length+1},(o,r)=>r);for(let o=1;o<=e.length;o+=1){let r=[o],i=e.charAt(o-1);for(let s=1;s<=t.length;s+=1)r.push(i===t.charAt(s-1)?n[s-1]??0:Math.min((n[s-1]??0)+1,(n[s]??0)+1,(r[s-1]??0)+1));n.splice(0,n.length,...r);}return n[t.length]??0}function z8(e,t){let n=e.toLowerCase(),o,r=.5;for(let i of t){let s=i.toLowerCase(),a=Math.max(n.length,s.length),l=a===0?1:1-Dje(n,s)/a;l>r&&(r=l,o=i);}return o}var V8='Coordinates must be "x, y" pixel values, e.g. "100, 200"',Ob=z$1.union([Fu,z$1.string().regex(/^\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*$/,V8)],{error:V8});z$1.union([z$1.string(),Fu]);var Fa={css:z$1.string().optional(),coords:Ob.optional(),x:z$1.union([z$1.number(),z$1.string()]).optional(),y:z$1.union([z$1.number(),z$1.string()]).optional()},c$={on:z$1.string().optional(),...Fa},gl={...St,effort:pt.optional(),useSelector:z$1.boolean().optional(),force:z$1.boolean().optional(),DANGEROUS_FORCE_DYNAMIC:z$1.boolean().optional(),iframe:z$1.string().optional()},kb={...gl,offset:Ob.optional()};function vs({schema:e,descriptionKey:t,required:n=true}){return e.superRefine((o,r)=>{let s=[t in o?Object.entries(o).find(([a])=>a===t)?.[1]:void 0,"css"in o?o.css:void 0,"coords"in o?o.coords:void 0,"x"in o||"y"in o?true:void 0].filter(a=>a!==void 0).length;n&&s!==1&&r.addIssue({code:"custom",message:`Use exactly one target: ${t}, css, coords, or x/y.`}),!n&&s>1&&r.addIssue({code:"custom",message:`Use at most one target: ${t}, css, coords, or x/y.`}),("x"in o||"y"in o)&&(!("x"in o)||o.x===void 0||!("y"in o)||o.y===void 0)&&r.addIssue({code:"custom",message:"x and y must be provided together."});})}var Fje=vs({descriptionKey:"on",schema:z$1.strictObject({...c$,...kb,times:z$1.int().min(1).optional(),rightClick:z$1.boolean().optional(),waitForDownload:z$1.boolean().optional(),delay:z$1.number().optional(),downloadTimeout:z$1.number().optional()})}),Bje=vs({descriptionKey:"on",schema:z$1.strictObject({...c$,...kb,rightClick:z$1.boolean().optional(),waitForDownload:z$1.boolean().optional(),delay:z$1.number().optional(),downloadTimeout:z$1.number().optional()})}),Uje=vs({descriptionKey:"on",schema:z$1.strictObject({...c$,...kb,times:z$1.int().min(1).optional(),waitForDownload:z$1.boolean().optional(),delay:z$1.number().optional(),downloadTimeout:z$1.number().optional()})}),W8=nt({key:"click",simplified:z$1.string(),detailed:Fje}),q8=nt({key:"doubleClick",simplified:z$1.string(),detailed:Bje}),K8=nt({key:"rightClick",simplified:z$1.string(),detailed:Uje}),Hje=vs({descriptionKey:"into",required:false,schema:z$1.strictObject({text:z$1.string(),into:z$1.string().optional(),...Fa,...kb,pressEnter:z$1.boolean().optional(),clear:z$1.union([z$1.literal("inputs"),z$1.literal("always"),z$1.literal("never"),z$1.boolean()]).optional(),delay:z$1.number().optional()})}),Y8=nt({key:"type",simplified:z$1.string(),detailed:Hje}),jje=vs({descriptionKey:"into",required:false,schema:z$1.strictObject({text:z$1.string(),into:z$1.string().optional(),...Fa,...kb,pressEnter:z$1.boolean().optional()})}),J8=nt({key:"fill",simplified:z$1.string(),detailed:jje}),X8=ko({key:"select",detailed:vs({descriptionKey:"from",schema:z$1.strictObject({from:z$1.string().optional(),...Fa,label:z$1.string().optional(),value:z$1.string().optional(),index:z$1.union([z$1.string(),z$1.number()]).optional(),...gl})}).superRefine((e,t)=>{[e.label,e.value,e.index].filter(o=>o!==void 0).length!==1&&t.addIssue({code:"custom",message:"select requires exactly one of label, value, or index"});})}),Q8=nt({key:"hover",simplified:z$1.string(),detailed:vs({descriptionKey:"on",schema:z$1.strictObject({on:z$1.string().optional(),...Fa,...kb})})}),Z8=ko({key:"blur",detailed:vs({descriptionKey:"on",required:false,schema:z$1.strictObject({on:z$1.string().optional(),...Fa,...gl})})}),e9=nt({key:"focus",simplified:z$1.string(),detailed:vs({descriptionKey:"on",schema:z$1.strictObject({on:z$1.string().optional(),...Fa,...gl})})}),t9=ko({key:"dragAndDrop",detailed:z$1.strictObject({from:z$1.string().optional(),to:z$1.string().optional(),fromCss:z$1.string().optional(),toCss:z$1.string().optional(),fromCoords:Ob.optional(),toCoords:Ob.optional(),fromX:z$1.union([z$1.number(),z$1.string()]).optional(),fromY:z$1.union([z$1.number(),z$1.string()]).optional(),toX:z$1.union([z$1.number(),z$1.string()]).optional(),toY:z$1.union([z$1.number(),z$1.string()]).optional(),steps:z$1.number().optional(),hover:z$1.number().optional(),...gl}).superRefine((e,t)=>{let n=[e.from,e.fromCss,e.fromCoords,e.fromX!==void 0||e.fromY!==void 0?true:void 0].filter(r=>r!==void 0).length,o=[e.to,e.toCss,e.toCoords,e.toX!==void 0||e.toY!==void 0?true:void 0].filter(r=>r!==void 0).length;n!==1&&t.addIssue({code:"custom",message:"Use exactly one from target."}),o!==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."});})}),n9=z$1.union([z$1.strictObject({mouseDrag:Ob}),z$1.strictObject({mouseDrag:vs({descriptionKey:"from",required:false,schema:z$1.strictObject({from:z$1.string().optional(),...Fa,delta:Ob,steps:z$1.number().optional(),...gl})})})]),o9=nt({key:"press",simplified:z$1.string(),detailed:z$1.strictObject({key:z$1.string(),repeat:z$1.number().optional(),delay:z$1.number().optional(),convertMeta:z$1.boolean().optional(),...St,effort:pt.optional()})}),r9=nt({key:"keyDown",simplified:z$1.string(),detailed:z$1.strictObject({key:z$1.string(),convertMeta:z$1.boolean().optional(),...St,effort:pt.optional()})}),i9=nt({key:"keyUp",simplified:z$1.string(),detailed:z$1.strictObject({key:z$1.string(),convertMeta:z$1.boolean().optional(),...St,effort:pt.optional()})}),Mb=z$1.number().int().min(0).max(6e4).multipleOf(1e3),s9=nt({key:"navigate",simplified:z$1.string(),detailed:z$1.strictObject({url:z$1.string(),timeout:Mb.optional(),...St,effort:pt.optional()})}),a9=nt({key:"newTab",simplified:z$1.string(),detailed:z$1.strictObject({url:z$1.string(),timeout:Mb.optional(),...St,effort:pt.optional()})}),l9=nt({key:"switchTab",simplified:z$1.union([z$1.number(),z$1.string()]),detailed:z$1.strictObject({substring:z$1.string().optional(),regex:z$1.string().optional(),index:z$1.union([z$1.string(),z$1.number()]).optional(),timeout:Mb.optional(),loadTimeout:Mb.optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{[e.substring,e.regex,e.index].filter(o=>o!==void 0).length!==1&&t.addIssue({code:"custom",message:"switchTab requires exactly one of substring, regex, or index"});})}),c9=ko({key:"closeTab",detailed:z$1.strictObject({substring:z$1.string().optional(),regex:z$1.string().optional(),index:z$1.union([z$1.string(),z$1.number()]).optional(),timeout:Mb.optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{[e.substring,e.regex,e.index].filter(o=>o!==void 0).length<=1||t.addIssue({code:"custom",message:"closeTab accepts at most one of substring, regex, or index"});})}),u9=ko({key:"goBack",detailed:z$1.strictObject({...St,effort:pt.optional()})}),d9=ko({key:"goForward",detailed:z$1.strictObject({...St,effort:pt.optional()})}),m9=ko({key:"refresh",detailed:z$1.strictObject({timeout:Mb.optional(),...St,effort:pt.optional()})}),kf=z$1.enum(["goBack","goForward","refresh","paste","authSave","offline","online","blur","visualDiff","captcha","closeTab"]),p9=nt({key:"scrollUp",simplified:z$1.number().nonnegative(),detailed:vs({descriptionKey:"in",required:false,schema:z$1.strictObject({pixels:z$1.number().nonnegative().optional(),in:z$1.string().optional(),...Fa,...gl})})}),h9=nt({key:"scrollDown",simplified:z$1.number().nonnegative(),detailed:vs({descriptionKey:"in",required:false,schema:z$1.strictObject({pixels:z$1.number().nonnegative().optional(),in:z$1.string().optional(),...Fa,...gl})})}),g9=nt({key:"scrollLeft",simplified:z$1.number().nonnegative(),detailed:vs({descriptionKey:"in",required:false,schema:z$1.strictObject({pixels:z$1.number().nonnegative().optional(),in:z$1.string().optional(),...Fa,...gl})})}),f9=nt({key:"scrollRight",simplified:z$1.number().nonnegative(),detailed:vs({descriptionKey:"in",required:false,schema:z$1.strictObject({pixels:z$1.number().nonnegative().optional(),in:z$1.string().optional(),...Fa,...gl})})}),y9=nt({key:"wait",simplified:z$1.number(),detailed:z$1.strictObject({ms:z$1.number(),...St,effort:pt.optional()})}),$je=nt({key:"assert",simplified:z$1.string(),detailed:z$1.strictObject({that:z$1.string(),timeout:z$1.number().optional(),DANGEROUS_FORCE_DYNAMIC:z$1.boolean().optional(),iframe:z$1.string().optional(),source:z$1.string().optional(),...St,effort:pt.optional()})}),Gje=nt({key:"assertVisually",simplified:z$1.string(),detailed:z$1.strictObject({that:z$1.string(),timeout:z$1.number().optional(),DANGEROUS_FORCE_DYNAMIC:z$1.boolean().optional(),iframe:z$1.string().optional(),source:z$1.string().optional(),...St,effort:pt.optional()})}),DP=$je,FP=Gje,S9=nt({key:"checkPageContains",simplified:z$1.string(),detailed:z$1.strictObject({text:z$1.string(),timeout:z$1.number().optional(),iframe:z$1.string().optional(),...St,effort:pt.optional()})}),b9=nt({key:"checkPageDoesNotContain",simplified:z$1.string(),detailed:z$1.strictObject({text:z$1.string(),timeout:z$1.number().optional(),iframe:z$1.string().optional(),...St,effort:pt.optional()})}),u$=z$1.union([S9,b9]),zje=z$1.record(z$1.string(),z$1.unknown().optional()),BP=zje.superRefine((e,t)=>{let n=Object.keys(e),o=n[0];if(n.length!==1||o===void 0){t.addIssue({code:"custom",message:"element checks require exactly one checkElement... key"});return}let r=na(o);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=vs({descriptionKey:"element",schema:z$1.looseObject({element:z$1.string().optional(),...Fa,...gl,timeout:z$1.number().optional(),name:z$1.string().optional(),value:z$1.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"]});}),T9=nt({key:"extract",simplified:z$1.string(),detailed:z$1.strictObject({goal:z$1.string(),schema:yh.optional(),DANGEROUS_FORCE_DYNAMIC:z$1.boolean().optional(),iframe:z$1.string().optional(),...St,effort:pt.optional()})}),A9=nt({key:"cookie",simplified:z$1.string(),detailed:z$1.strictObject({value:z$1.string(),...St,effort:pt.optional()})}),E9=ko({key:"localStorage",detailed:z$1.strictObject({key:z$1.string(),value:z$1.string(),...St,effort:pt.optional()})}),v9=nt({key:"request",simplified:z$1.string(),detailed:z$1.strictObject({url:z$1.string(),method:pm.optional(),headers:z$1.record(z$1.string(),z$1.string()).optional(),params:z$1.record(z$1.string(),z$1.string()).optional(),body:yh.optional(),contentType:z$1.enum(ju).optional(),timeout:z$1.number().optional(),...St,effort:pt.optional()})}),w9=ko({key:"graphqlRequest",detailed:z$1.strictObject({url:z$1.string(),query:z$1.string(),variables:yh.optional(),headers:z$1.record(z$1.string(),z$1.string()).optional(),timeout:z$1.number().optional(),...St,effort:pt.optional()})}),UP=nt({key:"javascript",simplified:z$1.string(),detailed:z$1.strictObject({code:z$1.string(),environment:z$1.enum(["node","browser","NODE","BROWSER"]).optional(),fragment:z$1.boolean().optional(),timeout:z$1.number().optional(),...St,effort:pt.optional()})}),Lb={substring:z$1.string().optional(),glob:z$1.string().optional(),regex:z$1.string().optional(),domain:z$1.string().optional()};function Vje(e){return [e.substring,e.glob,e.regex,e.domain].filter(t=>t!==void 0).length}function Nb(e){let t=Vje(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 R9=ko({key:"header",detailed:z$1.strictObject({name:z$1.string(),value:z$1.string(),...Lb,method:z$1.string().optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{Nb({payload:e,ctx:t,required:false});})}),C9=ko({key:"mock",detailed:z$1.strictObject({...Lb,method:z$1.string().optional(),responseGenerator:z$1.string(),fetchOriginalResponse:z$1.boolean().optional(),key:z$1.string().optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{Nb({payload:e,ctx:t,required:true});})}),I9=nt({key:"removeRouteMock",simplified:z$1.string(),detailed:z$1.strictObject({key:z$1.string().optional(),...St,effort:pt.optional()})}),x9=nt({key:"waitForUrl",simplified:z$1.string(),detailed:z$1.strictObject({...Lb,caseInsensitive:z$1.boolean().optional(),timeout:z$1.number().optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{Nb({payload:e,ctx:t,required:true});})}),_9=nt({key:"waitForUrlNotToMatch",simplified:z$1.string(),detailed:z$1.strictObject({...Lb,caseInsensitive:z$1.boolean().optional(),timeout:z$1.number().optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{Nb({payload:e,ctx:t,required:true});})}),Wje=z$1.union([x9,_9]),P9=nt({key:"dialog",simplified:z$1.enum(["ACCEPT","DISMISS"]),detailed:z$1.strictObject({action:z$1.enum(["ACCEPT","DISMISS"]),...St,effort:pt.optional()})}),O9=nt({key:"fileUpload",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string(),name:z$1.string().optional(),...St,effort:pt.optional()})}),M9=nt({key:"copy",simplified:z$1.union([z$1.string(),z$1.boolean(),z$1.null()]),detailed:z$1.strictObject({value:z$1.union([z$1.string(),z$1.boolean(),z$1.null()]),...St,effort:pt.optional()})}),k9=ko({key:"paste",detailed:z$1.strictObject({...St,effort:pt.optional()})}),L9=ko({key:"captcha",detailed:z$1.strictObject({...gl})}),qje=z$1.strictObject({data:z$1.union([z$1.string(),il]),width:z$1.number(),height:z$1.number()}),N9=nt({key:"visualDiff",simplified:z$1.string(),detailed:vs({descriptionKey:"on",required:false,schema:z$1.strictObject({on:z$1.string().optional(),...Fa,threshold:z$1.number().optional(),screenshot:qje.optional(),...gl})})}),D9=ko({key:"offline",detailed:z$1.strictObject({...St,effort:pt.optional()})}),F9=ko({key:"online",detailed:z$1.strictObject({...St,effort:pt.optional()})}),B9=ko({key:"registerRequestListener",detailed:z$1.strictObject({...Lb,key:z$1.string(),method:z$1.string().optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{Nb({payload:e,ctx:t,required:true});})}),U9=nt({key:"awaitListener",simplified:z$1.string(),detailed:z$1.strictObject({key:z$1.string(),timeout:z$1.number().optional(),...St,effort:pt.optional()})}),H9=ko({key:"recordRequests",detailed:z$1.strictObject({...Lb,key:z$1.string(),method:z$1.string().optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{Nb({payload:e,ctx:t,required:true});})}),j9=nt({key:"getRecordedRequests",simplified:z$1.string(),detailed:z$1.strictObject({key:z$1.string(),...St,effort:pt.optional()})}),$9=nt({key:"authLoad",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string(),...St,effort:pt.optional()})}),G9=nt({key:"authSave",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string().optional(),...St,effort:pt.optional()})});z$1.union([W8,q8,K8,l9,c9,Y8,J8,X8,Q8,Z8,e9,t9,n9,o9,r9,i9,s9,a9,u9,d9,m9,p9,h9,g9,f9,y9,DP,FP,u$,T9,A9,E9,v9,w9,UP,R9,C9,I9,Wje,P9,O9,M9,k9,L9,N9,D9,F9,B9,U9,H9,j9,$9,G9,BP]);var z9=new Map([["click",W8],["doubleClick",q8],["rightClick",K8],["switchTab",l9],["closeTab",c9],["type",Y8],["fill",J8],["select",X8],["hover",Q8],["blur",Z8],["focus",e9],["dragAndDrop",t9],["mouseDrag",n9],["press",o9],["keyDown",r9],["keyUp",i9],["navigate",s9],["newTab",a9],["goBack",u9],["goForward",d9],["refresh",m9],["scrollUp",p9],["scrollDown",h9],["scrollLeft",g9],["scrollRight",f9],["wait",y9],["assert",DP],["assertVisually",FP],["checkPageContains",S9],["checkPageDoesNotContain",b9],["extract",T9],["cookie",A9],["localStorage",E9],["request",v9],["graphqlRequest",w9],["javascript",UP],["header",R9],["mock",C9],["removeRouteMock",I9],["waitForUrl",x9],["waitForUrlNotToMatch",_9],["dialog",P9],["fileUpload",O9],["copy",M9],["paste",k9],["captcha",L9],["visualDiff",N9],["offline",D9],["online",F9],["registerRequestListener",B9],["awaitListener",U9],["recordRequests",H9],["getRecordedRequests",j9],["authLoad",$9],["authSave",G9]]),d$=Object.freeze([...z9.keys()]),Kje=[...d$,...NP.keys()],id=z$1.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 n=Object.keys(e),o=n[0];if(n.length!==1||o===void 0){t.addIssue({code:"custom",message:"Steps must have exactly one action key."});return}let r=z9.get(o)??(na(o)?BP:void 0);if(!r){let s=z8(o,Kje);t.addIssue({code:"custom",message:`Unsupported step type '${o}'.${s?` Did you mean '${s}'?`:""} See https://momentic.ai/docs/reference/commands for every step type.`});return}let i=r.safeParse(e);if(!i.success){let s=Yje(i.error.issues,o);s.length>0&&V9(t,s);}});function Yje(e,t){return Jje(e).filter(n=>!Xje(n,t))}function V9(e,t){for(let n of t){if(n.code==="invalid_union"){V9(e,m$(n));continue}e.addIssue({...n});}}function Jje(e){let t=[];for(let n of e){if(n.code==="invalid_union"){t.push(...m$(n));continue}t.push(n);}return t}function Xje(e,t){return e.code!=="unrecognized_keys"?false:t===void 0?e.path.length===0:e.path.length===1&&e.path[0]===t}function m$(e){let t=e.errors[0]??[],n=l$(t);for(let o of e.errors.slice(1)){let r=l$(o);r>n&&(t=o,n=r);}return t}function l$(e){return e.reduce((t,n)=>{let o=n.code==="invalid_union"?l$(m$(n)):0;return t+n.path.length+o},0)}var W9=z$1.strictObject({string:z$1.string()}),Qje=z$1.strictObject({javascript:z$1.string()}),q9=z$1.union([W9,Qje]),Zje=z$1.union([z$1.strictObject({name:z$1.string(),required:z$1.boolean().optional(),default:W9.optional()}),z$1.strictObject({name:z$1.string(),required:z$1.boolean().optional(),defaultValue:z$1.string()})]),K9=Zje.array(),e$e=z$1.strictObject({name:z$1.string(),default:q9.optional(),enum:z$1.array(z$1.string()).optional()}),Y9=e$e.array(),Kw=z$1.union([q9,z$1.string()]),J9=z$1.record(z$1.string(),Kw);var t$e=z$1.preprocess(e=>typeof e=="number"?String(e):e,qU),HP=z$1.looseObject({goal:z$1.string(),version:t$e.optional(),cache:z$1.literal(false).optional(),...St}),n$e=z$1.union([z$1.strictObject({act:z$1.string()}),z$1.strictObject({act:HP})]),p$=z$1.looseObject({path:z$1.string(),inputs:z$1.record(z$1.string(),Kw).optional(),...St}),o$e=z$1.union([z$1.strictObject({module:z$1.string()}),z$1.strictObject({module:p$})]),km=z$1.union([DP,FP,u$,UP,BP]),r$e=new Set(["then","effort",...Pb]),i$e=z$1.looseObject({then:z$1.lazy(()=>Yc.array()),effort:pt.optional(),...St}).superRefine((e,t)=>{Object.entries(e).filter(([o,r])=>!r$e.has(o)&&km.safeParse({[o]:r}).success).length!==1&&t.addIssue({code:"custom",message:"Conditional steps require exactly one assertion condition at the top level."});}),s$e=z$1.strictObject({if:i$e}),a$e=new Set(["do","maxIterations","effort",...Pb]),l$e=z$1.looseObject({do:z$1.lazy(()=>Yc.array()),maxIterations:z$1.number().int().positive().optional(),effort:pt.optional(),...St}).superRefine((e,t)=>{let n=Object.entries(e).filter(([o,r])=>!a$e.has(o)&&km.safeParse({[o]:r}).success).length;if(n>1){t.addIssue({code:"custom",message:"While loops accept at most one condition at the top level."});return}n===0&&e.maxIterations===void 0&&t.addIssue({code:"custom",message:"While loops require a condition or a maximum number of iterations."});}),c$e=z$1.strictObject({while:l$e}),Yc=z$1.lazy(()=>z$1.union([kf,_b,n$e,o$e,s$e,c$e,id]));z$1.object({before:Yc.array().optional(),steps:Yc.array(),after:Yc.array().optional()});var u$e=z$1.union([vm,z$1.string().refine(e=>{let t=e.match(/^\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\s*$/);if(!t)return false;let[,n,o]=t;return vm.safeParse({width:Number(n),height:Number(o)}).success},"Viewport must be two numeric values, e.g. 1920, 1080")]),d$e=Ks.omit({viewport:true}).extend({viewport:u$e.optional()}),h$=z$1.object({id:Qo,version:z$1.string().optional(),url:S_.optional(),description:z$1.string().optional(),retries:z$1.number().optional(),defaultEnv:z$1.string().optional(),parameters:K9.optional(),outputs:X_.optional(),disabled:z$1.boolean().optional(),labels:z$1.array(z$1.string()).optional(),runAssertions:Q_.array().optional()}).extend(d$e.shape),m$e=z$1.looseObject({fileType:z$1.literal(De.TEST_V2)}).extend(h$.shape).extend({before:Yc.array().optional(),steps:Yc.array(),after:Yc.array().optional()}),Ah=m$e.superRefine(h$e),p$e={beforeSteps:"before",afterSteps:"after"};function h$e(e,t){for(let[n,o]of Object.entries(p$e))n in e&&t.addIssue({code:"custom",message:`v2 tests must use ${o}, not ${n}`,path:[n]});}var g$e=z$1.array(z$1.string()),f$e=z$1.union([z$1.string(),z$1.record(z$1.string(),z$1.unknown().optional())]),jP=Jo.omit({moduleId:true,name:true,parameters:true,defaultParameters:true,parameterEnums:true}).extend({id:Qo,version:z$1.string().optional(),name:z$1.string().optional(),parameters:z$1.union([Y9,g$e]).optional(),defaultParameters:z$1.record(z$1.string(),z$1.string()).optional(),parameterEnums:z$1.record(z$1.string(),z$1.array(z$1.string())).optional()}),$P=z$1.looseObject(jP.extend({fileType:z$1.literal(De.MODULE_V2),steps:f$e.array().optional()}).shape).superRefine(Q9),GP=z$1.looseObject(jP.extend({fileType:z$1.literal(De.MODULE_V2),steps:Yc.array().optional()}).shape).superRefine(Q9);function X9(e){return e.steps??[]}function Q9(e,t){"main"in e&&t.addIssue({code:"custom",message:"v2 modules must use steps, not main",path:["main"]});}var g$=(n=>(n.TEST="TEST",n.MODULE="MODULE",n))(g$||{}),y$e=z$1.enum(g$),Z9=z$1.object({orgId:z$1.string(),entityType:y$e,entityId:z$1.string()}),f$=Z9.extend({entityType:z$1.literal("TEST"),stepLists:Uc}),y$=Z9.extend({entityType:z$1.literal("MODULE"),steps:ln.array()});z$1.discriminatedUnion("entityType",[f$,y$]);var e7=(o=>(o.WEB="web",o.ANDROID="android",o.IOS="ios",o))(e7||{}),S$=z$1.nativeEnum(e7);var t7=z$1.object({entity_type:z$1.string(),value:z$1.string(),schema_version:z$1.string().optional()}),n7=qv(t7),o7=t7.extend({cache_key:z$1.string()});function Yw({entityType:e,entityId:t}){return `${e}:${t}`}var Nf=z$1.string();var r7='Coordinates must be "x, y" pixel values, e.g. "100, 200"',l7=z$1.union([Fu,z$1.string().regex(/^\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*$/,r7)],{error:r7}),i7='Percent must be a number or a percent string, e.g. 90 or "90%"',c7=z$1.union([z$1.number(),z$1.string().regex(/^-?\d+(?:\.\d+)?%$/,i7)],{error:i7}).transform(e=>typeof e=="number"?e:Number(e.slice(0,-1))).pipe(z$1.number().min(0,{message:"Percent must be >= 0"}).max(100,{message:"Percent must be <= 100"})),S$e=z$1.strictObject({x:z$1.number(),y:z$1.number(),delta:z$1.number()}),u7=z$1.union([z$1.string(),S$e]),Wn={...St,DANGEROUS_FORCE_DYNAMIC:z$1.boolean().optional()},b$e=["home","power","back","app_switcher","search","volume_up","volume_down","volume_mute"],T$e=["enter","backspace","close_keyboard"],s7=["airplane_mode","data","wifi","location"],a7=["portrait","landscape"],A$e=z$1.strictObject({on:Nf.optional(),longPress:z$1.boolean().optional(),longPressDuration:z$1.number().optional(),iterations:z$1.number().optional(),tapDelay:z$1.number().optional(),offset:l7.optional(),...Wn}),d7=nt({key:"tap",simplified:Nf,detailed:A$e}),E$e=z$1.strictObject({text:z$1.string(),into:Nf.optional(),clearContent:z$1.boolean().optional(),forceClearContent:z$1.boolean().optional(),delay:z$1.number().optional(),waitForKeyboardSettle:z$1.boolean().optional(),replaceStrategy:z$1.nativeEnum(Aw).optional(),keyPressDelay:z$1.number().optional(),...Wn}),m7=nt({key:"type",simplified:z$1.string(),detailed:E$e}),p7=z$1.enum(b$e),v$e=z$1.strictObject({key:p7,longPress:z$1.boolean().optional(),...Wn}),h7=nt({key:"press",simplified:p7,detailed:v$e}),g7=z$1.enum(T$e),w$e=z$1.strictObject({key:g7,repeat:z$1.number().optional(),delay:z$1.number().optional(),keyPressDelay:z$1.number().optional(),...Wn}),f7=nt({key:"pressKey",simplified:g7,detailed:w$e}),R$e=z$1.strictObject({package:z$1.string(),activity:z$1.string().optional(),intentExtras:z$1.string().optional(),...Wn}),y7=nt({key:"openApp",simplified:z$1.string(),detailed:R$e}),S7=ko({key:"killApp",detailed:z$1.strictObject(Wn)}),b7=ko({key:"openNotifications",detailed:z$1.strictObject(Wn)}),T7=z$1.enum(["up","down","left","right"]),C$e=z$1.strictObject({direction:T7,in:u7.optional(),viewportPercent:c7.optional(),duration:z$1.number().optional(),offset:l7.optional(),...Wn}),A7=nt({key:"swipe",simplified:T7,detailed:C$e}),I$e=z$1.enum(["up","down"]),x$e=z$1.strictObject({on:Nf,direction:I$e.optional(),in:u7.optional(),scrollStepPercent:c7.optional(),maxScrollAttempts:z$1.number().optional(),...Wn}),E7=nt({key:"scrollTo",simplified:z$1.string(),detailed:x$e}),b$=nt({key:"assert",simplified:z$1.string(),detailed:z$1.strictObject({that:z$1.string(),timeout:z$1.number().optional(),...Wn})}),T$=nt({key:"assertVisually",simplified:z$1.string(),detailed:z$1.strictObject({that:z$1.string(),timeout:z$1.number().optional(),...Wn})}),v7=nt({key:"extract",simplified:z$1.string(),detailed:z$1.strictObject({goal:z$1.string(),schema:yh.optional(),...Wn})}),w7=nt({key:"checkScreenContains",simplified:z$1.string(),detailed:z$1.strictObject({text:z$1.string(),timeout:z$1.number().optional(),...Wn})}),R7=nt({key:"checkScreenDoesNotContain",simplified:z$1.string(),detailed:z$1.strictObject({text:z$1.string(),timeout:z$1.number().optional(),...Wn})}),C7=z$1.union([w7,R7]),_$e=z$1.record(z$1.string(),z$1.unknown().optional()),A$=_$e.superRefine((e,t)=>{let n=Object.keys(e),o=n[0];if(n.length!==1||o===void 0){t.addIssue({code:"custom",message:"element checks require exactly one checkElement... key"});return}let r=na(o);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$1.looseObject({on:Nf.optional(),timeout:z$1.number().optional(),name:z$1.string().optional(),value:z$1.string().optional(),...Wn}).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"]});}),P$e=z$1.strictObject({from:Nf,to:Nf,hoverDuration:z$1.number().optional(),dragDuration:z$1.number().optional(),...Wn}),I7=ko({key:"dragAndDrop",detailed:P$e}),E$=nt({key:"javascript",simplified:z$1.string(),detailed:z$1.strictObject({code:z$1.string(),timeout:z$1.number().optional(),...Wn})}),x7=nt({key:"request",simplified:z$1.string(),detailed:z$1.strictObject({url:z$1.string(),method:pm.optional(),headers:z$1.record(z$1.string(),z$1.string()).optional(),params:z$1.record(z$1.string(),z$1.string()).optional(),body:z$1.string().optional(),bodyType:z$1.nativeEnum(ju).optional(),timeout:z$1.number().optional(),...Wn})}),_7=nt({key:"wait",simplified:z$1.number(),detailed:z$1.strictObject({ms:z$1.number(),...Wn})}),P7=nt({key:"visualDiff",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string(),threshold:z$1.number().min(0).max(1).optional(),...Wn})}),O7=ko({key:"addFile",detailed:z$1.strictObject({path:z$1.string(),location:z$1.string(),...Wn})}),M7=nt({key:"setCamera",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string(),loop:z$1.boolean().optional(),playAudio:z$1.boolean().optional(),...Wn})}),k7=ko({key:"clearCamera",detailed:z$1.strictObject(Wn)}),L7=nt({key:"setMicrophone",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string(),once:z$1.boolean().optional(),...Wn})}),N7=ko({key:"clearMicrophone",detailed:z$1.strictObject(Wn)}),D7=nt({key:"installApp",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string(),...Wn})}),F7=nt({key:"uninstallApp",simplified:z$1.string(),detailed:z$1.strictObject({package:z$1.string(),...Wn})}),B7=nt({key:"toggleSettings",simplified:z$1.enum(s7),detailed:z$1.strictObject({setting:z$1.enum(s7),...Wn})}),U7=nt({key:"rotate",simplified:z$1.enum(a7),detailed:z$1.strictObject({orientation:z$1.enum(a7),...Wn})}),H7=nt({key:"adb",simplified:z$1.string(),detailed:z$1.strictObject({command:z$1.string(),args:z$1.string().optional(),...Wn})}),j7=ko({key:"appium",detailed:z$1.strictObject({script:z$1.string(),args:z$1.string().optional(),...Wn})}),$7=ko({key:"debugState",detailed:z$1.strictObject(Wn)}),G7=z$1.enum(["killApp","openNotifications","debugState","clearCamera","clearMicrophone"]);z$1.union([d7,m7,h7,f7,y7,S7,b7,A7,E7,b$,T$,v7,C7,I7,E$,x7,_7,P7,O7,M7,k7,L7,N7,D7,F7,B7,U7,H7,j7,$7,A$]);var z7=new Map([["tap",d7],["type",m7],["press",h7],["pressKey",f7],["openApp",y7],["killApp",S7],["openNotifications",b7],["swipe",A7],["scrollTo",E7],["assert",b$],["assertVisually",T$],["extract",v7],["checkScreenContains",w7],["checkScreenDoesNotContain",R7],["dragAndDrop",I7],["javascript",E$],["request",x7],["wait",_7],["visualDiff",P7],["addFile",O7],["setCamera",M7],["clearCamera",k7],["setMicrophone",L7],["clearMicrophone",N7],["installApp",D7],["uninstallApp",F7],["toggleSettings",B7],["rotate",U7],["adb",H7],["appium",j7],["debugState",$7]]);Object.freeze([...z7.keys()]);var V7=z$1.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 n=Object.keys(e),o=n[0];if(n.length!==1||o===void 0){t.addIssue({code:"custom",message:"v2 mobile commands must have exactly one action key."});return}let r=z7.get(o)??(na(o)?A$:void 0);if(!r){t.addIssue({code:"custom",message:`Unsupported v2 mobile command '${o}'.`});return}let i=r.safeParse(e);if(!i.success)for(let s of i.error.issues)t.addIssue({...s});}),v$=z$1.union([b$,T$,C7,E$,A$]);var O$e=z$1.preprocess(e=>typeof e=="number"?String(e):e,Ij),M$e=z$1.looseObject({goal:z$1.string(),version:O$e.optional(),cache:z$1.literal(false).optional(),precondition:z$1.string().optional(),postcondition:z$1.string().optional(),...St}),k$e=z$1.union([z$1.strictObject({act:z$1.string()}),z$1.strictObject({act:M$e})]),L$e=z$1.looseObject({path:z$1.string(),inputs:z$1.record(z$1.string(),Kw).optional(),...St}),N$e=z$1.union([z$1.strictObject({module:z$1.string()}),z$1.strictObject({module:L$e})]),D$e=new Set(["then",...Pb]),F$e=z$1.looseObject({then:z$1.lazy(()=>Jc.array()),...St}).superRefine((e,t)=>{if("else"in e){t.addIssue({code:"custom",message:"v2 mobile conditionals do not support 'else'. Use a separate step instead.",path:["else"]});return}Object.entries(e).filter(([o,r])=>!D$e.has(o)&&v$.safeParse({[o]:r}).success).length!==1&&t.addIssue({code:"custom",message:"v2 mobile conditional steps require exactly one assertion condition at the top level."});}),B$e=z$1.strictObject({if:F$e}),U$e=new Set(["do","maxIterations",...Pb]),H$e=z$1.looseObject({do:z$1.lazy(()=>Jc.array()),maxIterations:z$1.number().int().positive().optional(),...St}).superRefine((e,t)=>{let n=Object.entries(e).filter(([o,r])=>!U$e.has(o)&&v$.safeParse({[o]:r}).success).length;if(n>1){t.addIssue({code:"custom",message:"While loops accept at most one condition at the top level."});return}n===0&&e.maxIterations===void 0&&t.addIssue({code:"custom",message:"While loops require a condition or a maximum number of iterations."});}),j$e=z$1.strictObject({while:H$e}),Jc=z$1.lazy(()=>z$1.union([G7,_b,k$e,N$e,B$e,j$e,V7]));z$1.object({before:Jc.array().optional(),steps:Jc.array(),after:Jc.array().optional()});var $$e=z$1.literal("android"),G$e=z$1.literal("ios");function zP(e){if(typeof e!="object"||e===null)return e;let t=e;if(typeof t.platform!="string")return e;let n=t.platform.toLowerCase();return n===t.platform?e:{...t,platform:n}}var W7=wb.omit({schemaVersion:true,settings:true,platform:true}).extend({version:z$1.string().optional(),platform:$$e,...kw.shape}),q7=Rb.omit({schemaVersion:true,settings:true,platform:true}).extend({version:z$1.string().optional(),platform:G$e,...kw.shape}),z$e=z$1.discriminatedUnion("platform",[W7,q7]),K7=z$1.preprocess(zP,z$e),Y7={before:Jc.array().optional(),steps:Jc.array(),after:Jc.array().optional()},J7=z$1.looseObject({fileType:z$1.literal(De.MOBILE_TEST_V2)}).extend(W7.shape).extend(Y7);z$1.preprocess(zP,J7);var X7=z$1.looseObject({fileType:z$1.literal(De.MOBILE_TEST_V2)}).extend(q7.shape).extend(Y7);z$1.preprocess(zP,X7);var V$e=z$1.discriminatedUnion("platform",[J7,X7]);z$1.preprocess(zP,V$e);var W$e=z$1.preprocess(e=>typeof e=="string"?e.toLowerCase():e,z$1.enum($_).optional().default("android")),VP=SP.omit({moduleId:true,name:true,schemaVersion:true,platform:true}).extend({id:Qo,name:z$1.string().optional(),version:z$1.string().optional(),platform:W$e});z$1.looseObject(VP.extend({fileType:z$1.literal(De.MOBILE_MODULE_V2),steps:z$1.array(z$1.record(z$1.string(),z$1.unknown().optional())).optional()}).shape);z$1.looseObject(VP.extend({fileType:z$1.literal(De.MOBILE_MODULE_V2),steps:Jc.array().optional()}).shape);var WP="x-momentic-cli-version",Z7="x-momentic-client-mode",qP="x-momentic-runner",eee="x-momentic-cli-type",KP="x-momentic-logger-tags",w$="x-momentic-effective-ai-effort",q$e="x-momentic-main-branch-name",K$e="x-momentic-branch-name",Y$e="x-momentic-commit-timestamp",J$e="x-momentic-last-commit-on-main",X$e="x-momentic-last-commit-on-main-timestamp",Q$e="x-momentic-merged-branch-name",tee="x-momentic-session-id",nee=529,oee="x-momentic-parent-trace-id";x.object({error:x.boolean(),reason:x.string(),message:x.string()});zr.merge(rj);var ree=m_;zr.merge(rj);zr.merge(RQ).extend({useConsensus:x.boolean().optional(),attemptNumber:x.number().optional()});var R$=OJ;zr.merge(CQ);var iee=y5;zr.merge(AQ);var see=H_;zr.merge(YX);zr.merge(EQ);var aee=h5;zr.merge(vQ);zr.merge(wQ);zr.merge(PQ);zr.merge(OQ);zr.merge(MQ);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 lee=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 Z$e=x.object({tests:x.record(x.string().describe("Test name (keys correspond to entries in `tests`)"),x.string().describe("Slash-separated folder name path that the test lives in (e.g. 'Auth/Login'). Top-level entities are omitted.")),modules:x.record(x.string().describe("Module name (keys correspond to entries in `modules`)"),x.string().describe("Slash-separated folder name path that the module lives in."))}),cee=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:Z$e.optional().describe("Optional map from exported entity name to its slash-separated cloud folder path. Used by the CLI to recreate folder structure on disk.")}),eGe=x.object({test:x.string().describe("test YAML"),modules:x.record(x.string().describe("moduleId"),x.string().describe("module YAML"))});eGe.array();x.object({testId:x.string(),schemaVersion:x.string()}).merge(fm);function YP(e){let{gitMainBranch:t,gitBranchName:n,gitCommitTimestamp:o,lastCommitOnMainSha:r,lastCommitOnMainTimestamp:i}=e,s={};return t&&(s[q$e]=encodeURIComponent(t)),n&&(s[K$e]=encodeURIComponent(n)),o&&(s[Y$e]=o.toISOString()),r&&(s[J$e]=encodeURIComponent(r)),i&&(s[X$e]=i.toISOString()),e.mergedGitBranchName&&(s[Q$e]=encodeURIComponent(e.mergedGitBranchName)),s}x.object({entries:x.array(ZX)});x.object({platform:S$.optional(),entries:x.array(n7)});x.object({testId:x.string(),environment:x.string().optional(),platform:S$.optional()});x.object({testId:x.string(),key:x.string(),environment:x.string().optional()});function uee(e){return x.record(x.string(),x.unknown().optional()).transform(t=>{let n={};for(let[o,r]of Object.entries(t)){let i=e.safeParse(r);i.success&&(n[o]=i.data);}return n})}var dee=uee(e5),mee=o7.array();function Q7(e){return uee(Kv(e))}var pee={ANDROID:e=>Q7(EP).parse(e),IOS:e=>Q7(vP).parse(e)},tGe=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(ho).optional()}),nGe=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(ho).optional()});x.object({completionType:x.string(),traceIds:x.string().array()});var C$=x.union([tGe,nGe]).array(),hee=x.object({trigger:x.nativeEnum(ml),status:x.nativeEnum(Ht),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 gee=x.object({status:x.nativeEnum(Ht),updatedAt:x.coerce.date().optional(),finishedAt:x.coerce.date().optional()});x.object({summary:Tf,githubRepository:x.string().optional(),gitBranchName:x.string().optional()});var oGe=x.object({runId:x.string(),healStatus:bf,healDetails:ah.optional()});x.object({updates:oGe.array()});var fee=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(ml),schemaVersion:x.string().optional(),section:x.nativeEnum(Z_).optional(),resolvedInputs:x.record(x.string(),x.string()).optional(),quarantined:x.boolean().optional().default(false),quarantinedReason:x.string().optional(),aiSettings:Na.optional()});x.object({id:x.string()});var rGe=tj.pick({id:true,status:true,healStatus:true,healDetails:true,testName:true,testId:true,test:true,failureReason:true,failureDetails:true}),yee=rGe.array(),See=tj.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 JP=x.object({run:Ys.omit({runAttempts:true}),attemptZipUrls:x.array(x.string().url().nullish())}),bee=x.object({status:x.nativeEnum(Ht),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 Tee=x.object({key:x.string()}),Aee=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()}),Eee=x.object({blocked:x.boolean()}),vee=x.array(NX),wee=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 Ree=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()}),Cee=x.object({error:x.literal("multiple_organizations"),organizations:x.array(x.object({id:x.string(),name:x.string()}))}),iGe=["web","ios","android"];x.object({platforms:x.array(x.enum(iGe)),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:QH.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 Iee=x.object({suiteRunIds:x.string().array(),runGroupIds:x.string().array()});x.object({suiteRunIds:x.string().array()});fQ.array();x.object({runGroupIds:x.string().array()});var XP=x.object({uploadUrl:x.string()});zr.merge(IQ);zr.merge(_Q);zr.merge(xQ);var QP=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(Es).optional(),aiFeature:x.nativeEnum(gh).optional(),cached:x.boolean().optional(),outcome:x.nativeEnum(Ab).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(),[tZ]:x.string().optional(),agentInvocationId:x.string().optional(),moRuntimeSecondsUsed:x.number().nonnegative().optional(),hostedBrowserSecondsUsed:x.number().optional(),sessionMinutesUsed:x.number().nonnegative().optional(),labels:x.array(x.string()).optional()});x.object({orgId:x.string(),runId:x.string().optional(),testId:x.string().optional(),isInteractive:x.boolean().optional(),runner:x.nativeEnum(Es).optional()});var sGe=x.object({transactionId:x.string(),timestamp:x.string(),event:x.nativeEnum(xf),properties:QP});sGe.array();var xee=L8.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:Fo.optional(),end:Fo.optional(),gitBranchName:x.string().optional(),status:x.nativeEnum(Ht).optional()});var _ee=rQ.array(),Pee=Ys.array(),ZP=bh.extend({testId:Qo.optional(),gitBranchName:x.string().optional(),gitCommitSha:x.string().optional(),status:x.nativeEnum(Ht).optional(),label:x.string().array().optional(),start:Fo.optional(),end:Fo.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()});ZP.extend({orgId:x.string().optional(),testId:ci(Qo),status:ci(x.nativeEnum(Ht)),gitBranchName:ci(x.string()),label:ci(x.string()),testName:x.string().optional(),trigger:ci(x.nativeEnum(ml)),executionType:ci(lh),cliVersion:ci(x.string()),githubRepository:ci(x.string()),gitlabProjectPath:ci(x.string()),environment:ci(x.string()),directory:ci(x.string()),failureCategory:ci(x.string()),exclude:ci(x.string()),healed:x.boolean().optional()});var aGe=Ys.omit({test:true}),Oee=t$.extend({runs:aGe.array()});x.object({applied:x.boolean().optional(),appliedAt:x.coerce.date().optional()});var Mee=XP.extend({id:x.string()}),lGe=x.object({resultType:x.literal("run").optional().default("run"),runGroupId:x.guid().optional(),persist:x.boolean().optional()}),cGe=x.object({resultType:x.literal("explore"),exploreRunId:x.guid(),persist:x.boolean().optional()});x.discriminatedUnion("resultType",[lGe,cGe]);var kee=x.object({runGroupId:x.guid()}),uGe=x.object({status:bf,runId:x.string(),rootCause:x.string().nullable().optional(),solution:x.string().nullable().optional(),verificationNotes:x.string().nullable().optional(),markedAt:x.string()}),Lee=x.object({quarantined:x.object({testId:Qo,quarantinedAt:x.coerce.date(),quarantinedBy:x.string().optional(),quarantinedReason:x.string(),verdict:uGe.nullish().default(null)}).array()}),I$=bh.extend({limit:bh.shape.limit.describe("Max number of quarantined tests to return per page."),page:bh.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.")}),dGe=x.object({id:x.string(),status:x.literal("FAILED"),startedAt:Fo,finishedAt:Fo,failureReason:x.string().nullish(),healStatus:bf,healDetails:ah.nullish()}),Nee=t$.extend({quarantinedTests:x.array(x.object({testId:Qo,testName:x.string().nullish(),quarantinedAt:Fo,quarantineReason:x.string(),latestFailedRun:dGe.nullable()}))}),Dee=x.object({gitLocalUsername:x.string().optional(),gitLocalEmail:x.string().optional(),gitLocalName:x.string().optional()});x.object({testId:Qo,testName:x.string().optional(),reason:x.string()}).merge(Dee);x.object({testName:x.string().optional(),reason:x.string().optional()}).merge(Dee);zr.merge(V6);zr.merge(W6);zr.merge(q6);x.object({apkToInstall:x.object({channel:x.string(),tag:x.string().optional()}).optional(),hostname:x.string().optional(),region:Gj.optional(),jurisdiction:Mw.optional(),osVersion:x.nativeEnum(vb).optional(),sessionId:x.string().optional(),runId:x.string().optional(),testId:x.string().optional(),playwrightVersion:aZ.optional()});var Fee=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:Gj.optional(),jurisdiction:Mw.optional(),osVersion:x.nativeEnum(RP).optional(),sessionId:x.string().optional(),runId:x.string().optional(),testId:x.string().optional(),installAppOnClient:x.boolean().optional()});var Bee=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()!==Jv,{message:`"${Jv}" 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()!==Jv,{message:`"${Jv}" is a reserved alias and cannot be assigned when uploading an asset.`}).optional(),md5:x.string()});var Uee=x.object({id:x.string(),tag:x.string().optional(),alias:x.string().optional(),uploadUrl:x.string().optional(),downloadUrl:x.string(),md5:x.string().optional()}),mGe=x.object({channel:x.string(),tag:x.string(),md5:x.string(),platform:x.nativeEnum(Yl).default("ANDROID"),createdAt:x.number().describe("Unix timestamp in milliseconds")}),pGe=x.object({channel:x.string(),alias:x.string(),platform:x.nativeEnum(Yl).default("ANDROID"),tag:x.string()}),Hee=x.object({assets:x.array(mGe),aliases:x.array(pGe).default([])}),jee=x.object({downloadUrl:x.string()}),eO=(n=>(n.PLAYWRIGHT="PLAYWRIGHT",n.CDP="CDP",n))(eO||{}),hGe=x.nativeEnum(eO),$ee=x.string().trim().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,79}$/);x.object({access:$ee.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(MP).optional(),localhostTunnel:x.boolean().optional()});var gGe=x.object({access:$ee.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()});gGe.extend({attemptedProviders:x.array(MP).max(Object.values(Ww).length).default([])}).strict();var fGe=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()]),Gee=x.object({accessToken:x.string().min(1),expiresAt:x.iso.datetime(),fleetApiUrl:x.url(),provider:x.literal("SELF_HOSTED"),tokenType:x.literal("Bearer")}),yGe=Gee.extend({network:fGe}).strict(),zee=x.union([yGe,Gee.strict()]),SGe=x.object({hostname:x.string(),lease:x.string(),server:x.object({host:x.string(),port:x.number().int().positive()})}),Vee=x.object({wsEndpoint:x.string(),accessToken:x.string().optional(),endpointType:hGe.optional(),provider:MP.optional(),operatingSystem:k8.optional(),tunnel:SGe.optional()});var bGe=200,TGe=2e3,Jw=z$1.string().trim().min(1).max(bGe),Eh=z$1.string().trim().min(1).max(TGe),Fb=z$1.array(Eh),AGe=z$1.enum(["verified","issues_found","blocked"]),tO=z$1.object({name:Jw,summary:Eh,preconditions:Fb,outline:Fb,acceptanceCriteria:Fb}),EGe=z$1.object({startedAt:z$1.number(),finishedAt:z$1.number(),agentId:z$1.string().optional(),windowId:z$1.string().optional(),artifactId:z$1.string().optional()}),nO=z$1.object({name:Jw,summary:Eh,expected:Eh,actual:Eh,reproSteps:Fb,recording:EGe.nullish()}),Wee=z$1.object({name:Jw.describe("The name of the bug to retract."),reason:z$1.enum(["duplicate","invalid"]).describe("Why the bug report is being retracted.")}),x$=z$1.enum(["checked","failed","partial","out_of_scope"]),_$=z$1.object({control:Jw,status:x$,result:Eh}),P$=z$1.object({status:AGe,summary:Eh,verified:Fb,gaps:Fb});z$1.object({entry:tO});z$1.object({entry:nO});z$1.object({entry:_$});z$1.object({report:P$});z$1.object({entries:z$1.array(tO)});z$1.object({entries:z$1.array(nO)});z$1.object({entries:z$1.array(_$)});z$1.object({report:P$.nullable()});var O$=z$1.object({agent:z$1.string().nullable(),conversationId:z$1.string().nullable(),createdAt:z$1.iso.datetime(),updatedAt:z$1.iso.datetime()}),vGe=tO.extend({...O$.shape,blockedReason:z$1.string().nullable()}),wGe=nO.extend({...O$.shape,investigatorAgent:z$1.string().nullable(),investigatorConversationId:z$1.string().nullable(),reviewedAt:z$1.iso.datetime().nullable()});_$.extend({agent:z$1.string(),conversationId:z$1.string()});var RGe=P$.extend({testCaseName:z$1.string().nullable(),...O$.shape}),M$=z$1.enum(["OPEN","ACCEPTED","DUPLICATE","WORKS_AS_INTENDED","CANNOT_REPRODUCE"]);z$1.object({bugName:z$1.string(),status:M$,knowledgeItemId:z$1.string().nullable(),updatedByUserId:z$1.string().nullable(),updatedAt:z$1.iso.datetime()});z$1.object({chatId:z$1.string().min(1),bugName:Jw,status:M$,reviewedKnowledgeItemIds:z$1.array(z$1.string().min(1)).optional(),reviewedKnowledgeItemStatus:O5.optional(),linkedKnowledgeItemId:z$1.string().min(1).nullable().optional()});z$1.object({entries:z$1.array(vGe)});z$1.object({entries:z$1.array(wGe)});z$1.object({entries:z$1.array(RGe)});z$1.object({testCases:z$1.number(),verified:z$1.number(),issuesFound:z$1.number(),blocked:z$1.number(),bugs:z$1.number(),bugsByTriage:z$1.record(M$,z$1.number())});z$1.object({entry:tO});z$1.object({retracted:z$1.boolean(),conflict:z$1.string().optional()});z$1.object({entry:nO});z$1.object({reason:Eh});var qee=z$1.object({id:z$1.string(),createdAt:z$1.coerce.date(),createdBy:z$1.string(),organizationId:z$1.string(),name:z$1.string(),description:z$1.string().nullish(),enabled:z$1.boolean(),schemaVersion:z$1.string().describe("Schema version for steps"),parameters:z$1.string().array().nullish().describe("Parameter list"),parameterEnums:z$1.record(z$1.string(),z$1.string().array()).nullish(),defaultParameters:z$1.record(z$1.string(),z$1.string()).nullish(),defaultCacheKey:z$1.string().nullish(),defaultCacheTtl:z$1.number().nullish(),defaultCacheAllInvocations:z$1.boolean().nullish(),autoAuth:z$1.boolean().nullish(),defaultRetries:z$1.int().min(0).nullish(),advanced:XU.nullish()});qee.extend({steps:z$1.lazy(()=>ln.array())});var Kee=5*60*1e3,Xw=Jo.extend(qee.omit({id:true,createdAt:true,createdBy:true,organizationId:true,enabled:true}).shape);var CGe="org_01HMJTX4GT1KG94KZRCT8MZ6YB",IGe="org_01HMSCJQBCCG51M2ZF65YC5B8W",xGe="org_01JPR6MGFQSHF3W234R3XJDPMB",_Ge=[CGe,IGe,xGe];function k$(e){return _Ge.includes(e)}var PGe=z$1.object({id:z$1.string(),title:z$1.string(),body:z$1.string(),imageUrl:z$1.string().nullable(),videoUrl:z$1.string().nullable(),ctaUrl:z$1.string().nullable(),publishedAt:z$1.string()}),Yee=z$1.object({update:PGe.nullable()});z$1.object({repositoriesIndexed:z$1.boolean(),indexingInProgress:z$1.boolean(),indexesOutdated:z$1.boolean()});var Jee=(s=>(s.Queued="queued",s.InProgress="in_progress",s.Completed="completed",s.Waiting="waiting",s.Requested="requested",s.Pending="pending",s))(Jee||{}),Xee=(a=>(a.Success="success",a.Failure="failure",a.Neutral="neutral",a.Cancelled="cancelled",a.Skipped="skipped",a.TimedOut="timed_out",a.ActionRequired="action_required",a))(Xee||{});z$1.object({name:z$1.string(),status:z$1.enum(Jee),conclusion:z$1.enum(Xee).nullable()});var Qw=z$1.object({sha:z$1.string(),parentShas:z$1.array(z$1.string()).optional(),message:z$1.string(),author:z$1.object({name:z$1.string().optional(),email:z$1.string().optional(),date:z$1.coerce.date().optional()}),committer:z$1.object({name:z$1.string().optional(),email:z$1.string().optional(),date:z$1.coerce.date().optional()})}),L$=z$1.object({mergedBranch:z$1.string().optional()});var Qee=z$1.object({orgId:z$1.string(),cacheKeys:z$1.string().array()});z$1.object({keyParams:Qee,clientMetadata:z$1.string(),lockAcquisitionTimeoutMs:z$1.number().optional()});var Zee=z$1.object({acquired:z$1.boolean(),acquiredByMetadata:z$1.string(),keyPrefix:z$1.string()});z$1.object({keyPrefix:z$1.string(),result:z$1.string(),ttlMs:z$1.number()});z$1.union([z$1.object({keyPrefix:z$1.string()}),Qee]);var OGe=z$1.object({remainingTtlMs:z$1.number(),value:z$1.string().nullish()});z$1.object({results:z$1.record(z$1.string(),OGe),activeLocks:z$1.string().array()});var ete=0,tte=5*60*1e3;var nte=z$1.object({cacheEntryId:z$1.string().uuid(),category:z$1.string().min(1)}),ote=sf.extend({cacheEntryId:z$1.string().uuid().optional(),runId:z$1.string().min(1).optional(),testId:z$1.string().min(1),executionFailureReason:z$1.string().min(1).optional(),classification:_U,healDetails:VX.optional()}),rte=ote.extend({isManualOverride:z$1.boolean().optional(),overriddenBy:nte.optional(),manualOverrideOf:nte.optional(),createdAt:z$1.coerce.date(),updatedAt:z$1.coerce.date()});function N$(e){return !e.branchName&&QE(e.classification.category)}sf.extend({mainBranchName:z$1.string().min(1).optional()});var ite=rte.array();z$1.object({entries:ote.array()});sf.extend({runId:z$1.string().min(1),cacheEntryId:z$1.string().uuid(),category:z$1.string().min(1)});z$1.object({status:z$1.enum(["evicted","not_found","run_mismatch"]),entry:rte.optional()});z$1.object({runId:z$1.string().min(1),environment:z$1.string().min(1).optional(),status:z$1.enum(["PASSED","FAILED"])});z$1.object({environment:z$1.string().min(1).optional()});var oO=z$1.object({skip:z$1.boolean(),failed:z$1.number(),total:z$1.number()}),MGe=.8;function ste({failed:e,completed:t,minCompletedRuns:n}){return t>=n&&e/t>=MGe}function Bb(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 kGe=z$1.object({version:z$1.string(),json:z$1.record(z$1.string(),z$1.unknown().optional()),hash:z$1.string()}),ate=z$1.record(z$1.string(),z$1.unknown().optional());z$1.object({newSvgs:z$1.array(kGe),metadata:ate.optional()});var LGe=z$1.object({version:z$1.string(),json:z$1.record(z$1.string(),z$1.unknown().optional()).nullish(),hash:z$1.string(),description:z$1.string().nullish(),metadata:ate.nullish()}),lte=z$1.record(z$1.string().describe("icon hash"),LGe);var D$="metadata.json",F$="test.yaml",cte=".snapshot.zip",B$=Wo.extend(cl.shape),NGe=z$1.object({envName:z$1.string().optional(),baseUrl:z$1.string(),variables:z$1.record(z$1.string(),z$1.unknown().optional()),resolvedEnv:Gv.optional()}),ute=z$1.object({browser:jc.optional(),ai:Na.optional(),advanced:nw.optional(),retries:z$1.number().optional()});z$1.object({momenticVersion:z$1.string(),schemaVersion:z$1.string(),createdAt:z$1.string(),relativeFilePath:z$1.string(),environment:NGe,config:ute});var dte=z$1.object({variables:z$1.record(z$1.string(),z$1.unknown().optional()),resolvedEnv:Gv.optional()}),DGe=z$1.object({envName:z$1.string().optional(),baseUrl:z$1.string(),encryptedSecrets:z$1.string()}),mte=z$1.object({momenticVersion:z$1.string(),schemaVersion:z$1.string(),createdAt:z$1.string(),relativeFilePath:z$1.string(),environment:DGe,config:ute});var FGe=z$1.looseObject({type:z$1.number(),data:z$1.record(z$1.string(),z$1.unknown()),timestamp:z$1.number()}),pte=z$1.custom(e=>FGe.safeParse(e).success);z$1.discriminatedUnion("kind",[z$1.object({kind:z$1.literal("agent-action"),tool:z$1.string(),toolCallId:z$1.string().optional(),detail:z$1.string().optional(),input:z$1.unknown().optional()}),z$1.object({kind:z$1.literal("step"),phase:z$1.enum(["start","pass","fail"]),name:z$1.string()}),z$1.object({kind:z$1.literal("window"),phase:z$1.enum(["start","stop"]),windowId:z$1.string()}),z$1.object({kind:z$1.literal("bug-marker"),title:z$1.string()}),z$1.object({kind:z$1.literal("control"),control:z$1.string(),status:x$}),z$1.object({kind:z$1.literal("network-error"),method:z$1.string(),url:z$1.string(),status:z$1.number()})]);z$1.looseObject({level:z$1.string(),payload:z$1.array(z$1.string()),trace:z$1.array(z$1.string()).optional()});function hte(e){let t;try{t=JSON.parse(e);}catch(n){return `The schema is not valid JSON. ${n}`}try{validator(t);}catch(n){return `The schema is not a valid JSON schema. ${n}`}}var gte=e=>{e.extraHeaders&&(e.extraHeaders=Object.fromEntries(Object.entries(e.extraHeaders).filter(([t,n])=>t.trim()&&n.trim())));};var rO=class{async prepareGoldenScreenshotForComparison(t,n,o){return o}};var iO=class{async resolveStepCacheEntries(){return {}}async saveStepCacheEntries(){}async saveSnapshotCacheEntries(){}async deleteStepCacheEntry(){}};function UGe(e){return e.map(t=>({...t,environment:void 0}))}function U$(e,t){return t?e:UGe(e)}var j$="browser-crash-dump.zip",H$=class{loggerBindings;attachBeforeScreenshot(){}attachAfterScreenshot(){}attachBeforeHtmlSnapshot(){}attachAfterHtmlSnapshot(){}recordTargetAutoHeal(){}storeTraceAsset(){}async finish(){}async startSubSteps(){return new Zw}},Zw=class{async getScreenshot(){}async getHtmlSnapshot(){}async startStep(){return new H$}flushResults(t){}};var dt="metadata.json",oa="assets",Ro="runs",$$=z$1.object({type:z$1.literal("explore"),id:z$1.string(),cliVersion:z$1.string().optional(),startedAt:z$1.string(),finishedAt:z$1.string(),baseSha:z$1.string(),headSha:z$1.string(),ciProvider:z$1.string().optional(),pipelineId:z$1.string().optional(),gitMainBranch:z$1.string().optional(),gitCommitSha:z$1.string().optional(),gitCommitShaShort:z$1.string().optional(),gitBranchName:z$1.string().optional(),gitOriginUrl:z$1.string().optional(),gitCommitMessage:z$1.string().optional(),gitCommitAuthorName:z$1.string().optional(),githubRepository:z$1.string().optional(),gitlabProjectPath:z$1.string().optional(),pullRequestUrl:z$1.string().optional(),result:z$1.unknown(),bugs:z$1.array(z$1.unknown()),uxNits:z$1.array(z$1.unknown()).default([]),writtenPaths:z$1.array(z$1.string()),videos:z$1.array(z$1.string()),failure:z$1.unknown().optional()});z$1.object({exploreRunId:z$1.guid(),metadata:$$,videoAssets:z$1.string().array().optional()});var fte=z$1.object({uploadUrl:z$1.string(),videoUploadUrls:z$1.record(z$1.string(),z$1.string()).optional()}),HGe=z$1.object({step:cn,status:z$1.enum(Ft),startedAt:z$1.coerce.date(),finishedAt:z$1.coerce.date().optional(),healMetadata:z$1.object({healType:z$1.enum(Yv).or(z$1.literal("AI")),healedAt:z$1.coerce.date()}).optional(),beforeSnapshotId:z$1.guid().optional(),afterSnapshotId:z$1.guid().optional(),message:z$1.string().optional()}),jGe=HGe.extend({finishedAt:z$1.coerce.date().optional().transform(e=>e??new Date)});jGe.extend({step:z$1.unknown().optional()});var G$=z$1.object({avdId:z$1.string().optional(),channel:z$1.string().optional(),tag:z$1.string().optional(),region:z$1.string().optional(),osVersion:lZ.optional()}),yte="1.0.0",Ste=bee.extend({id:z$1.guid().optional(),startedAt:z$1.coerce.date(),runAttemptSchemaVersion:z$1.string().optional(),schemaVersion:z$1.string().optional().default("1.0.19"),results:z$1.record(z$1.string(),z$1.unknown().optional()).array().optional(),beforeResults:z$1.record(z$1.string(),z$1.unknown().optional()).array().optional(),afterResults:z$1.record(z$1.string(),z$1.unknown().optional()).array().optional(),assetDetails:G$.optional(),viewport:vm.optional(),activeVideos:z$1.array(z$1.object({videoName:z$1.string(),timestamp:z$1.coerce.date()})).optional()}),eR=Ste.extend({assetDetails:G$.optional(),finishedAt:z$1.coerce.date().optional().transform(e=>e??new Date)});Ste.extend(UH.shape);var bte=eR.extend(UH.shape),$Ge=z$1.object({results:z$1.array(Xs),beforeResults:z$1.array(Xs).optional(),afterResults:z$1.array(Xs).optional()});eR.extend($Ge.shape);var GGe=z$1.object({results:z$1.array(Qs),beforeResults:z$1.array(Qs).optional(),afterResults:z$1.array(Qs).optional()});eR.extend(GGe.shape);var Tte=See.merge(fee).extend({executionType:lh.optional().default("WEB"),testId:Qo,testDescription:z$1.string().optional(),directory:z$1.string().optional(),runGroupId:z$1.guid(),status:z$1.enum(Ht),healStatus:bf,testBundleHash:z$1.string().optional(),startedAt:z$1.coerce.date(),schemaVersion:z$1.string().nullish(),attempts:z$1.number(),failureRecoveryDetails:z$1.object({attempts:z$1.number()}).optional(),aiSettings:Na.optional(),avgCpuUsage:z$1.number().optional(),avgMemoryUsage:z$1.number().optional()}),zGe=Tte.extend(G$.shape),vh=Tte.extend({finishedAt:z$1.coerce.date().optional().transform(e=>e??new Date)});zGe.extend({finishedAt:z$1.coerce.date().optional().transform(e=>e??new Date)});var sO=1e4,VGe=hee.merge(gee).extend({id:z$1.guid().optional(),startedAt:z$1.coerce.date(),cliVersion:z$1.string(),labels:z$1.string().array().optional().default([]),suiteName:z$1.string().optional(),ciProvider:z$1.string().optional(),gitMainBranch:z$1.string().optional(),ai:Na.optional(),browser:jc.optional(),sourceRunGroupIds:z$1.array(z$1.guid()).max(sO).optional(),mergedAt:z$1.coerce.date().optional(),aiSelect:z$1.union([rw.transform(e=>[e]),z$1.array(rw)]).optional()}),ic=VGe.extend({healRiskSummary:Tf.optional(),updatedAt:z$1.coerce.date().optional().transform(e=>e??new Date),finishedAt:z$1.coerce.date().optional().transform(e=>e??new Date)});var WGe=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"]),qGe=new Set(["MODULE","RESOLVED_MODULE"]);function Ate(e){return e.type!=="PRESET_ACTION"?e.type:e.command.type}function Ete(e){return qGe.has(e.type)?false:e.type!=="PRESET_ACTION"?true:!WGe.has(e.command.type)}var vte="progress.json",wte="1.0.0",KGe=z$1.object({runId:z$1.string(),testId:z$1.string().optional(),testName:z$1.string().optional(),directory:z$1.string().optional(),status:z$1.nativeEnum(Ht),completedSteps:z$1.number(),totalSteps:z$1.number(),startedAt:z$1.coerce.date(),updatedAt:z$1.coerce.date()});z$1.object({schemaVersion:z$1.string(),runGroupId:z$1.string(),status:z$1.nativeEnum(Ht),totalRuns:z$1.number(),completedRuns:z$1.number(),completedSteps:z$1.number(),totalSteps:z$1.number(),startedAt:z$1.coerce.date(),updatedAt:z$1.coerce.date(),runs:KGe.array()});function Rte(e,t){let n=mo__default.relative(t,e);return n!==""&&n!==".."&&!n.startsWith(`..${mo__default.sep}`)&&!mo__default.isAbsolute(n)}function Cte(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 Ite="CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih",Ub="https://us-west.metrics.momentic.ai",Hb="c60c6a0f-60da-41a7-a61b-07969a0aa303",fl=!!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 nze=new Set(["exit","quit"]),Pte=(()=>{try{return statSync("/.dockerenv"),!0}catch{return false}})(),oze=fl||Pte||!process.stdin.isTTY;async function Kr(e){if(fl||Pte)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(n=>setTimeout(n,100)),await confirm({message:e})}async function V$(e){let t=dirname(e);return Cte(t)?existsSync(e)?Kr(`File '${xte(e)}' already exists. Overwrite existing content?`):true:await Kr(`Directory '${xte(t)}' doesn't exist. Create it now?`)?(mkdirSync(t,{recursive:true}),true):false}function xte(e){return e.replace(/(\s+)/g,"\\$1")}async function Ote(e,t){return oze?t:(await input({message:e,default:t})).trim()||t}async function W$(){let e;try{e=(await input({message:"ask"})).trim();}catch(t){if(t instanceof Error&&t.name==="ExitPromptError"){C.info("");return}throw t}if(!nze.has(e.toLowerCase()))return e}var jb=new Map,kte="Log throttle exceeded",gze=100,fze=5e3,yze=2e4,Sze=cze(global.fetch,{retries:2,retryOn:function(e,t,n){return !!(t!==null||n&&n.status>=500)},retryDelay:function(e){return Math.pow(2,e)*500}});function bze({app:e,hostname:t,environment:n,serviceVersion:o}){return {host:t,env:n,[ATTR_SERVICE_NAME]:e,...o?{[ATTR_SERVICE_VERSION]:o}:{}}}var Tze=`${Ub}/logs/json`,q$=class{constructor(t,n){this.flushIntervalMs=t;this.maxBatchSize=n;}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 n=0;n<t.length;n+=this.maxBatchSize)await this.sendBatch(t.slice(n,n+this.maxBatchSize));}}finally{this.flushPromise=void 0;}}),await this.flushPromise;}async sendBatch(t){try{let n=await Sze(Tze,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":Ite,"x-momentic-metrics-api-key":Hb},body:Gc(t),signal:AbortSignal.timeout(yze)});if(!n.ok)throw new Error(`Got error status (${n.statusText}) from SigNoz`)}catch{}}},K$=class e{consoleLogger;hostname;bindingAttributes;disableConsoleLogs;minLevelValue=20;logsInCurrentWindow=0;droppedLogsInWindow=false;lastWindowStart=Date.now();flushIntervalMs;maxBatchSize;buffer;constructor({bindings:t,hostname:n,disableConsoleLogs:o,flushIntervalMs:r,maxBatchSize:i,buffer:s}){this.hostname=n??Nm.hostname(),this.disableConsoleLogs=o,this.bindingAttributes={...t,env:"production"},this.flushIntervalMs=r??5e3,this.maxBatchSize=i??10,this.buffer=s??new q$(this.flushIntervalMs,this.maxBatchSize);let a={base:this.bindingAttributes,errorKey:"err",level:"debug"};this.consoleLogger=Mte(a);}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===kte)return true;let n=Date.now();return n-this.lastWindowStart>fze&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,kte),this.droppedLogsInWindow=false,this.lastWindowStart=n),this.logsInCurrentWindow<gze?(this.logsInCurrentWindow++,true):(this.droppedLogsInWindow=true,false)}log(t,n,o,...r){try{this.logHelper(t,n,o,...r);}catch(i){this.consoleLogger.warn(`Failed to log to Signoz: ${i}`);}}logHelper(t,n,o,...r){if(tw[t]<this.minLevelValue||!this.shouldAllowLog(o))return;typeof n=="string"&&!o&&(n={message:n}),typeof n=="object"&&n&&"err"in n&&n.err instanceof Error&&(n.err=pze.err(n.err));let i={...this.bindingAttributes,...n&&typeof n=="object"?n:{},...r.length>0?{args:r}:{}},s=bze({app:this.bindingAttributes.app,hostname:this.hostname,environment:this.bindingAttributes.env,serviceVersion:this.bindingAttributes.cliVersion??"3.56.1"}),a=Aze();this.disableConsoleLogs||this.consoleLogger[t]({...i,...a??{}},o,...r);let l={timestamp:Math.round(Date.now()*1e6),...a??{},severity_text:t.toUpperCase(),resources:s,attributes:{},body:q5({message:o||"",...i})};this.buffer.push(l);}setApp(t){let n=this.bindingAttributes.app;this.bindingAttributes.app=t,jb.set("app",this),jb.delete(n);}debug(t,n,...o){this.log("debug",t,n,...o);}info(t,n,...o){this.log("info",t,n,...o);}warn(t,n,...o){this.log("warn",t,n,...o);}error(t,n,...o){this.log("error",t,n,...o);}bindings(){return this.bindingAttributes}addBinding(t,n){this.bindingAttributes[t]=n;}setMinLevel(t){typeof t=="number"?(this.minLevelValue=t,this.consoleLogger.level=K5[t]):(this.minLevelValue=tw[t],this.consoleLogger.level=t);}enableConsoleLogs(){this.disableConsoleLogs=false;}},$b=({app:e,hostname:t,disableConsoleLogs:n})=>(jb.has(e)||jb.set(e,new K$({bindings:{app:e},hostname:t,disableConsoleLogs:n})),jb.get(e));function Aze(){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 aO(){await Promise.all([...jb.values()].map(e=>e.flush()));}var Ua=class extends Error{callSiteStack;constructor(t){super(t),this.name="TimeoutError";}};var Nte=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:n,fallback:o,message:r,customTimers:i={setTimeout,clearTimeout}}=t,s;if(typeof n!="number"||Math.sign(n)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${n}\``);let a=new Error().stack;return new Promise((l,c)=>{let u,d=()=>{i.clearTimeout(s),t.signal&&t.signal.removeEventListener("abort",u);};if(t.signal){let{signal:p}=t;if(p.aborted)return Promise.resolve(e).catch(()=>{}),c(Nte(p));u=()=>{d(),c(Nte(p));},p.addEventListener("abort",u,{once:true});}let m=()=>{if(t.signal&&t.signal.removeEventListener("abort",u),o)try{l(o());}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 Ua(r??`Promise timed out after ${n}ms`);p.callSiteStack=a,c(p);}};n<1/0&&(s=i.setTimeout(m,n)),Promise.resolve(e).then(p=>{d(),l(p);}).catch(p=>{d(),c(p);});})}function sc({signal:e,timeoutMs:t}){let n=AbortSignal.timeout(t);return e?AbortSignal.any([e,n]):n}var lO="organization";function cO(e){let t=new PostHog(e.writeKey,{host:e.host,...e.flushImmediately?{flushAt:1,flushInterval:0}:{}}),n=e.platform,o=(l,c,u)=>{let{type:d,...m}=l;t.capture({distinctId:c??u??randomUUID(),event:d,...u&&{groups:{[lO]:u}},properties:{platform:n,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:lO,groupKey:l,properties:c});},i=({userId:l,properties:c})=>{Object.values(c).some(d=>d!=null&&d!=="")&&t.identify({distinctId:l,properties:c});},s=()=>t.shutdown();if(e.identity==="stashed"){let l=null;return {shutdownAnalytics:s,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=>o(u,l?.userId??null,l?.orgId??null)}}return {shutdownAnalytics:s,groupIdentifyOrg:r,identifyUser:i,captureEvent:(l,{userId:c,orgId:u})=>o(l,c,u),captureBillingEvent:(l,{userId:c,orgId:u})=>o(l,c,u)}}async function Dte(e,t,n){let o,r=0,i=3,s,a;for(;r<i;)try{let l=await ge(e.getAllFlagsAndPayloads(n??t,{personProperties:{organizationId:t},groups:{[lO]:t}}),{milliseconds:5e3});s=l.featureFlags||{},a=l.featureFlagPayloads||{};break}catch(l){o=l,r++,await new Promise(c=>setTimeout(c,100*r));}if(s&&a)return {flags:s,payloads:a};throw o}var uO=class e extends Pf{constructor(n,o,r,i,s){super(i,s);this.client=n;this.orgId=o;this.userId=r;}static createClient(){return new PostHog("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",{host:"https://p.momentic.ai"})}static async init(n,o){let r=e.createClient(),{flags:i,payloads:s}=await Dte(r,n,o);return new e(r,n,o,i,s)}static fromCached(n,o,r,i){return new e(e.createClient(),n,o,r,i)}async refresh(){let{flags:n,payloads:o}=await Dte(this.client,this.orgId,this.userId);this.flags=n,this.payloads=o;}};var dO="/proc",Fte="/sys/fs/cgroup",Cze="/sys/fs/cgroup/memory",Bte=8,Ize=1024;function pO(){let e;return ()=>{if(process.platform!=="linux")return;let t=Mze();if(!t)return;let n=kze({current:t,previous:e});return e=t,n}}function Ute(){if(process.platform!=="linux")return;let e=Y$(`${Fte}/memory.stat`);if(e){let n=Y$(`${Fte}/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:n?{low:n.low,high:n.high,max:n.max,oom:n.oom,oomKill:n.oom_kill,oomGroupKill:n.oom_group_kill}:void 0}}let t=Y$(`${Cze}/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 xze(e){let t={};for(let n of e.split(`
|
|
179
|
+
`),i=r===-1?o:o.slice(0,r),s=r===-1?"":o.slice(r+1),a=[];i&&a.push({email:i,githubLogin:e$(i)}),a.push(...yje(s)),t.push(a);}return t}function Sje(e){return (e.githubLogin??(e.email?e$(e.email):void 0))?.toLowerCase().endsWith("[bot]")??false}function l8(e){return e.filter(t=>!Sje(t))}var c8="https://static.momentic.ai";function jw(e,t){return {light:`${c8}/${e}.svg`,dark:`${c8}/${e}-dark.svg`,alt:t}}var $w={runGroup:jw("run-group-button","View run group"),basePr:jw("view-base-pr-button","View base PR"),branch:jw("view-branch-button","View branch"),commit:jw("view-commit-button","View commit")};function Gw({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 bh=z$1.object({limit:z$1.number().min(1).max(100).optional(),page:z$1.number().min(1).optional()}),t$=z$1.object({page:z$1.number(),pageSize:z$1.number(),pageCount:z$1.number()});var n$=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 bje=z$1.array(n$.extend({id:z$1.string(),name:z$1.string(),description:z$1.string().optional(),labels:z$1.string().array().optional()})),Tje=n$.extend({id:z$1.string(),name:z$1.string(),description:z$1.string().optional(),content:f_}),Aje=z$1.array(Tje);z$1.object({tests:bje,modules:Aje,labels:z$1.string().array()});z$1.string().array();var u8=z$1.object({pathSegments:z$1.string().array()});sj.merge(Wo);var d8=z$1.object({schemaVersion:z$1.string(),stepLists:cl}),m8=Wo.partial().merge(Ts.pick({id:true})),Mf="1-255 chars; Only letters/numbers/dashes. Cannot start/end with '-'. Not '.yaml', 'none', or UUID.",o$={name:z$1.string().min(1).max(255).describe(Mf),description:z$1.string().optional(),baseUrl:z$1.url().optional().describe("For LLM: Ask the user for the base URL if they don't provide it."),environment:z$1.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$1.enum(Hc).optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),viewport:vm.optional().describe("For LLM: Never assign this variable unless the user explicitly asks for it."),pathSegments:z$1.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.")},p8=z$1.object(o$);sj.extend(z$1.object({relativeFilePath:z$1.string().describe("relative to project root")}).shape);var h8=z$1.object({name:z$1.string()});z$1.object({relativeFilePath:z$1.string()});var g8=z$1.object({name:z$1.string(),sourceModuleContent:f_});z$1.object({relativeFilePath:z$1.string()});var f8=z$1.object({name:z$1.string(),description:z$1.string(),enabled:z$1.boolean(),steps:z$1.lazy(()=>cn.array()),testFilePath:z$1.string().describe("relative to the project root"),folderPath:z$1.string().optional().describe("user selected folder path")}),y8=z$1.object({name:z$1.string(),description:z$1.string(),enabled:z$1.boolean()}).partial(),S8=z$1.object({folderPath:z$1.string()}),b8=z$1.object({folderPath:z$1.string()});z$1.array(Gv);var T8=z$1.object({defaultEnv:z$1.string().optional().describe("name of the default env, or undefined to unset")}),A8=z$1.object({configFilePath:z$1.string().describe("full path on disk")});z$1.object({hasEntities:z$1.boolean()});z$1.string().array();z$1.object({message:z$1.string(),newRelativeTestPath:z$1.string().optional()});var r$=z$1.object({name:z$1.string(),absolutePath:z$1.string(),relativePath:z$1.string(),pathSegments:z$1.array(z$1.string()),isDirectory:z$1.boolean(),size:z$1.number(),createdAt:z$1.coerce.date(),modifiedAt:z$1.coerce.date(),accessedAt:z$1.coerce.date()}),E8=z$1.object({pathSegments:z$1.array(z$1.string()),directoriesOnly:z$1.boolean().optional()});z$1.object({absolutePath:z$1.string(),pathSegments:z$1.array(z$1.string()),contents:z$1.array(r$)});var v8=z$1.object({sourceDirectoryPath:z$1.string().optional(),value:z$1.string(),allowedExtensions:z$1.array(z$1.string()).optional()}),Eje=z$1.object({name:z$1.string(),value:z$1.string(),isDirectory:z$1.boolean()});z$1.object({suggestions:z$1.array(Eje)});var w8=z$1.object({pathSegments:z$1.array(z$1.string())}),R8=z$1.object({pathSegments:z$1.array(z$1.string()),newPathSegments:z$1.array(z$1.string())}),C8=z$1.object({pathSegments:z$1.array(z$1.string()),recursive:z$1.boolean().optional()});z$1.object({success:z$1.boolean(),message:z$1.string(),pathSegments:z$1.array(z$1.string()).optional()});z$1.object({gitBranch:z$1.string(),fileMtime:z$1.coerce.date(),gitCommitSha:z$1.string()});var I8=typeof process<"u"&&true&&true,OP=58889,Ib=24*60*60*1e3;var x8=z$1.record(z$1.string(),z$1.string()),vje=z$1.object({type:z$1.literal("stdio").optional(),command:z$1.string().min(1),args:z$1.array(z$1.string()).optional(),env:x8.optional(),cwd:z$1.string().optional()}),wje=z$1.object({type:z$1.enum(["http","sse"]).optional(),url:z$1.string().min(1),headers:x8.optional()}),Rje=z$1.union([vje,wje]),_8=z$1.record(z$1.string().min(1),Rje);var P8=z$1.string().trim().min(1).max(255).regex(/^[^/\\]+$/).refine(e=>e!=="."&&e!=="..");z$1.object({source:z$1.string().trim().min(1).max(500).refine(e=>P8.safeParse(e.split("/").at(-1)).success)});var O8=z$1.object({filename:P8,downloadUrl:z$1.url()});z$1.object({filename:z$1.string().trim().min(1),destination:z$1.string().trim().min(1).optional()});var M8=z$1.object({destination:z$1.string(),uploadUrl:z$1.url()});var Vw=(o=>(o.DARWIN="darwin",o.LINUX="linux",o.WINDOWS="win32",o))(Vw||{}),k8=z$1.enum(Vw),Ww=(r=>(r.AZURE="AZURE",r.KERNEL="KERNEL",r.BROWSERBASE="BROWSERBASE",r.SELF_HOSTED="SELF_HOSTED",r))(Ww||{}),MP=z$1.enum(Ww);z$1.object({azureRegion:z$1.string().optional(),azureWorkspaceId:z$1.string().optional()});z$1.object({});z$1.object({});var Cje=z$1.enum(["us-west-2","us-east-1","eu-central-1","ap-southeast-1"]);z$1.object({region:Cje.optional()});var i$=(t=>(t.TEST_REVIEW="TEST_REVIEW",t))(i$||{});var Ije=z$1.object({type:z$1.literal("DESCRIPTION_UPDATE"),thoughts:z$1.string()}),kP=z$1.discriminatedUnion("type",[Ije]),xje=z$1.object({testId:z$1.string(),name:z$1.string(),orgId:z$1.string(),runId:z$1.string(),steps:cn.array(),purpose:z$1.enum(i$),details:kP.or(kP.array()).optional()});xje.pick({name:true,orgId:true});var _je=z$1.object({id:z$1.string(),name:z$1.string().nullish(),createdAt:z$1.string().pipe(z$1.coerce.date()).or(z$1.date()),organizationId:z$1.string(),schemaVersion:z$1.string(),runId:z$1.string().nullish(),purpose:z$1.enum(i$),details:kP.or(kP.array()).optional(),applied:z$1.boolean().nullish(),appliedAt:z$1.coerce.date().nullish()}),L8=_je.extend({steps:cn.array()});var N8=z$1.enum(["v1","v2"]);var Oje=z$1.enum(["element","content","attribute","tag_name","style"]),LP=z$1.enum(["exists","visible","enabled","editable","focused","contains","equals","starts_with"]);[...kJ,...MJ].forEach(e=>{if(!LP.options.includes(e.toLowerCase()))throw new Error(`V2CheckConditionSchema is missing option: ${e}`)});var s$={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}},B8={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"}},U8={ELEMENT_EXISTENCE:"element",ELEMENT_CONTENT:"content",ELEMENT_ATTRIBUTE:"attribute",ELEMENT_NAME:"tag_name",ELEMENT_STYLE:"style"};function D8(e){return {alias:a$(e),subject:e.subject,condition:e.condition,negated:e.negated,assertionType:s$[e.subject].assertionType,requiresName:s$[e.subject].requiresName,requiresValue:e.subject!=="element"&&e.condition!=="exists"}}function a$(e){let t=s$[e.subject],n=B8[e.condition];if(!H8(e.subject,e.condition))throw new Error(`Unsupported element check alias for subject '${e.subject}' and condition '${e.condition}'.`);let o=e.negated?n.negativeAliasSuffix:n.positiveAliasSuffix;return `checkElement${t.aliasPrefix}${o}`}function H8(e,t){let n=B8[t],o=n.elementCondition,r=n.contentOperation;return e==="element"?o!==void 0:r!==void 0}var Mje=Oje.options.flatMap(e=>LP.options.flatMap(t=>H8(e,t)?[D8({subject:e,condition:t,negated:false}),D8({subject:e,condition:t,negated:true})]:[])),NP=new Map(Mje.map(e=>[e.alias,e]));var kje=z$1.enum(Hu),Lje=z$1.enum(sl);function na(e){return NP.get(e)}function $8(e){let t=U8[e.type],n=e.type==="ELEMENT_EXISTENCE"?e.condition:e.operation;return a$({subject:t,condition:Nje(n),negated:e.negated})}function G8(e){return kje.parse(e.toUpperCase())}function qw(e){return Lje.parse(e.toUpperCase())}function Nje(e){return LP.parse(e.toLowerCase())}var _b=z$1.string().regex(/\S+\s+\S+/,"Bare AI action goals must contain multiple words.").describe("Multi-word natural-language goal for an AI action V3 step."),St={saveAs:z$1.string().optional(),retries:z$1.number().optional(),skipped:z$1.boolean().optional(),comment:z$1.string().optional()};z$1.object(St);var Pb=Object.keys(St);function nt(e){return z$1.union([z$1.strictObject({[e.key]:e.simplified}),z$1.strictObject({[e.key]:e.detailed})])}function ko(e){return z$1.strictObject({[e.key]:e.detailed})}function Dje(e,t){let n=Array.from({length:t.length+1},(o,r)=>r);for(let o=1;o<=e.length;o+=1){let r=[o],i=e.charAt(o-1);for(let s=1;s<=t.length;s+=1)r.push(i===t.charAt(s-1)?n[s-1]??0:Math.min((n[s-1]??0)+1,(n[s]??0)+1,(r[s-1]??0)+1));n.splice(0,n.length,...r);}return n[t.length]??0}function z8(e,t){let n=e.toLowerCase(),o,r=.5;for(let i of t){let s=i.toLowerCase(),a=Math.max(n.length,s.length),l=a===0?1:1-Dje(n,s)/a;l>r&&(r=l,o=i);}return o}var V8='Coordinates must be "x, y" pixel values, e.g. "100, 200"',Ob=z$1.union([Fu,z$1.string().regex(/^\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*$/,V8)],{error:V8});z$1.union([z$1.string(),Fu]);var Fa={css:z$1.string().optional(),coords:Ob.optional(),x:z$1.union([z$1.number(),z$1.string()]).optional(),y:z$1.union([z$1.number(),z$1.string()]).optional()},c$={on:z$1.string().optional(),...Fa},gl={...St,effort:pt.optional(),useSelector:z$1.boolean().optional(),force:z$1.boolean().optional(),DANGEROUS_FORCE_DYNAMIC:z$1.boolean().optional(),iframe:z$1.string().optional()},kb={...gl,offset:Ob.optional()};function vs({schema:e,descriptionKey:t,required:n=true}){return e.superRefine((o,r)=>{let s=[t in o?Object.entries(o).find(([a])=>a===t)?.[1]:void 0,"css"in o?o.css:void 0,"coords"in o?o.coords:void 0,"x"in o||"y"in o?true:void 0].filter(a=>a!==void 0).length;n&&s!==1&&r.addIssue({code:"custom",message:`Use exactly one target: ${t}, css, coords, or x/y.`}),!n&&s>1&&r.addIssue({code:"custom",message:`Use at most one target: ${t}, css, coords, or x/y.`}),("x"in o||"y"in o)&&(!("x"in o)||o.x===void 0||!("y"in o)||o.y===void 0)&&r.addIssue({code:"custom",message:"x and y must be provided together."});})}var Fje=vs({descriptionKey:"on",schema:z$1.strictObject({...c$,...kb,times:z$1.int().min(1).optional(),rightClick:z$1.boolean().optional(),waitForDownload:z$1.boolean().optional(),delay:z$1.number().optional(),downloadTimeout:z$1.number().optional()})}),Bje=vs({descriptionKey:"on",schema:z$1.strictObject({...c$,...kb,rightClick:z$1.boolean().optional(),waitForDownload:z$1.boolean().optional(),delay:z$1.number().optional(),downloadTimeout:z$1.number().optional()})}),Uje=vs({descriptionKey:"on",schema:z$1.strictObject({...c$,...kb,times:z$1.int().min(1).optional(),waitForDownload:z$1.boolean().optional(),delay:z$1.number().optional(),downloadTimeout:z$1.number().optional()})}),W8=nt({key:"click",simplified:z$1.string(),detailed:Fje}),q8=nt({key:"doubleClick",simplified:z$1.string(),detailed:Bje}),K8=nt({key:"rightClick",simplified:z$1.string(),detailed:Uje}),Hje=vs({descriptionKey:"into",required:false,schema:z$1.strictObject({text:z$1.string(),into:z$1.string().optional(),...Fa,...kb,pressEnter:z$1.boolean().optional(),clear:z$1.union([z$1.literal("inputs"),z$1.literal("always"),z$1.literal("never"),z$1.boolean()]).optional(),delay:z$1.number().optional()})}),Y8=nt({key:"type",simplified:z$1.string(),detailed:Hje}),jje=vs({descriptionKey:"into",required:false,schema:z$1.strictObject({text:z$1.string(),into:z$1.string().optional(),...Fa,...kb,pressEnter:z$1.boolean().optional()})}),J8=nt({key:"fill",simplified:z$1.string(),detailed:jje}),X8=ko({key:"select",detailed:vs({descriptionKey:"from",schema:z$1.strictObject({from:z$1.string().optional(),...Fa,label:z$1.string().optional(),value:z$1.string().optional(),index:z$1.union([z$1.string(),z$1.number()]).optional(),...gl})}).superRefine((e,t)=>{[e.label,e.value,e.index].filter(o=>o!==void 0).length!==1&&t.addIssue({code:"custom",message:"select requires exactly one of label, value, or index"});})}),Q8=nt({key:"hover",simplified:z$1.string(),detailed:vs({descriptionKey:"on",schema:z$1.strictObject({on:z$1.string().optional(),...Fa,...kb})})}),Z8=ko({key:"blur",detailed:vs({descriptionKey:"on",required:false,schema:z$1.strictObject({on:z$1.string().optional(),...Fa,...gl})})}),e9=nt({key:"focus",simplified:z$1.string(),detailed:vs({descriptionKey:"on",schema:z$1.strictObject({on:z$1.string().optional(),...Fa,...gl})})}),t9=ko({key:"dragAndDrop",detailed:z$1.strictObject({from:z$1.string().optional(),to:z$1.string().optional(),fromCss:z$1.string().optional(),toCss:z$1.string().optional(),fromCoords:Ob.optional(),toCoords:Ob.optional(),fromX:z$1.union([z$1.number(),z$1.string()]).optional(),fromY:z$1.union([z$1.number(),z$1.string()]).optional(),toX:z$1.union([z$1.number(),z$1.string()]).optional(),toY:z$1.union([z$1.number(),z$1.string()]).optional(),steps:z$1.number().optional(),hover:z$1.number().optional(),...gl}).superRefine((e,t)=>{let n=[e.from,e.fromCss,e.fromCoords,e.fromX!==void 0||e.fromY!==void 0?true:void 0].filter(r=>r!==void 0).length,o=[e.to,e.toCss,e.toCoords,e.toX!==void 0||e.toY!==void 0?true:void 0].filter(r=>r!==void 0).length;n!==1&&t.addIssue({code:"custom",message:"Use exactly one from target."}),o!==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."});})}),n9=z$1.union([z$1.strictObject({mouseDrag:Ob}),z$1.strictObject({mouseDrag:vs({descriptionKey:"from",required:false,schema:z$1.strictObject({from:z$1.string().optional(),...Fa,delta:Ob,steps:z$1.number().optional(),...gl})})})]),o9=nt({key:"press",simplified:z$1.string(),detailed:z$1.strictObject({key:z$1.string(),repeat:z$1.number().optional(),delay:z$1.number().optional(),convertMeta:z$1.boolean().optional(),...St,effort:pt.optional()})}),r9=nt({key:"keyDown",simplified:z$1.string(),detailed:z$1.strictObject({key:z$1.string(),convertMeta:z$1.boolean().optional(),...St,effort:pt.optional()})}),i9=nt({key:"keyUp",simplified:z$1.string(),detailed:z$1.strictObject({key:z$1.string(),convertMeta:z$1.boolean().optional(),...St,effort:pt.optional()})}),Mb=z$1.number().int().min(0).max(6e4).multipleOf(1e3),s9=nt({key:"navigate",simplified:z$1.string(),detailed:z$1.strictObject({url:z$1.string(),timeout:Mb.optional(),...St,effort:pt.optional()})}),a9=nt({key:"newTab",simplified:z$1.string(),detailed:z$1.strictObject({url:z$1.string(),timeout:Mb.optional(),...St,effort:pt.optional()})}),l9=nt({key:"switchTab",simplified:z$1.union([z$1.number(),z$1.string()]),detailed:z$1.strictObject({substring:z$1.string().optional(),regex:z$1.string().optional(),index:z$1.union([z$1.string(),z$1.number()]).optional(),timeout:Mb.optional(),loadTimeout:Mb.optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{[e.substring,e.regex,e.index].filter(o=>o!==void 0).length!==1&&t.addIssue({code:"custom",message:"switchTab requires exactly one of substring, regex, or index"});})}),c9=ko({key:"closeTab",detailed:z$1.strictObject({substring:z$1.string().optional(),regex:z$1.string().optional(),index:z$1.union([z$1.string(),z$1.number()]).optional(),timeout:Mb.optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{[e.substring,e.regex,e.index].filter(o=>o!==void 0).length<=1||t.addIssue({code:"custom",message:"closeTab accepts at most one of substring, regex, or index"});})}),u9=ko({key:"goBack",detailed:z$1.strictObject({...St,effort:pt.optional()})}),d9=ko({key:"goForward",detailed:z$1.strictObject({...St,effort:pt.optional()})}),m9=ko({key:"refresh",detailed:z$1.strictObject({timeout:Mb.optional(),...St,effort:pt.optional()})}),kf=z$1.enum(["goBack","goForward","refresh","paste","authSave","offline","online","blur","visualDiff","captcha","closeTab"]),p9=nt({key:"scrollUp",simplified:z$1.number().nonnegative(),detailed:vs({descriptionKey:"in",required:false,schema:z$1.strictObject({pixels:z$1.number().nonnegative().optional(),in:z$1.string().optional(),...Fa,...gl})})}),h9=nt({key:"scrollDown",simplified:z$1.number().nonnegative(),detailed:vs({descriptionKey:"in",required:false,schema:z$1.strictObject({pixels:z$1.number().nonnegative().optional(),in:z$1.string().optional(),...Fa,...gl})})}),g9=nt({key:"scrollLeft",simplified:z$1.number().nonnegative(),detailed:vs({descriptionKey:"in",required:false,schema:z$1.strictObject({pixels:z$1.number().nonnegative().optional(),in:z$1.string().optional(),...Fa,...gl})})}),f9=nt({key:"scrollRight",simplified:z$1.number().nonnegative(),detailed:vs({descriptionKey:"in",required:false,schema:z$1.strictObject({pixels:z$1.number().nonnegative().optional(),in:z$1.string().optional(),...Fa,...gl})})}),y9=nt({key:"wait",simplified:z$1.number(),detailed:z$1.strictObject({ms:z$1.number(),...St,effort:pt.optional()})}),$je=nt({key:"assert",simplified:z$1.string(),detailed:z$1.strictObject({that:z$1.string(),timeout:z$1.number().optional(),DANGEROUS_FORCE_DYNAMIC:z$1.boolean().optional(),iframe:z$1.string().optional(),source:z$1.string().optional(),...St,effort:pt.optional()})}),Gje=nt({key:"assertVisually",simplified:z$1.string(),detailed:z$1.strictObject({that:z$1.string(),timeout:z$1.number().optional(),DANGEROUS_FORCE_DYNAMIC:z$1.boolean().optional(),iframe:z$1.string().optional(),source:z$1.string().optional(),...St,effort:pt.optional()})}),DP=$je,FP=Gje,S9=nt({key:"checkPageContains",simplified:z$1.string(),detailed:z$1.strictObject({text:z$1.string(),timeout:z$1.number().optional(),iframe:z$1.string().optional(),...St,effort:pt.optional()})}),b9=nt({key:"checkPageDoesNotContain",simplified:z$1.string(),detailed:z$1.strictObject({text:z$1.string(),timeout:z$1.number().optional(),iframe:z$1.string().optional(),...St,effort:pt.optional()})}),u$=z$1.union([S9,b9]),zje=z$1.record(z$1.string(),z$1.unknown().optional()),BP=zje.superRefine((e,t)=>{let n=Object.keys(e),o=n[0];if(n.length!==1||o===void 0){t.addIssue({code:"custom",message:"element checks require exactly one checkElement... key"});return}let r=na(o);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=vs({descriptionKey:"element",schema:z$1.looseObject({element:z$1.string().optional(),...Fa,...gl,timeout:z$1.number().optional(),name:z$1.string().optional(),value:z$1.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"]});}),T9=nt({key:"extract",simplified:z$1.string(),detailed:z$1.strictObject({goal:z$1.string(),schema:yh.optional(),DANGEROUS_FORCE_DYNAMIC:z$1.boolean().optional(),iframe:z$1.string().optional(),...St,effort:pt.optional()})}),A9=nt({key:"cookie",simplified:z$1.string(),detailed:z$1.strictObject({value:z$1.string(),...St,effort:pt.optional()})}),E9=ko({key:"localStorage",detailed:z$1.strictObject({key:z$1.string(),value:z$1.string(),...St,effort:pt.optional()})}),v9=nt({key:"request",simplified:z$1.string(),detailed:z$1.strictObject({url:z$1.string(),method:pm.optional(),headers:z$1.record(z$1.string(),z$1.string()).optional(),params:z$1.record(z$1.string(),z$1.string()).optional(),body:yh.optional(),contentType:z$1.enum(ju).optional(),timeout:z$1.number().optional(),...St,effort:pt.optional()})}),w9=ko({key:"graphqlRequest",detailed:z$1.strictObject({url:z$1.string(),query:z$1.string(),variables:yh.optional(),headers:z$1.record(z$1.string(),z$1.string()).optional(),timeout:z$1.number().optional(),...St,effort:pt.optional()})}),UP=nt({key:"javascript",simplified:z$1.string(),detailed:z$1.strictObject({code:z$1.string(),environment:z$1.enum(["node","browser","NODE","BROWSER"]).optional(),fragment:z$1.boolean().optional(),timeout:z$1.number().optional(),...St,effort:pt.optional()})}),Lb={substring:z$1.string().optional(),glob:z$1.string().optional(),regex:z$1.string().optional(),domain:z$1.string().optional()};function Vje(e){return [e.substring,e.glob,e.regex,e.domain].filter(t=>t!==void 0).length}function Nb(e){let t=Vje(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 R9=ko({key:"header",detailed:z$1.strictObject({name:z$1.string(),value:z$1.string(),...Lb,method:z$1.string().optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{Nb({payload:e,ctx:t,required:false});})}),C9=ko({key:"mock",detailed:z$1.strictObject({...Lb,method:z$1.string().optional(),responseGenerator:z$1.string(),fetchOriginalResponse:z$1.boolean().optional(),key:z$1.string().optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{Nb({payload:e,ctx:t,required:true});})}),I9=nt({key:"removeRouteMock",simplified:z$1.string(),detailed:z$1.strictObject({key:z$1.string().optional(),...St,effort:pt.optional()})}),x9=nt({key:"waitForUrl",simplified:z$1.string(),detailed:z$1.strictObject({...Lb,caseInsensitive:z$1.boolean().optional(),timeout:z$1.number().optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{Nb({payload:e,ctx:t,required:true});})}),_9=nt({key:"waitForUrlNotToMatch",simplified:z$1.string(),detailed:z$1.strictObject({...Lb,caseInsensitive:z$1.boolean().optional(),timeout:z$1.number().optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{Nb({payload:e,ctx:t,required:true});})}),Wje=z$1.union([x9,_9]),P9=nt({key:"dialog",simplified:z$1.enum(["ACCEPT","DISMISS"]),detailed:z$1.strictObject({action:z$1.enum(["ACCEPT","DISMISS"]),...St,effort:pt.optional()})}),O9=nt({key:"fileUpload",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string(),name:z$1.string().optional(),...St,effort:pt.optional()})}),M9=nt({key:"copy",simplified:z$1.union([z$1.string(),z$1.boolean(),z$1.null()]),detailed:z$1.strictObject({value:z$1.union([z$1.string(),z$1.boolean(),z$1.null()]),...St,effort:pt.optional()})}),k9=ko({key:"paste",detailed:z$1.strictObject({...St,effort:pt.optional()})}),L9=ko({key:"captcha",detailed:z$1.strictObject({...gl})}),qje=z$1.strictObject({data:z$1.union([z$1.string(),il]),width:z$1.number(),height:z$1.number()}),N9=nt({key:"visualDiff",simplified:z$1.string(),detailed:vs({descriptionKey:"on",required:false,schema:z$1.strictObject({on:z$1.string().optional(),...Fa,threshold:z$1.number().optional(),screenshot:qje.optional(),...gl})})}),D9=ko({key:"offline",detailed:z$1.strictObject({...St,effort:pt.optional()})}),F9=ko({key:"online",detailed:z$1.strictObject({...St,effort:pt.optional()})}),B9=ko({key:"registerRequestListener",detailed:z$1.strictObject({...Lb,key:z$1.string(),method:z$1.string().optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{Nb({payload:e,ctx:t,required:true});})}),U9=nt({key:"awaitListener",simplified:z$1.string(),detailed:z$1.strictObject({key:z$1.string(),timeout:z$1.number().optional(),...St,effort:pt.optional()})}),H9=ko({key:"recordRequests",detailed:z$1.strictObject({...Lb,key:z$1.string(),method:z$1.string().optional(),...St,effort:pt.optional()}).superRefine((e,t)=>{Nb({payload:e,ctx:t,required:true});})}),j9=nt({key:"getRecordedRequests",simplified:z$1.string(),detailed:z$1.strictObject({key:z$1.string(),...St,effort:pt.optional()})}),$9=nt({key:"authLoad",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string(),...St,effort:pt.optional()})}),G9=nt({key:"authSave",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string().optional(),...St,effort:pt.optional()})});z$1.union([W8,q8,K8,l9,c9,Y8,J8,X8,Q8,Z8,e9,t9,n9,o9,r9,i9,s9,a9,u9,d9,m9,p9,h9,g9,f9,y9,DP,FP,u$,T9,A9,E9,v9,w9,UP,R9,C9,I9,Wje,P9,O9,M9,k9,L9,N9,D9,F9,B9,U9,H9,j9,$9,G9,BP]);var z9=new Map([["click",W8],["doubleClick",q8],["rightClick",K8],["switchTab",l9],["closeTab",c9],["type",Y8],["fill",J8],["select",X8],["hover",Q8],["blur",Z8],["focus",e9],["dragAndDrop",t9],["mouseDrag",n9],["press",o9],["keyDown",r9],["keyUp",i9],["navigate",s9],["newTab",a9],["goBack",u9],["goForward",d9],["refresh",m9],["scrollUp",p9],["scrollDown",h9],["scrollLeft",g9],["scrollRight",f9],["wait",y9],["assert",DP],["assertVisually",FP],["checkPageContains",S9],["checkPageDoesNotContain",b9],["extract",T9],["cookie",A9],["localStorage",E9],["request",v9],["graphqlRequest",w9],["javascript",UP],["header",R9],["mock",C9],["removeRouteMock",I9],["waitForUrl",x9],["waitForUrlNotToMatch",_9],["dialog",P9],["fileUpload",O9],["copy",M9],["paste",k9],["captcha",L9],["visualDiff",N9],["offline",D9],["online",F9],["registerRequestListener",B9],["awaitListener",U9],["recordRequests",H9],["getRecordedRequests",j9],["authLoad",$9],["authSave",G9]]),d$=Object.freeze([...z9.keys()]),Kje=[...d$,...NP.keys()],id=z$1.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 n=Object.keys(e),o=n[0];if(n.length!==1||o===void 0){t.addIssue({code:"custom",message:"Steps must have exactly one action key."});return}let r=z9.get(o)??(na(o)?BP:void 0);if(!r){let s=z8(o,Kje);t.addIssue({code:"custom",message:`Unsupported step type '${o}'.${s?` Did you mean '${s}'?`:""} See https://momentic.ai/docs/reference/commands for every step type.`});return}let i=r.safeParse(e);if(!i.success){let s=Yje(i.error.issues,o);s.length>0&&V9(t,s);}});function Yje(e,t){return Jje(e).filter(n=>!Xje(n,t))}function V9(e,t){for(let n of t){if(n.code==="invalid_union"){V9(e,m$(n));continue}e.addIssue({...n});}}function Jje(e){let t=[];for(let n of e){if(n.code==="invalid_union"){t.push(...m$(n));continue}t.push(n);}return t}function Xje(e,t){return e.code!=="unrecognized_keys"?false:t===void 0?e.path.length===0:e.path.length===1&&e.path[0]===t}function m$(e){let t=e.errors[0]??[],n=l$(t);for(let o of e.errors.slice(1)){let r=l$(o);r>n&&(t=o,n=r);}return t}function l$(e){return e.reduce((t,n)=>{let o=n.code==="invalid_union"?l$(m$(n)):0;return t+n.path.length+o},0)}var W9=z$1.strictObject({string:z$1.string()}),Qje=z$1.strictObject({javascript:z$1.string()}),q9=z$1.union([W9,Qje]),Zje=z$1.union([z$1.strictObject({name:z$1.string(),required:z$1.boolean().optional(),default:W9.optional()}),z$1.strictObject({name:z$1.string(),required:z$1.boolean().optional(),defaultValue:z$1.string()})]),K9=Zje.array(),e$e=z$1.strictObject({name:z$1.string(),default:q9.optional(),enum:z$1.array(z$1.string()).optional()}),Y9=e$e.array(),Kw=z$1.union([q9,z$1.string()]),J9=z$1.record(z$1.string(),Kw);var t$e=z$1.preprocess(e=>typeof e=="number"?String(e):e,qU),HP=z$1.looseObject({goal:z$1.string(),version:t$e.optional(),cache:z$1.literal(false).optional(),...St}),n$e=z$1.union([z$1.strictObject({act:z$1.string()}),z$1.strictObject({act:HP})]),p$=z$1.looseObject({path:z$1.string(),inputs:z$1.record(z$1.string(),Kw).optional(),...St}),o$e=z$1.union([z$1.strictObject({module:z$1.string()}),z$1.strictObject({module:p$})]),km=z$1.union([DP,FP,u$,UP,BP]),r$e=new Set(["then","effort",...Pb]),i$e=z$1.looseObject({then:z$1.lazy(()=>Yc.array()),effort:pt.optional(),...St}).superRefine((e,t)=>{Object.entries(e).filter(([o,r])=>!r$e.has(o)&&km.safeParse({[o]:r}).success).length!==1&&t.addIssue({code:"custom",message:"Conditional steps require exactly one assertion condition at the top level."});}),s$e=z$1.strictObject({if:i$e}),a$e=new Set(["do","maxIterations","effort",...Pb]),l$e=z$1.looseObject({do:z$1.lazy(()=>Yc.array()),maxIterations:z$1.number().int().positive().optional(),effort:pt.optional(),...St}).superRefine((e,t)=>{let n=Object.entries(e).filter(([o,r])=>!a$e.has(o)&&km.safeParse({[o]:r}).success).length;if(n>1){t.addIssue({code:"custom",message:"While loops accept at most one condition at the top level."});return}n===0&&e.maxIterations===void 0&&t.addIssue({code:"custom",message:"While loops require a condition or a maximum number of iterations."});}),c$e=z$1.strictObject({while:l$e}),Yc=z$1.lazy(()=>z$1.union([kf,_b,n$e,o$e,s$e,c$e,id]));z$1.object({before:Yc.array().optional(),steps:Yc.array(),after:Yc.array().optional()});var u$e=z$1.union([vm,z$1.string().refine(e=>{let t=e.match(/^\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\s*$/);if(!t)return false;let[,n,o]=t;return vm.safeParse({width:Number(n),height:Number(o)}).success},"Viewport must be two numeric values, e.g. 1920, 1080")]),d$e=Ks.omit({viewport:true}).extend({viewport:u$e.optional()}),h$=z$1.object({id:Qo,version:z$1.string().optional(),url:S_.optional(),description:z$1.string().optional(),retries:z$1.number().optional(),defaultEnv:z$1.string().optional(),parameters:K9.optional(),outputs:X_.optional(),disabled:z$1.boolean().optional(),labels:z$1.array(z$1.string()).optional(),runAssertions:Q_.array().optional()}).extend(d$e.shape),m$e=z$1.looseObject({fileType:z$1.literal(De.TEST_V2)}).extend(h$.shape).extend({before:Yc.array().optional(),steps:Yc.array(),after:Yc.array().optional()}),Ah=m$e.superRefine(h$e),p$e={beforeSteps:"before",afterSteps:"after"};function h$e(e,t){for(let[n,o]of Object.entries(p$e))n in e&&t.addIssue({code:"custom",message:`v2 tests must use ${o}, not ${n}`,path:[n]});}var g$e=z$1.array(z$1.string()),f$e=z$1.union([z$1.string(),z$1.record(z$1.string(),z$1.unknown().optional())]),jP=Jo.omit({moduleId:true,name:true,parameters:true,defaultParameters:true,parameterEnums:true}).extend({id:Qo,version:z$1.string().optional(),name:z$1.string().optional(),parameters:z$1.union([Y9,g$e]).optional(),defaultParameters:z$1.record(z$1.string(),z$1.string()).optional(),parameterEnums:z$1.record(z$1.string(),z$1.array(z$1.string())).optional()}),$P=z$1.looseObject(jP.extend({fileType:z$1.literal(De.MODULE_V2),steps:f$e.array().optional()}).shape).superRefine(Q9),GP=z$1.looseObject(jP.extend({fileType:z$1.literal(De.MODULE_V2),steps:Yc.array().optional()}).shape).superRefine(Q9);function X9(e){return e.steps??[]}function Q9(e,t){"main"in e&&t.addIssue({code:"custom",message:"v2 modules must use steps, not main",path:["main"]});}var g$=(n=>(n.TEST="TEST",n.MODULE="MODULE",n))(g$||{}),y$e=z$1.enum(g$),Z9=z$1.object({orgId:z$1.string(),entityType:y$e,entityId:z$1.string()}),f$=Z9.extend({entityType:z$1.literal("TEST"),stepLists:Uc}),y$=Z9.extend({entityType:z$1.literal("MODULE"),steps:ln.array()});z$1.discriminatedUnion("entityType",[f$,y$]);var e7=(o=>(o.WEB="web",o.ANDROID="android",o.IOS="ios",o))(e7||{}),S$=z$1.nativeEnum(e7);var t7=z$1.object({entity_type:z$1.string(),value:z$1.string(),schema_version:z$1.string().optional()}),n7=qv(t7),o7=t7.extend({cache_key:z$1.string()});function Yw({entityType:e,entityId:t}){return `${e}:${t}`}var Nf=z$1.string();var r7='Coordinates must be "x, y" pixel values, e.g. "100, 200"',l7=z$1.union([Fu,z$1.string().regex(/^\s*-?\d+(?:\.\d+)?\s*,\s*-?\d+(?:\.\d+)?\s*$/,r7)],{error:r7}),i7='Percent must be a number or a percent string, e.g. 90 or "90%"',c7=z$1.union([z$1.number(),z$1.string().regex(/^-?\d+(?:\.\d+)?%$/,i7)],{error:i7}).transform(e=>typeof e=="number"?e:Number(e.slice(0,-1))).pipe(z$1.number().min(0,{message:"Percent must be >= 0"}).max(100,{message:"Percent must be <= 100"})),S$e=z$1.strictObject({x:z$1.number(),y:z$1.number(),delta:z$1.number()}),u7=z$1.union([z$1.string(),S$e]),Wn={...St,DANGEROUS_FORCE_DYNAMIC:z$1.boolean().optional()},b$e=["home","power","back","app_switcher","search","volume_up","volume_down","volume_mute"],T$e=["enter","backspace","close_keyboard"],s7=["airplane_mode","data","wifi","location"],a7=["portrait","landscape"],A$e=z$1.strictObject({on:Nf.optional(),longPress:z$1.boolean().optional(),longPressDuration:z$1.number().optional(),iterations:z$1.number().optional(),tapDelay:z$1.number().optional(),offset:l7.optional(),...Wn}),d7=nt({key:"tap",simplified:Nf,detailed:A$e}),E$e=z$1.strictObject({text:z$1.string(),into:Nf.optional(),clearContent:z$1.boolean().optional(),forceClearContent:z$1.boolean().optional(),delay:z$1.number().optional(),waitForKeyboardSettle:z$1.boolean().optional(),replaceStrategy:z$1.nativeEnum(Aw).optional(),keyPressDelay:z$1.number().optional(),...Wn}),m7=nt({key:"type",simplified:z$1.string(),detailed:E$e}),p7=z$1.enum(b$e),v$e=z$1.strictObject({key:p7,longPress:z$1.boolean().optional(),...Wn}),h7=nt({key:"press",simplified:p7,detailed:v$e}),g7=z$1.enum(T$e),w$e=z$1.strictObject({key:g7,repeat:z$1.number().optional(),delay:z$1.number().optional(),keyPressDelay:z$1.number().optional(),...Wn}),f7=nt({key:"pressKey",simplified:g7,detailed:w$e}),R$e=z$1.strictObject({package:z$1.string(),activity:z$1.string().optional(),intentExtras:z$1.string().optional(),...Wn}),y7=nt({key:"openApp",simplified:z$1.string(),detailed:R$e}),S7=ko({key:"killApp",detailed:z$1.strictObject(Wn)}),b7=ko({key:"openNotifications",detailed:z$1.strictObject(Wn)}),T7=z$1.enum(["up","down","left","right"]),C$e=z$1.strictObject({direction:T7,in:u7.optional(),viewportPercent:c7.optional(),duration:z$1.number().optional(),offset:l7.optional(),...Wn}),A7=nt({key:"swipe",simplified:T7,detailed:C$e}),I$e=z$1.enum(["up","down"]),x$e=z$1.strictObject({on:Nf,direction:I$e.optional(),in:u7.optional(),scrollStepPercent:c7.optional(),maxScrollAttempts:z$1.number().optional(),...Wn}),E7=nt({key:"scrollTo",simplified:z$1.string(),detailed:x$e}),b$=nt({key:"assert",simplified:z$1.string(),detailed:z$1.strictObject({that:z$1.string(),timeout:z$1.number().optional(),...Wn})}),T$=nt({key:"assertVisually",simplified:z$1.string(),detailed:z$1.strictObject({that:z$1.string(),timeout:z$1.number().optional(),...Wn})}),v7=nt({key:"extract",simplified:z$1.string(),detailed:z$1.strictObject({goal:z$1.string(),schema:yh.optional(),...Wn})}),w7=nt({key:"checkScreenContains",simplified:z$1.string(),detailed:z$1.strictObject({text:z$1.string(),timeout:z$1.number().optional(),...Wn})}),R7=nt({key:"checkScreenDoesNotContain",simplified:z$1.string(),detailed:z$1.strictObject({text:z$1.string(),timeout:z$1.number().optional(),...Wn})}),C7=z$1.union([w7,R7]),_$e=z$1.record(z$1.string(),z$1.unknown().optional()),A$=_$e.superRefine((e,t)=>{let n=Object.keys(e),o=n[0];if(n.length!==1||o===void 0){t.addIssue({code:"custom",message:"element checks require exactly one checkElement... key"});return}let r=na(o);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$1.looseObject({on:Nf.optional(),timeout:z$1.number().optional(),name:z$1.string().optional(),value:z$1.string().optional(),...Wn}).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"]});}),P$e=z$1.strictObject({from:Nf,to:Nf,hoverDuration:z$1.number().optional(),dragDuration:z$1.number().optional(),...Wn}),I7=ko({key:"dragAndDrop",detailed:P$e}),E$=nt({key:"javascript",simplified:z$1.string(),detailed:z$1.strictObject({code:z$1.string(),timeout:z$1.number().optional(),...Wn})}),x7=nt({key:"request",simplified:z$1.string(),detailed:z$1.strictObject({url:z$1.string(),method:pm.optional(),headers:z$1.record(z$1.string(),z$1.string()).optional(),params:z$1.record(z$1.string(),z$1.string()).optional(),body:z$1.string().optional(),bodyType:z$1.nativeEnum(ju).optional(),timeout:z$1.number().optional(),...Wn})}),_7=nt({key:"wait",simplified:z$1.number(),detailed:z$1.strictObject({ms:z$1.number(),...Wn})}),P7=nt({key:"visualDiff",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string(),threshold:z$1.number().min(0).max(1).optional(),...Wn})}),O7=ko({key:"addFile",detailed:z$1.strictObject({path:z$1.string(),location:z$1.string(),...Wn})}),M7=nt({key:"setCamera",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string(),loop:z$1.boolean().optional(),playAudio:z$1.boolean().optional(),...Wn})}),k7=ko({key:"clearCamera",detailed:z$1.strictObject(Wn)}),L7=nt({key:"setMicrophone",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string(),once:z$1.boolean().optional(),...Wn})}),N7=ko({key:"clearMicrophone",detailed:z$1.strictObject(Wn)}),D7=nt({key:"installApp",simplified:z$1.string(),detailed:z$1.strictObject({path:z$1.string(),...Wn})}),F7=nt({key:"uninstallApp",simplified:z$1.string(),detailed:z$1.strictObject({package:z$1.string(),...Wn})}),B7=nt({key:"toggleSettings",simplified:z$1.enum(s7),detailed:z$1.strictObject({setting:z$1.enum(s7),...Wn})}),U7=nt({key:"rotate",simplified:z$1.enum(a7),detailed:z$1.strictObject({orientation:z$1.enum(a7),...Wn})}),H7=nt({key:"adb",simplified:z$1.string(),detailed:z$1.strictObject({command:z$1.string(),args:z$1.string().optional(),...Wn})}),j7=ko({key:"appium",detailed:z$1.strictObject({script:z$1.string(),args:z$1.string().optional(),...Wn})}),$7=ko({key:"debugState",detailed:z$1.strictObject(Wn)}),G7=z$1.enum(["killApp","openNotifications","debugState","clearCamera","clearMicrophone"]);z$1.union([d7,m7,h7,f7,y7,S7,b7,A7,E7,b$,T$,v7,C7,I7,E$,x7,_7,P7,O7,M7,k7,L7,N7,D7,F7,B7,U7,H7,j7,$7,A$]);var z7=new Map([["tap",d7],["type",m7],["press",h7],["pressKey",f7],["openApp",y7],["killApp",S7],["openNotifications",b7],["swipe",A7],["scrollTo",E7],["assert",b$],["assertVisually",T$],["extract",v7],["checkScreenContains",w7],["checkScreenDoesNotContain",R7],["dragAndDrop",I7],["javascript",E$],["request",x7],["wait",_7],["visualDiff",P7],["addFile",O7],["setCamera",M7],["clearCamera",k7],["setMicrophone",L7],["clearMicrophone",N7],["installApp",D7],["uninstallApp",F7],["toggleSettings",B7],["rotate",U7],["adb",H7],["appium",j7],["debugState",$7]]);Object.freeze([...z7.keys()]);var V7=z$1.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 n=Object.keys(e),o=n[0];if(n.length!==1||o===void 0){t.addIssue({code:"custom",message:"v2 mobile commands must have exactly one action key."});return}let r=z7.get(o)??(na(o)?A$:void 0);if(!r){t.addIssue({code:"custom",message:`Unsupported v2 mobile command '${o}'.`});return}let i=r.safeParse(e);if(!i.success)for(let s of i.error.issues)t.addIssue({...s});}),v$=z$1.union([b$,T$,C7,E$,A$]);var O$e=z$1.preprocess(e=>typeof e=="number"?String(e):e,Ij),M$e=z$1.looseObject({goal:z$1.string(),version:O$e.optional(),cache:z$1.literal(false).optional(),precondition:z$1.string().optional(),postcondition:z$1.string().optional(),...St}),k$e=z$1.union([z$1.strictObject({act:z$1.string()}),z$1.strictObject({act:M$e})]),L$e=z$1.looseObject({path:z$1.string(),inputs:z$1.record(z$1.string(),Kw).optional(),...St}),N$e=z$1.union([z$1.strictObject({module:z$1.string()}),z$1.strictObject({module:L$e})]),D$e=new Set(["then",...Pb]),F$e=z$1.looseObject({then:z$1.lazy(()=>Jc.array()),...St}).superRefine((e,t)=>{if("else"in e){t.addIssue({code:"custom",message:"v2 mobile conditionals do not support 'else'. Use a separate step instead.",path:["else"]});return}Object.entries(e).filter(([o,r])=>!D$e.has(o)&&v$.safeParse({[o]:r}).success).length!==1&&t.addIssue({code:"custom",message:"v2 mobile conditional steps require exactly one assertion condition at the top level."});}),B$e=z$1.strictObject({if:F$e}),U$e=new Set(["do","maxIterations",...Pb]),H$e=z$1.looseObject({do:z$1.lazy(()=>Jc.array()),maxIterations:z$1.number().int().positive().optional(),...St}).superRefine((e,t)=>{let n=Object.entries(e).filter(([o,r])=>!U$e.has(o)&&v$.safeParse({[o]:r}).success).length;if(n>1){t.addIssue({code:"custom",message:"While loops accept at most one condition at the top level."});return}n===0&&e.maxIterations===void 0&&t.addIssue({code:"custom",message:"While loops require a condition or a maximum number of iterations."});}),j$e=z$1.strictObject({while:H$e}),Jc=z$1.lazy(()=>z$1.union([G7,_b,k$e,N$e,B$e,j$e,V7]));z$1.object({before:Jc.array().optional(),steps:Jc.array(),after:Jc.array().optional()});var $$e=z$1.literal("android"),G$e=z$1.literal("ios");function zP(e){if(typeof e!="object"||e===null)return e;let t=e;if(typeof t.platform!="string")return e;let n=t.platform.toLowerCase();return n===t.platform?e:{...t,platform:n}}var W7=wb.omit({schemaVersion:true,settings:true,platform:true}).extend({version:z$1.string().optional(),platform:$$e,...kw.shape}),q7=Rb.omit({schemaVersion:true,settings:true,platform:true}).extend({version:z$1.string().optional(),platform:G$e,...kw.shape}),z$e=z$1.discriminatedUnion("platform",[W7,q7]),K7=z$1.preprocess(zP,z$e),Y7={before:Jc.array().optional(),steps:Jc.array(),after:Jc.array().optional()},J7=z$1.looseObject({fileType:z$1.literal(De.MOBILE_TEST_V2)}).extend(W7.shape).extend(Y7);z$1.preprocess(zP,J7);var X7=z$1.looseObject({fileType:z$1.literal(De.MOBILE_TEST_V2)}).extend(q7.shape).extend(Y7);z$1.preprocess(zP,X7);var V$e=z$1.discriminatedUnion("platform",[J7,X7]);z$1.preprocess(zP,V$e);var W$e=z$1.preprocess(e=>typeof e=="string"?e.toLowerCase():e,z$1.enum($_).optional().default("android")),VP=SP.omit({moduleId:true,name:true,schemaVersion:true,platform:true}).extend({id:Qo,name:z$1.string().optional(),version:z$1.string().optional(),platform:W$e});z$1.looseObject(VP.extend({fileType:z$1.literal(De.MOBILE_MODULE_V2),steps:z$1.array(z$1.record(z$1.string(),z$1.unknown().optional())).optional()}).shape);z$1.looseObject(VP.extend({fileType:z$1.literal(De.MOBILE_MODULE_V2),steps:Jc.array().optional()}).shape);var WP="x-momentic-cli-version",Z7="x-momentic-client-mode",qP="x-momentic-runner",eee="x-momentic-cli-type",KP="x-momentic-logger-tags",w$="x-momentic-effective-ai-effort",q$e="x-momentic-main-branch-name",K$e="x-momentic-branch-name",Y$e="x-momentic-commit-timestamp",J$e="x-momentic-last-commit-on-main",X$e="x-momentic-last-commit-on-main-timestamp",Q$e="x-momentic-merged-branch-name",tee="x-momentic-session-id",nee=529,oee="x-momentic-parent-trace-id";x.object({error:x.boolean(),reason:x.string(),message:x.string()});zr.merge(rj);var ree=m_;zr.merge(rj);zr.merge(RQ).extend({useConsensus:x.boolean().optional(),attemptNumber:x.number().optional()});var R$=OJ;zr.merge(CQ);var iee=y5;zr.merge(AQ);var see=H_;zr.merge(YX);zr.merge(EQ);var aee=h5;zr.merge(vQ);zr.merge(wQ);zr.merge(PQ);zr.merge(OQ);zr.merge(MQ);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 lee=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 Z$e=x.object({tests:x.record(x.string().describe("Test name (keys correspond to entries in `tests`)"),x.string().describe("Slash-separated folder name path that the test lives in (e.g. 'Auth/Login'). Top-level entities are omitted.")),modules:x.record(x.string().describe("Module name (keys correspond to entries in `modules`)"),x.string().describe("Slash-separated folder name path that the module lives in."))}),cee=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:Z$e.optional().describe("Optional map from exported entity name to its slash-separated cloud folder path. Used by the CLI to recreate folder structure on disk.")}),eGe=x.object({test:x.string().describe("test YAML"),modules:x.record(x.string().describe("moduleId"),x.string().describe("module YAML"))});eGe.array();x.object({testId:x.string(),schemaVersion:x.string()}).merge(fm);function YP(e){let{gitMainBranch:t,gitBranchName:n,gitCommitTimestamp:o,lastCommitOnMainSha:r,lastCommitOnMainTimestamp:i}=e,s={};return t&&(s[q$e]=encodeURIComponent(t)),n&&(s[K$e]=encodeURIComponent(n)),o&&(s[Y$e]=o.toISOString()),r&&(s[J$e]=encodeURIComponent(r)),i&&(s[X$e]=i.toISOString()),e.mergedGitBranchName&&(s[Q$e]=encodeURIComponent(e.mergedGitBranchName)),s}x.object({entries:x.array(ZX)});x.object({platform:S$.optional(),entries:x.array(n7)});x.object({testId:x.string(),environment:x.string().optional(),platform:S$.optional()});x.object({testId:x.string(),key:x.string(),environment:x.string().optional()});function uee(e){return x.record(x.string(),x.unknown().optional()).transform(t=>{let n={};for(let[o,r]of Object.entries(t)){let i=e.safeParse(r);i.success&&(n[o]=i.data);}return n})}var dee=uee(e5),mee=o7.array();function Q7(e){return uee(Kv(e))}var pee={ANDROID:e=>Q7(EP).parse(e),IOS:e=>Q7(vP).parse(e)},tGe=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(ho).optional()}),nGe=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(ho).optional()});x.object({completionType:x.string(),traceIds:x.string().array()});var C$=x.union([tGe,nGe]).array(),hee=x.object({trigger:x.nativeEnum(ml),status:x.nativeEnum(Ht),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 gee=x.object({status:x.nativeEnum(Ht),updatedAt:x.coerce.date().optional(),finishedAt:x.coerce.date().optional()});x.object({summary:Tf,githubRepository:x.string().optional(),gitBranchName:x.string().optional()});var oGe=x.object({runId:x.string(),healStatus:bf,healDetails:ah.optional()});x.object({updates:oGe.array()});var fee=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(ml),schemaVersion:x.string().optional(),section:x.nativeEnum(Z_).optional(),resolvedInputs:x.record(x.string(),x.string()).optional(),quarantined:x.boolean().optional().default(false),quarantinedReason:x.string().optional(),aiSettings:Na.optional()});x.object({id:x.string()});var rGe=tj.pick({id:true,status:true,healStatus:true,healDetails:true,testName:true,testId:true,test:true,failureReason:true,failureDetails:true}),yee=rGe.array(),See=tj.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 JP=x.object({run:Ys.omit({runAttempts:true}),attemptZipUrls:x.array(x.string().url().nullish())}),bee=x.object({status:x.nativeEnum(Ht),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 Tee=x.object({key:x.string()}),Aee=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()}),Eee=x.object({blocked:x.boolean()}),vee=x.array(NX),wee=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 Ree=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()}),Cee=x.object({error:x.literal("multiple_organizations"),organizations:x.array(x.object({id:x.string(),name:x.string()}))}),iGe=["web","ios","android"];x.object({platforms:x.array(x.enum(iGe)),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:QH.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 Iee=x.object({suiteRunIds:x.string().array(),runGroupIds:x.string().array()});x.object({suiteRunIds:x.string().array()});fQ.array();x.object({runGroupIds:x.string().array()});var XP=x.object({uploadUrl:x.string()});zr.merge(IQ);zr.merge(_Q);zr.merge(xQ);var QP=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(Es).optional(),aiFeature:x.nativeEnum(gh).optional(),cached:x.boolean().optional(),outcome:x.nativeEnum(Ab).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(),[tZ]:x.string().optional(),agentInvocationId:x.string().optional(),moRuntimeSecondsUsed:x.number().nonnegative().optional(),hostedBrowserSecondsUsed:x.number().optional(),sessionMinutesUsed:x.number().nonnegative().optional(),labels:x.array(x.string()).optional()});x.object({orgId:x.string(),runId:x.string().optional(),testId:x.string().optional(),isInteractive:x.boolean().optional(),runner:x.nativeEnum(Es).optional()});var sGe=x.object({transactionId:x.string(),timestamp:x.string(),event:x.nativeEnum(xf),properties:QP});sGe.array();var xee=L8.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:Fo.optional(),end:Fo.optional(),gitBranchName:x.string().optional(),status:x.nativeEnum(Ht).optional()});var _ee=rQ.array(),Pee=Ys.array(),ZP=bh.extend({testId:Qo.optional(),gitBranchName:x.string().optional(),gitCommitSha:x.string().optional(),status:x.nativeEnum(Ht).optional(),label:x.string().array().optional(),start:Fo.optional(),end:Fo.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()});ZP.extend({orgId:x.string().optional(),testId:ci(Qo),status:ci(x.nativeEnum(Ht)),gitBranchName:ci(x.string()),label:ci(x.string()),testName:x.string().optional(),trigger:ci(x.nativeEnum(ml)),executionType:ci(lh),cliVersion:ci(x.string()),githubRepository:ci(x.string()),gitlabProjectPath:ci(x.string()),environment:ci(x.string()),directory:ci(x.string()),failureCategory:ci(x.string()),exclude:ci(x.string()),healed:x.boolean().optional()});var aGe=Ys.omit({test:true}),Oee=t$.extend({runs:aGe.array()});x.object({applied:x.boolean().optional(),appliedAt:x.coerce.date().optional()});var Mee=XP.extend({id:x.string()}),lGe=x.object({resultType:x.literal("run").optional().default("run"),runGroupId:x.guid().optional(),persist:x.boolean().optional()}),cGe=x.object({resultType:x.literal("explore"),exploreRunId:x.guid(),persist:x.boolean().optional()});x.discriminatedUnion("resultType",[lGe,cGe]);var kee=x.object({runGroupId:x.guid()}),uGe=x.object({status:bf,runId:x.string(),rootCause:x.string().nullable().optional(),solution:x.string().nullable().optional(),verificationNotes:x.string().nullable().optional(),markedAt:x.string()}),Lee=x.object({quarantined:x.object({testId:Qo,quarantinedAt:x.coerce.date(),quarantinedBy:x.string().optional(),quarantinedReason:x.string(),verdict:uGe.nullish().default(null)}).array()}),I$=bh.extend({limit:bh.shape.limit.describe("Max number of quarantined tests to return per page."),page:bh.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.")}),dGe=x.object({id:x.string(),status:x.literal("FAILED"),startedAt:Fo,finishedAt:Fo,failureReason:x.string().nullish(),healStatus:bf,healDetails:ah.nullish()}),Nee=t$.extend({quarantinedTests:x.array(x.object({testId:Qo,testName:x.string().nullish(),quarantinedAt:Fo,quarantineReason:x.string(),latestFailedRun:dGe.nullable()}))}),Dee=x.object({gitLocalUsername:x.string().optional(),gitLocalEmail:x.string().optional(),gitLocalName:x.string().optional()});x.object({testId:Qo,testName:x.string().optional(),reason:x.string()}).merge(Dee);x.object({testName:x.string().optional(),reason:x.string().optional()}).merge(Dee);zr.merge(V6);zr.merge(W6);zr.merge(q6);x.object({apkToInstall:x.object({channel:x.string(),tag:x.string().optional()}).optional(),hostname:x.string().optional(),region:Gj.optional(),jurisdiction:Mw.optional(),osVersion:x.nativeEnum(vb).optional(),sessionId:x.string().optional(),runId:x.string().optional(),testId:x.string().optional(),playwrightVersion:aZ.optional()});var Fee=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:Gj.optional(),jurisdiction:Mw.optional(),osVersion:x.nativeEnum(RP).optional(),sessionId:x.string().optional(),runId:x.string().optional(),testId:x.string().optional(),installAppOnClient:x.boolean().optional()});var Bee=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()!==Jv,{message:`"${Jv}" 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()!==Jv,{message:`"${Jv}" is a reserved alias and cannot be assigned when uploading an asset.`}).optional(),md5:x.string()});var Uee=x.object({id:x.string(),tag:x.string().optional(),alias:x.string().optional(),uploadUrl:x.string().optional(),downloadUrl:x.string(),md5:x.string().optional()}),mGe=x.object({channel:x.string(),tag:x.string(),md5:x.string(),platform:x.nativeEnum(Yl).default("ANDROID"),createdAt:x.number().describe("Unix timestamp in milliseconds")}),pGe=x.object({channel:x.string(),alias:x.string(),platform:x.nativeEnum(Yl).default("ANDROID"),tag:x.string()}),Hee=x.object({assets:x.array(mGe),aliases:x.array(pGe).default([])}),jee=x.object({downloadUrl:x.string()}),eO=(n=>(n.PLAYWRIGHT="PLAYWRIGHT",n.CDP="CDP",n))(eO||{}),hGe=x.nativeEnum(eO),$ee=x.string().trim().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,79}$/);x.object({access:$ee.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(MP).optional(),localhostTunnel:x.boolean().optional()});var gGe=x.object({access:$ee.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()});gGe.extend({attemptedProviders:x.array(MP).max(Object.values(Ww).length).default([])}).strict();var fGe=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()]),Gee=x.object({accessToken:x.string().min(1),expiresAt:x.iso.datetime(),fleetApiUrl:x.url(),provider:x.literal("SELF_HOSTED"),tokenType:x.literal("Bearer")}),yGe=Gee.extend({network:fGe}).strict(),zee=x.union([yGe,Gee.strict()]),SGe=x.object({hostname:x.string(),lease:x.string(),server:x.object({host:x.string(),port:x.number().int().positive()})}),Vee=x.object({wsEndpoint:x.string(),accessToken:x.string().optional(),endpointType:hGe.optional(),provider:MP.optional(),operatingSystem:k8.optional(),tunnel:SGe.optional()});var bGe=200,TGe=2e3,Jw=z$1.string().trim().min(1).max(bGe),Eh=z$1.string().trim().min(1).max(TGe),Fb=z$1.array(Eh),AGe=z$1.enum(["verified","issues_found","blocked"]),tO=z$1.object({name:Jw,summary:Eh,preconditions:Fb,outline:Fb,acceptanceCriteria:Fb}),EGe=z$1.object({startedAt:z$1.number(),finishedAt:z$1.number(),agentId:z$1.string().optional(),windowId:z$1.string().optional(),artifactId:z$1.string().optional()}),nO=z$1.object({name:Jw,summary:Eh,expected:Eh,actual:Eh,reproSteps:Fb,recording:EGe.nullish()}),Wee=z$1.object({name:Jw.describe("The name of the bug to retract."),reason:z$1.enum(["duplicate","invalid"]).describe("Why the bug report is being retracted.")}),x$=z$1.enum(["checked","failed","partial","out_of_scope"]),_$=z$1.object({control:Jw,status:x$,result:Eh}),P$=z$1.object({status:AGe,summary:Eh,verified:Fb,gaps:Fb});z$1.object({entry:tO});z$1.object({entry:nO});z$1.object({entry:_$});z$1.object({report:P$});z$1.object({entries:z$1.array(tO)});z$1.object({entries:z$1.array(nO)});z$1.object({entries:z$1.array(_$)});z$1.object({report:P$.nullable()});var O$=z$1.object({agent:z$1.string().nullable(),conversationId:z$1.string().nullable(),createdAt:z$1.iso.datetime(),updatedAt:z$1.iso.datetime()}),vGe=tO.extend({...O$.shape,blockedReason:z$1.string().nullable()}),wGe=nO.extend({...O$.shape,investigatorAgent:z$1.string().nullable(),investigatorConversationId:z$1.string().nullable(),reviewedAt:z$1.iso.datetime().nullable()});_$.extend({agent:z$1.string(),conversationId:z$1.string()});var RGe=P$.extend({testCaseName:z$1.string().nullable(),...O$.shape}),M$=z$1.enum(["OPEN","ACCEPTED","DUPLICATE","WORKS_AS_INTENDED","CANNOT_REPRODUCE"]);z$1.object({bugName:z$1.string(),status:M$,knowledgeItemId:z$1.string().nullable(),updatedByUserId:z$1.string().nullable(),updatedAt:z$1.iso.datetime()});z$1.object({chatId:z$1.string().min(1),bugName:Jw,status:M$,reviewedKnowledgeItemIds:z$1.array(z$1.string().min(1)).optional(),reviewedKnowledgeItemStatus:O5.optional(),linkedKnowledgeItemId:z$1.string().min(1).nullable().optional()});z$1.object({entries:z$1.array(vGe)});z$1.object({entries:z$1.array(wGe)});z$1.object({entries:z$1.array(RGe)});z$1.object({testCases:z$1.number(),verified:z$1.number(),issuesFound:z$1.number(),blocked:z$1.number(),bugs:z$1.number(),bugsByTriage:z$1.record(M$,z$1.number())});z$1.object({entry:tO});z$1.object({retracted:z$1.boolean(),conflict:z$1.string().optional()});z$1.object({entry:nO});z$1.object({reason:Eh});var qee=z$1.object({id:z$1.string(),createdAt:z$1.coerce.date(),createdBy:z$1.string(),organizationId:z$1.string(),name:z$1.string(),description:z$1.string().nullish(),enabled:z$1.boolean(),schemaVersion:z$1.string().describe("Schema version for steps"),parameters:z$1.string().array().nullish().describe("Parameter list"),parameterEnums:z$1.record(z$1.string(),z$1.string().array()).nullish(),defaultParameters:z$1.record(z$1.string(),z$1.string()).nullish(),defaultCacheKey:z$1.string().nullish(),defaultCacheTtl:z$1.number().nullish(),defaultCacheAllInvocations:z$1.boolean().nullish(),autoAuth:z$1.boolean().nullish(),defaultRetries:z$1.int().min(0).nullish(),advanced:XU.nullish()});qee.extend({steps:z$1.lazy(()=>ln.array())});var Kee=5*60*1e3,Xw=Jo.extend(qee.omit({id:true,createdAt:true,createdBy:true,organizationId:true,enabled:true}).shape);var CGe="org_01HMJTX4GT1KG94KZRCT8MZ6YB",IGe="org_01HMSCJQBCCG51M2ZF65YC5B8W",xGe="org_01JPR6MGFQSHF3W234R3XJDPMB",_Ge=[CGe,IGe,xGe];function k$(e){return _Ge.includes(e)}var PGe=z$1.object({id:z$1.string(),title:z$1.string(),body:z$1.string(),imageUrl:z$1.string().nullable(),videoUrl:z$1.string().nullable(),ctaUrl:z$1.string().nullable(),publishedAt:z$1.string()}),Yee=z$1.object({update:PGe.nullable()});z$1.object({repositoriesIndexed:z$1.boolean(),indexingInProgress:z$1.boolean(),indexesOutdated:z$1.boolean()});var Jee=(s=>(s.Queued="queued",s.InProgress="in_progress",s.Completed="completed",s.Waiting="waiting",s.Requested="requested",s.Pending="pending",s))(Jee||{}),Xee=(a=>(a.Success="success",a.Failure="failure",a.Neutral="neutral",a.Cancelled="cancelled",a.Skipped="skipped",a.TimedOut="timed_out",a.ActionRequired="action_required",a))(Xee||{});z$1.object({name:z$1.string(),status:z$1.enum(Jee),conclusion:z$1.enum(Xee).nullable()});var Qw=z$1.object({sha:z$1.string(),parentShas:z$1.array(z$1.string()).optional(),message:z$1.string(),author:z$1.object({name:z$1.string().optional(),email:z$1.string().optional(),date:z$1.coerce.date().optional()}),committer:z$1.object({name:z$1.string().optional(),email:z$1.string().optional(),date:z$1.coerce.date().optional()})}),L$=z$1.object({mergedBranch:z$1.string().optional()});var Qee=z$1.object({orgId:z$1.string(),cacheKeys:z$1.string().array()});z$1.object({keyParams:Qee,clientMetadata:z$1.string(),lockAcquisitionTimeoutMs:z$1.number().optional()});var Zee=z$1.object({acquired:z$1.boolean(),acquiredByMetadata:z$1.string(),keyPrefix:z$1.string()});z$1.object({keyPrefix:z$1.string(),result:z$1.string(),ttlMs:z$1.number()});z$1.union([z$1.object({keyPrefix:z$1.string()}),Qee]);var OGe=z$1.object({remainingTtlMs:z$1.number(),value:z$1.string().nullish()});z$1.object({results:z$1.record(z$1.string(),OGe),activeLocks:z$1.string().array()});var ete=0,tte=5*60*1e3;var nte=z$1.object({cacheEntryId:z$1.string().uuid(),category:z$1.string().min(1)}),ote=sf.extend({cacheEntryId:z$1.string().uuid().optional(),runId:z$1.string().min(1).optional(),testId:z$1.string().min(1),executionFailureReason:z$1.string().min(1).optional(),classification:_U,healDetails:VX.optional()}),rte=ote.extend({isManualOverride:z$1.boolean().optional(),overriddenBy:nte.optional(),manualOverrideOf:nte.optional(),createdAt:z$1.coerce.date(),updatedAt:z$1.coerce.date()});function N$(e){return !e.branchName&&QE(e.classification.category)}sf.extend({mainBranchName:z$1.string().min(1).optional()});var ite=rte.array();z$1.object({entries:ote.array()});sf.extend({runId:z$1.string().min(1),cacheEntryId:z$1.string().uuid(),category:z$1.string().min(1)});z$1.object({status:z$1.enum(["evicted","not_found","run_mismatch"]),entry:rte.optional()});z$1.object({runId:z$1.string().min(1),environment:z$1.string().min(1).optional(),status:z$1.enum(["PASSED","FAILED"])});z$1.object({environment:z$1.string().min(1).optional()});var oO=z$1.object({skip:z$1.boolean(),failed:z$1.number(),total:z$1.number()}),MGe=.8;function ste({failed:e,completed:t,minCompletedRuns:n}){return t>=n&&e/t>=MGe}function Bb(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 kGe=z$1.object({version:z$1.string(),json:z$1.record(z$1.string(),z$1.unknown().optional()),hash:z$1.string()}),ate=z$1.record(z$1.string(),z$1.unknown().optional());z$1.object({newSvgs:z$1.array(kGe),metadata:ate.optional()});var LGe=z$1.object({version:z$1.string(),json:z$1.record(z$1.string(),z$1.unknown().optional()).nullish(),hash:z$1.string(),description:z$1.string().nullish(),metadata:ate.nullish()}),lte=z$1.record(z$1.string().describe("icon hash"),LGe);var D$="metadata.json",F$="test.yaml",cte=".snapshot.zip",B$=Wo.extend(cl.shape),NGe=z$1.object({envName:z$1.string().optional(),baseUrl:z$1.string(),variables:z$1.record(z$1.string(),z$1.unknown().optional()),resolvedEnv:Gv.optional()}),ute=z$1.object({browser:jc.optional(),ai:Na.optional(),advanced:nw.optional(),retries:z$1.number().optional()});z$1.object({momenticVersion:z$1.string(),schemaVersion:z$1.string(),createdAt:z$1.string(),relativeFilePath:z$1.string(),environment:NGe,config:ute});var dte=z$1.object({variables:z$1.record(z$1.string(),z$1.unknown().optional()),resolvedEnv:Gv.optional()}),DGe=z$1.object({envName:z$1.string().optional(),baseUrl:z$1.string(),encryptedSecrets:z$1.string()}),mte=z$1.object({momenticVersion:z$1.string(),schemaVersion:z$1.string(),createdAt:z$1.string(),relativeFilePath:z$1.string(),environment:DGe,config:ute});var FGe=z$1.looseObject({type:z$1.number(),data:z$1.record(z$1.string(),z$1.unknown()),timestamp:z$1.number()}),pte=z$1.custom(e=>FGe.safeParse(e).success);z$1.discriminatedUnion("kind",[z$1.object({kind:z$1.literal("agent-action"),tool:z$1.string(),toolCallId:z$1.string().optional(),detail:z$1.string().optional(),input:z$1.unknown().optional()}),z$1.object({kind:z$1.literal("step"),phase:z$1.enum(["start","pass","fail"]),name:z$1.string()}),z$1.object({kind:z$1.literal("window"),phase:z$1.enum(["start","stop"]),windowId:z$1.string()}),z$1.object({kind:z$1.literal("bug-marker"),title:z$1.string()}),z$1.object({kind:z$1.literal("control"),control:z$1.string(),status:x$}),z$1.object({kind:z$1.literal("network-error"),method:z$1.string(),url:z$1.string(),status:z$1.number()})]);z$1.looseObject({level:z$1.string(),payload:z$1.array(z$1.string()),trace:z$1.array(z$1.string()).optional()});function hte(e){let t;try{t=JSON.parse(e);}catch(n){return `The schema is not valid JSON. ${n}`}try{validator(t);}catch(n){return `The schema is not a valid JSON schema. ${n}`}}var gte=e=>{e.extraHeaders&&(e.extraHeaders=Object.fromEntries(Object.entries(e.extraHeaders).filter(([t,n])=>t.trim()&&n.trim())));};var rO=class{async prepareGoldenScreenshotForComparison(t,n,o){return o}};var iO=class{async resolveStepCacheEntries(){return {}}async saveStepCacheEntries(){}async saveSnapshotCacheEntries(){}async deleteStepCacheEntry(){}};function UGe(e){return e.map(t=>({...t,environment:void 0}))}function U$(e,t){return t?e:UGe(e)}var j$="browser-crash-dump.zip",H$=class{loggerBindings;attachBeforeScreenshot(){}attachAfterScreenshot(){}attachBeforeHtmlSnapshot(){}attachAfterHtmlSnapshot(){}recordTargetAutoHeal(){}storeTraceAsset(){}async finish(){}async startSubSteps(){return new Zw}},Zw=class{async getScreenshot(){}async getHtmlSnapshot(){}async startStep(){return new H$}flushResults(t){}};var dt="metadata.json",oa="assets",Ro="runs",$$=z$1.object({type:z$1.literal("explore"),id:z$1.string(),cliVersion:z$1.string().optional(),startedAt:z$1.string(),finishedAt:z$1.string(),baseSha:z$1.string(),headSha:z$1.string(),ciProvider:z$1.string().optional(),pipelineId:z$1.string().optional(),gitMainBranch:z$1.string().optional(),gitCommitSha:z$1.string().optional(),gitCommitShaShort:z$1.string().optional(),gitBranchName:z$1.string().optional(),gitOriginUrl:z$1.string().optional(),gitCommitMessage:z$1.string().optional(),gitCommitAuthorName:z$1.string().optional(),githubRepository:z$1.string().optional(),gitlabProjectPath:z$1.string().optional(),pullRequestUrl:z$1.string().optional(),result:z$1.unknown(),bugs:z$1.array(z$1.unknown()),uxNits:z$1.array(z$1.unknown()).default([]),writtenPaths:z$1.array(z$1.string()),videos:z$1.array(z$1.string()),failure:z$1.unknown().optional()});z$1.object({exploreRunId:z$1.guid(),metadata:$$,videoAssets:z$1.string().array().optional()});var fte=z$1.object({uploadUrl:z$1.string(),videoUploadUrls:z$1.record(z$1.string(),z$1.string()).optional()}),HGe=z$1.object({step:cn,status:z$1.enum(Ft),startedAt:z$1.coerce.date(),finishedAt:z$1.coerce.date().optional(),healMetadata:z$1.object({healType:z$1.enum(Yv).or(z$1.literal("AI")),healedAt:z$1.coerce.date()}).optional(),beforeSnapshotId:z$1.guid().optional(),afterSnapshotId:z$1.guid().optional(),message:z$1.string().optional()}),jGe=HGe.extend({finishedAt:z$1.coerce.date().optional().transform(e=>e??new Date)});jGe.extend({step:z$1.unknown().optional()});var G$=z$1.object({avdId:z$1.string().optional(),channel:z$1.string().optional(),tag:z$1.string().optional(),region:z$1.string().optional(),osVersion:lZ.optional()}),yte="1.0.0",Ste=bee.extend({id:z$1.guid().optional(),startedAt:z$1.coerce.date(),runAttemptSchemaVersion:z$1.string().optional(),schemaVersion:z$1.string().optional().default("1.0.19"),results:z$1.record(z$1.string(),z$1.unknown().optional()).array().optional(),beforeResults:z$1.record(z$1.string(),z$1.unknown().optional()).array().optional(),afterResults:z$1.record(z$1.string(),z$1.unknown().optional()).array().optional(),assetDetails:G$.optional(),viewport:vm.optional(),activeVideos:z$1.array(z$1.object({videoName:z$1.string(),timestamp:z$1.coerce.date()})).optional()}),eR=Ste.extend({assetDetails:G$.optional(),finishedAt:z$1.coerce.date().optional().transform(e=>e??new Date)});Ste.extend(UH.shape);var bte=eR.extend(UH.shape),$Ge=z$1.object({results:z$1.array(Xs),beforeResults:z$1.array(Xs).optional(),afterResults:z$1.array(Xs).optional()});eR.extend($Ge.shape);var GGe=z$1.object({results:z$1.array(Qs),beforeResults:z$1.array(Qs).optional(),afterResults:z$1.array(Qs).optional()});eR.extend(GGe.shape);var Tte=See.merge(fee).extend({executionType:lh.optional().default("WEB"),testId:Qo,testDescription:z$1.string().optional(),directory:z$1.string().optional(),runGroupId:z$1.guid(),status:z$1.enum(Ht),healStatus:bf,testBundleHash:z$1.string().optional(),startedAt:z$1.coerce.date(),schemaVersion:z$1.string().nullish(),attempts:z$1.number(),failureRecoveryDetails:z$1.object({attempts:z$1.number()}).optional(),aiSettings:Na.optional(),avgCpuUsage:z$1.number().optional(),avgMemoryUsage:z$1.number().optional()}),zGe=Tte.extend(G$.shape),vh=Tte.extend({finishedAt:z$1.coerce.date().optional().transform(e=>e??new Date)});zGe.extend({finishedAt:z$1.coerce.date().optional().transform(e=>e??new Date)});var sO=1e4,VGe=hee.merge(gee).extend({id:z$1.guid().optional(),startedAt:z$1.coerce.date(),cliVersion:z$1.string(),labels:z$1.string().array().optional().default([]),suiteName:z$1.string().optional(),ciProvider:z$1.string().optional(),gitMainBranch:z$1.string().optional(),ai:Na.optional(),browser:jc.optional(),sourceRunGroupIds:z$1.array(z$1.guid()).max(sO).optional(),mergedAt:z$1.coerce.date().optional(),aiSelect:z$1.union([rw.transform(e=>[e]),z$1.array(rw)]).optional()}),ic=VGe.extend({healRiskSummary:Tf.optional(),updatedAt:z$1.coerce.date().optional().transform(e=>e??new Date),finishedAt:z$1.coerce.date().optional().transform(e=>e??new Date)});var WGe=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"]),qGe=new Set(["MODULE","RESOLVED_MODULE"]);function Ate(e){return e.type!=="PRESET_ACTION"?e.type:e.command.type}function Ete(e){return qGe.has(e.type)?false:e.type!=="PRESET_ACTION"?true:!WGe.has(e.command.type)}var vte="progress.json",wte="1.0.0",KGe=z$1.object({runId:z$1.string(),testId:z$1.string().optional(),testName:z$1.string().optional(),directory:z$1.string().optional(),status:z$1.nativeEnum(Ht),completedSteps:z$1.number(),totalSteps:z$1.number(),startedAt:z$1.coerce.date(),updatedAt:z$1.coerce.date()});z$1.object({schemaVersion:z$1.string(),runGroupId:z$1.string(),status:z$1.nativeEnum(Ht),totalRuns:z$1.number(),completedRuns:z$1.number(),completedSteps:z$1.number(),totalSteps:z$1.number(),startedAt:z$1.coerce.date(),updatedAt:z$1.coerce.date(),runs:KGe.array()});function Rte(e,t){let n=mo__default.relative(t,e);return n!==""&&n!==".."&&!n.startsWith(`..${mo__default.sep}`)&&!mo__default.isAbsolute(n)}function Cte(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 Ite="CumAaTMUcwjt05OddAmefKgshbhfRmWxzxih",Ub="https://us-west.metrics.momentic.ai",Hb="c60c6a0f-60da-41a7-a61b-07969a0aa303",fl=!!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 nze=new Set(["exit","quit"]),Pte=(()=>{try{return statSync("/.dockerenv"),!0}catch{return false}})(),oze=fl||Pte||!process.stdin.isTTY;async function Kr(e){if(fl||Pte)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(n=>setTimeout(n,100)),await confirm({message:e})}async function V$(e){let t=dirname(e);return Cte(t)?existsSync(e)?Kr(`File '${xte(e)}' already exists. Overwrite existing content?`):true:await Kr(`Directory '${xte(t)}' doesn't exist. Create it now?`)?(mkdirSync(t,{recursive:true}),true):false}function xte(e){return e.replace(/(\s+)/g,"\\$1")}async function Ote(e,t){return oze?t:(await input({message:e,default:t})).trim()||t}async function W$(){let e;try{e=(await input({message:"ask"})).trim();}catch(t){if(t instanceof Error&&t.name==="ExitPromptError"){C.info("");return}throw t}if(!nze.has(e.toLowerCase()))return e}var jb=new Map,kte="Log throttle exceeded",gze=100,fze=5e3,yze=2e4,Sze=cze(global.fetch,{retries:2,retryOn:function(e,t,n){return !!(t!==null||n&&n.status>=500)},retryDelay:function(e){return Math.pow(2,e)*500}});function bze({app:e,hostname:t,environment:n,serviceVersion:o}){return {host:t,env:n,[ATTR_SERVICE_NAME]:e,...o?{[ATTR_SERVICE_VERSION]:o}:{}}}var Tze=`${Ub}/logs/json`,q$=class{constructor(t,n){this.flushIntervalMs=t;this.maxBatchSize=n;}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 n=0;n<t.length;n+=this.maxBatchSize)await this.sendBatch(t.slice(n,n+this.maxBatchSize));}}finally{this.flushPromise=void 0;}}),await this.flushPromise;}async sendBatch(t){try{let n=await Sze(Tze,{method:"POST",headers:{"Content-Type":"application/json","signoz-access-token":Ite,"x-momentic-metrics-api-key":Hb},body:Gc(t),signal:AbortSignal.timeout(yze)});if(!n.ok)throw new Error(`Got error status (${n.statusText}) from SigNoz`)}catch{}}},K$=class e{consoleLogger;hostname;bindingAttributes;disableConsoleLogs;minLevelValue=20;logsInCurrentWindow=0;droppedLogsInWindow=false;lastWindowStart=Date.now();flushIntervalMs;maxBatchSize;buffer;constructor({bindings:t,hostname:n,disableConsoleLogs:o,flushIntervalMs:r,maxBatchSize:i,buffer:s}){this.hostname=n??Nm.hostname(),this.disableConsoleLogs=o,this.bindingAttributes={...t,env:"production"},this.flushIntervalMs=r??5e3,this.maxBatchSize=i??10,this.buffer=s??new q$(this.flushIntervalMs,this.maxBatchSize);let a={base:this.bindingAttributes,errorKey:"err",level:"debug"};this.consoleLogger=Mte(a);}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===kte)return true;let n=Date.now();return n-this.lastWindowStart>fze&&(this.logsInCurrentWindow=0,this.droppedLogsInWindow&&this.log("error",void 0,kte),this.droppedLogsInWindow=false,this.lastWindowStart=n),this.logsInCurrentWindow<gze?(this.logsInCurrentWindow++,true):(this.droppedLogsInWindow=true,false)}log(t,n,o,...r){try{this.logHelper(t,n,o,...r);}catch(i){this.consoleLogger.warn(`Failed to log to Signoz: ${i}`);}}logHelper(t,n,o,...r){if(tw[t]<this.minLevelValue||!this.shouldAllowLog(o))return;typeof n=="string"&&!o&&(n={message:n}),typeof n=="object"&&n&&"err"in n&&n.err instanceof Error&&(n.err=pze.err(n.err));let i={...this.bindingAttributes,...n&&typeof n=="object"?n:{},...r.length>0?{args:r}:{}},s=bze({app:this.bindingAttributes.app,hostname:this.hostname,environment:this.bindingAttributes.env,serviceVersion:this.bindingAttributes.cliVersion??"3.56.2"}),a=Aze();this.disableConsoleLogs||this.consoleLogger[t]({...i,...a??{}},o,...r);let l={timestamp:Math.round(Date.now()*1e6),...a??{},severity_text:t.toUpperCase(),resources:s,attributes:{},body:q5({message:o||"",...i})};this.buffer.push(l);}setApp(t){let n=this.bindingAttributes.app;this.bindingAttributes.app=t,jb.set("app",this),jb.delete(n);}debug(t,n,...o){this.log("debug",t,n,...o);}info(t,n,...o){this.log("info",t,n,...o);}warn(t,n,...o){this.log("warn",t,n,...o);}error(t,n,...o){this.log("error",t,n,...o);}bindings(){return this.bindingAttributes}addBinding(t,n){this.bindingAttributes[t]=n;}setMinLevel(t){typeof t=="number"?(this.minLevelValue=t,this.consoleLogger.level=K5[t]):(this.minLevelValue=tw[t],this.consoleLogger.level=t);}enableConsoleLogs(){this.disableConsoleLogs=false;}},$b=({app:e,hostname:t,disableConsoleLogs:n})=>(jb.has(e)||jb.set(e,new K$({bindings:{app:e},hostname:t,disableConsoleLogs:n})),jb.get(e));function Aze(){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 aO(){await Promise.all([...jb.values()].map(e=>e.flush()));}var Ua=class extends Error{callSiteStack;constructor(t){super(t),this.name="TimeoutError";}};var Nte=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:n,fallback:o,message:r,customTimers:i={setTimeout,clearTimeout}}=t,s;if(typeof n!="number"||Math.sign(n)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${n}\``);let a=new Error().stack;return new Promise((l,c)=>{let u,d=()=>{i.clearTimeout(s),t.signal&&t.signal.removeEventListener("abort",u);};if(t.signal){let{signal:p}=t;if(p.aborted)return Promise.resolve(e).catch(()=>{}),c(Nte(p));u=()=>{d(),c(Nte(p));},p.addEventListener("abort",u,{once:true});}let m=()=>{if(t.signal&&t.signal.removeEventListener("abort",u),o)try{l(o());}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 Ua(r??`Promise timed out after ${n}ms`);p.callSiteStack=a,c(p);}};n<1/0&&(s=i.setTimeout(m,n)),Promise.resolve(e).then(p=>{d(),l(p);}).catch(p=>{d(),c(p);});})}function sc({signal:e,timeoutMs:t}){let n=AbortSignal.timeout(t);return e?AbortSignal.any([e,n]):n}var lO="organization";function cO(e){let t=new PostHog(e.writeKey,{host:e.host,...e.flushImmediately?{flushAt:1,flushInterval:0}:{}}),n=e.platform,o=(l,c,u)=>{let{type:d,...m}=l;t.capture({distinctId:c??u??randomUUID(),event:d,...u&&{groups:{[lO]:u}},properties:{platform:n,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:lO,groupKey:l,properties:c});},i=({userId:l,properties:c})=>{Object.values(c).some(d=>d!=null&&d!=="")&&t.identify({distinctId:l,properties:c});},s=()=>t.shutdown();if(e.identity==="stashed"){let l=null;return {shutdownAnalytics:s,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=>o(u,l?.userId??null,l?.orgId??null)}}return {shutdownAnalytics:s,groupIdentifyOrg:r,identifyUser:i,captureEvent:(l,{userId:c,orgId:u})=>o(l,c,u),captureBillingEvent:(l,{userId:c,orgId:u})=>o(l,c,u)}}async function Dte(e,t,n){let o,r=0,i=3,s,a;for(;r<i;)try{let l=await ge(e.getAllFlagsAndPayloads(n??t,{personProperties:{organizationId:t},groups:{[lO]:t}}),{milliseconds:5e3});s=l.featureFlags||{},a=l.featureFlagPayloads||{};break}catch(l){o=l,r++,await new Promise(c=>setTimeout(c,100*r));}if(s&&a)return {flags:s,payloads:a};throw o}var uO=class e extends Pf{constructor(n,o,r,i,s){super(i,s);this.client=n;this.orgId=o;this.userId=r;}static createClient(){return new PostHog("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",{host:"https://p.momentic.ai"})}static async init(n,o){let r=e.createClient(),{flags:i,payloads:s}=await Dte(r,n,o);return new e(r,n,o,i,s)}static fromCached(n,o,r,i){return new e(e.createClient(),n,o,r,i)}async refresh(){let{flags:n,payloads:o}=await Dte(this.client,this.orgId,this.userId);this.flags=n,this.payloads=o;}};var dO="/proc",Fte="/sys/fs/cgroup",Cze="/sys/fs/cgroup/memory",Bte=8,Ize=1024;function pO(){let e;return ()=>{if(process.platform!=="linux")return;let t=Mze();if(!t)return;let n=kze({current:t,previous:e});return e=t,n}}function Ute(){if(process.platform!=="linux")return;let e=Y$(`${Fte}/memory.stat`);if(e){let n=Y$(`${Fte}/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:n?{low:n.low,high:n.high,max:n.max,oom:n.oom,oomKill:n.oom_kill,oomGroupKill:n.oom_group_kill}:void 0}}let t=Y$(`${Cze}/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 xze(e){let t={};for(let n of e.split(`
|
|
180
180
|
`)){let[o,r]=n.trim().split(/\s+/,2);if(!o||!r)continue;let i=Number.parseInt(r,10);Number.isFinite(i)&&(t[o]=i);}return t}function _ze(e,t){let n,o,r;for(let i of t.split(`
|
|
181
181
|
`)){let s=i.indexOf(":");if(s===-1)continue;let a=i.slice(0,s),l=i.slice(s+1).trim();if(a==="Name"&&(n=l),a==="PPid"&&(o=Number.parseInt(l,10)),a==="VmRSS"){let c=Number.parseInt(l,10);Number.isFinite(c)&&(r=c*Ize);}}if(!(!n||o===void 0||r===void 0))return {pid:e,parentPid:o,name:n,rssBytes:r}}function Pze(e){let t=e.lastIndexOf(")");if(t===-1)return;let n=e.slice(t+1).trim().split(/\s+/),o=Number.parseInt(n[11]??"",10),r=Number.parseInt(n[12]??"",10);if(!(!Number.isFinite(o)||!Number.isFinite(r)))return o+r}function Oze(e){let t=e.split(`
|
|
182
|
-
`).find(o=>o.startsWith("cpu "));if(!t)return;let n=t.trim().split(/\s+/).slice(1).slice(0,8).map(o=>Number.parseInt(o,10));if(!(n.length===0||n.some(o=>!Number.isFinite(o))))return n.reduce((o,r)=>o+r,0)}function Y$(e){try{return xze(readFileSync(e,"utf8"))}catch{return}}function Mze(){let e;try{e=Oze(readFileSync(`${dO}/stat`,"utf8"));}catch{return}if(e===void 0)return;let t=new Map,n;try{n=readdirSync(dO);}catch{return}for(let o of n){if(!/^\d+$/.test(o))continue;let r=Number.parseInt(o,10);try{let i=_ze(r,readFileSync(`${dO}/${o}/status`,"utf8")),s=Pze(readFileSync(`${dO}/${o}/stat`,"utf8"));if(!i||s===void 0)continue;t.set(r,{...i,cpuTicks:s});}catch{}}return {totalTicks:e,processes:t}}function kze({current:e,previous:t}){let n=t?e.totalTicks-t.totalTicks:void 0,o=Lze(e.processes),r=new Map,i=0,s=0,a=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&&n!==void 0&&n>0?m/n*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),o.has(u.pid)&&(s+=u.rssBytes,p!==void 0&&(a+=p,l=true));}let c=[...r.values()];return {visibleProcessCount:e.processes.size,visibleProcessRssBytes:i,currentProcessTreeCount:o.size,currentProcessTreeRssBytes:s,currentProcessTreeCpuPercentage:l?a:void 0,topMemoryProcessGroups:[...c].sort((u,d)=>d.rssBytes-u.rssBytes).slice(0,Bte),topCpuProcessGroups:c.filter(u=>u.cpuPercentage!==void 0).sort((u,d)=>(d.cpuPercentage??0)-(u.cpuPercentage??0)).slice(0,Bte)}}function Lze(e){let t=new Set;if(!e.has(process.pid))return t;t.add(process.pid);let n=true;for(;n;){n=false;for(let o of e.values())t.has(o.pid)||!t.has(o.parentPid)||(t.add(o.pid),n=true);}return t}var Fze=2e3,Bze=2e4,Uze=.1,Hze=70,jze=.8,Df=e=>Number.parseInt(e,10),J$=e=>readFileSync(e,"utf8").trim(),Gb=e=>Df(J$(e));function Gte({summary:e,detailedSnapshots:t}){let n={"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 n;let o=e.peakMemoryDetails.cgroupMemory,r=e.peakMemoryDetails.processes,i={"momentic.resource.peak_cgroup_anonymous_bytes":o?.anonymousBytes,"momentic.resource.peak_cgroup_file_cache_bytes":o?.fileCacheBytes,"momentic.resource.peak_cgroup_kernel_bytes":o?.kernelBytes,"momentic.resource.peak_cgroup_slab_bytes":o?.slabBytes,"momentic.resource.peak_cgroup_shared_memory_bytes":o?.sharedMemoryBytes,"momentic.resource.peak_cgroup_page_tables_bytes":o?.pageTablesBytes,"momentic.resource.peak_cgroup_oom_events":o?.events?.oom,"momentic.resource.peak_cgroup_oom_kill_events":o?.events?.oomKill,"momentic.resource.peak_cgroup_oom_group_kill_events":o?.events?.oomGroupKill};for(let[a,l]of Object.entries(i))l!==void 0&&(n[a]=l);n["momentic.resource.peak_detailed_memory_used_bytes"]=e.peakDetailedMemoryUsedBytes,r&&(n["momentic.resource.peak_memory_process_groups"]=JSON.stringify(r.topMemoryProcessGroups));let s=e.peakCpuDetails?.processes;return s&&(n["momentic.resource.peak_cpu_process_groups"]=JSON.stringify(s.topCpuProcessGroups),s.currentProcessTreeCpuPercentage!==void 0&&(n["momentic.resource.peak_current_process_tree_cpu_percentage"]=s.currentProcessTreeCpuPercentage)),n}var tR={samples:0,lowMemorySamples:0,highCpuSamples:0,highHeapSamples:0};function zte(){return {...tR}}var hO=Nm.platform(),$ze=Nm.cpus().map(e=>({model:e.model,speed:e.speed})).reduce((e,t)=>(e[t.model]={speed:t.speed},e.totalCores=(e.totalCores??0)+1,e),{});function Hte(e=Date.now()){let t=Nm.cpus(),n={measurementTime:e,user:0,nice:0,sys:0,idle:0,irq:0,total:0};for(let o of t)n.user+=o.times.user,n.nice+=o.times.nice,n.sys+=o.times.sys,n.idle+=o.times.idle,n.irq+=o.times.irq;return n.total=n.user+n.nice+n.sys+n.idle+n.irq,n}function Gze(e,t){let n={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 n.total<=0?null:{measurementTime:t.measurementTime,intervalMs:t.measurementTime-e.measurementTime,user:n.user/n.total*100,nice:n.nice/n.total*100,sys:n.sys/n.total*100,idle:n.idle/n.total*100,irq:n.irq/n.total*100,total:100-n.idle/n.total*100}}function gO(){let e=Hte();return ()=>{let t=Hte(),n=Gze(e,t);return e=t,n}}function jte(){try{let t=readFileSync("/sys/fs/cgroup/cpu.stat","utf8").match(/^usage_usec\s+(\d+)/m);if(t?.[1])return Df(t[1])}catch{}try{let e=Gb("/sys/fs/cgroup/cpuacct/cpuacct.usage");if(!isNaN(e))return e/1e3}catch{}return null}function zze(){try{let t=J$("/sys/fs/cgroup/cpu.max").split(" "),n=t[0],o=t[1];return !n||!o||n==="max"?null:Df(n)/Df(o)}catch{}try{let e=Gb("/sys/fs/cgroup/cpu/cpu.cfs_quota_us"),t=Gb("/sys/fs/cgroup/cpu/cpu.cfs_period_us");return e===-1||isNaN(t)?null:e/t}catch{return null}}function fO(){if(hO!=="linux")return null;let e=jte();if(e===null)return null;let t=zze()??Nm.cpus().length,n=e,o=Date.now();return ()=>{let r=jte();if(r===null)return null;let i=Date.now(),s=i-o;if(s<=0)return null;let a=r-n,l=s*1e3,c=Math.max(0,Math.min(100,a/l/t*100));return n=r,o=i,{measurementTime:i,intervalMs:s,user:c,nice:0,sys:0,idle:Math.max(0,100-c),irq:0,total:c}}}function Vze(){let e=process.cpuUsage(),t=process.hrtime.bigint();return ()=>{let n=process.cpuUsage(),o=process.hrtime.bigint(),r=Number(o-t)/1e6,i=n.user-e.user,s=n.system-e.system;if(e=n,t=o,r<=0)return null;let a=Math.max(Nm.cpus().length,1),l=c=>Math.max(0,c/1e3/r*100/a);return {total:l(i+s),user:l(i),sys:l(s),intervalMs:r}}}function Vte({intervalMs:e=Fze,maxSamples:t=1e4,keepSamples:n=true,onSample:o}={}){let r=[],i=fO()??gO(),s=Vze(),a=()=>{let u=Date.now(),d=Kte(),m=process.memoryUsage(),p=i(),h=s(),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}}};o?.(g),n&&(r.push(g),r.length>t&&r.shift());};a();let l=setInterval(a,e),c=u=>({samples:n?[...r]:[]});return {stop:()=>(clearInterval(l),c()),getSeries:()=>c()}}var Wze=pO(),qze=fO()??gO(),Wte=e=>{X$({logger:e,processUsageTracker:Wze,cpuUsageTracker:qze});},qte=e=>{let t=pO(),n=fO()??gO(),o=()=>X$({logger:e,processUsageTracker:t,cpuUsageTracker:n});o(),setTimeout(o,5e3);};function yO(e,t={}){let n=pO(),o=fO()??gO(),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 s=X$({logger:e,processUsageTracker:n,cpuUsageTracker:o});if(!s)return;r.samples++,s.memoryPressure&&r.lowMemorySamples++,s.cpuPressure&&r.highCpuSamples++,s.heapPressure&&r.highHeapSamples++,r.minFreeMemoryRatio=Math.min(r.minFreeMemoryRatio,s.memory.freePercentage);let a=s.cpu?.total??0;s.details&&a>=r.maxCpuPercentage&&(r.peakCpuDetails=s.details),r.maxCpuPercentage=Math.max(r.maxCpuPercentage,a),r.maxHeapUsageRatio=Math.max(r.maxHeapUsageRatio,s.heapUsageRatio),r.maxMemoryUsedBytes=Math.max(r.maxMemoryUsedBytes,s.memory.totalMemory-s.memory.freeMemory),r.maxCurrentProcessTreeRssBytes=Math.max(r.maxCurrentProcessTreeRssBytes,s.details?.processes?.currentProcessTreeRssBytes??0),r.maxVisibleProcessRssBytes=Math.max(r.maxVisibleProcessRssBytes,s.details?.processes?.visibleProcessRssBytes??0);let l=s.memory.totalMemory-s.memory.freeMemory;s.details&&l>=r.peakDetailedMemoryUsedBytes&&(r.peakDetailedMemoryUsedBytes=l,r.peakMemoryDetails=s.details);};return i(),{interval:setInterval(i,t.intervalMs??Bze),cpuMetadata:$ze,platform:hO,getSummary:()=>({...r})}}function X$({logger:e,processUsageTracker:t,cpuUsageTracker:n}){try{let o={},r=Kte(),i=n();tR.samples++;let s=r.freePercentage<.05;s&&(Object.assign(o,process.memoryUsage()),tR.lowMemorySamples++);let a=i!==null&&i.total>80;a&&tR.highCpuSamples++;let l=Dze.getHeapStatistics(),c=l.used_heap_size,u=l.heap_size_limit,d=c/u,m=d>.9;m&&tR.highHeapSamples++;let p=s||a||m,g=r.freePercentage<Uze||i!==null&&i.total>Hze||d>jze?{cgroupMemory:Ute(),processes:t()}:void 0;return p?e.warn({memory:r,cpu:i,heapStats:l,resourceUsageDetails:g,...o},"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:s,cpuPressure:a,heapPressure:m,details:g}}catch{return}}function Kze(){if(hO!=="linux")return null;try{let e=J$("/sys/fs/cgroup/memory.max"),t=Gb("/sys/fs/cgroup/memory.current");if(e==="max"||isNaN(t))return null;let n=Df(e);if(isNaN(n))return null;let o=Math.max(0,n-t);return {totalMemory:n,freeMemory:o,freePercentage:o/n}}catch{}try{let e=Gb("/sys/fs/cgroup/memory/memory.limit_in_bytes"),t=Gb("/sys/fs/cgroup/memory/memory.usage_in_bytes");if(isNaN(e)||isNaN(t))return null;let n=Nm.totalmem();if(e>=n)return null;let o=Math.max(0,e-t);return {totalMemory:e,freeMemory:o,freePercentage:o/e}}catch{return null}}function Kte(){let e=Kze();if(e)return e;let t=Nm.totalmem(),n=hO==="darwin"?Yze():(()=>{let r=Nm.freemem();return {availableMemory:r,rawFreeMemory:r,cachedMemory:0}})(),o=n.availableMemory/t;return {totalMemory:t,freeMemory:n.availableMemory,freePercentage:o}}function Yze(){try{let e=execSync("/usr/bin/vm_stat",{encoding:"utf8",stdio:["pipe","pipe","ignore"]}),n=e.match(/page size of (\d+) bytes/)?.[1],o=n?Df(n):4096,r=u=>{let m=e.match(new RegExp(`${u}:\\s+(\\d+)\\.`,"i"))?.[1];return m?Df(m):0},i=r("Pages free"),s=r("Pages inactive"),a=r("Pages speculative"),l=i*o,c=(s+a)*o;return {availableMemory:l+c,rawFreeMemory:l,cachedMemory:c}}catch{let e=Nm.freemem();return {availableMemory:e,rawFreeMemory:e,cachedMemory:0}}}process.env.APP||"unknown";var SO="deployment.environment",bO="service.instance.id";function Yte(){return process.env.MOMENTIC_LOCAL_DEV==="1"&&process.env.LOCAL_SIGNOZ==="true"}var Ff=false,TO,oR=new Map,l1e={forceFlush:()=>Promise.resolve(),onStart:e=>{let{traceId:t,spanId:n}=e.spanContext();oR.set(`${t}:${n}`,e);},onEnd:e=>{let{traceId:t,spanId:n}=e.spanContext();oR.delete(`${t}:${n}`);},shutdown:()=>Promise.resolve()},nR,rR,c1e=[],AO,u1e=2e4;function Tr(){return Ff}async function d1e(){for(let e of c1e)try{await e();}catch{}}function m1e(){return Tr()&&trace.getSpan(context.active())!==void 0}function p1e(){return Yte()?new OTLPTraceExporter({url:"http://localhost:4318/v1/traces"}):new OTLPTraceExporter({url:`${Ub}/v1/traces`,headers:{"x-momentic-metrics-api-key":Hb},timeoutMillis:u1e})}function h1e(e){let t="production",n=v4(),o=p1e();return new NodeTracerProvider({resource:resourceFromAttributes({[ATTR_SERVICE_NAME]:e,[SO]:t,[bO]:n,[ATTR_SERVICE_VERSION]:"3.56.1"}),spanProcessors:[l1e,new BatchSpanProcessor(o)]})}function g1e(e){AO=registerInstrumentations({tracerProvider:e,instrumentations:[new UndiciInstrumentation({requireParentforSpans:true})]});}function f1e(e){return !e&&!TO?trace.getTracer("momentic-serverless"):rR?.getTracer("momentic-serverless")??trace.getTracer("momentic-serverless")}async function ac(e){if(!(!e.enabled||Ff))try{TO=e.serviceName;let t=h1e(e.serviceName);rR=t,nR=new AsyncLocalStorageContextManager,t.register({contextManager:nR.enable(),propagator:new W3CTraceContextPropagator}),g1e(t),Ff=!0;}catch{Ff=false,TO=void 0,rR=void 0,nR=void 0,AO=void 0;}}function y1e(e){if(Ff){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 EO(e="shutdown"){if(Ff)try{y1e(e),await Promise.allSettled([rR?.shutdown(),d1e()]);}catch{}finally{AO?.();try{nR?.disable();}catch{}Ff=false,TO=void 0,oR.clear(),nR=void 0,rR=void 0,AO=void 0;}}async function de(e){if(!Tr()||!e.root&&!e.newTrace&&!m1e())return e.fn(void 0);let t=e.serviceName===void 0?e.attributes:{...e.attributes??{},"momentic.span_service_name":e.serviceName};return await f1e(e.serviceName).startActiveSpan(e.name,{attributes:t,kind:e.kind??SpanKind.CLIENT},e.newTrace?ROOT_CONTEXT:context.active(),async n=>{try{let o=await e.fn(n);return n.setStatus({code:SpanStatusCode.OK}),o}catch(o){throw n.setStatus({code:SpanStatusCode.ERROR,message:o instanceof Error?o.message.slice(0,300):void 0}),o instanceof Error&&n.recordException(o),o}finally{n.end();}})}var iR=class{increment(t,n,o){}gauge(t,n){}distribution(t,n,o){}async flush(){}async recordDuration(t){return await eG(t)}};async function eG({fn:e,name:t,timeoutMs:n,timeoutMessage:o,trace:r}){let i=r?()=>de({name:r.name,attributes:r.attributes,fn:e}):e,s=Promise.resolve(i());return n===void 0?await s:await ge(s,{milliseconds:n,message:o??`Timed out after ${n}ms recording duration for ${t}`})}function vO(e){return e instanceof Error?e.name==="TimeoutError"?"timeout":e.name==="AbortError"?"aborted":"error":"error"}function tG(e){if(!e||e.length===0)return {};let t={};for(let n of e){let o=n.indexOf(":");if(o>-1){let r=n.slice(0,o).trim(),i=n.slice(o+1).trim();r&&(t[r]=i);continue}t[n]=true;}return t}function nG(e,t){let n=tG(e);return !t||Object.keys(t).length===0?n:{...t,...n}}function O1e(){return new OTLPMetricExporter({url:`${Ub}/v1/metrics`,headers:{"x-momentic-metrics-api-key":Hb},temporalityPreference:AggregationTemporalityPreference.DELTA})}var oG=[100,500,1e3,2e3,3e3,4e3,5e3,7500,1e4,15e3,2e4],ad=(e,t,n)=>({instrumentName:e,instrumentType:InstrumentType.HISTOGRAM,aggregation:{type:AggregationType.EXPLICIT_BUCKET_HISTOGRAM,options:{boundaries:t,recordMinMax:false}},...n?{attributeKeys:n}:void 0}),M1e=[1e3,5e3,15e3,3e4,6e4,12e4,3e5,6e5,12e5,18e5,36e5],k1e=[500,1e3,2e3,5e3,1e4,2e4,3e4,6e4,12e4,3e5,6e5],L1e=[50,100,250,500,1e3,2e3,5e3,1e4,2e4,3e4,6e4,12e4,3e5],rG=[1e4,3e4,6e4,12e4,3e5,6e5,9e5,12e5,18e5,36e5,54e5,72e5,108e5],N1e=[ad("test_event_duration",oG),ad("test_step_duration",oG),ad("test_mobile_step_duration",oG),ad("web_agent_action_duration",[25,50,100,200,350,500,750,1e3,2e3,5e3,1e4,2e4,3e4,6e4],["op","outcome"]),ad("mo_turn_duration_ms",M1e,["agent","outcome","env"]),ad("mo_step_duration_ms",k1e,["agent","env"]),ad("mo_tool_call_duration_ms",L1e,["agent","tool","outcome","env"]),ad("sandbox_bug_reproduction_latency",rG,["outcome","env"]),ad("sandbox_bugbash_latency",rG,["env"]),ad("sandbox_explore_latency",rG,["env"])],wO=class{globalAttributes;provider;meter;counterCache=new Map;histogramCache=new Map;observableGaugeCache=new Map;gaugeValues=new Map;getCounter(t){let n=this.counterCache.get(t);if(n)return n;let o=this.meter.createCounter(t);return this.counterCache.set(t,o),o}getHistogram(t){let n=this.histogramCache.get(t);if(n)return n;let o=this.meter.createHistogram(t);return this.histogramCache.set(t,o),o}ensureObservableGauge(t){let n=this.observableGaugeCache.get(t);if(n)return n;let o=this.meter.createObservableGauge(t);return o.addCallback(r=>{let i=this.gaugeValues.get(t);i!==void 0&&r.observe(i,this.globalAttributes);}),this.observableGaugeCache.set(t,o),o}constructor(t){this.globalAttributes={...t.globalAttributes??{}};let n=typeof process<"u"?"production":"unknown",o=resourceFromAttributes({[ATTR_SERVICE_NAME]:t.serviceName,[SO]:n,[bO]:typeof process<"u"&&process.env.SERVICE_INSTANCE_ID?process.env.SERVICE_INSTANCE_ID:v4(),[ATTR_SERVICE_VERSION]:"3.56.1"}),r=O1e(),i=new PeriodicExportingMetricReader({exporter:r,exportIntervalMillis:t.exportIntervalMs??6e4});this.provider=new MeterProvider({resource:o,readers:[i],views:N1e}),metrics.setGlobalMeterProvider(this.provider),this.meter=this.provider.getMeter("momentic-serverless");}increment(t,n,o){try{let r=nG(o,this.globalAttributes);this.getCounter(t).add(typeof n=="number"?n:1,r);}catch{}}gauge(t,n){try{this.ensureObservableGauge(t),this.gaugeValues.set(t,n);}catch{}}distribution(t,n,o){try{let r=nG(o,this.globalAttributes);this.getHistogram(t).record(n,r);}catch{}}async flush(){try{await this.provider.forceFlush();}catch{}}async recordDuration(t){let{name:n,recordOutcome:o,tags:r}=t,i=Date.now(),s="success";try{return await eG(t)}catch(a){throw s=vO(a),a}finally{this.distribution(n,Date.now()-i,o?[...r??[],`outcome:${s}`]:r);}}};var dn=new iR;function Qte(e){if(!e.disabled)try{dn=new wO(e);}catch{dn=new iR;}}var iG;function Zte(e){iG=e;}function wh(e){F1e(e)&&iG&&iG(e);}var D1e=new Set(["InternalWebAgentError","InternalPlatformError","UnknownError"]);function F1e(e){return e instanceof Error&&e.name==="AbortError"?false:iv(e,Wp)?true:iv(e,ue)?false:e instanceof oe?D1e.has(e.reason):true}var B1e=z$1.object({openrouter:z$1.object({usage:z$1.object({cost:z$1.number().finite().nonnegative()})})});function zb({feature:e,orgId:t,result:n}){dn.increment("ai_agent_invocations",1,[`feature:${e}`,`orgId:${t}`,`result:${n}`]);}function U1e(e){let t=B1e.safeParse(e);return t.success?t.data.openrouter.usage.cost:void 0}function CO(e){let t;for(let n of e){let o=U1e(n);o!==void 0&&(t=(t??0)+o);}return t}function IO(e){let t=0,n=0,o=0,r=0,i=0,s=0,a=0,l=0;for(let c of e)t+=c.inputTokens??0,n+=c.inputTokenDetails.noCacheTokens??0,o+=c.inputTokenDetails.cacheReadTokens??0,r+=c.inputTokenDetails.cacheWriteTokens??0,i+=c.outputTokens??0,s+=c.outputTokenDetails.textTokens??0,a+=c.outputTokenDetails.reasoningTokens??0,l+=c.totalTokens??0;return {inputTokens:t,inputTokenDetails:{noCacheTokens:n,cacheReadTokens:o,cacheWriteTokens:r},outputTokens:i,outputTokenDetails:{textTokens:s,reasoningTokens:a},totalTokens:l}}function H1e({usage:e,promptType:t,result:n="success",tags:o=[]}){let r=[`type:${t}`,`result:${n}`,...o],i=e.inputTokens??0,s=e.inputTokenDetails.cacheReadTokens??e.cachedInputTokens??0,a=e.inputTokenDetails.cacheWriteTokens??0,l=e.outputTokens??0;dn.distribution("ai_session_tokens",i,[...r,"category:input"]),dn.distribution("ai_session_tokens",Math.max(0,Math.min(s,i)),[...r,"category:cached_input"]),dn.distribution("ai_session_tokens",Math.max(0,Math.min(a,i-s)),[...r,"category:cache_write_input"]),dn.distribution("ai_session_tokens",l,[...r,"category:output"]);}function Dm({usage:e,costUsd:t,promptType:n,logger:o,message:r,result:i="success",attributes:s,metricTags:a}){H1e({usage:e,promptType:n,result:i,tags:a}),o.info({...s,promptType:n,result:i,usage:e,costUsd:t},r);}function Yr({usage:e,promptType:t,logger:n,metricTags:o}){let r=Promise.resolve(e).catch(i=>{n.warn({err:i,promptType:t},"Failed to resolve AI session usage");});return ({message:i,result:s="success",attributes:a})=>{r.then(l=>{l&&Dm({usage:l,promptType:t,logger:n,result:s,message:i,attributes:a,metricTags:o});});}}var j1e=1e4;function xO({durationMs:e,executor:t,logger:n,orgId:o,resolvedStep:r,status:i}){if(!Ete(r))return;let s=Ate(r);dn.distribution("test_step_duration",e,[`type:${s}`,"platform:browser",`executor:${t}`,`orgId:${o}`]),!(i!=="SUCCESS"||e<j1e)&&n.info({durationMs:e,executor:t,orgId:o,outcome:"success",stepId:r.id,stepType:s},"test_step_latency_outlier");}function qe(e=process.stdout){let t=e===process.stderr?supportsColorStderr:supportsColor,n=process.env.CLICOLOR_FORCE!==void 0&&process.env.CLICOLOR_FORCE!=="0",o=n||process.env.FORCE_COLOR!==void 0&&process.env.FORCE_COLOR!=="0",r=t?t.level:0;n&&r===0&&(r=1),(process.env.NO_COLOR!==void 0&&process.env.NO_COLOR!==""||process.env.CLICOLOR==="0")&&!o&&(r=0);let s=process.env.LC_ALL??process.env.LC_CTYPE??process.env.LANG??"",a=process.env.MOMENTIC_NO_UNICODE===void 0&&process.env.TERM!=="linux"&&(process.platform==="win32"||/utf-?8/i.test(s));return {isTTY:!!e.isTTY,colorLevel:r,unicode:a,columns:e.columns??-1,ci:fl,colorForced:o}}function ld(e){return e.isTTY&&!e.ci&&e.columns>0}var ene="\r",tne="\x1B[1A",nne="\x1B[J",one="\x1B[?25l",sG="\x1B[?25h",V1e="\u28CB\u28D9\u28F9\u28F8\u28FC\u28F4\u28E6\u28E7\u28C7\u28CF",W1e="|/-\\",q1e="\u2736\u2738\u2739\u273A\u2739\u2737",K1e="*",Y1e="#0891b2",J1e={pass:{glyph:"\u2713",ascii:"v",paint:(e,t)=>e.green(t)},fail:{glyph:"\u2718",ascii:"x",paint:(e,t)=>e.red(t)},skip:{glyph:"\u2212",ascii:"-",paint:(e,t)=>e.dim(t)},cancel:{glyph:"\u2298",ascii:"o",paint:(e,t)=>e.yellow(t)},retry:{glyph:"\u21BB",ascii:"~",paint:(e,t)=>e.yellow(t)}};function Je(e){let t=e.colorLevel>0&&(e.isTTY||e.colorForced),n=new Chalk({level:t?e.colorLevel:0}),o=(r,i)=>t?i(n,r):r;return {unicode:e.unicode,color:t,bold:r=>o(r,(i,s)=>i.bold(s)),dim:r=>o(r,(i,s)=>i.gray(s)),red:r=>o(r,(i,s)=>i.red(s)),green:r=>o(r,(i,s)=>i.green(s)),yellow:r=>o(r,(i,s)=>i.yellow(s)),code:r=>o(r,(i,s)=>i.hex(Y1e)(s)),spinner:r=>{let i=e.unicode?V1e:W1e,s=(r%i.length+i.length)%i.length;return o(i.charAt(s),(a,l)=>a.cyan(l))},classifySpinner:r=>{let i=e.unicode?q1e:K1e,s=(r%i.length+i.length)%i.length;return o(i.charAt(s),(a,l)=>a.cyan(l))},statusGlyph:r=>{let i=J1e[r],s=e.unicode?i.glyph:i.ascii;return t?i.paint(n,s):s},separator:e.unicode?" \xB7 ":" | "}}var aG=class extends Console{_buffer=[];Console=Console;constructor(){super({write:t=>(this._buffer.push(t),true)});}_log(t){this._buffer.push(t);}debug(t,...n){this._log(format(t,...n));}error(t,...n){this._log(format(t,...n));}info(t,...n){this._log(format(t,...n));}log(t,...n){this._log(format(t,...n));}warn(t,...n){this._log(format(t,...n));}flushed(){return this._buffer.length>0?this._buffer.join(`
|
|
182
|
+
`).find(o=>o.startsWith("cpu "));if(!t)return;let n=t.trim().split(/\s+/).slice(1).slice(0,8).map(o=>Number.parseInt(o,10));if(!(n.length===0||n.some(o=>!Number.isFinite(o))))return n.reduce((o,r)=>o+r,0)}function Y$(e){try{return xze(readFileSync(e,"utf8"))}catch{return}}function Mze(){let e;try{e=Oze(readFileSync(`${dO}/stat`,"utf8"));}catch{return}if(e===void 0)return;let t=new Map,n;try{n=readdirSync(dO);}catch{return}for(let o of n){if(!/^\d+$/.test(o))continue;let r=Number.parseInt(o,10);try{let i=_ze(r,readFileSync(`${dO}/${o}/status`,"utf8")),s=Pze(readFileSync(`${dO}/${o}/stat`,"utf8"));if(!i||s===void 0)continue;t.set(r,{...i,cpuTicks:s});}catch{}}return {totalTicks:e,processes:t}}function kze({current:e,previous:t}){let n=t?e.totalTicks-t.totalTicks:void 0,o=Lze(e.processes),r=new Map,i=0,s=0,a=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&&n!==void 0&&n>0?m/n*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),o.has(u.pid)&&(s+=u.rssBytes,p!==void 0&&(a+=p,l=true));}let c=[...r.values()];return {visibleProcessCount:e.processes.size,visibleProcessRssBytes:i,currentProcessTreeCount:o.size,currentProcessTreeRssBytes:s,currentProcessTreeCpuPercentage:l?a:void 0,topMemoryProcessGroups:[...c].sort((u,d)=>d.rssBytes-u.rssBytes).slice(0,Bte),topCpuProcessGroups:c.filter(u=>u.cpuPercentage!==void 0).sort((u,d)=>(d.cpuPercentage??0)-(u.cpuPercentage??0)).slice(0,Bte)}}function Lze(e){let t=new Set;if(!e.has(process.pid))return t;t.add(process.pid);let n=true;for(;n;){n=false;for(let o of e.values())t.has(o.pid)||!t.has(o.parentPid)||(t.add(o.pid),n=true);}return t}var Fze=2e3,Bze=2e4,Uze=.1,Hze=70,jze=.8,Df=e=>Number.parseInt(e,10),J$=e=>readFileSync(e,"utf8").trim(),Gb=e=>Df(J$(e));function Gte({summary:e,detailedSnapshots:t}){let n={"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 n;let o=e.peakMemoryDetails.cgroupMemory,r=e.peakMemoryDetails.processes,i={"momentic.resource.peak_cgroup_anonymous_bytes":o?.anonymousBytes,"momentic.resource.peak_cgroup_file_cache_bytes":o?.fileCacheBytes,"momentic.resource.peak_cgroup_kernel_bytes":o?.kernelBytes,"momentic.resource.peak_cgroup_slab_bytes":o?.slabBytes,"momentic.resource.peak_cgroup_shared_memory_bytes":o?.sharedMemoryBytes,"momentic.resource.peak_cgroup_page_tables_bytes":o?.pageTablesBytes,"momentic.resource.peak_cgroup_oom_events":o?.events?.oom,"momentic.resource.peak_cgroup_oom_kill_events":o?.events?.oomKill,"momentic.resource.peak_cgroup_oom_group_kill_events":o?.events?.oomGroupKill};for(let[a,l]of Object.entries(i))l!==void 0&&(n[a]=l);n["momentic.resource.peak_detailed_memory_used_bytes"]=e.peakDetailedMemoryUsedBytes,r&&(n["momentic.resource.peak_memory_process_groups"]=JSON.stringify(r.topMemoryProcessGroups));let s=e.peakCpuDetails?.processes;return s&&(n["momentic.resource.peak_cpu_process_groups"]=JSON.stringify(s.topCpuProcessGroups),s.currentProcessTreeCpuPercentage!==void 0&&(n["momentic.resource.peak_current_process_tree_cpu_percentage"]=s.currentProcessTreeCpuPercentage)),n}var tR={samples:0,lowMemorySamples:0,highCpuSamples:0,highHeapSamples:0};function zte(){return {...tR}}var hO=Nm.platform(),$ze=Nm.cpus().map(e=>({model:e.model,speed:e.speed})).reduce((e,t)=>(e[t.model]={speed:t.speed},e.totalCores=(e.totalCores??0)+1,e),{});function Hte(e=Date.now()){let t=Nm.cpus(),n={measurementTime:e,user:0,nice:0,sys:0,idle:0,irq:0,total:0};for(let o of t)n.user+=o.times.user,n.nice+=o.times.nice,n.sys+=o.times.sys,n.idle+=o.times.idle,n.irq+=o.times.irq;return n.total=n.user+n.nice+n.sys+n.idle+n.irq,n}function Gze(e,t){let n={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 n.total<=0?null:{measurementTime:t.measurementTime,intervalMs:t.measurementTime-e.measurementTime,user:n.user/n.total*100,nice:n.nice/n.total*100,sys:n.sys/n.total*100,idle:n.idle/n.total*100,irq:n.irq/n.total*100,total:100-n.idle/n.total*100}}function gO(){let e=Hte();return ()=>{let t=Hte(),n=Gze(e,t);return e=t,n}}function jte(){try{let t=readFileSync("/sys/fs/cgroup/cpu.stat","utf8").match(/^usage_usec\s+(\d+)/m);if(t?.[1])return Df(t[1])}catch{}try{let e=Gb("/sys/fs/cgroup/cpuacct/cpuacct.usage");if(!isNaN(e))return e/1e3}catch{}return null}function zze(){try{let t=J$("/sys/fs/cgroup/cpu.max").split(" "),n=t[0],o=t[1];return !n||!o||n==="max"?null:Df(n)/Df(o)}catch{}try{let e=Gb("/sys/fs/cgroup/cpu/cpu.cfs_quota_us"),t=Gb("/sys/fs/cgroup/cpu/cpu.cfs_period_us");return e===-1||isNaN(t)?null:e/t}catch{return null}}function fO(){if(hO!=="linux")return null;let e=jte();if(e===null)return null;let t=zze()??Nm.cpus().length,n=e,o=Date.now();return ()=>{let r=jte();if(r===null)return null;let i=Date.now(),s=i-o;if(s<=0)return null;let a=r-n,l=s*1e3,c=Math.max(0,Math.min(100,a/l/t*100));return n=r,o=i,{measurementTime:i,intervalMs:s,user:c,nice:0,sys:0,idle:Math.max(0,100-c),irq:0,total:c}}}function Vze(){let e=process.cpuUsage(),t=process.hrtime.bigint();return ()=>{let n=process.cpuUsage(),o=process.hrtime.bigint(),r=Number(o-t)/1e6,i=n.user-e.user,s=n.system-e.system;if(e=n,t=o,r<=0)return null;let a=Math.max(Nm.cpus().length,1),l=c=>Math.max(0,c/1e3/r*100/a);return {total:l(i+s),user:l(i),sys:l(s),intervalMs:r}}}function Vte({intervalMs:e=Fze,maxSamples:t=1e4,keepSamples:n=true,onSample:o}={}){let r=[],i=fO()??gO(),s=Vze(),a=()=>{let u=Date.now(),d=Kte(),m=process.memoryUsage(),p=i(),h=s(),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}}};o?.(g),n&&(r.push(g),r.length>t&&r.shift());};a();let l=setInterval(a,e),c=u=>({samples:n?[...r]:[]});return {stop:()=>(clearInterval(l),c()),getSeries:()=>c()}}var Wze=pO(),qze=fO()??gO(),Wte=e=>{X$({logger:e,processUsageTracker:Wze,cpuUsageTracker:qze});},qte=e=>{let t=pO(),n=fO()??gO(),o=()=>X$({logger:e,processUsageTracker:t,cpuUsageTracker:n});o(),setTimeout(o,5e3);};function yO(e,t={}){let n=pO(),o=fO()??gO(),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 s=X$({logger:e,processUsageTracker:n,cpuUsageTracker:o});if(!s)return;r.samples++,s.memoryPressure&&r.lowMemorySamples++,s.cpuPressure&&r.highCpuSamples++,s.heapPressure&&r.highHeapSamples++,r.minFreeMemoryRatio=Math.min(r.minFreeMemoryRatio,s.memory.freePercentage);let a=s.cpu?.total??0;s.details&&a>=r.maxCpuPercentage&&(r.peakCpuDetails=s.details),r.maxCpuPercentage=Math.max(r.maxCpuPercentage,a),r.maxHeapUsageRatio=Math.max(r.maxHeapUsageRatio,s.heapUsageRatio),r.maxMemoryUsedBytes=Math.max(r.maxMemoryUsedBytes,s.memory.totalMemory-s.memory.freeMemory),r.maxCurrentProcessTreeRssBytes=Math.max(r.maxCurrentProcessTreeRssBytes,s.details?.processes?.currentProcessTreeRssBytes??0),r.maxVisibleProcessRssBytes=Math.max(r.maxVisibleProcessRssBytes,s.details?.processes?.visibleProcessRssBytes??0);let l=s.memory.totalMemory-s.memory.freeMemory;s.details&&l>=r.peakDetailedMemoryUsedBytes&&(r.peakDetailedMemoryUsedBytes=l,r.peakMemoryDetails=s.details);};return i(),{interval:setInterval(i,t.intervalMs??Bze),cpuMetadata:$ze,platform:hO,getSummary:()=>({...r})}}function X$({logger:e,processUsageTracker:t,cpuUsageTracker:n}){try{let o={},r=Kte(),i=n();tR.samples++;let s=r.freePercentage<.05;s&&(Object.assign(o,process.memoryUsage()),tR.lowMemorySamples++);let a=i!==null&&i.total>80;a&&tR.highCpuSamples++;let l=Dze.getHeapStatistics(),c=l.used_heap_size,u=l.heap_size_limit,d=c/u,m=d>.9;m&&tR.highHeapSamples++;let p=s||a||m,g=r.freePercentage<Uze||i!==null&&i.total>Hze||d>jze?{cgroupMemory:Ute(),processes:t()}:void 0;return p?e.warn({memory:r,cpu:i,heapStats:l,resourceUsageDetails:g,...o},"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:s,cpuPressure:a,heapPressure:m,details:g}}catch{return}}function Kze(){if(hO!=="linux")return null;try{let e=J$("/sys/fs/cgroup/memory.max"),t=Gb("/sys/fs/cgroup/memory.current");if(e==="max"||isNaN(t))return null;let n=Df(e);if(isNaN(n))return null;let o=Math.max(0,n-t);return {totalMemory:n,freeMemory:o,freePercentage:o/n}}catch{}try{let e=Gb("/sys/fs/cgroup/memory/memory.limit_in_bytes"),t=Gb("/sys/fs/cgroup/memory/memory.usage_in_bytes");if(isNaN(e)||isNaN(t))return null;let n=Nm.totalmem();if(e>=n)return null;let o=Math.max(0,e-t);return {totalMemory:e,freeMemory:o,freePercentage:o/e}}catch{return null}}function Kte(){let e=Kze();if(e)return e;let t=Nm.totalmem(),n=hO==="darwin"?Yze():(()=>{let r=Nm.freemem();return {availableMemory:r,rawFreeMemory:r,cachedMemory:0}})(),o=n.availableMemory/t;return {totalMemory:t,freeMemory:n.availableMemory,freePercentage:o}}function Yze(){try{let e=execSync("/usr/bin/vm_stat",{encoding:"utf8",stdio:["pipe","pipe","ignore"]}),n=e.match(/page size of (\d+) bytes/)?.[1],o=n?Df(n):4096,r=u=>{let m=e.match(new RegExp(`${u}:\\s+(\\d+)\\.`,"i"))?.[1];return m?Df(m):0},i=r("Pages free"),s=r("Pages inactive"),a=r("Pages speculative"),l=i*o,c=(s+a)*o;return {availableMemory:l+c,rawFreeMemory:l,cachedMemory:c}}catch{let e=Nm.freemem();return {availableMemory:e,rawFreeMemory:e,cachedMemory:0}}}process.env.APP||"unknown";var SO="deployment.environment",bO="service.instance.id";function Yte(){return process.env.MOMENTIC_LOCAL_DEV==="1"&&process.env.LOCAL_SIGNOZ==="true"}var Ff=false,TO,oR=new Map,l1e={forceFlush:()=>Promise.resolve(),onStart:e=>{let{traceId:t,spanId:n}=e.spanContext();oR.set(`${t}:${n}`,e);},onEnd:e=>{let{traceId:t,spanId:n}=e.spanContext();oR.delete(`${t}:${n}`);},shutdown:()=>Promise.resolve()},nR,rR,c1e=[],AO,u1e=2e4;function Tr(){return Ff}async function d1e(){for(let e of c1e)try{await e();}catch{}}function m1e(){return Tr()&&trace.getSpan(context.active())!==void 0}function p1e(){return Yte()?new OTLPTraceExporter({url:"http://localhost:4318/v1/traces"}):new OTLPTraceExporter({url:`${Ub}/v1/traces`,headers:{"x-momentic-metrics-api-key":Hb},timeoutMillis:u1e})}function h1e(e){let t="production",n=v4(),o=p1e();return new NodeTracerProvider({resource:resourceFromAttributes({[ATTR_SERVICE_NAME]:e,[SO]:t,[bO]:n,[ATTR_SERVICE_VERSION]:"3.56.2"}),spanProcessors:[l1e,new BatchSpanProcessor(o)]})}function g1e(e){AO=registerInstrumentations({tracerProvider:e,instrumentations:[new UndiciInstrumentation({requireParentforSpans:true})]});}function f1e(e){return !e&&!TO?trace.getTracer("momentic-serverless"):rR?.getTracer("momentic-serverless")??trace.getTracer("momentic-serverless")}async function ac(e){if(!(!e.enabled||Ff))try{TO=e.serviceName;let t=h1e(e.serviceName);rR=t,nR=new AsyncLocalStorageContextManager,t.register({contextManager:nR.enable(),propagator:new W3CTraceContextPropagator}),g1e(t),Ff=!0;}catch{Ff=false,TO=void 0,rR=void 0,nR=void 0,AO=void 0;}}function y1e(e){if(Ff){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 EO(e="shutdown"){if(Ff)try{y1e(e),await Promise.allSettled([rR?.shutdown(),d1e()]);}catch{}finally{AO?.();try{nR?.disable();}catch{}Ff=false,TO=void 0,oR.clear(),nR=void 0,rR=void 0,AO=void 0;}}async function de(e){if(!Tr()||!e.root&&!e.newTrace&&!m1e())return e.fn(void 0);let t=e.serviceName===void 0?e.attributes:{...e.attributes??{},"momentic.span_service_name":e.serviceName};return await f1e(e.serviceName).startActiveSpan(e.name,{attributes:t,kind:e.kind??SpanKind.CLIENT},e.newTrace?ROOT_CONTEXT:context.active(),async n=>{try{let o=await e.fn(n);return n.setStatus({code:SpanStatusCode.OK}),o}catch(o){throw n.setStatus({code:SpanStatusCode.ERROR,message:o instanceof Error?o.message.slice(0,300):void 0}),o instanceof Error&&n.recordException(o),o}finally{n.end();}})}var iR=class{increment(t,n,o){}gauge(t,n){}distribution(t,n,o){}async flush(){}async recordDuration(t){return await eG(t)}};async function eG({fn:e,name:t,timeoutMs:n,timeoutMessage:o,trace:r}){let i=r?()=>de({name:r.name,attributes:r.attributes,fn:e}):e,s=Promise.resolve(i());return n===void 0?await s:await ge(s,{milliseconds:n,message:o??`Timed out after ${n}ms recording duration for ${t}`})}function vO(e){return e instanceof Error?e.name==="TimeoutError"?"timeout":e.name==="AbortError"?"aborted":"error":"error"}function tG(e){if(!e||e.length===0)return {};let t={};for(let n of e){let o=n.indexOf(":");if(o>-1){let r=n.slice(0,o).trim(),i=n.slice(o+1).trim();r&&(t[r]=i);continue}t[n]=true;}return t}function nG(e,t){let n=tG(e);return !t||Object.keys(t).length===0?n:{...t,...n}}function O1e(){return new OTLPMetricExporter({url:`${Ub}/v1/metrics`,headers:{"x-momentic-metrics-api-key":Hb},temporalityPreference:AggregationTemporalityPreference.DELTA})}var oG=[100,500,1e3,2e3,3e3,4e3,5e3,7500,1e4,15e3,2e4],ad=(e,t,n)=>({instrumentName:e,instrumentType:InstrumentType.HISTOGRAM,aggregation:{type:AggregationType.EXPLICIT_BUCKET_HISTOGRAM,options:{boundaries:t,recordMinMax:false}},...n?{attributeKeys:n}:void 0}),M1e=[1e3,5e3,15e3,3e4,6e4,12e4,3e5,6e5,12e5,18e5,36e5],k1e=[500,1e3,2e3,5e3,1e4,2e4,3e4,6e4,12e4,3e5,6e5],L1e=[50,100,250,500,1e3,2e3,5e3,1e4,2e4,3e4,6e4,12e4,3e5],rG=[1e4,3e4,6e4,12e4,3e5,6e5,9e5,12e5,18e5,36e5,54e5,72e5,108e5],N1e=[ad("test_event_duration",oG),ad("test_step_duration",oG),ad("test_mobile_step_duration",oG),ad("web_agent_action_duration",[25,50,100,200,350,500,750,1e3,2e3,5e3,1e4,2e4,3e4,6e4],["op","outcome"]),ad("mo_turn_duration_ms",M1e,["agent","outcome","env"]),ad("mo_step_duration_ms",k1e,["agent","env"]),ad("mo_tool_call_duration_ms",L1e,["agent","tool","outcome","env"]),ad("sandbox_bug_reproduction_latency",rG,["outcome","env"]),ad("sandbox_bugbash_latency",rG,["env"]),ad("sandbox_explore_latency",rG,["env"])],wO=class{globalAttributes;provider;meter;counterCache=new Map;histogramCache=new Map;observableGaugeCache=new Map;gaugeValues=new Map;getCounter(t){let n=this.counterCache.get(t);if(n)return n;let o=this.meter.createCounter(t);return this.counterCache.set(t,o),o}getHistogram(t){let n=this.histogramCache.get(t);if(n)return n;let o=this.meter.createHistogram(t);return this.histogramCache.set(t,o),o}ensureObservableGauge(t){let n=this.observableGaugeCache.get(t);if(n)return n;let o=this.meter.createObservableGauge(t);return o.addCallback(r=>{let i=this.gaugeValues.get(t);i!==void 0&&r.observe(i,this.globalAttributes);}),this.observableGaugeCache.set(t,o),o}constructor(t){this.globalAttributes={...t.globalAttributes??{}};let n=typeof process<"u"?"production":"unknown",o=resourceFromAttributes({[ATTR_SERVICE_NAME]:t.serviceName,[SO]:n,[bO]:typeof process<"u"&&process.env.SERVICE_INSTANCE_ID?process.env.SERVICE_INSTANCE_ID:v4(),[ATTR_SERVICE_VERSION]:"3.56.2"}),r=O1e(),i=new PeriodicExportingMetricReader({exporter:r,exportIntervalMillis:t.exportIntervalMs??6e4});this.provider=new MeterProvider({resource:o,readers:[i],views:N1e}),metrics.setGlobalMeterProvider(this.provider),this.meter=this.provider.getMeter("momentic-serverless");}increment(t,n,o){try{let r=nG(o,this.globalAttributes);this.getCounter(t).add(typeof n=="number"?n:1,r);}catch{}}gauge(t,n){try{this.ensureObservableGauge(t),this.gaugeValues.set(t,n);}catch{}}distribution(t,n,o){try{let r=nG(o,this.globalAttributes);this.getHistogram(t).record(n,r);}catch{}}async flush(){try{await this.provider.forceFlush();}catch{}}async recordDuration(t){let{name:n,recordOutcome:o,tags:r}=t,i=Date.now(),s="success";try{return await eG(t)}catch(a){throw s=vO(a),a}finally{this.distribution(n,Date.now()-i,o?[...r??[],`outcome:${s}`]:r);}}};var dn=new iR;function Qte(e){if(!e.disabled)try{dn=new wO(e);}catch{dn=new iR;}}var iG;function Zte(e){iG=e;}function wh(e){F1e(e)&&iG&&iG(e);}var D1e=new Set(["InternalWebAgentError","InternalPlatformError","UnknownError"]);function F1e(e){return e instanceof Error&&e.name==="AbortError"?false:iv(e,Wp)?true:iv(e,ue)?false:e instanceof oe?D1e.has(e.reason):true}var B1e=z$1.object({openrouter:z$1.object({usage:z$1.object({cost:z$1.number().finite().nonnegative()})})});function zb({feature:e,orgId:t,result:n}){dn.increment("ai_agent_invocations",1,[`feature:${e}`,`orgId:${t}`,`result:${n}`]);}function U1e(e){let t=B1e.safeParse(e);return t.success?t.data.openrouter.usage.cost:void 0}function CO(e){let t;for(let n of e){let o=U1e(n);o!==void 0&&(t=(t??0)+o);}return t}function IO(e){let t=0,n=0,o=0,r=0,i=0,s=0,a=0,l=0;for(let c of e)t+=c.inputTokens??0,n+=c.inputTokenDetails.noCacheTokens??0,o+=c.inputTokenDetails.cacheReadTokens??0,r+=c.inputTokenDetails.cacheWriteTokens??0,i+=c.outputTokens??0,s+=c.outputTokenDetails.textTokens??0,a+=c.outputTokenDetails.reasoningTokens??0,l+=c.totalTokens??0;return {inputTokens:t,inputTokenDetails:{noCacheTokens:n,cacheReadTokens:o,cacheWriteTokens:r},outputTokens:i,outputTokenDetails:{textTokens:s,reasoningTokens:a},totalTokens:l}}function H1e({usage:e,promptType:t,result:n="success",tags:o=[]}){let r=[`type:${t}`,`result:${n}`,...o],i=e.inputTokens??0,s=e.inputTokenDetails.cacheReadTokens??e.cachedInputTokens??0,a=e.inputTokenDetails.cacheWriteTokens??0,l=e.outputTokens??0;dn.distribution("ai_session_tokens",i,[...r,"category:input"]),dn.distribution("ai_session_tokens",Math.max(0,Math.min(s,i)),[...r,"category:cached_input"]),dn.distribution("ai_session_tokens",Math.max(0,Math.min(a,i-s)),[...r,"category:cache_write_input"]),dn.distribution("ai_session_tokens",l,[...r,"category:output"]);}function Dm({usage:e,costUsd:t,promptType:n,logger:o,message:r,result:i="success",attributes:s,metricTags:a}){H1e({usage:e,promptType:n,result:i,tags:a}),o.info({...s,promptType:n,result:i,usage:e,costUsd:t},r);}function Yr({usage:e,promptType:t,logger:n,metricTags:o}){let r=Promise.resolve(e).catch(i=>{n.warn({err:i,promptType:t},"Failed to resolve AI session usage");});return ({message:i,result:s="success",attributes:a})=>{r.then(l=>{l&&Dm({usage:l,promptType:t,logger:n,result:s,message:i,attributes:a,metricTags:o});});}}var j1e=1e4;function xO({durationMs:e,executor:t,logger:n,orgId:o,resolvedStep:r,status:i}){if(!Ete(r))return;let s=Ate(r);dn.distribution("test_step_duration",e,[`type:${s}`,"platform:browser",`executor:${t}`,`orgId:${o}`]),!(i!=="SUCCESS"||e<j1e)&&n.info({durationMs:e,executor:t,orgId:o,outcome:"success",stepId:r.id,stepType:s},"test_step_latency_outlier");}function qe(e=process.stdout){let t=e===process.stderr?supportsColorStderr:supportsColor,n=process.env.CLICOLOR_FORCE!==void 0&&process.env.CLICOLOR_FORCE!=="0",o=n||process.env.FORCE_COLOR!==void 0&&process.env.FORCE_COLOR!=="0",r=t?t.level:0;n&&r===0&&(r=1),(process.env.NO_COLOR!==void 0&&process.env.NO_COLOR!==""||process.env.CLICOLOR==="0")&&!o&&(r=0);let s=process.env.LC_ALL??process.env.LC_CTYPE??process.env.LANG??"",a=process.env.MOMENTIC_NO_UNICODE===void 0&&process.env.TERM!=="linux"&&(process.platform==="win32"||/utf-?8/i.test(s));return {isTTY:!!e.isTTY,colorLevel:r,unicode:a,columns:e.columns??-1,ci:fl,colorForced:o}}function ld(e){return e.isTTY&&!e.ci&&e.columns>0}var ene="\r",tne="\x1B[1A",nne="\x1B[J",one="\x1B[?25l",sG="\x1B[?25h",V1e="\u28CB\u28D9\u28F9\u28F8\u28FC\u28F4\u28E6\u28E7\u28C7\u28CF",W1e="|/-\\",q1e="\u2736\u2738\u2739\u273A\u2739\u2737",K1e="*",Y1e="#0891b2",J1e={pass:{glyph:"\u2713",ascii:"v",paint:(e,t)=>e.green(t)},fail:{glyph:"\u2718",ascii:"x",paint:(e,t)=>e.red(t)},skip:{glyph:"\u2212",ascii:"-",paint:(e,t)=>e.dim(t)},cancel:{glyph:"\u2298",ascii:"o",paint:(e,t)=>e.yellow(t)},retry:{glyph:"\u21BB",ascii:"~",paint:(e,t)=>e.yellow(t)}};function Je(e){let t=e.colorLevel>0&&(e.isTTY||e.colorForced),n=new Chalk({level:t?e.colorLevel:0}),o=(r,i)=>t?i(n,r):r;return {unicode:e.unicode,color:t,bold:r=>o(r,(i,s)=>i.bold(s)),dim:r=>o(r,(i,s)=>i.gray(s)),red:r=>o(r,(i,s)=>i.red(s)),green:r=>o(r,(i,s)=>i.green(s)),yellow:r=>o(r,(i,s)=>i.yellow(s)),code:r=>o(r,(i,s)=>i.hex(Y1e)(s)),spinner:r=>{let i=e.unicode?V1e:W1e,s=(r%i.length+i.length)%i.length;return o(i.charAt(s),(a,l)=>a.cyan(l))},classifySpinner:r=>{let i=e.unicode?q1e:K1e,s=(r%i.length+i.length)%i.length;return o(i.charAt(s),(a,l)=>a.cyan(l))},statusGlyph:r=>{let i=J1e[r],s=e.unicode?i.glyph:i.ascii;return t?i.paint(n,s):s},separator:e.unicode?" \xB7 ":" | "}}var aG=class extends Console{_buffer=[];Console=Console;constructor(){super({write:t=>(this._buffer.push(t),true)});}_log(t){this._buffer.push(t);}debug(t,...n){this._log(format(t,...n));}error(t,...n){this._log(format(t,...n));}info(t,...n){this._log(format(t,...n));}log(t,...n){this._log(format(t,...n));}warn(t,...n){this._log(format(t,...n));}flushed(){return this._buffer.length>0?this._buffer.join(`
|
|
183
183
|
`):void 0}};function ine(e){let t=globalThis.console,n=new aG;globalThis.console=n;try{e();}finally{let o=n.flushed();o&&process.stdout.write(`${o}
|
|
184
184
|
`),globalThis.console=t;}}var Z1e=" ",e2e=" ",t2e=" ",n2e=" > ",ane=3;function lne(e){if(!e.failureDetails)return;let t=e.filePath?_O(e.filePath):void 0;if(t&&t.doc.get("fileType")!==De.TEST_V2)return;let n=t?o2e({root:t,result:e}):void 0,o=e.failureDetails.classification?.previousStepsDescription??[];if(o.length===0&&!n)return;let r=[`${Z1e}Failed at:`];for(let i of o)r.push(`${e2e}- ${i}`);if(n){let i=i2e(n);i&&(r.push(""),r.push(i));}return r.join(`
|
|
185
185
|
`)}function _O(e){let t;try{t=readFileSync(e,"utf-8");}catch{return}let n=new LineCounter,o=ca.parseDocument(t,{lineCounter:n});if(!(o.errors.length>0))return {filePath:e,text:t,doc:o,lineCounter:n}}function o2e({root:e,result:t}){let n=[["before",t.beforeResults],["steps",t.results],["after",t.afterResults]];for(let[o,r]of n){if(!r)continue;let i=lG({source:e,yamlPath:[o],results:r});if(i)return i}}function lG({source:e,yamlPath:t,results:n}){let o=n.findIndex(l=>l.status==="FAILED"),r=n[o];if(!r)return;let i=[...t,o],s=e.doc.getIn(i,true);if(!ca.isNode(s))return;let a={source:e,node:s};if(r.type==="MODULE"){let l=r2e({source:e,stepPath:i});return l?lG({source:l,yamlPath:["steps"],results:r.results})??a:a}if(r.type==="CONDITIONAL"){let l=e.doc.getIn([...i,"if","then"],true);return !ca.isNode(l)||!ca.isSeq(l)?a:lG({source:e,yamlPath:[...i,"if","then"],results:r.results})??a}return a}function r2e({source:e,stepPath:t}){let n=e.doc.getIn([...t,"module"]),o=typeof n=="string"?n:e.doc.getIn([...t,"module","path"]);if(typeof o!="string")return;let r=mo__default.resolve(mo__default.dirname(e.filePath),o),i=_O(r);if(i?.doc.get("fileType")===De.MODULE_V2)return i}function i2e(e){let t=e.node.range;if(t)return cG(e.source,t[0])}function cne(e,t){let n=typeof t[0]=="number"?["steps",...t]:t;for(let o=n.length;o>=0;o--){let r=o===0?e.doc.contents:e.doc.getIn(n.slice(0,o),true);if(ca.isNode(r)&&r.range){let i=r.range[0],{line:s,col:a}=e.lineCounter.linePos(i);return {line:s,col:a,startOffset:i}}}}function cG(e,t){let n=e.lineCounter.linePos(t).line,o=e.text.split(`
|
|
186
186
|
`);if(n<1||n>o.length)return;let r=Math.max(1,n-ane),i=Math.min(o.length,n+ane),s=String(i).length,a=[];for(let l=r;l<=i;l++){let c=l===n?n2e:t2e;a.push(`${c}${String(l).padStart(s)} | ${o[l-1]??""}`);}return a.join(`
|
|
187
187
|
`)}function dne(e,t=""){let n=process.stdout?.columns||process.stderr?.columns||80,o=Math.max(n-t.length,20),r=[];for(let i of e.split(`
|
|
188
188
|
`)){let s="";for(let a of i.split(" ")){if(!s.length){s=a;continue}let l=`${s} ${a}`;if(l.length<=o){s=l;continue}r.push(t+s),s=a;}r.push(t+s);}return r.join(`
|
|
189
|
-
`)}var une=new Set;function mne(e,t,n=t){une.has(n)||(une.add(n),e.warn(t));}var a2e={PASS:{glyph:"pass",isTerminal:true},FAIL:{glyph:"fail",isTerminal:true},SKIP:{glyph:"skip",isTerminal:true},CANCEL:{glyph:"cancel",isTerminal:true},RETRY:{glyph:"retry",isTerminal:false}},l2e={PASSED:"PASS",FAILED:"FAIL",CANCELLED:"CANCEL",RETRYING:"RETRY",RUNNING:"RUNNING",SKIP:"SKIP",RUN:"RUNNING",RETRY:"RETRY"};function lR(e,t,n=0){let o=l2e[e];if(!o)return;let r=Je(t);if(o==="RUNNING")return {badge:r.spinner(n),isTerminal:false};let{glyph:i,isTerminal:s}=a2e[o];return {badge:r.statusGlyph(i),isTerminal:s}}function er(e,t){return !t.isTTY||t.colorLevel===0?e:`\x1B]8;;${e}\x07${e}\x1B]8;;\x07`}function pne({parallel:e,remoteBrowser:t}){let n=cpus$1().length;if(t){if(e<=n*4)return;let o=Math.max(1,n*4-2);C.warn(`Running ${e} workers on a ${n}-core machine with a remote browser. We recommend at most ~${o} workers ((cores \xD7 4) \u2212 2) to avoid local saturation.`);return}n>=e*2||C.warn(`Running ${e} workers on a ${n}-core machine. Chrome needs ~2 cores per worker; expect slowdowns.`);}function hne(){let e=zte(),t=[];e.lowMemorySamples>0&&t.push(`memory low ${e.lowMemorySamples}x`),e.highCpuSamples>0&&t.push(`CPU saturated ${e.highCpuSamples}x`),e.highHeapSamples>0&&t.push(`heap near limit ${e.highHeapSamples}x`),t.length!==0&&(C.log(""),C.warn(`Machine was under pressure during this run (${t.join(", ")}). Slowdowns and timeouts may be related.`));}var fe=$b({app:"cli",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:"3.56.
|
|
189
|
+
`)}var une=new Set;function mne(e,t,n=t){une.has(n)||(une.add(n),e.warn(t));}var a2e={PASS:{glyph:"pass",isTerminal:true},FAIL:{glyph:"fail",isTerminal:true},SKIP:{glyph:"skip",isTerminal:true},CANCEL:{glyph:"cancel",isTerminal:true},RETRY:{glyph:"retry",isTerminal:false}},l2e={PASSED:"PASS",FAILED:"FAIL",CANCELLED:"CANCEL",RETRYING:"RETRY",RUNNING:"RUNNING",SKIP:"SKIP",RUN:"RUNNING",RETRY:"RETRY"};function lR(e,t,n=0){let o=l2e[e];if(!o)return;let r=Je(t);if(o==="RUNNING")return {badge:r.spinner(n),isTerminal:false};let{glyph:i,isTerminal:s}=a2e[o];return {badge:r.statusGlyph(i),isTerminal:s}}function er(e,t){return !t.isTTY||t.colorLevel===0?e:`\x1B]8;;${e}\x07${e}\x1B]8;;\x07`}function pne({parallel:e,remoteBrowser:t}){let n=cpus$1().length;if(t){if(e<=n*4)return;let o=Math.max(1,n*4-2);C.warn(`Running ${e} workers on a ${n}-core machine with a remote browser. We recommend at most ~${o} workers ((cores \xD7 4) \u2212 2) to avoid local saturation.`);return}n>=e*2||C.warn(`Running ${e} workers on a ${n}-core machine. Chrome needs ~2 cores per worker; expect slowdowns.`);}function hne(){let e=zte(),t=[];e.lowMemorySamples>0&&t.push(`memory low ${e.lowMemorySamples}x`),e.highCpuSamples>0&&t.push(`CPU saturated ${e.highCpuSamples}x`),e.highHeapSamples>0&&t.push(`heap near limit ${e.highHeapSamples}x`),t.length!==0&&(C.log(""),C.warn(`Machine was under pressure during this run (${t.join(", ")}). Slowdowns and timeouts may be related.`));}var fe=$b({app:"cli",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:"3.56.2"});var u2e=5,Vb=" ";async function PO({getResults:e,checkDone:t,name:n,timeoutMs:o=18e5}){let r=Date.now(),i=0;for(;Date.now()-r<o;){let s;i>u2e&&(C.error(`Failed to fetch ${n} status too many times.`),process.exit(1));try{s=await e(),i=0;}catch(c){i++,fe.warn({err:c},"Failed to fetch run status; retrying."),C.warn({err:c},"Failed to fetch run status; retrying."),await new Promise(u=>setTimeout(u,1500*i));continue}if(t(s))return s;let l=Math.max(1e4,Math.floor(o/100));await new Promise(c=>setTimeout(c,l));}C.error(`Timeout elapsed waiting for ${n} to complete (${Math.floor(o/1e3)}s).`),process.exit(1);}function gne(e){let t={passed:[],failed:[],cancelled:[],quarantinedPassed:[],quarantinedFailed:[]};for(let n of e)switch(n.status){case "PASSED":(n.quarantined?t.quarantinedPassed:t.passed).push(n);break;case "FAILED":(n.quarantined?t.quarantinedFailed:t.failed).push(n);break;case "CANCELLED":t.cancelled.push(n);break}return t}function dG(e){let t=gne(e),n=t.failed.filter(r=>r.failureDetails?.classification?.action==="heal"),o=t.failed.filter(r=>r.failureDetails?.classification?.action==="warn");return {passed:t.passed.length,failed:t.failed.length,cancelled:t.cancelled.length,quarantinedPassed:t.quarantinedPassed.length,quarantinedFailed:t.quarantinedFailed.length,healElectedFailures:n.length,warnElectedFailures:o.length}}function Wb(e,{onlyQuarantined:t=false,overrideExitCode:n=false}={}){let o=n?e.healElectedFailures+e.warnElectedFailures:0,r=e.failed-o,i=t?e.quarantinedFailed:0;return r+i>0||e.cancelled>0}function mG({results:e,startTime:t,getPath:n,getUrl:o,printFailureBody:r,getCancellationReason:i,recoveredCount:s,skippedCount:a,videoRecordingActive:l}){let{passed:c,failed:u,cancelled:d,quarantinedPassed:m,quarantinedFailed:p}=gne(e),h=qe(),g=Je(h),f=(y,S,b,v)=>{C.log(""),C.log(b(` ${S+1}) ${n(y)}`)),C.log(""),v();let A=o(y);A&&(C.log(""),C.log(`${Vb}${er(A,h)}`));};ine(()=>{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(`${Vb}${g.yellow(P)}`);});});let y=c.length+m.length,S=Math.max(1,Math.round((Date.now()-t)/1e3)),b=[];m.length>0&&b.push(`${m.length} quarantined`),s&&s>0&&b.push(`${s} recovered`);let v=b.length>0?` (${b.join(", ")})`:"",A=d2e(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`))),a&&R.push(g.yellow(`${a} skipped`)),R.push(g.bold(g.green(`${y} passed${v}`)));let w=e.length+(a??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",`${S}s${g.dim(A)}`)),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}${er("https://momentic.ai/docs/reliability/auto-heal",h)}`)}`)),hne();});}function OO(e){return mG(e),dG(e.results)}function d2e(e,t,n=false){let o=e.length;if(o===0)return "";let r=e.filter(a=>a.usedRemoteBrowser).length;return r===0?"":`${t.unicode?" \xB7 ":" | "}${r}/${o} ran on remote browser${n?" (video saved async)":""}`}function MO(e){if(!e.failureDetails||!e.failureReason)return;let t=Mu({failureReason:e.failureReason,classification:e.failureDetails.classification,manualClassification:e.failureDetails.manualClassification}),n=t.title??e.failureReason,o=e.failureDetails.classification?.rootCause??t.description??t.title??e.failureReason,r=qe(),i=Je(r);C.log(`${Vb}${i.bold(i.red(n))}`),o&&o!==n&&(C.log(""),C.log(i.dim(dne(o,Vb))));let s=lne({failureDetails:e.failureDetails,filePath:e.filePath,results:e.results,beforeResults:e.beforeResults,afterResults:e.afterResults});s&&(C.log(""),C.log(s));let a=e.failureDetails.classification?.citations;if(a&&a.length>0){C.log(""),C.log(`${Vb}${i.dim("Sources")}`);for(let l of a)C.log(`${Vb} ${i.dim(`[${l.refId}]`)} ${l.title}`);}}var qb=" ".repeat(6);var m2e=(e,t,n,o)=>{if(n==="length"||n==="prototype"||n==="arguments"||n==="caller")return;let r=Object.getOwnPropertyDescriptor(e,n),i=Object.getOwnPropertyDescriptor(t,n);!p2e(r,i)&&o||Object.defineProperty(e,n,i);},p2e=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)},h2e=(e,t)=>{let n=Object.getPrototypeOf(t);n!==Object.getPrototypeOf(e)&&Object.setPrototypeOf(e,n);},g2e=(e,t)=>`/* Wrapped ${e}*/
|
|
190
190
|
${t}`,f2e=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),y2e=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),S2e=(e,t,n)=>{let o=n===""?"":`with ${n.trim()}() `,r=g2e.bind(null,o,t.toString());Object.defineProperty(r,"name",y2e);let{writable:i,enumerable:s,configurable:a}=f2e;Object.defineProperty(e,"toString",{value:r,writable:i,enumerable:s,configurable:a});};function pG(e,t,{ignoreNonConfigurable:n=false}={}){let{name:o}=e;for(let r of Reflect.ownKeys(t))m2e(e,t,r,n);return h2e(e,t),S2e(e,t,o),e}var kO=new WeakMap,fne=(e,t={})=>{if(typeof e!="function")throw new TypeError("Expected a function");let n,o=0,r=e.displayName||e.name||"<anonymous>",i=function(...s){if(kO.set(i,++o),o===1)n=e.apply(this,s),e=void 0;else if(t.throw===true)throw new Error(`Function \`${r}\` can only be called once`);return n};return pG(i,e),kO.set(i,o),i};fne.callCount=e=>{if(!kO.has(e))throw new Error(`The given function \`${e.name}\` is not wrapped by the \`onetime\` package`);return kO.get(e)};var yne=fne;var Uf=[];Uf.push("SIGHUP","SIGINT","SIGTERM");process.platform!=="win32"&&Uf.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&Uf.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var LO=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",hG=Symbol.for("signal-exit emitter"),gG=globalThis,b2e=Object.defineProperty.bind(Object),fG=class{emitted={afterExit:false,exit:false};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(gG[hG])return gG[hG];b2e(gG,hG,{value:this,writable:false,enumerable:false,configurable:false});}on(t,n){this.listeners[t].push(n);}removeListener(t,n){let o=this.listeners[t],r=o.indexOf(n);r!==-1&&(r===0&&o.length===1?o.length=0:o.splice(r,1));}emit(t,n,o){if(this.emitted[t])return false;this.emitted[t]=true;let r=false;for(let i of this.listeners[t])r=i(n,o)===true||r;return t==="exit"&&(r=this.emit("afterExit",n,o)||r),r}},NO=class{},T2e=e=>({onExit(t,n){return e.onExit(t,n)},load(){return e.load()},unload(){return e.unload()}}),yG=class extends NO{onExit(){return ()=>{}}load(){}unload(){}},SG=class extends NO{#o=bG.platform==="win32"?"SIGINT":"SIGHUP";#t=new fG;#e;#i;#m;#n={};#s=false;constructor(t){super(),this.#e=t,this.#n={};for(let n of Uf)this.#n[n]=()=>{let o=this.#e.listeners(n),{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),o.length===r){this.unload();let s=this.#t.emit("exit",null,n),a=n==="SIGHUP"?this.#o:n;s||t.kill(t.pid,a);}};this.#m=t.reallyExit,this.#i=t.emit;}onExit(t,n){if(!LO(this.#e))return ()=>{};this.#s===false&&this.load();let o=n?.alwaysLast?"afterExit":"exit";return this.#t.on(o,t),()=>{this.#t.removeListener(o,t),this.#t.listeners.exit.length===0&&this.#t.listeners.afterExit.length===0&&this.unload();}}load(){if(!this.#s){this.#s=true,this.#t.count+=1;for(let t of Uf)try{let n=this.#n[t];n&&this.#e.on(t,n);}catch{}this.#e.emit=(t,...n)=>this.#p(t,...n),this.#e.reallyExit=t=>this.#r(t);}}unload(){this.#s&&(this.#s=false,Uf.forEach(t=>{let n=this.#n[t];if(!n)throw new Error("Listener not defined for signal: "+t);try{this.#e.removeListener(t,n);}catch{}}),this.#e.emit=this.#i,this.#e.reallyExit=this.#m,this.#t.count-=1);}#r(t){return LO(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,...n){let o=this.#i;if(t==="exit"&&LO(this.#e)){typeof n[0]=="number"&&(this.#e.exitCode=n[0]);let r=o.call(this.#e,t,...n);return this.#t.emit("exit",this.#e.exitCode,null),r}else return o.call(this.#e,t,...n)}},bG=globalThis.process,{onExit:Sne}=T2e(LO(bG)?new SG(bG):new yG);var bne=Xc.stderr.isTTY?Xc.stderr:Xc.stdout.isTTY?Xc.stdout:void 0,A2e=bne?yne(()=>{Sne(()=>{bne.write("\x1B[?25h");},{alwaysLast:true});}):()=>{},Tne=A2e;var FO=false,Kb={};Kb.show=(e=Xc.stderr)=>{e.isTTY&&(FO=false,e.write("\x1B[?25h"));};Kb.hide=(e=Xc.stderr)=>{e.isTTY&&(Tne(),FO=true,e.write("\x1B[?25l"));};Kb.toggle=(e,t)=>{e!==void 0&&(FO=e),FO?Kb.show(t):Kb.hide(t);};var TG=Kb;var uR=CU(AG());function EG(){return Xc.platform!=="win32"?Xc.env.TERM!=="linux":!!Xc.env.CI||!!Xc.env.WT_SESSION||!!Xc.env.TERMINUS_SUBLIME||Xc.env.ConEmuTask==="{cmd::Cmder}"||Xc.env.TERM_PROGRAM==="Terminus-Sublime"||Xc.env.TERM_PROGRAM==="vscode"||Xc.env.TERM==="xterm-256color"||Xc.env.TERM==="alacritty"||Xc.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var v2e={info:Jl.blue("\u2139"),success:Jl.green("\u2714"),warning:Jl.yellow("\u26A0"),error:Jl.red("\u2716")},w2e={info:Jl.blue("i"),success:Jl.green("\u221A"),warning:Jl.yellow("\u203C"),error:Jl.red("\xD7")},R2e=EG()?v2e:w2e,cR=R2e;function vG({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 C2e=vG();function wG(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return !e.includes("\x1B")&&!e.includes("\x9B")?e:e.replace(C2e,"")}function RG({stream:e=process.stdout}={}){return !!(e&&e.isTTY&&process.env.TERM!=="dumb"&&!("CI"in process.env))}function CG(){let{env:e}=Xc,{TERM:t,TERM_PROGRAM:n}=e;return Xc.platform!=="win32"?t!=="linux":!!e.WT_SESSION||!!e.TERMINUS_SUBLIME||e.ConEmuTask==="{cmd::Cmder}"||n==="Terminus-Sublime"||n==="vscode"||t==="xterm-256color"||t==="alacritty"||t==="rxvt-unicode"||t==="rxvt-unicode-256color"||e.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var I2e=3,IG=class{#o=0;start(){this.#o++,this.#o===1&&this.#t();}stop(){if(this.#o<=0)throw new Error("`stop` called more times than `start`");this.#o--,this.#o===0&&this.#e();}#t(){Xc.platform==="win32"||!Xc.stdin.isTTY||(Xc.stdin.setRawMode(true),Xc.stdin.on("data",this.#i),Xc.stdin.resume());}#e(){Xc.stdin.isTTY&&(Xc.stdin.off("data",this.#i),Xc.stdin.pause(),Xc.stdin.setRawMode(false));}#i(t){t[0]===I2e&&Xc.emit("SIGINT");}},x2e=new IG,xG=x2e;CU(AG());var _G=class{#o=0;#t=false;#e=0;#i=-1;#m=0;#n;#s;#r;#p;#g;#c;#u;#d;#f;#a;#l;color;constructor(t){typeof t=="string"&&(t={text:t}),this.#n={color:"cyan",stream:Xc.stderr,discardStdin:true,hideCursor:true,...t},this.color=this.#n.color,this.spinner=this.#n.spinner,this.#g=this.#n.interval,this.#r=this.#n.stream,this.#c=typeof this.#n.isEnabled=="boolean"?this.#n.isEnabled:RG({stream:this.#r}),this.#u=typeof this.#n.isSilent=="boolean"?this.#n.isSilent:false,this.text=this.#n.text,this.prefixText=this.#n.prefixText,this.suffixText=this.#n.suffixText,this.indent=this.#n.indent,Xc.env.NODE_ENV==="test"&&(this._stream=this.#r,this._isEnabled=this.#c,Object.defineProperty(this,"_linesToClear",{get(){return this.#o},set(n){this.#o=n;}}),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.#s.interval??100}get spinner(){return this.#s}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.#s=t;}else if(!CG())this.#s=uR.default.line;else if(t===void 0)this.#s=uR.default.dots;else if(t!=="default"&&uR.default[t])this.#s=uR.default[t];else throw new Error(`There is no built-in spinner named '${t}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`)}get text(){return this.#f}set text(t=""){this.#f=t,this.#h();}get prefixText(){return this.#a}set prefixText(t=""){this.#a=t,this.#h();}get suffixText(){return this.#l}set suffixText(t=""){this.#l=t,this.#h();}get isSpinning(){return this.#p!==void 0}#y(t=this.#a,n=" "){return typeof t=="string"&&t!==""?t+n:typeof t=="function"?t()+n:""}#S(t=this.#l,n=" "){return typeof t=="string"&&t!==""?n+t:typeof t=="function"?n+t():""}#h(){let t=this.#r.columns??80,n=this.#y(this.#a,"-"),o=this.#S(this.#l,"-"),r=" ".repeat(this.#d)+n+"--"+this.#f+"--"+o;this.#e=0;for(let i of wG(r).split(`
|
|
191
191
|
`))this.#e+=Math.max(1,Math.ceil(Lme(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.#s.frames.length,this.#m=t);let{frames:n}=this.#s,o=n[this.#i];this.color&&(o=Jl[this.color](o));let r=typeof this.#a=="string"&&this.#a!==""?this.#a+" ":"",i=typeof this.text=="string"?" "+this.text:"",s=typeof this.#l=="string"&&this.#l!==""?" "+this.#l:"";return r+o+i+s}clear(){if(!this.#c||!this.#r.isTTY)return this;this.#r.cursorTo(0);for(let t=0;t<this.#o;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.#o=0,this}render(){return this.#u?this:(this.clear(),this.#r.write(this.frame()),this.#o=this.#e,this)}start(t){return t&&(this.text=t),this.#u?this:this.#c?this.isSpinning?this:(this.#n.hideCursor&&TG.hide(this.#r),this.#n.discardStdin&&Xc.stdin.isTTY&&(this.#t=true,xG.start()),this.render(),this.#p=setInterval(this.render.bind(this),this.interval),this):(this.text&&this.#r.write(`- ${this.text}
|
|
192
192
|
`),this)}stop(){return this.#c?(clearInterval(this.#p),this.#p=void 0,this.#i=0,this.clear(),this.#n.hideCursor&&TG.show(this.#r),this.#n.discardStdin&&Xc.stdin.isTTY&&this.#t&&(xG.stop(),this.#t=false),this):this}succeed(t){return this.stopAndPersist({symbol:cR.success,text:t})}fail(t){return this.stopAndPersist({symbol:cR.error,text:t})}warn(t){return this.stopAndPersist({symbol:cR.warning,text:t})}info(t){return this.stopAndPersist({symbol:cR.info,text:t})}stopAndPersist(t={}){if(this.#u)return this;let n=t.prefixText??this.#a,o=this.#y(n," "),r=t.symbol??" ",i=t.text??this.text,a=typeof i=="string"?(r?" ":"")+i:"",l=t.suffixText??this.#l,c=this.#S(l," "),u=o+r+a+c+`
|
|
@@ -258,7 +258,7 @@ ${z$1.prettifyError(a)}`:`: ${z(a)}`;C.warn(`Project config at ${e} does not mat
|
|
|
258
258
|
${r.map(i=>i.configFilePath).join(`
|
|
259
259
|
`)}`);if(r.length===0)throw new ue(`No valid Momentic project file (${Ga}) 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 ${Ga}.`);return C.debug(`Found valid project configuration at ${r[0].configFilePath}`),r[0]}async function uYe(e){let t=lYe(e);if(!t||!t.projects||!t.projects.length)return;let n=t.projects.map(s=>(s.endsWith("/")||(s+="/"),`${s}*${Ga}`)),o=AbortSignal.timeout(2e3),r;try{r=await fd(n,{cwd:cwd(),maxDepth:_T,ignore:[],nodir:!0,signal:o});}catch(s){throw C.error({err:s},`Failed to list the available Momentic projects in the current directory. This usually indicates the 'include' or 'exclude' option in your ${$R} is misconfigured.`),s}let i=[];for(let s of r){let a=mo__default.join(cwd(),s),l=jz(a);l&&i.push({configFilePath:a,config:l,rootDir:dirname(a)});}return i}async function $z(e,t){if(e){e=mo__default.resolve(e);let o=jz(e);return o?[{config:o,configFilePath:e,rootDir:mo__default.dirname(e)}]:(console.error(`No valid Momentic project file found at ${e}.`),t||process.exit(1),[])}if(existsSync($R)){let o=await uYe($R);if(o)return o}return cYe()}function ty(e,t){let n=ca.stringify(e);writeFileSync(t,n);}var dYe={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"},mYe=[" Store a separate step cache per environment. See https://momentic.ai/docs/reliability/step-cache"," isolateCachesByEnvironment: true"].join(`
|
|
260
260
|
`),pYe=[" 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(`
|
|
261
|
-
`);function Gh(e,t,{commentBefore:n,comment:o}){let r=e.items.find(i=>ca.isPair(i)&&ca.isScalar(i.key)&&i.key.value===t);if(r&&(n!==void 0&&ca.isScalar(r.key)&&(r.key.commentBefore=n),o!==void 0)){let i=r.value;(ca.isMap(i)||ca.isSeq(i)||ca.isScalar(i))&&(i.comment=o);}}function Fse(e){let t=new ca.Document(e);if(!ca.isMap(t.contents))return t.toString();let n=true;for(let s of t.contents.items){if(!ca.isPair(s)||!ca.isScalar(s.key))continue;let a=s.key.value,l=Object.entries(dYe).find(([c])=>c===a)?.[1];l!==void 0&&(s.key.commentBefore=l),s.key.spaceBefore=!n,n=false;}Gh(t.contents,"advanced",{comment:mYe}),Gh(t.contents,"browser",{comment:pYe});let o=t.get("advanced");ca.isMap(o)&&Gh(o,"aiActionShorthand",{commentBefore:" Save short AI action goals as bare strings. See https://momentic.ai/docs/configuration/advanced#advanced-aiactionshorthand"});let r=t.get("browser");ca.isMap(r)&&(Gh(r,"autoExpandIframes",{commentBefore:" Let the AI act on elements inside iframes. See https://momentic.ai/docs/configuration/browser#browser-autoexpandiframes"}),Gh(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 ca.isMap(i)&&(Gh(i,"useMemory",{commentBefore:" Reuse decisions from past runs so the AI picks the same elements and assertions. See https://momentic.ai/docs/ai/memory"}),Gh(i,"failureRecovery",{commentBefore:" Let the AI find a path forward when a step fails. See https://momentic.ai/docs/reliability/auto-maintenance#failure-recovery"}),Gh(i,"agentConfig",{commentBefore:" Version of each AI agent. See https://momentic.ai/docs/ai/agents"})),t.toString()}var Le="v1",Gz="cli",ny="3.56.
|
|
261
|
+
`);function Gh(e,t,{commentBefore:n,comment:o}){let r=e.items.find(i=>ca.isPair(i)&&ca.isScalar(i.key)&&i.key.value===t);if(r&&(n!==void 0&&ca.isScalar(r.key)&&(r.key.commentBefore=n),o!==void 0)){let i=r.value;(ca.isMap(i)||ca.isSeq(i)||ca.isScalar(i))&&(i.comment=o);}}function Fse(e){let t=new ca.Document(e);if(!ca.isMap(t.contents))return t.toString();let n=true;for(let s of t.contents.items){if(!ca.isPair(s)||!ca.isScalar(s.key))continue;let a=s.key.value,l=Object.entries(dYe).find(([c])=>c===a)?.[1];l!==void 0&&(s.key.commentBefore=l),s.key.spaceBefore=!n,n=false;}Gh(t.contents,"advanced",{comment:mYe}),Gh(t.contents,"browser",{comment:pYe});let o=t.get("advanced");ca.isMap(o)&&Gh(o,"aiActionShorthand",{commentBefore:" Save short AI action goals as bare strings. See https://momentic.ai/docs/configuration/advanced#advanced-aiactionshorthand"});let r=t.get("browser");ca.isMap(r)&&(Gh(r,"autoExpandIframes",{commentBefore:" Let the AI act on elements inside iframes. See https://momentic.ai/docs/configuration/browser#browser-autoexpandiframes"}),Gh(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 ca.isMap(i)&&(Gh(i,"useMemory",{commentBefore:" Reuse decisions from past runs so the AI picks the same elements and assertions. See https://momentic.ai/docs/ai/memory"}),Gh(i,"failureRecovery",{commentBefore:" Let the AI find a path forward when a step fails. See https://momentic.ai/docs/reliability/auto-maintenance#failure-recovery"}),Gh(i,"agentConfig",{commentBefore:" Version of each AI agent. See https://momentic.ai/docs/ai/agents"})),t.toString()}var Le="v1",Gz="cli",ny="3.56.2";var hYe=9e4,gYe=3,fYe=1500,yYe=15e3,SYe=6e4,Hn=class extends Error{status;rawError;retryAfterMs;constructor(t,n,o,r={}){super(o,r),this.status=t,this.rawError=n,this.retryAfterMs=r.retryAfterMs;}},zz=class extends ue{constructor(t,n={}){super(t,n),this.name="RateLimitExceededError";}},Vz=class extends ue{constructor(t,n={}){super(t,n),this.name="PlanLimitExceededError";}},GR=class extends ue{constructor(t,n={}){super(t,n),this.name="AuthenticationError";}};function bYe(e){if(!e)return;let t=Number(e.trim());if(Number.isFinite(t)&&t>=0)return t*1e3;let n=Date.parse(e);if(!Number.isNaN(n))return Math.max(n-Date.now(),0)}async function TYe(e){let t=await e.text();try{return JSON.parse(t).error}catch{return t}}var Wz=class{baseUrl;logger;constructor(t){this.baseUrl=t.baseUrl,this.logger=t.logger;}getHeaders(t){let n={"Content-Type":"application/json"};return (n[WP]=ny),(n[eee]=Gz),n}async sendRequest(t,n){let{retries:o=gYe,requestTimeoutMs:r=hYe,initialRetryDelayMs:i=fYe,maxRetryDelayMs:s=yYe,onFailedRequest:a}=n,l=o,c=o,u,d={path:t,baseUrl:this.baseUrl,method:n.method};for(;l>0;)try{return l--,await this.sendSingleRequestHelper(t,n,r)}catch(m){u=m;try{a?.(u);}catch{}let p=m instanceof Hn&&m.status===429?m:void 0;if(m instanceof Hn&&!p&&m.status>=400&&m.status<500)throw m.status===402?new Vz(m.rawError,{cause:m}):m.status===401||m.status===403?new GR(m.rawError,{cause:m}):m;if(m instanceof Hn&&m.status===nee)throw m;if(m instanceof Error&&m.name==="AbortError"&&!n.signal?.aborted&&(u=new Ua),p&&(l===0||n.signal?.aborted))throw new zz(`The Momentic API rate limited ${n.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||n.signal?.aborted)throw u;let h=c-l,g=Math.min(i*Math.pow(2,h-1),s);if(p&&(g=Math.min(Math.max(g,p.retryAfterMs??0),SYe)),await YO(g,n.signal),n.signal?.aborted)throw u}throw this.logger.warn({...d,err:u},"Got fatal error response from Momentic server"),u}async sendSingleRequestHelper(t,n,o){let r={path:t,baseUrl:this.baseUrl,method:n.method};n.signal?.throwIfAborted();let i=new AbortController,s=setTimeout(()=>i.abort(),o),a=()=>i.abort();n.signal&&n.signal.addEventListener("abort",a,{once:true});let l=Date.now(),c=n.body?JSON.stringify(n.body):void 0,u={...this.getHeaders({serializedBody:c,method:n.method,path:t}),...n.extraHeaders};try{let d=await fetch(`${this.baseUrl}${t}`,{method:n.method,body:c,headers:u,signal:i.signal}),m=n.responseHeadersObject;if(m&&d.headers.forEach((h,g)=>{m[g.toLowerCase()]=h;}),!d.ok){let h=await TYe(d);throw new Hn(d.status,h,`Request to ${n.method} ${t} failed with status ${d.status}: ${h}`,{retryAfterMs:bYe(d.headers.get("retry-after"))})}let p;if(d.status===204)p={};else if(n.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&&n.logResponse===!0&&p&&this.logger.debug({result:p,status:d.status,durationMs:Date.now()-l,...r},"Got response from Momentic server"),p}finally{clearTimeout(s),n.signal&&n.signal.removeEventListener("abort",a);}}},ua=class extends Wz{apiKey;mode;runner;constructor(t){super(t),this.apiKey=t.apiKey,this.mode=t.mode,this.runner=t.runner,C.addRedactedValue(t.apiKey);}getHeaders(t){return {...super.getHeaders(t),Authorization:`Bearer ${this.apiKey}`,[Z7]:this.mode,[qP]:this.runner}}};var ik=class extends Error{constructor(t,n){super(t),this.name="ParseError",this.type=n.type,this.field=n.field,this.value=n.value,this.line=n.line;}};function qz(e){}function Bse(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=qz,onError:n=qz,onRetry:o=qz,onComment:r}=e,i="",s=true,a,l="",c="";function u(g){let f=s?g.replace(/^\xEF\xBB\xBF/,""):g,[y,S]=AYe(`${i}${f}`);for(let b of y)d(b);i=S,s=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),S=g[f+1]===" "?2:1,b=g.slice(f+S);m(y,b,g);return}m(g,"",g);}function m(g,f,y){switch(g){case "event":c=f;break;case "data":l=`${l}${f}
|
|
262
262
|
`;break;case "id":a=f.includes("\0")?void 0:f;break;case "retry":/^\d+$/.test(f)?o(parseInt(f,10)):n(new ik(`Invalid \`retry\` value: "${f}"`,{type:"invalid-retry",value:f,line:y}));break;default:n(new ik(`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:a,event:c||void 0,data:l.endsWith(`
|
|
263
263
|
`)?l.slice(0,-1):l}),a=void 0,l="",c="";}function h(g={}){i&&g.consume&&d(i),s=true,a=void 0,l="",c="",i="";}return {feed:u,reset:h}}function AYe(e){let t=[],n="",o=0;for(;o<e.length;){let r=e.indexOf("\r",o),i=e.indexOf(`
|
|
264
264
|
`,o),s=-1;if(r!==-1&&i!==-1?s=Math.min(r,i):r!==-1?s=r:i!==-1&&(s=i),s===-1){n=e.slice(o);break}else {let a=e.slice(o,s);t.push(a),o=s+1,e[o-1]==="\r"&&e[o]===`
|
|
@@ -328,7 +328,7 @@ ${a}
|
|
|
328
328
|
`,Y6e=1e4,J6e=6e4,mue=x__default.object({stream:x__default.boolean().optional(),type:x__default.literal("response.create").optional()}).passthrough(),X6e=mue.extend({stream:x__default.literal(true)});function pue(e={}){let t=new X1(e),n=e.fetch??fetch;return async(o,r)=>{if(!Z6e(o,r))return n(o,r);let i=await Q6e(r?.body);if(!i)return n(o,r);let s=X6e.safeParse(i);return s.success?t.fetch({httpUrl:hue(o),init:r,request:s.data}):n(o,r)}}var X1=class{constructor(t){this.options=t;}websocket;openPromise;latestResponseId;previousFullInput;pendingRequest;observedCompactionItems=new Set;async fetch({httpUrl:t,init:n,request:o}){if(this.pendingRequest)return (this.options.fetch??fetch)(t,n);this.observedCompactionItems.clear();let r={"momentic.websocket_has_pending_request":false,"momentic.websocket_ready_state":this.websocket?.readyState??-1};await de({name:"openai.responses_websocket.fetch.started",attributes:r,fn:async()=>{}});let i=await de({name:"openai.responses_websocket.open",attributes:r,fn:()=>this.open({httpUrl:t,init:n})}),s=new ReadableStream({start:async a=>{let l={controller:a,fullRequest:o,lastMessageAtMs:Date.now(),maxMessageGapMs:0,messageTimeout:void 0,sentContinuation:false,startedStreaming:false,retryingFullContext:false};this.pendingRequest=l;let c={"momentic.websocket_ready_state":i.readyState};await de({name:"openai.responses_websocket.send.started",attributes:c,fn:async()=>{}}),await de({name:"openai.responses_websocket.send",attributes:c,fn:async()=>this.sendRequest({websocket:i,pendingRequest:l})});},cancel:()=>{this.clearMessageTimeout(this.pendingRequest),this.websocket?.close(),this.websocket=void 0,this.openPromise=void 0,this.latestResponseId=void 0,this.previousFullInput=void 0,this.pendingRequest=void 0;}});return new Response(s,{status:200,headers:{"content-type":"text/event-stream","cache-control":"no-cache, no-transform"}})}async open({httpUrl:t,init:n}){return this.websocket?.readyState===J1.OPEN?this.websocket:this.openPromise?this.openPromise:(this.openPromise=new Promise((o,r)=>{let i=new J1(eZe(t),{headers:{...due(n?.headers),...due(this.options.getHeaders?.({httpUrl:t,init:n}))}}),s=setTimeout(()=>{i.terminate(),r(new Error("Timed out opening OpenAI responses websocket"));},Y6e);i.once("open",()=>{clearTimeout(s),this.websocket=i,this.openPromise=void 0,o(i);}),i.once("error",a=>{clearTimeout(s),this.resetConnection(),r(a);}),i.on("close",(a,l)=>{let c={"momentic.websocket_close_code":a,"momentic.websocket_close_reason":l.toString(),"momentic.websocket_had_pending_request":!!this.pendingRequest,"momentic.websocket_max_message_gap_ms":this.pendingRequest?.maxMessageGapMs??0};this.resetConnection(),de({name:"openai.responses_websocket.closed",attributes:c,fn:async()=>{}});}),i.on("message",a=>{this.handleMessage(a);});}),this.openPromise)}sendRequest({websocket:t,pendingRequest:n}){let o=this.buildPayload(n.fullRequest);n.sentContinuation=!!o.previous_response_id,this.sendPayload({websocket:t,pendingRequest:n,payload:o});}sendPayload({websocket:t,pendingRequest:n,payload:o}){n.lastMessageAtMs=Date.now(),this.armMessageTimeout(n);try{t.send(JSON.stringify(o),r=>{r&&this.failPendingRequest({pendingRequest:n,err:r});});}catch(r){this.failPendingRequest({pendingRequest:n,err:oi(r)});}}buildPayload(t){let{background:n,stream:o,...r}=t,i={...r,type:"response.create"};tZe({payload:i,compactThreshold:this.options.compactThreshold});let s=Array.isArray(t.input)?t.input:void 0,a=this.latestResponseId&&s&&this.previousFullInput?aue({currentInput:s,previousInput:this.previousFullInput}):void 0;return a&&a.length>0?(i.input=a,i.previous_response_id=this.latestResponseId,i):(delete i.previous_response_id,i)}handleMessage(t){let n=this.pendingRequest;if(!n)return;let o=Date.now();n.maxMessageGapMs=Math.max(n.maxMessageGapMs,o-n.lastMessageAtMs),n.lastMessageAtMs=o,this.armMessageTimeout(n);let r=oZe(t),i;try{i=JSON.parse(r);}catch(l){this.failPendingRequest({pendingRequest:n,err:oi(l)});return}let s=Y6.safeParse(i),a=s.success?s.data:void 0;if(nZe(a)&&n.sentContinuation&&!n.startedStreaming&&!n.retryingFullContext&&this.websocket?.readyState===J1.OPEN){this.latestResponseId=void 0,this.previousFullInput=void 0,n.retryingFullContext=true,n.sentContinuation=false;let l=this.buildPayload(n.fullRequest);delete l.previous_response_id,this.sendPayload({websocket:this.websocket,pendingRequest:n,payload:l});return}if(n.startedStreaming=true,Bk(i)){let l=iue(i),c=l??"compaction-without-id",u=this.options.compactThreshold;u!==void 0&&!this.observedCompactionItems.has(c)&&(this.observedCompactionItems.add(c),this.options.onCompaction?.({compactThreshold:u,itemId:l,transport:"websocket"}));}else n.controller.enqueue(rZe(i));if(a?.type==="response.completed"){this.latestResponseId=a.response.id,this.previousFullInput=Array.isArray(n.fullRequest.input)?n.fullRequest.input:void 0,this.closePendingRequest("completed");return}a?.type==="error"&&(this.latestResponseId=void 0,this.previousFullInput=void 0,this.closePendingRequest("error"));}closePendingRequest(t){let n=this.pendingRequest;n&&(this.clearMessageTimeout(n),n.controller.enqueue(new TextEncoder().encode(K6e)),n.controller.close(),this.pendingRequest=void 0,de({name:"openai.responses_websocket.response_finished",attributes:{"momentic.websocket_max_message_gap_ms":n.maxMessageGapMs,"momentic.websocket_response_outcome":t,"momentic.websocket_sent_continuation":n.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 n=this.options.messageTimeoutMs??J6e;t.messageTimeout=setTimeout(()=>{let o={"momentic.websocket_message_timeout_ms":n,"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 ${n}ms without receiving a message`)}),de({name:"openai.responses_websocket.message_timeout",attributes:o,fn:async()=>{}});},n);}clearMessageTimeout(t){t?.messageTimeout&&(clearTimeout(t.messageTimeout),t.messageTimeout=void 0);}failPendingRequest({pendingRequest:t,err:n}){if(this.pendingRequest!==t)return;this.clearMessageTimeout(t),this.pendingRequest=void 0,t.controller.error(n);let o=this.websocket;this.resetConnection(),o?.terminate();}};async function Q6e(e){let t=await Hk(e);if(!t)return;let n=mue.safeParse(JSON.parse(t));return n.success?n.data:void 0}function Z6e(e,t){return (t?.method??(e instanceof Request?e.method:"GET")).toUpperCase()==="POST"&&hue(e).endsWith("/responses")}function hue(e){return e instanceof Request?e.url:e.toString()}function eZe(e){let t=new URL(e);return t.protocol=t.protocol==="https:"?"wss:":"ws:",t.toString()}function due(e){if(!e)return {};if(e instanceof Headers){let t={};return e.forEach((n,o)=>{t[o]=n;}),t}return Array.isArray(e)?Object.fromEntries(e):e}function tZe({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 oZe(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 rZe(e){return new TextEncoder().encode(`data: ${JSON.stringify(e)}
|
|
329
329
|
|
|
330
330
|
`)}function Q1(e){return {specificationVersion:e.specificationVersion,provider:e.provider,modelId:e.modelId,supportedUrls:e.supportedUrls,doGenerate:t=>e.doGenerate(gue(t)),doStream:t=>e.doStream(gue(t))}}function gue(e){return {...e,providerOptions:{...e.providerOptions,openai:{...e.providerOptions?.openai,store:false}}}}function zk(e){return async(t,n)=>{let o=aZe(n?.body);if(!o)return fetch(t,n);let r=e?.priorityServiceTier===true,i=e?.promptCacheKey;o.store=false,sZe(o),r&&(o.service_tier="priority"),i&&(o.prompt_cache_key=i);let s=await fetch(t,{...n,body:JSON.stringify(o)});return lZe({capturePath:e?.requestCapturePath,input:t,status:s.status,body:o}),s}}function sZe(e){if(e.store!==false)return;let t="reasoning.encrypted_content",n=e.include;if(!Array.isArray(n)){e.include=[t];return}n.includes(t)||(e.include=[...n,t]);}function aZe(e){if(typeof e=="string")try{let t=JSON.parse(e);return fue(t)?t:void 0}catch{return}}function lZe({capturePath:e,input:t,status:n,body:o}){e&&appendFileSync(e,`${JSON.stringify({url:uZe(t),status:n,request:cZe(o)})}
|
|
331
|
-
`);}function cZe(e){let t=e.reasoning,n=e.include;return {model:e.model,service_tier:e.service_tier,prompt_cache_key:e.prompt_cache_key,include:Array.isArray(n)?n.filter(o=>typeof o=="string"):void 0,reasoning:fue(t)?{effort:t.effort}:void 0,hasInput:!!e.input,toolsCount:Array.isArray(e.tools)?e.tools.length:0}}function fue(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function uZe(e){return typeof e=="string"?e:e instanceof URL?e.toString():e.url}var dZe=3e5;function Vk(e){let t=e.split("/").at(-1)??e;return t.startsWith("grok-4.5")||t.startsWith("grok-4.6")}var mZe=z$1.object({input:z$1.array(z$1.custom()),instructions:z$1.unknown().optional(),model:z$1.string(),tools:z$1.unknown().optional()}).passthrough(),pZe=z$1.object({output:z$1.array(z$1.object({type:z$1.literal("compaction"),id:z$1.string(),encrypted_content:z$1.string()})).min(1),usage:z$1.object({dropped_message_count:z$1.number().int().nonnegative(),input_tokens:z$1.number().int().nonnegative(),output_tokens:z$1.number().int().nonnegative()})});function yue(e={}){let t=e.compactThreshold??dZe,n=zk(e.requestOptions),o;return async(r,i)=>{let s=i?.method??(r instanceof Request?r.method:"GET"),a=new URL(r instanceof Request?r.url:r.toString());if(s.toUpperCase()!=="POST"||!a.pathname.endsWith("/responses"))return n(r,i);let l=typeof i?.body=="string"?i.body:void 0;if(!l)return n(r,i);let c;try{c=JSON.parse(l);}catch{return n(r,i)}let u=mZe.safeParse(c);if(!u.success)return n(r,i);let d=u.data.input,m=o?Uk({currentInput:d,previousInput:o.boundaryInput,compactionItem:o.item}):void 0;o&&!m&&(o=void 0);let p=m??d;if((m&&o?o.outputTokens:0)+Rt({input:m?m.slice(1):d,instructions:u.data.instructions,tools:u.data.tools})>=t){let g=await hZe({url:a,init:i,model:u.data.model,providerInput:p});if(g){let f=g.output[0];o={boundaryInput:d,item:f,outputTokens:g.usage.output_tokens},p=[f],e.onCompaction?.({compactThreshold:t,droppedMessageCount:g.usage.dropped_message_count,inputTokens:g.usage.input_tokens,itemId:f.id,outputTokens:g.usage.output_tokens});}}return n(r,{...i,body:JSON.stringify({...u.data,input:p,previous_response_id:void 0})})}}async function hZe({url:e,init:t,model:n,providerInput:o}){e.pathname=`${e.pathname.replace(/\/$/,"")}/compact`;let r=await fetch(e,{...t,body:JSON.stringify({input:o,model:n})});if(!r.ok)return;let i;try{i=await r.json();}catch{return}let s=pZe.safeParse(i);return s.success?s.data:void 0}var yZe="MOMENTIC_OPENAI_RESPONSES_WEBSOCKET_COMPACT_THRESHOLD";function Zh(e){let{apiKey:t,sessionId:n,loggerTags:o,runner:r,parentTraceId:i}=e,s={Authorization:`Bearer ${t}`,[WP]:ny,...n&&{[tee]:n},...r&&{[qP]:r},...i&&{[oee]:i},...o&&{[KP]:JSON.stringify(o)}};for(let[a,l]of Object.entries(s))s[a]=l.replace(/[\u0100-\uffff]/g,c=>"\\u"+c.charCodeAt(0).toString(16).padStart(4,"0"));return s}var Sue="bedrock/",bue="azure/",Tue="anthropic/",Aue=e=>t=>{let n=Zh(e),o=t,r=`${e.baseUrl}/v1/llm/anthropic/${encodeURIComponent(t)}`;return t.startsWith(Sue)?r=`${e.baseUrl}/v1/llm/provider/bedrock/anthropic/${encodeURIComponent(t.slice(Sue.length))}`:t.startsWith(bue)?r=`${e.baseUrl}/v1/llm/provider/foundry/anthropic/${encodeURIComponent(t.slice(bue.length))}`:t.startsWith(Tue)&&(o=t.slice(Tue.length),r=`${e.baseUrl}/v1/llm/provider/anthropic/${encodeURIComponent(o)}`),createAnthropic({baseURL:r,headers:n,apiKey:e.apiKey})(o)},Eue=e=>t=>{let n=Zh(e),o=e.useOpenAIResponsesWebSocket??false,r=o?e.openAIResponsesWebSocketCompactThreshold??SZe(process.env[yZe])??$k(t):e.openAIResponsesCompactThreshold??$k(t),i=s=>e.onOpenAINativeCompaction?.({...s,model:t});return Q1(HT({baseURL:`${e.baseUrl}/v1/llm/provider/openai/${t}`,headers:n,apiKey:e.apiKey,fetch:o?pue({compactThreshold:r,onCompaction:i}):Y1({compactThreshold:r,onCompaction:i})})(t))},vue=e=>t=>{let n=Zh(e),o=zk(e.xai);return Vk(t)&&(o=yue({requestOptions:e.xai,onCompaction:r=>e.onXAINativeCompaction?.({...r,model:t})})),createXai({baseURL:`${e.baseUrl}/v1/llm/provider/xai/${t}`,headers:n,apiKey:e.apiKey,fetch:o}).responses(t)},wue=e=>t=>{let n=Zh(e);return Q1(HT({baseURL:`${e.baseUrl}/v1/llm/provider/azure/${t}`,headers:n,apiKey:e.apiKey,fetch:Y1({compactThreshold:e.openAIResponsesCompactThreshold??$k(t),onCompaction:o=>e.onOpenAINativeCompaction?.({...o,model:t})})})(t))};function Rue(e){return t=>n=>{let o=Zh(t);return HT({baseURL:`${t.baseUrl}/v1/llm/provider/${e}/${n}`,headers:o,apiKey:t.apiKey}).chat(n)}}var Cue=Rue("azure/deepseek"),Iue=Rue("azure/kimi"),xue=e=>t=>{let n=Zh(e);return HT({baseURL:`${e.baseUrl}/v1/llm/provider/fireworks`,headers:n,apiKey:e.apiKey}).chat(t)},_ue=e=>t=>{let n=Zh(e);return K1({baseURL:`${e.baseUrl}/v1/llm/provider/openrouter`,headers:n,apiKey:e.apiKey,compatibility:"strict"}).chat(t)},Pue=e=>t=>{let n=Zh(e);return y1({baseURL:`${e.baseUrl}/v1/llm/provider/vertex`,headers:n,apiKey:e.apiKey})(t)};function SZe(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function Oue(e){let t=pt.safeParse(e[w$]);return delete e[w$],t.success?t.data:void 0}var Cr=class extends ua{agentConfig;apiPathPrefix;constructor(t,n){let o={...Kp,...t};r_(o),super(n),this.apiPathPrefix=n.apiPathPrefix??`/${Le}`,this.agentConfig=o;}getAgentConfig(){return this.agentConfig}async compactConversationNonNative(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/llm/compact`,{method:"POST",body:{...AZe(t),sessionId:n.sessionId,parentTraceId:n.parentTraceId},signal:n.abortSignal,retries:1,requestTimeoutMs:15e3,extraHeaders:{[KP]:JSON.stringify(Z1(n))}});return R5.parse(o)}async rankChunksWithAi(t,n){let o={...t,loggerTags:n.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/recommend-chunks-ai`,{method:"POST",body:o,signal:n.abortSignal});return TQ.parse(r)}async rankChunksWithRag(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:ny,...t},signal:n.abortSignal});return bQ.parse(o)}async getScreenshotFromS3(t){let n=await this.sendRequest(`${this.apiPathPrefix}/s3/visual-diff-screenshot`,{method:"POST",body:{url:t}});return z$1.string().parse(n)}async getElementLocation(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags,useMemory:n.useMemory,cacheBustReason:n.cacheBustReason,effort:n.effort,agentConfigVersion:this.agentConfig?.locator},r={},i=()=>{let a=Oue(r);a&&n.onEffectiveEffort?.(a);},s=await this.sendRequest(`${this.apiPathPrefix}/web-agent/locate-element`,{method:"POST",body:o,signal:n.abortSignal,responseHeadersObject:r,onFailedRequest:i});return i(),see.parse(s)}async getAssertionResult(t,n){let o={...t,disableCache:!!n.disableCache,useConsensus:!!n.useConsensus,attemptNumber:n.attemptNumber,loggerTags:n.loggerTags,useMemory:n.useMemory,effort:n.effort,agentConfigVersion:this.agentConfig?.assertion},r={},i=()=>{let a=Oue(r);a&&n.onEffectiveEffort?.(a);},s=await this.sendRequest(`${this.apiPathPrefix}/web-agent/assertion`,{method:"POST",body:o,signal:n.abortSignal,responseHeadersObject:r,onFailedRequest:i});return i(),R$.parse(s)}async getLintStepResult(t,n){let o={...t,disableCache:!!n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/lint/step`,{method:"POST",body:o,signal:n.abortSignal});return iee.parse(r)}async getVisualAssertionResult(t,n){let o={...t,disableCache:!!n.disableCache,useConsensus:!!n.useConsensus,attemptNumber:n.attemptNumber,loggerTags:n.loggerTags,useMemory:n.useMemory,agentConfigVersion:this.agentConfig?.["visual-assertion"]},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/visual-assertion`,{method:"POST",body:o,signal:n.abortSignal});return R$.parse(r)}async getAiActionCommand(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/next-command-dynamic`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return ree.parse(o)}async getMultiturnAiActionCommand(t,n){return await this.sendRequest(`${this.apiPathPrefix}/web-agent/ai-action/next-command`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal})}async getMultiturnAiActionEvaluation(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/ai-action/evaluate`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return kH.parse(o)}async getReverseMappedDescription(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/reverse-mapped-description`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return aee.parse(o)}async getTextExtraction(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/text-extraction`,{method:"POST",body:o,signal:n.abortSignal});return MH.parse(r)}async getPageSummary(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/page-summary`,{method:"POST",body:o,signal:n.abortSignal});return v5.parse(r)}async getSmartWaitingDecision(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/smart-waiting`,{method:"POST",body:o,signal:n.abortSignal});return w5.parse(r)}async getKnowledgeSuggestion(t,n){throw new Error("Knowledge suggestion generation is only available on InternalGenerator")}async getTestResultClassification(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/result-classification`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return Yx.parse(o)}async getExtractedKeywords(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/extract-keywords`,{method:"POST",body:t,signal:n.abortSignal});return kQ.parse(o)}async getAutohealingProposal(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/autoheal-section`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return S5.parse(o)}async getFailureRecoveryProposal(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return A5.parse(o)}async getFailureRecoveryPlan(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery-plan`,{method:"POST",body:{...t,loggerTags:n.loggerTags,agentConfigVersion:this.agentConfig?.["failure-recovery"]},signal:n.abortSignal});return T5.parse(o)}async getFailureRecoveryMemory(t,n){try{let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery-memory`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});return BZ.parse(o)}catch(o){return n.logger.warn({err:o},"Failed to read failure recovery memory"),{failureCount:0}}}async recordFailureRecoveryOutcome(t,n){try{await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery-memory`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:5e3});}catch(o){n.logger.warn({err:o},"Failed to record failure recovery outcome");}}async getOrgLevelFailureRate(t,n){let o=t.environment?`?environment=${encodeURIComponent(t.environment)}`:"";try{let r=await this.sendRequest(`${this.apiPathPrefix}/org-level-failure-rate${o}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return oO.parse(r)}catch(r){return n.logger.warn({err:r},"Failed to read org-level failure rate"),{skip:false,failed:0,total:0}}}async getIframeRegex(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/iframe-regex`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return JX.parse(o)}createAgentTrace(t){let n=randomUUID(),{completionType:o,runId:r,orgId:i,logger:s}=t,a=s.bindings().sessionId,l=async c=>{try{await this.sendRequest(`${this.apiPathPrefix}/traces/result-classification`,{method:"POST",body:{id:n,completionType:o,input:{runId:r},sessionId:a,...c,metadata:{orgId:i,runId:r,...c.metadata}}});}catch(u){s.warn({err:u},"Failed to upsert result classification trace");}};return l({}),{id:n,update:l}}getAnthropicModelFactory(t){return this.buildModelFactory(Aue,t)}getModelProviderCandidate(t,n){return t.startsWith("bedrock/")?{id:"anthropic-bedrock",model:this.getAnthropicBedrockModelFactory(n)(t.slice(8))}:t.startsWith("azure/claude-")?{id:"anthropic-foundry",model:this.getAnthropicFoundryModelFactory(n)(t.slice(6))}:t.startsWith("anthropic/")?{id:"anthropic",model:this.getAnthropicModelFactory(n)(t)}:t.startsWith("openrouter/")?{id:"openrouter",model:this.getOpenRouterModelFactory(n)(t.slice(11))}:t.startsWith("fireworks/")?{id:"fireworks",model:this.getFireworksModelFactory(n)(t)}:t.startsWith("xai/")?{id:"xai",model:this.getXAIModelFactory(n)(t.slice(4))}:t.startsWith("vertex/gemini-")?{id:"google-vertex",model:this.getVertexGeminiModelFactory(n)(t.slice(7))}:t.startsWith("azure/")?{id:"azure",model:this.getAzureOpenAIModelFactory(n)(t.slice(6))}:t.startsWith("claude-")?{id:"anthropic",model:this.getAnthropicModelFactory(n)(t)}:{id:"openai",model:this.getOpenAIModelFactory(n)(t)}}getAnthropicBedrockModelFactory(t){let n=this.getAnthropicModelFactory(t);return o=>n(`bedrock/${o}`)}getAnthropicFoundryModelFactory(t){let n=this.getAnthropicModelFactory(t);return o=>n(`azure/${o}`)}getOpenAIModelFactory(t){let{sessionId:n,logger:o,streamType:r,useOpenAIResponsesWebSocket:i,parentTraceId:s}=t;return Eue({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:Z1(t),sessionId:n,useOpenAIResponsesWebSocket:i,runner:this.runner,parentTraceId:s,onOpenAINativeCompaction:a=>{o.info({promptType:r,nativeCompaction:a},"Native conversation compaction completed");}})}getXAIModelFactory(t){let{logger:n,streamType:o}=t;return this.buildModelFactory(vue,t,{onXAINativeCompaction:r=>{n.info({promptType:o,nativeCompaction:r},"Native conversation compaction completed");}})}getOpenRouterModelFactory(t){return this.buildModelFactory(_ue,t)}getAzureOpenAIModelFactory(t){let{logger:n,streamType:o}=t;return this.buildModelFactory(wue,t,{onOpenAINativeCompaction:r=>{n.info({promptType:o,nativeCompaction:r},"Native conversation compaction completed");}})}getAzureDeepSeekModelFactory(t){return this.buildModelFactory(Cue,t)}getAzureKimiModelFactory(t){return this.buildModelFactory(Iue,t)}getFireworksModelFactory(t){return this.buildModelFactory(xue,t)}getVertexGeminiModelFactory(t){return this.buildModelFactory(Pue,t)}buildModelFactory(t,n,o){let{sessionId:r,parentTraceId:i,xai:s}=n;return t({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:Z1(n),sessionId:r,runner:this.runner,parentTraceId:i,xai:s,...o})}};function Z1(e){return {...fn(e.logger),agentInvocationId:e.agentInvocationId,promptType:e.streamType}}function AZe(e){return {...e,messages:e.messages.map(e2)}}function e2(e){return e instanceof Uint8Array||e instanceof ArrayBuffer?Buffer.from(e).toString("base64"):e instanceof URL?e.toString():Array.isArray(e)?e.map(e2):typeof e!="object"||e===null?e:Object.fromEntries(Object.entries(e).map(([t,n])=>[t,e2(n)]))}async function Wk(e,t,n){let{size:o}=await oo__default.promises.stat(n),r=new URL(e),i=t==="application/zip"?AbortSignal.timeout(nM(o)):void 0,s;if(r.protocol==="http:")s=request;else if(r.protocol==="https:")s=request$1;else throw new Error(`Unsupported signed upload URL protocol: ${r.protocol}`);return new Promise((a,l)=>{let c=oo__default.createReadStream(n),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=s(r,{method:"PUT",signal:i,headers:{"Content-Length":o,"Content-Type":t}},f=>{p=!0;let y=m<o,S=f.socket;c.unpipe(d),c.destroy(),!d.destroyed&&!d.writableEnded&&d.end();let b=f.statusCode??500,v=b===204||b===205||b===304;if(y&&b>=200&&b<300&&!v){h=!0,d.destroy(),f.destroy(),S.destroy(),u.then(()=>l(new Error(`Upload server returned ${b} before the request body was fully written.`)));return}let A=[];f.on("data",R=>A.push(R)),f.on("error",g),f.on("end",()=>{if(h)return;h=!0,d.destroy(),y&&S.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=v?null:Buffer.concat(A);u.then(()=>{try{a(new Response(w,{headers:R,status:b,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 kue(e,t,n,o){return fetch(e,{method:"PUT",body:n,signal:o,headers:{"Content-Type":t}})}var wZe=2e3,Nt=class extends ua{apiPathPrefix;constructor(t){super(t),this.apiPathPrefix=t.apiPathPrefix??`/${Le}`;}getAppUrl(){return Bb(this.baseUrl)}limbarPath(t){return `${this.apiPathPrefix}/limbar/${t}`}async getAuthInfo(){let t;try{t=await this.sendRequest(`/${Le}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3});}catch(n){throw n instanceof GR?new ue(`Your Momentic API key was rejected (${n.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:n}):n instanceof Hn?n.status>=400&&n.status<500?new ue(n.rawError,{cause:n}):new Error(`Momentic server error (HTTP ${n.status}). Please try again in a moment.`,{cause:n}):n instanceof ue?n:new Error(`Could not reach Momentic server at ${this.baseUrl}. Check your network connection. If you're on a restricted network (VPN, firewall, or proxy), you may need to whitelist Momentic's servers: https://momentic.ai/docs/environment/authentication#ip-whitelist`,{cause:n})}return Aee.parse(t)}async getFeatureFlags(){let t=await this.sendRequest(`/${Le}/auth/flags`,{method:"GET",retries:1,requestTimeoutMs:5e3});return wee.parse(t)}async getCliAnnouncements(){let t=await this.sendRequest(`/${Le}/announcements`,{method:"GET",retries:1,requestTimeoutMs:5e3});return CZ.parse(t).announcements}async createMoSessionUpload(t,n){let o;try{o=await this.sendRequest(`/${Le}/mo/sessions/${encodeURIComponent(t)}/uploads`,{method:"POST",body:n,retries:3,requestTimeoutMs:15e3});}catch(r){throw r instanceof Hn&&r.status===404?new ue(`Mo session ${t} was not found.`,{cause:r}):r}return M8.parse(o)}async createMoSessionDownload(t,n,o){let r;try{r=await this.sendRequest(`/${Le}/mo/sessions/${encodeURIComponent(t)}/downloads`,{method:"POST",body:n,retries:3,requestTimeoutMs:15e3,signal:o});}catch(i){throw i instanceof Hn&&i.status===404?new ue(i.rawError,{cause:i}):i}return O8.parse(r)}async getLatestProductUpdate(){let t=await this.sendRequest(`/${Le}/product-updates/latest`,{method:"GET",retries:1,requestTimeoutMs:5e3});return Yee.parse(t).update}async getQuotaStatus(){let t=await this.sendRequest(`/${Le}/billing/check-quota`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Eee.parse(t)}async createRemoteBrowserConnection(t){let n=await this.sendRequest(`/${Le}/browsers/connection`,{method:"POST",body:{...t?.envName?{envName:t.envName}:{},...t?.runAttemptId?{runAttemptId:t.runAttemptId}:{},...t?.runGroupId?{runGroupId:t.runGroupId}:{},...t?.testId?{testId:t.testId}:{},...t?.testName?{testName:t.testName}:{},...t?.runId?{runId:t.runId}:{},...t?.attemptedProviders?{attemptedProviders:t.attemptedProviders}:{}},retries:3,requestTimeoutMs:12e4});return Vee.parse(n)}async tryCreateBrowserFleetAccessToken(t,n){let o;try{o=await this.sendRequest(`/${Le}/browsers/token`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4,signal:n});}catch(i){if(i instanceof Hn&&(i.status===400||i.status===404||i.status===409))return null;throw i}let r=zee.parse(o);return "network"in r?r:null}async bulkGetRunStatus(t){let n=await this.sendRequest(`/${Le}/runs/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return yee.parse(n)}async getOrgLevelFailureRate(t){let n=t?`?environment=${encodeURIComponent(t)}`:"",o=await this.sendRequest(`/${Le}/org-level-failure-rate${n}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return oO.parse(o)}async recordRunOutcomeForFailureRate(t){await this.sendRequest(`/${Le}/org-level-failure-rate`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});}async getRunExport(t){let n=await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4});return JP.parse(n)}submitInteractiveAgentFeedback(t){try{this.sendRequest(`/${Le}/traces/interactive-agent-feedback`,{method:"POST",body:t,retries:1,requestTimeoutMs:2e3}).catch(n=>{});}catch(n){}return Promise.resolve()}async getResultClassificationCacheEntries(t){let n=await this.sendRequest(`/${Le}/result-classification-cache`,{method:"POST",body:t,retries:1,requestTimeoutMs:1e4});return ite.parse(n)}async createResultClassificationCacheEntries(t){await this.sendRequest(`/${Le}/result-classification-cache`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:1e4});}async createAiTriageMetrics(t){await this.sendRequest(`/${Le}/ai-triage-metrics`,{method:"POST",body:t,retries:1,requestTimeoutMs:3e3});}async getAiTriageExistingFixes(t){let n=await this.sendRequest(`/${Le}/ai-triage-metrics/existing-fixes`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});return Q6.parse(n)}async saveRunClassification(t,n){await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/classification`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async uploadRunHealTraceZip(t,n){let o=await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/heal-trace/upload-url`,{method:"POST",retries:3,requestTimeoutMs:1e4}),{uploadUrl:r}=XP.parse(o),i=await kue(r,"application/zip",n,AbortSignal.timeout(nM(n.byteLength)));if(!i.ok)throw new Error(`Failed to upload heal trace: ${await i.text()}`)}async saveRunHealMetadataBatch(t){await this.sendRequest(`/${Le}/runs/heal-metadata`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:1e4});}async getTestYAMLExport(t){let n=await this.sendRequest(`/${Le}/tests/export`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return cee.parse(n)}async updateStepCaches(t,n){await this.sendRequest(`/${Le}/cache`,{method:"PATCH",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async updateSnapshotCaches(t,n){await this.sendRequest(`/${Le}/snapshot-cache`,{method:"PATCH",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getStepCacheForTest(t,n){let o=await this.sendRequest(`/${Le}/cache`,{method:"POST",body:t,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return dee.parse(o)}async getSnapshotCacheForTest(t,n){let o=await this.sendRequest(`/${Le}/snapshot-cache`,{method:"POST",body:t,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return mee.parse(o)}async deleteStepCacheEntry(t,n){await this.sendRequest(`/${Le}/cache/entry`,{method:"DELETE",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4});}async getWebStepCacheMemoryTraces(t){let n=await this.sendRequest(`/${Le}/cache/traces`,{method:"POST",body:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return C$.parse(n)}cacheRouteForPlatform(t){switch(t){case "ANDROID":return "android-cache";case "IOS":return "ios-cache"}}async deleteMobileStepCacheEntry({platform:t,body:n,headers:o}){await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t)}/entry`,{method:"DELETE",body:n,extraHeaders:o,retries:3,requestTimeoutMs:1e4});}async getMobileStepCacheMemoryTraces(t,n){let o=await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t)}/traces`,{method:"POST",body:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return C$.parse(o)}async updateMobileStepCaches(t){await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t.platform)}`,{method:"PATCH",body:t.body,extraHeaders:t.headers,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getMobileStepCacheForTest({platform:t,body:n,headers:o}){let r=await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t)}`,{method:"POST",body:n,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return pee[t](r)}async queueTests(t){let n=await this.sendRequest(`/${Le}/tests/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return lee.parse(n)}async uploadScreenshot(t){let n=await this.sendRequest(`/${Le}/screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return Tee.parse(n)}async uploadOnDemandScreenshot(t){return await this.sendRequest(`/${Le}/on-demand-screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${Le}/on-demand-screenshots/${t.id}`}}async fetchOnDemandScreenshot(t){let n={};return {data:await this.sendRequest(`/${Le}/on-demand-screenshots/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:5e3,responseType:"buffer",responseHeadersObject:n}),contentType:n["content-type"]??"image/jpeg"}}async getAllEnvironments(){let t=await this.sendRequest(`/${Le}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return vee.parse(t)}async acquireCacheLock(t,n){let o=await this.sendRequest(`/${Le}/result-cache/lock`,{method:"POST",body:t,signal:n,retries:3,requestTimeoutMs:3e4});return Zee.parse(o)}async releaseCacheLock(t){await this.sendRequest(`/${Le}/result-cache/lock`,{method:"DELETE",body:{key:t},retries:3,requestTimeoutMs:5e3});}async deleteCacheResult(t){await this.sendRequest(`/${Le}/result-cache/entry`,{method:"DELETE",body:t,retries:3,requestTimeoutMs:5e3});}async setCacheResult(t){await this.sendRequest(`/${Le}/result-cache/entry`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:5e3});}async getCacheResult(t){try{return await this.sendRequest(`/${Le}/result-cache/entry`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3})}catch(n){if(n instanceof Error&&n.message.includes("404"))return null;throw n}}async queueSuiteRuns(t){let n=await this.sendRequest(`/${Le}/suites/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return Iee.parse(n)}async bulkGetRunGroupStatus(t){let n={runGroupIds:t},o=await this.sendRequest(`/${Le}/run-groups/status`,{method:"POST",body:n,retries:3,requestTimeoutMs:5e3});return hQ.array().parse(o)}async getRunGroupWithRuns(t){try{let n=await this.sendRequest(`/${Le}/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return tP.parse(n)}catch(n){if(n instanceof Hn&&n.status===404)return null;throw n}}async getRun(t){try{let n=await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/metadata`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Ys.parse(n)}catch(n){if(n instanceof Hn&&n.status===404)return null;throw n}}async getRunsByCommit(t){let o=[];for(let r=1;;r++){let i=await this.listRuns({gitCommitSha:t,includeFailureDetails:true,limit:100,page:r});if(o.push(...i.runs.map(s=>({...s,test:null}))),i.runs.length<100||r>=i.pageCount)break}return o}async getRunGroupRuns(t){let n=await this.sendRequest(`/${Le}/run-groups/${encodeURIComponent(t)}/runs`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Pee.parse(n)}async updateGithubPRHealRiskSummary(t,n){await this.sendRequest(`/${Le}/run-groups/${encodeURIComponent(t)}/github-pr-heal-risk-summary`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async uploadProposedSteps(t,n){try{await this.sendRequest(`/${Le}/test-fragments/`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});}catch(o){n.error({err:o},"Failed to upload proposed steps");}}async reportBillableEvents(t,n){try{await this.sendRequest(`/${Le}/billing/events`,{method:"POST",body:n,retries:10,requestTimeoutMs:1e4});}catch(o){t.error({err:o},"Failed to report billable event");}}async fetchTestFragment(t){let n=await this.sendRequest(`/${Le}/test-fragments/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return xee.parse(n)}async patchTestFragment(t,n){await this.sendRequest(`/${Le}/test-fragments/${t}`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async getPastTestResults(t,n){let o=await this.sendRequest(`/${Le}/results/tests/${t}`,{method:"POST",body:n,retries:3,requestTimeoutMs:1e4});return _ee.parse(o)}async listRuns(t){let n=await this.sendRequest(`/${Le}/results/runs`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Oee.parse(n)}async generateTestResultsUploadUrl(){let t=await this.sendRequest(`/${Le}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return Mee.parse(t)}async startProcessingResultsUpload(t,n){let o=await this.sendRequest(`/${Le}/results/uploads/${t}/process`,{method:"POST",body:n,retries:3,requestTimeoutMs:1e4});return kee.parse(o)}async startExploreTraceUpload(t){let n=await this.sendRequest(`/${Le}/explore/trace-uploads`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return fte.parse(n)}async fetchIconKnowledgeBase(t){try{let n=await this.sendRequest(`/${Le}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return lte.parse(n)}catch(n){return t.error({err:n},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(t,n){try{await this.sendRequest(`/${Le}/knowledge-base/icons`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});}catch(o){n.error({err:o},"Failed to save new icons to icon knowledge base");}}async retrieveKnowledgeBase({query:t,clientName:n,testId:o,environmentId:r,types:i,agentSubtype:s,limit:a,mode:l,scoreMultiplier:c,scopeBuckets:u,retries:d,signal:m,timeoutMs:p},h){try{let g=await this.sendRequest(`/${Le}/knowledge-base/retrieve`,{method:"POST",body:{query:t,clientName:n,testId:o,environmentId:r,types:i,agentSubtype:s,limit:a,mode:l,scoreMultiplier:c,scopeBuckets:u,timeoutMs:p},retries:d??3,requestTimeoutMs:p===void 0?5e3:p+wZe,signal:m});return N5.parse(g)}catch(g){return h.warn({err:g},"Failed to retrieve from knowledge base"),null}}async createKnowledgeItem(t){let n=await this.sendRequest(`/${Le}/knowledge-base/items`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return $H.parse(n)}async getMergeBaseCommitFromGithub(t,n,o,r){let i=new URLSearchParams;i.set("base",o),i.set("head",r);let s=await this.sendRequest(`/${Le}/git/github/${t}/${n}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Qw.parse(s)}async compareCommitsFromGithub({owner:t,repo:n,base:o,head:r},i){i?.throwIfAborted();let s=new URLSearchParams;s.set("base",o),s.set("head",r);let a=await this.sendRequest(`/${Le}/git/github/${t}/${n}/compare?${s.toString()}`,{signal:i,method:"GET",retries:3,requestTimeoutMs:5e3});return ZZ.parse(a)}async listGithubCommitsForPath({owner:t,repo:n,path:o,ref:r,limit:i}){let s=new URLSearchParams;s.set("path",o),s.set("ref",r),s.set("limit",String(i));let a=await this.sendRequest(`/${Le}/git/github/${t}/${n}/commits?${s.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return e8.parse(a).commits}async getGithubFileContent({owner:t,repo:n,path:o,ref:r}){let i=new URLSearchParams;i.set("path",o),i.set("ref",r);let s=await this.sendRequest(`/${Le}/git/github/${t}/${n}/contents?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return t8.parse(s).content??void 0}async getGithubBranchMetadata(t,n,o){let r=new URLSearchParams;r.set("branch",o);let i=await this.sendRequest(`/${Le}/git/github/${t}/${n}/branch-metadata?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return n8.parse(i)}async createGithubPullRequest(t,n,o){let r=await this.sendRequest(`/${Le}/git/github/${t}/${n}/pull-requests`,{method:"POST",body:o,retries:3,requestTimeoutMs:6e4});return GZ.parse(r)}async createGithubCommit(t,n,o){let r=await this.sendRequest(`/${Le}/git/github/${t}/${n}/commits`,{method:"POST",body:o,retries:3,requestTimeoutMs:6e4});return zZ.parse(r)}async getGithubPullRequestTemplate(t,n){try{let o=await this.sendRequest(`/${Le}/git/github/${t}/${n}/pull-request-template`,{method:"GET",retries:3,requestTimeoutMs:1e4});return i8.parse(o).template}catch(o){if(o instanceof Hn&&o.status===404)return;throw o}}async getGithubPullRequestForBranch(t,n,o){let r=new URLSearchParams;r.set("branch",o);let i;try{i=await this.sendRequest(`/${Le}/git/github/${t}/${n}/pull-requests?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(s){if(s instanceof Hn&&s.status===404)return;throw s}return JZ.parse(i)}async getCommitFromGithub(t,n,o){let r=await this.sendRequest(`/${Le}/git/github/${t}/${n}/commits/${o}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Qw.parse(r)}async getGithubDefaultBranch(t,n){try{let o=await this.sendRequest(`/${Le}/git/github/${t}/${n}/default-branch`,{method:"GET"}),r=z$1.object({defaultBranch:z$1.string().min(1)}).safeParse(o);return r.success?r.data.defaultBranch:void 0}catch{return}}async getGithubCollaboratorsWithMergeAccess(t,n,o){let r=await this.sendRequest(`/${Le}/git/github/${t}/${n}/collaborator-merge-access`,{method:"POST",body:{usernames:o},retries:3,requestTimeoutMs:15e3});return VZ.parse(r).usernamesWithMergeAccess}async searchGithubRelatedPullRequests(t,n,o){let r=await this.sendRequest(`/${Le}/git/github/${t}/${n}/related-pull-requests`,{method:"POST",body:{query:o},retries:2,requestTimeoutMs:6e4});return KZ.parse(r)}async getGithubRelatedPullRequestDetails(t,n,o){let r=await this.sendRequest(`/${Le}/git/github/${t}/${n}/related-pull-requests/${o}`,{method:"GET",retries:2,requestTimeoutMs:6e4});return z$1.object({pullRequest:Qj}).parse(r).pullRequest}async getGithubCommitDetails(t,n,o){let r=WZ.parse({shas:o}),i=await this.sendRequest(`/${Le}/git/github/${t}/${n}/commit-details`,{method:"POST",body:r,retries:3,requestTimeoutMs:2e4});return qZ.parse(i)}async getMergedBranchFromGithub(t,n,o,r){let i=encodeURIComponent(o),s=await this.sendRequest(`/${Le}/git/github/${t}/${n}/${i}/${r}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return L$.parse(s)}async getMergeBaseCommitFromGitlab(t,n,o){let r=new URLSearchParams;r.set("base",n),r.set("head",o);let i=encodeURIComponent(t),s=await this.sendRequest(`/${Le}/git/gitlab/${i}/merge-base-commit?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Qw.parse(s)}async getGitlabMergeRequestForBranch(t,n){let o=new URLSearchParams;o.set("branch",n);let r=encodeURIComponent(t),i;try{i=await this.sendRequest(`/${Le}/git/gitlab/${r}/merge-requests?${o.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(s){if(s instanceof Hn&&s.status===404)return;throw s}return o8.parse(i)}async getCommitFromGitlab(t,n){let o=encodeURIComponent(t),r=await this.sendRequest(`/${Le}/git/gitlab/${o}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Qw.parse(r)}async getMergedBranchFromGitlab(t,n,o){let r=encodeURIComponent(n),i=encodeURIComponent(t),s=await this.sendRequest(`/${Le}/git/gitlab/${i}/${r}/${o}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return L$.parse(s)}async getAgentConfig(){let t=await this.sendRequest(`/${Le}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return z$1.record(z$1.string(),z$1.string()).parse(t)}async getOrgSettings(){try{let t=await this.sendRequest(`/${Le}/org-settings`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Z5(t)}catch(t){if(t instanceof Hn&&t.status===404)return this.logger.warn({err:t},"Momentic server does not expose org settings; continuing with local project settings"),db.parse({});throw t}}async getQuarantinedTests(){let t=await this.sendRequest(`/${Le}/quarantine`,{method:"GET"});return Lee.parse(t)}async listQuarantinedTests(t){let n=await this.sendRequest(`/${Le}/quarantine/details`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Nee.parse(n)}async sendExploreSlackNotification(t){await this.sendRequest(`/${Le}/explore/slack-notification`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async recordExplorerSuggestedTests(t){await this.sendRequest(`/${Le}/explore/suggested-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async quarantineTest(t,n,o){await this.sendRequest(`/${Le}/quarantine`,{method:"POST",body:{testId:t.id,testName:t.name,reason:n,...o??{}},retries:3,requestTimeoutMs:1e4});}async unquarantineTest(t,n,o){await this.sendRequest(`/${Le}/quarantine/${t.id}`,{method:"DELETE",body:{testName:t.name,reason:n,...o??{}},retries:3,requestTimeoutMs:1e4});}platformRoute(t){switch(t){case "ANDROID":return "android";case "IOS":return "ios"}}async createAndroidEmulator(t){let n=await this.sendRequest(this.limbarPath("android"),{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return Fee.parse(n)}async extendEmulatorTtl(t,n){let o=Date.now();try{await this.sendRequest(this.limbarPath(`${this.platformRoute(t)}/${n}/keepalive`),{method:"POST",retries:3,requestTimeoutMs:15e3}),this.logger.debug({platform:t,emulatorName:n,durationMs:Date.now()-o},"Extended emulator keepalive");}catch(r){this.logger.warn({err:r,platform:t,emulatorName:n,durationMs:Date.now()-o},"Failed to extend emulator keepalive");}}async generateAssetUploadUrl({channel:t,tag:n,alias:o,md5:r,platform:i}){let s={channel:t,tag:n,alias:o,md5:r},a=await this.sendRequest(this.limbarPath(`${this.platformRoute(i)}/upload-url`),{method:"POST",retries:3,body:s,requestTimeoutMs:15e3,logResponse:true});return Uee.parse(a)}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 Hee.parse(t)}async getLimbarAssetDownloadUrl(t,n,o){let r=await this.sendRequest(this.limbarPath(`assets/${t}/${n}/${this.platformRoute(o)}/download-url`),{method:"GET",retries:2,requestTimeoutMs:3e4});return jee.parse(r)}async deleteAsset(t,n,o){await this.sendRequest(this.limbarPath(`assets/${t}/${n}/${this.platformRoute(o)}`),{method:"DELETE",retries:3,requestTimeoutMs:1e4});}async createIosEmulator(t){let n=await this.sendRequest(this.limbarPath("ios"),{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return Bee.parse(n)}async deleteIosEmulator(t){await this.sendRequest(this.limbarPath(`ios/${t}`),{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async generateMobileLogcatUploadUrl(t){let n=await this.sendRequest(`/${Le}/logcat/mobile/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return TZ.parse(n)}async generateMcpSessionTraceUploadUrl(t){let n=await this.sendRequest(`/${Le}/mcp/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return XP.parse(n)}};async function my(e){let t=process.versions.node,n=parseInt(t.split(".")[0]);(isNaN(n)||n<18)&&(C.error(`Node.js version 20 or higher is required to run the CLI. Detected: ${process.versions.node}.`),process.exit(1)),C.debug(`Identified node version ${t}`);let o=await e.client.getAuthInfo();return C.debug("Got auth info from API"),o}var Qm=class{apiClient;constructor(t){this.apiClient=t;}async reportBillableEvents(t,n){await this.apiClient.reportBillableEvents(t,n);}};async function Zm({reporter:e,logger:t,feature:n,cached:o,outcome:r,result:i,runId:s,testId:a,testName:l,labels:c,triageTestResults:u=[],sessionId:d,agentInvocationId:m,transactionId:p}){if(n==="triage"&&r===void 0)throw new Error("Triage invocation outcome is required");if(n==="triage"&&(!d||!m))throw new Error("Triage invocation IDs are required");if(n!=="triage"&&u.length>0)throw new Error("Only triage invocations can report test outcomes");let h=new Date().toISOString(),g=new Set(u.map(v=>v.outcome)),f=r;i==="failure"&&(f="error");let y={cached:o,sessionId:d,agentInvocationId:m},S=QP.parse({...y,runId:s,testId:a,testName:l,aiFeature:n,outcome:f,labels:c,hasFixedTest:g.has("fixed"),hasCannotFixTest:g.has("cannot-fix"),hasNoFixNeededTest:g.has("no-fix-needed")}),b=[{event:"ai-agent-invocation",timestamp:h,transactionId:p,properties:S},...u.map(v=>({event:"ai-triage-test-result",timestamp:h,transactionId:`${p}:test-result:${v.testId}`,properties:QP.parse({...y,runId:v.runId,testId:v.testId,testName:v.testName,aiFeature:"triage",outcome:v.outcome,labels:v.labels})}))];try{await e.reportBillableEvents(t,b);}catch(v){t.warn({err:v,feature:n,cached:o,outcome:f},"Failed to report AI agent invocation");}}var ep=class extends ua{generator;constructor(t,n){super(t),this.generator=n;}async runTemplateMatching(t,n={}){let o=await this.sendRequest(`/${Le}/web-agent/template-matching`,{method:"POST",body:t,signal:n?.signal});return XX.parse(o)}async constructIframeRegex(t,n={}){return this.generator.getIframeRegex(t,{abortSignal:n.signal,loggerTags:n.loggerTags})}};var VT=class{constructor(t,n){this.client=t;this.orgId=n;}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let t=this.getApiServerUrl();return Bb(t)}async acquireCacheLock(t,n){return this.client.acquireCacheLock(t,n)}async createOnDemandScreenshot(t,n,o){let{apiServerUrl:r}=await this.client.uploadOnDemandScreenshot({id:t,screenshot:n.toString("base64"),contentType:o});return {apiServerUrl:r,appServerUrl:`${this.getAppServerUrl()}/api/on-demand-screenshots/${t}`,universalHandle:{id:t,contentType:o}}}async fetchOnDemandScreenshot(t){return this.client.fetchOnDemandScreenshot(t.id)}async releaseCacheLock(t){return this.client.releaseCacheLock(t)}async deleteCacheResult(t){return this.client.deleteCacheResult(t)}async setCacheResult(t){return this.client.setCacheResult(t)}async getCacheResult(t){return this.client.getCacheResult(t)}fetchIconKnowledgeBase(t){return this.client.fetchIconKnowledgeBase(t)}saveNewIcons(t,n){return this.client.saveNewIcons(t,n)}};var RZe="x-momentic-internal-api-endpoint-secret",qk=class extends Nt{internalHeaders;constructor({internalApiSecret:t,...n}){super(n),this.internalHeaders=t?{[RZe]:t}:{},t&&C.addRedactedValue(t);}async getRunExport(t){let n=await this.sendRequest(`/internal/eval/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4,extraHeaders:this.internalHeaders});return JP.parse(n)}async getRunGroupWithRuns(t){try{let n=await this.sendRequest(`/internal/eval/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4,extraHeaders:this.internalHeaders});return tP.parse(n)}catch(n){if(n instanceof Hn&&n.status===404)return null;throw n}}};var tp="v1",xZe=2e3,Lue="sms.lease() and sms.release() are only supported when running tests via the Momentic CLI.",np=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(`/${tp}/tools/sms/send`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):new Error(`Failed to send sms: ${n.message}`)})}async fetchLatestSms(t){return this.httpClient.sendRequest(`/${tp}/tools/sms/fetchLatest`,{method:"POST",body:t}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):n})}async leasePhoneNumber(t){if(!this.supportsLease)throw new Error(Lue);let n=await this.httpClient.sendRequest(`/${tp}/tools/sms/lease`,{method:"POST",body:t??{}}).catch(r=>{throw r instanceof Hn?new Error(r.rawError):new Error(`Failed to lease phone number: ${r.message}`)}),o=IZ.parse(n);return this.activeLeases.set(o.phoneNumber,{leaseToken:o.leaseToken}),o}async releasePhoneNumber(t){if(!this.supportsLease)throw new Error(Lue);return this.activeLeases.delete(t.phoneNumber),this.httpClient.sendRequest(`/${tp}/tools/sms/release`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):new Error(`Failed to release phone number: ${n.message}`)})}async dispose(){let t=[...this.activeLeases.entries()];this.activeLeases.clear(),await Promise.allSettled(t.map(([n,{leaseToken:o}])=>ge(this.httpClient.sendRequest(`/${tp}/tools/sms/release`,{method:"POST",body:{phoneNumber:n,leaseToken:o}}),{milliseconds:xZe,fallback:()=>{}})));}async sendEmail(t){return this.httpClient.sendRequest(`/${tp}/tools/email/send`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):new Error(`Failed to send email: ${n.message}`)})}async fetchAllEmails(t){return this.httpClient.sendRequest(`/${tp}/tools/email/fetchAll`,{method:"POST",body:t}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):new Error(`Failed to fetch all emails: ${n.message}`)})}async fetchLatestEmail(t){return this.httpClient.sendRequest(`/${tp}/tools/email/fetchLatest`,{method:"POST",body:t}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):new Error(`Failed to fetch latest emails: ${n.message}`)})}async createEmail(){let t=await this.httpClient.sendRequest(`/${tp}/tools/email/create`,{method:"POST",body:{}}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):new Error(`Failed to create email inbox: ${n.message}`)});return xZ.parse(t)}};var WT=class{constructor(t){this.client=t;}async uploadResultsArchive(t){let{runGroupId:n,archivePath:o,persist:r}=t,{uploadUrl:i,id:s}=await this.client.generateTestResultsUploadUrl(),a=await Wk(i,"application/zip",o);if(!a.ok)throw new Error(`Failed to upload test results: ${await a.text()}`);let{runGroupId:l}=await this.client.startProcessingResultsUpload(s,{resultType:"run",runGroupId:n,persist:r});return l}async uploadExploreArchive(t){let{exploreRunId:n,metadata:o,archivePath:r,videos:i}=t,{uploadUrl:s,videoUploadUrls:a}=await this.client.startExploreTraceUpload({exploreRunId:n,metadata:o,videoAssets:i?.map(c=>c.name)});for(let c of i??[]){let u=a?.[c.name];if(!u)throw new Error(`Missing upload URL for video asset ${c.name}`);let d=await Wk(u,c.contentType,c.path);if(!d.ok)throw new Error(`Failed to upload explore video ${c.name}: ${await d.text()}`)}let l=await Wk(s,"application/zip",r);if(!l.ok)throw new Error(`Failed to upload explore results: ${await l.text()}`)}};function op({logger:e,orgId:t,client:n,gitMetadata:o,regenerateCache:r,alwaysSaveCache:i,noCache:s,isolateCachesByEnvironment:a=false,bustOldestCachePercentage:l}){return s?new iO:new t2(e,t,n,o,{regenerateCache:r,alwaysSaveCache:i,bustOldestCachePercentage:l,isolateCachesByEnvironment:a})}var t2=class{constructor(t,n,o,r,i){this.orgId=n;this.client=o;let{regenerateCache:s,alwaysSaveCache:a,bustOldestCachePercentage:l,isolateCachesByEnvironment:c}=i,{gitBranchName:u,gitProtectedBranches:d}=r;t.info({options:i,gitBranchName:u,gitProtectedBranches:d},"Cache storage initialization options"),this.cacheHeaders=YP(r),this.isolateCachesByEnvironment=c,this.readCaches=!s;let m=u&&d.includes(u);a||!m?this.writeCaches=true:this.writeCaches=false,m||(this.bustOldestCachePercentage=l);}cacheHeaders;readCaches;writeCaches;isolateCachesByEnvironment;bustOldestCachePercentage;async saveStepCacheEntries({entries:t,logger:n}){if(!this.writeCaches){n.debug("Skipping cache storage because branch is protected");return}try{await this.client.updateStepCaches({entries:U$(t,this.isolateCachesByEnvironment)},this.cacheHeaders);}catch(o){n.error({err:o},"Failed to save step cache entries");}}async saveSnapshotCacheEntries({entries:t,logger:n}){if(t.length!==0)try{await this.client.updateSnapshotCaches({entries:U$(t,this.isolateCachesByEnvironment)},this.cacheHeaders);}catch(o){n.error({err:o},"Failed to save snapshot cache entries");}}async deleteStepCacheEntry({logger:t,testId:n,key:o,environment:r}){await this.client.deleteStepCacheEntry({testId:n,key:o,environment:this.isolateCachesByEnvironment?r:void 0},this.cacheHeaders),t.debug({testId:n,key:o},"Deleted step cache entry");}async resolveStepCacheEntries(t){let{restoredIdentity:n,restoredStepLists:o}=await this.restoreAndPersistStepIdentity(t);if(!this.readCaches)return t.logger.debug("Skipping cache resolution because of regenerate flag"),{restoredStepLists:o};let{steps:r,beforeSteps:i,afterSteps:s}=t.stepLists,a=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(a).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 a[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,s]){if(!d)continue;let m=Mh({steps:d,stepCacheEntries:a,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);}n&&PZe({cacheResolutionStats:l,logger:t.logger,restoredIdentity:n,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.56.1"];if(dn.increment("step_cache_resolution",l.cacheKeysHit.length,[...c,"outcome:hit"]),dn.increment("step_cache_resolution",l.cacheKeysMissed.length,[...c,"outcome:miss"]),dn.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:o};let{cachesToSave:u}=await Co({stepLists:t.stepLists,useSnapshotIdentityCache:false,cacheCreationParams:{environment:t.environment,testId:t.testId,orgId:this.orgId}});return this.saveStepCacheEntries({entries:u,logger:t.logger}),{restoredStepLists:o}}async restoreAndPersistStepIdentity(t){let n=t.useSnapshotIdentityCache?await this.tryRestoreStepIdsFromSnapshot(t):void 0;if(!n)return {restoredIdentity:void 0,restoredStepLists:void 0};let{snapshotCachesToSave:o}=await Co({stepLists:t.stepLists,useSnapshotIdentityCache:true,cacheCreationParams:{environment:t.environment,testId:t.testId,orgId:this.orgId}});return this.saveSnapshotCacheEntries({entries:o,logger:t.logger}),{restoredIdentity:n,restoredStepLists:structuredClone(n.stepLists)}}async tryRestoreStepIdsFromSnapshot(t){try{return await this.restoreStepIdsFromSnapshot(t)}catch(n){t.logger.warn({err:n,testId:t.testId},"Failed to restore step ids from snapshot cache; proceeding without identity cache"),dn.increment("step_cache_resolution",1,["platform:web","source:local","fileFormat:v2","snapshotIdentityCache:true",`orgId:${this.orgId}`,"cliVersion:3.56.1","outcome:identity_restore_error"]);return}}async restoreStepIdsFromSnapshot(t){let{logger:n,testId:o}=t,r=await this.client.getSnapshotCacheForTest({testId:o,environment:this.isolateCachesByEnvironment?t.environment:void 0},this.cacheHeaders);for(let a of r){if(!a.schema_version)continue;let l=Wj(a.schema_version),c=Wj(Ct);if(l&&c&&l.compare(c)>0){n.warn(`Snapshot cache for test ${o} was written at schema version ${a.schema_version}, which is newer than this CLI's latest (${Ct}). Please update your momentic package version. Skipping identity restoration from snapshot cache.`);return}}let i=PM({entries:r,orgId:this.orgId,testId:o,logger:n}),s=_M({currentStepLists:t.stepLists,previousSnapshot:i.testSnapshot,previousModuleSnapshots:i.moduleSnapshots,generateUuid:randomUUID});return t.stepLists.steps.splice(0,t.stepLists.steps.length,...s.stepLists.steps),t.stepLists.beforeSteps=s.stepLists.beforeSteps,t.stepLists.afterSteps=s.stepLists.afterSteps,n.debug({snapshotEntries:r.length,testSnapshotHit:!!i.testSnapshot,moduleSnapshots:Array.from(i.moduleSnapshots.keys()),mintedSteps:s.stats.mintedSteps,stats:s.stats,moduleRestoreResults:s.moduleRestoreResults.map(({moduleId:a,snapshotHit:l,stats:c})=>({moduleId:a,snapshotHit:l,stats:c}))},"Restored step ids from snapshot cache"),s}};function PZe({cacheResolutionStats:e,logger:t,restoredIdentity:n,schemaVersion:o,testId:r}){let i=e.cacheKeysHit.length,s=e.cacheKeysMissed.length,a=i+s,l=a>0?Math.round(s/a*1e3)/10:0,c=n.stats.matchedSteps+n.stats.mintedSteps,u=c>0?Math.round(n.stats.mintedSteps/c*1e3)/10:0,d=n.moduleRestoreResults.filter(({snapshotHit:g,stats:f})=>!g||f.mintedSteps>0||f.bustedConditionals>0).slice(0,10).map(({moduleId:g,snapshotHit:f,stats:y})=>({moduleId:g,snapshotHit:f,stats:y})),m=n.stats.mintedSteps>=5&&u>=25,p=m||n.stats.bustedConditionals>0||d.some(({stats:g})=>g.mintedSteps>=5||g.bustedConditionals>0),h={cacheHits:i,cacheMissRate:l,cacheMisses:s,cacheMissSamples:e.cacheMissSamples.slice(0,10),hasHighMintRate:m,identityMintRate:u,moduleIdentityIssueCount:d.length,moduleIdentityIssues:d,schemaVersion:o,snapshotIdentityCache:true,stepIdentityStats:n.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 ha({project:e,apiClient:t,classificationOverrides:n}){let{classification:o,healing:r,explore:i}=(await OZe(t))?.ai??{},s=kZe({flags:n,config:e.config.ai?.classification,cloudCategories:o?.categories}),a={...e.config.ai};return n?.disabled&&(a.aiFailureAnalysis=false),{...e,config:{...e.config,ai:{...a,classification:s,healing:r,explore:i}}}}async function OZe(e){try{return await e.getOrgSettings()}catch(t){if(!MZe(t))throw t;C.warn({err:t},"Could not load organization settings from Momentic. Continuing with local project configuration.");return}}function MZe(e){return e instanceof Hn?e.status>=500:e instanceof Ua||gR(e)}function kZe({flags:e,config:t,cloudCategories:n}){if(!(!t&&!n))return {enabled:e?.disabled?false:t?.enabled??false,overrideExitCode:e?.overrideExitCode??t?.overrideExitCode??yJ,categories:n??Ca}}var Nue="golden/visual-diff",Due="reports",uu="test-results";var LZe=z$1.object({width:z$1.number(),height:z$1.number()}),KT=class{defaultGoldenScreenshotDir;regenerateGoldenFiles;apiClient;constructor(t,n,o){let r=mo__default.join(t.rootDir,t.config.goldenFileDir??Nue);this.defaultGoldenScreenshotDir=r,this.regenerateGoldenFiles=o,this.apiClient=n;}async prepareGoldenScreenshotForComparison(t,n,o){if(lX(n.screenshot?.data))return {buffer:(await this.apiClient.fetchOnDemandScreenshot(n.screenshot.data.id)).data,width:n.screenshot.width,height:n.screenshot.height};if(n.screenshot?.data?.startsWith("https://")){let s=await fetch(n.screenshot.data);return {buffer:Buffer.from(await s.arrayBuffer()),width:n.screenshot.width,height:n.screenshot.height}}let r=n.screenshot?.data;r||(r=mo__default.join(this.defaultGoldenScreenshotDir,`${n.id}.jpg`));let i=`${r}.metadata.json`;if(this.regenerateGoldenFiles)return oo__default.mkdirSync(mo__default.dirname(r),{recursive:true}),oo__default.writeFileSync(r,o.buffer),oo__default.writeFileSync(i,JSON.stringify({width:o.width,height:o.height})),{buffer:Buffer.from(o.buffer),width:o.width,height:o.height};if(oo__default.existsSync(r)){let s=oo__default.readFileSync(r),a=LZe.parse(JSON.parse(oo__default.readFileSync(i,"utf-8")));return {buffer:s,width:a.width,height:a.height}}else throw new oe("UserConfigurationError",`Cannot execute visual diff without a saved baseline screenshot at ${r}`)}};var Bue=3e3,DZe=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 FZe(){let e={};for(let[t,n]of Object.entries(process.env))n!==void 0&&!DZe.has(t.toLowerCase())&&(e[t]=n);return e.LC_ALL="C",e.LANG="C",e}var BZe=FZe();function Cd(e,t){return t?.throwIfAborted(),c2({baseDir:e??process.cwd(),abort:t,unsafe:{allowUnsafeAskPass:true,allowUnsafeGitProxy:true,allowUnsafeSshCommand:true}}).env(BZe)}var mi=Cd();async function r2(e,t,n){try{return await Cd(e,n).revparse(t)}catch(o){if(n?.throwIfAborted(),Gue(o))return;throw o}}async function Ac(e,t){return r2(e,["--show-toplevel"],t)}async function YT(e){let t=await Ac(e);if(!t)return;let n=mo__default.relative(t,e);if(!(n.startsWith("..")||mo__default.isAbsolute(n)))return n===""?".":n}async function Uue(e){return r2(e,["HEAD"])}async function Hue(e){try{return (await Cd(e).revparse(["--is-shallow-repository"])).trim()==="true"}catch{return false}}async function jue(e){return r2(e,["--abbrev-ref","HEAD"])}async function JT({cwd:e,base:t,head:n,logger:o,abortSignal:r}){try{let i=(await Cd(e,r).raw(["merge-base",t,n])).trim();if(i.length>0)return i;o.warn({base:t,head:n},"git merge-base returned empty");}catch(i){r?.throwIfAborted(),o.warn({err:i,base:t,head:n},"git merge-base failed");}}function i2(){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 XT({client:e,repository:t,base:n,head:o,logger:r,abortSignal:i}){let s=yr(t);if(s)try{i?.throwIfAborted();let a=await e.compareCommitsFromGithub({owner:s.owner,repo:s.repo,base:n,head:o},i);return a.commits.length===0?void 0:a}catch(a){i?.throwIfAborted(),r.warn({err:a,repository:t,base:n,head:o},"remote commit compare failed");return}}async function Tc(e){let{logger:t,operation:n,fn:o,context:r}=e,i=Date.now();try{return await o()}finally{let s=Date.now()-i;s>Bue&&!process.env.CI&&t.warn({operation:n,durationMs:s,thresholdMs:Bue,...r??{}},"[timing] slow git metadata operation");}}function Rd(e){if(e)try{let t=new Date(e);return isNaN(t.getTime())?void 0:t}catch{return}}async function $ue(e,t){let n=await Oo(e,t.raw(["config","--null","--list"])),o={};if(!n)return o;for(let r of n.split("\0")){let i=r.indexOf(`
|
|
331
|
+
`);}function cZe(e){let t=e.reasoning,n=e.include;return {model:e.model,service_tier:e.service_tier,prompt_cache_key:e.prompt_cache_key,include:Array.isArray(n)?n.filter(o=>typeof o=="string"):void 0,reasoning:fue(t)?{effort:t.effort}:void 0,hasInput:!!e.input,toolsCount:Array.isArray(e.tools)?e.tools.length:0}}function fue(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function uZe(e){return typeof e=="string"?e:e instanceof URL?e.toString():e.url}var dZe=3e5;function Vk(e){let t=e.split("/").at(-1)??e;return t.startsWith("grok-4.5")||t.startsWith("grok-4.6")}var mZe=z$1.object({input:z$1.array(z$1.custom()),instructions:z$1.unknown().optional(),model:z$1.string(),tools:z$1.unknown().optional()}).passthrough(),pZe=z$1.object({output:z$1.array(z$1.object({type:z$1.literal("compaction"),id:z$1.string(),encrypted_content:z$1.string()})).min(1),usage:z$1.object({dropped_message_count:z$1.number().int().nonnegative(),input_tokens:z$1.number().int().nonnegative(),output_tokens:z$1.number().int().nonnegative()})});function yue(e={}){let t=e.compactThreshold??dZe,n=zk(e.requestOptions),o;return async(r,i)=>{let s=i?.method??(r instanceof Request?r.method:"GET"),a=new URL(r instanceof Request?r.url:r.toString());if(s.toUpperCase()!=="POST"||!a.pathname.endsWith("/responses"))return n(r,i);let l=typeof i?.body=="string"?i.body:void 0;if(!l)return n(r,i);let c;try{c=JSON.parse(l);}catch{return n(r,i)}let u=mZe.safeParse(c);if(!u.success)return n(r,i);let d=u.data.input,m=o?Uk({currentInput:d,previousInput:o.boundaryInput,compactionItem:o.item}):void 0;o&&!m&&(o=void 0);let p=m??d;if((m&&o?o.outputTokens:0)+Rt({input:m?m.slice(1):d,instructions:u.data.instructions,tools:u.data.tools})>=t){let g=await hZe({url:a,init:i,model:u.data.model,providerInput:p});if(g){let f=g.output[0];o={boundaryInput:d,item:f,outputTokens:g.usage.output_tokens},p=[f],e.onCompaction?.({compactThreshold:t,droppedMessageCount:g.usage.dropped_message_count,inputTokens:g.usage.input_tokens,itemId:f.id,outputTokens:g.usage.output_tokens});}}return n(r,{...i,body:JSON.stringify({...u.data,input:p,previous_response_id:void 0})})}}async function hZe({url:e,init:t,model:n,providerInput:o}){e.pathname=`${e.pathname.replace(/\/$/,"")}/compact`;let r=await fetch(e,{...t,body:JSON.stringify({input:o,model:n})});if(!r.ok)return;let i;try{i=await r.json();}catch{return}let s=pZe.safeParse(i);return s.success?s.data:void 0}var yZe="MOMENTIC_OPENAI_RESPONSES_WEBSOCKET_COMPACT_THRESHOLD";function Zh(e){let{apiKey:t,sessionId:n,loggerTags:o,runner:r,parentTraceId:i}=e,s={Authorization:`Bearer ${t}`,[WP]:ny,...n&&{[tee]:n},...r&&{[qP]:r},...i&&{[oee]:i},...o&&{[KP]:JSON.stringify(o)}};for(let[a,l]of Object.entries(s))s[a]=l.replace(/[\u0100-\uffff]/g,c=>"\\u"+c.charCodeAt(0).toString(16).padStart(4,"0"));return s}var Sue="bedrock/",bue="azure/",Tue="anthropic/",Aue=e=>t=>{let n=Zh(e),o=t,r=`${e.baseUrl}/v1/llm/anthropic/${encodeURIComponent(t)}`;return t.startsWith(Sue)?r=`${e.baseUrl}/v1/llm/provider/bedrock/anthropic/${encodeURIComponent(t.slice(Sue.length))}`:t.startsWith(bue)?r=`${e.baseUrl}/v1/llm/provider/foundry/anthropic/${encodeURIComponent(t.slice(bue.length))}`:t.startsWith(Tue)&&(o=t.slice(Tue.length),r=`${e.baseUrl}/v1/llm/provider/anthropic/${encodeURIComponent(o)}`),createAnthropic({baseURL:r,headers:n,apiKey:e.apiKey})(o)},Eue=e=>t=>{let n=Zh(e),o=e.useOpenAIResponsesWebSocket??false,r=o?e.openAIResponsesWebSocketCompactThreshold??SZe(process.env[yZe])??$k(t):e.openAIResponsesCompactThreshold??$k(t),i=s=>e.onOpenAINativeCompaction?.({...s,model:t});return Q1(HT({baseURL:`${e.baseUrl}/v1/llm/provider/openai/${t}`,headers:n,apiKey:e.apiKey,fetch:o?pue({compactThreshold:r,onCompaction:i}):Y1({compactThreshold:r,onCompaction:i})})(t))},vue=e=>t=>{let n=Zh(e),o=zk(e.xai);return Vk(t)&&(o=yue({requestOptions:e.xai,onCompaction:r=>e.onXAINativeCompaction?.({...r,model:t})})),createXai({baseURL:`${e.baseUrl}/v1/llm/provider/xai/${t}`,headers:n,apiKey:e.apiKey,fetch:o}).responses(t)},wue=e=>t=>{let n=Zh(e);return Q1(HT({baseURL:`${e.baseUrl}/v1/llm/provider/azure/${t}`,headers:n,apiKey:e.apiKey,fetch:Y1({compactThreshold:e.openAIResponsesCompactThreshold??$k(t),onCompaction:o=>e.onOpenAINativeCompaction?.({...o,model:t})})})(t))};function Rue(e){return t=>n=>{let o=Zh(t);return HT({baseURL:`${t.baseUrl}/v1/llm/provider/${e}/${n}`,headers:o,apiKey:t.apiKey}).chat(n)}}var Cue=Rue("azure/deepseek"),Iue=Rue("azure/kimi"),xue=e=>t=>{let n=Zh(e);return HT({baseURL:`${e.baseUrl}/v1/llm/provider/fireworks`,headers:n,apiKey:e.apiKey}).chat(t)},_ue=e=>t=>{let n=Zh(e);return K1({baseURL:`${e.baseUrl}/v1/llm/provider/openrouter`,headers:n,apiKey:e.apiKey,compatibility:"strict"}).chat(t)},Pue=e=>t=>{let n=Zh(e);return y1({baseURL:`${e.baseUrl}/v1/llm/provider/vertex`,headers:n,apiKey:e.apiKey})(t)};function SZe(e){if(!e)return;let t=Number.parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}function Oue(e){let t=pt.safeParse(e[w$]);return delete e[w$],t.success?t.data:void 0}var Cr=class extends ua{agentConfig;apiPathPrefix;constructor(t,n){let o={...Kp,...t};r_(o),super(n),this.apiPathPrefix=n.apiPathPrefix??`/${Le}`,this.agentConfig=o;}getAgentConfig(){return this.agentConfig}async compactConversationNonNative(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/llm/compact`,{method:"POST",body:{...AZe(t),sessionId:n.sessionId,parentTraceId:n.parentTraceId},signal:n.abortSignal,retries:1,requestTimeoutMs:15e3,extraHeaders:{[KP]:JSON.stringify(Z1(n))}});return R5.parse(o)}async rankChunksWithAi(t,n){let o={...t,loggerTags:n.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/recommend-chunks-ai`,{method:"POST",body:o,signal:n.abortSignal});return TQ.parse(r)}async rankChunksWithRag(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/recommend-chunks`,{method:"POST",body:{cliVersion:ny,...t},signal:n.abortSignal});return bQ.parse(o)}async getScreenshotFromS3(t){let n=await this.sendRequest(`${this.apiPathPrefix}/s3/visual-diff-screenshot`,{method:"POST",body:{url:t}});return z$1.string().parse(n)}async getElementLocation(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags,useMemory:n.useMemory,cacheBustReason:n.cacheBustReason,effort:n.effort,agentConfigVersion:this.agentConfig?.locator},r={},i=()=>{let a=Oue(r);a&&n.onEffectiveEffort?.(a);},s=await this.sendRequest(`${this.apiPathPrefix}/web-agent/locate-element`,{method:"POST",body:o,signal:n.abortSignal,responseHeadersObject:r,onFailedRequest:i});return i(),see.parse(s)}async getAssertionResult(t,n){let o={...t,disableCache:!!n.disableCache,useConsensus:!!n.useConsensus,attemptNumber:n.attemptNumber,loggerTags:n.loggerTags,useMemory:n.useMemory,effort:n.effort,agentConfigVersion:this.agentConfig?.assertion},r={},i=()=>{let a=Oue(r);a&&n.onEffectiveEffort?.(a);},s=await this.sendRequest(`${this.apiPathPrefix}/web-agent/assertion`,{method:"POST",body:o,signal:n.abortSignal,responseHeadersObject:r,onFailedRequest:i});return i(),R$.parse(s)}async getLintStepResult(t,n){let o={...t,disableCache:!!n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/lint/step`,{method:"POST",body:o,signal:n.abortSignal});return iee.parse(r)}async getVisualAssertionResult(t,n){let o={...t,disableCache:!!n.disableCache,useConsensus:!!n.useConsensus,attemptNumber:n.attemptNumber,loggerTags:n.loggerTags,useMemory:n.useMemory,agentConfigVersion:this.agentConfig?.["visual-assertion"]},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/visual-assertion`,{method:"POST",body:o,signal:n.abortSignal});return R$.parse(r)}async getAiActionCommand(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/next-command-dynamic`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return ree.parse(o)}async getMultiturnAiActionCommand(t,n){return await this.sendRequest(`${this.apiPathPrefix}/web-agent/ai-action/next-command`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal})}async getMultiturnAiActionEvaluation(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/ai-action/evaluate`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return kH.parse(o)}async getReverseMappedDescription(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/reverse-mapped-description`,{method:"POST",body:{...t,disableCache:n.disableCache,loggerTags:n.loggerTags},signal:n.abortSignal});return aee.parse(o)}async getTextExtraction(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags,agentConfigVersion:this.agentConfig?.["text-extraction"]},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/text-extraction`,{method:"POST",body:o,signal:n.abortSignal});return MH.parse(r)}async getPageSummary(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/page-summary`,{method:"POST",body:o,signal:n.abortSignal});return v5.parse(r)}async getSmartWaitingDecision(t,n){let o={...t,disableCache:n.disableCache,loggerTags:n.loggerTags},r=await this.sendRequest(`${this.apiPathPrefix}/web-agent/smart-waiting`,{method:"POST",body:o,signal:n.abortSignal});return w5.parse(r)}async getKnowledgeSuggestion(t,n){throw new Error("Knowledge suggestion generation is only available on InternalGenerator")}async getTestResultClassification(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/result-classification`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return Yx.parse(o)}async getExtractedKeywords(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/extract-keywords`,{method:"POST",body:t,signal:n.abortSignal});return kQ.parse(o)}async getAutohealingProposal(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/autoheal-section`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return S5.parse(o)}async getFailureRecoveryProposal(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return A5.parse(o)}async getFailureRecoveryPlan(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery-plan`,{method:"POST",body:{...t,loggerTags:n.loggerTags,agentConfigVersion:this.agentConfig?.["failure-recovery"]},signal:n.abortSignal});return T5.parse(o)}async getFailureRecoveryMemory(t,n){try{let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery-memory`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});return BZ.parse(o)}catch(o){return n.logger.warn({err:o},"Failed to read failure recovery memory"),{failureCount:0}}}async recordFailureRecoveryOutcome(t,n){try{await this.sendRequest(`${this.apiPathPrefix}/web-agent/failure-recovery-memory`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:5e3});}catch(o){n.logger.warn({err:o},"Failed to record failure recovery outcome");}}async getOrgLevelFailureRate(t,n){let o=t.environment?`?environment=${encodeURIComponent(t.environment)}`:"";try{let r=await this.sendRequest(`${this.apiPathPrefix}/org-level-failure-rate${o}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return oO.parse(r)}catch(r){return n.logger.warn({err:r},"Failed to read org-level failure rate"),{skip:false,failed:0,total:0}}}async getIframeRegex(t,n){let o=await this.sendRequest(`${this.apiPathPrefix}/web-agent/iframe-regex`,{method:"POST",body:{...t,loggerTags:n.loggerTags},signal:n.abortSignal});return JX.parse(o)}createAgentTrace(t){let n=randomUUID(),{completionType:o,runId:r,orgId:i,logger:s}=t,a=s.bindings().sessionId,l=async c=>{try{await this.sendRequest(`${this.apiPathPrefix}/traces/result-classification`,{method:"POST",body:{id:n,completionType:o,input:{runId:r},sessionId:a,...c,metadata:{orgId:i,runId:r,...c.metadata}}});}catch(u){s.warn({err:u},"Failed to upsert result classification trace");}};return l({}),{id:n,update:l}}getAnthropicModelFactory(t){return this.buildModelFactory(Aue,t)}getModelProviderCandidate(t,n){return t.startsWith("bedrock/")?{id:"anthropic-bedrock",model:this.getAnthropicBedrockModelFactory(n)(t.slice(8))}:t.startsWith("azure/claude-")?{id:"anthropic-foundry",model:this.getAnthropicFoundryModelFactory(n)(t.slice(6))}:t.startsWith("anthropic/")?{id:"anthropic",model:this.getAnthropicModelFactory(n)(t)}:t.startsWith("openrouter/")?{id:"openrouter",model:this.getOpenRouterModelFactory(n)(t.slice(11))}:t.startsWith("fireworks/")?{id:"fireworks",model:this.getFireworksModelFactory(n)(t)}:t.startsWith("xai/")?{id:"xai",model:this.getXAIModelFactory(n)(t.slice(4))}:t.startsWith("vertex/gemini-")?{id:"google-vertex",model:this.getVertexGeminiModelFactory(n)(t.slice(7))}:t.startsWith("azure/")?{id:"azure",model:this.getAzureOpenAIModelFactory(n)(t.slice(6))}:t.startsWith("claude-")?{id:"anthropic",model:this.getAnthropicModelFactory(n)(t)}:{id:"openai",model:this.getOpenAIModelFactory(n)(t)}}getAnthropicBedrockModelFactory(t){let n=this.getAnthropicModelFactory(t);return o=>n(`bedrock/${o}`)}getAnthropicFoundryModelFactory(t){let n=this.getAnthropicModelFactory(t);return o=>n(`azure/${o}`)}getOpenAIModelFactory(t){let{sessionId:n,logger:o,streamType:r,useOpenAIResponsesWebSocket:i,parentTraceId:s}=t;return Eue({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:Z1(t),sessionId:n,useOpenAIResponsesWebSocket:i,runner:this.runner,parentTraceId:s,onOpenAINativeCompaction:a=>{o.info({promptType:r,nativeCompaction:a},"Native conversation compaction completed");}})}getXAIModelFactory(t){let{logger:n,streamType:o}=t;return this.buildModelFactory(vue,t,{onXAINativeCompaction:r=>{n.info({promptType:o,nativeCompaction:r},"Native conversation compaction completed");}})}getOpenRouterModelFactory(t){return this.buildModelFactory(_ue,t)}getAzureOpenAIModelFactory(t){let{logger:n,streamType:o}=t;return this.buildModelFactory(wue,t,{onOpenAINativeCompaction:r=>{n.info({promptType:o,nativeCompaction:r},"Native conversation compaction completed");}})}getAzureDeepSeekModelFactory(t){return this.buildModelFactory(Cue,t)}getAzureKimiModelFactory(t){return this.buildModelFactory(Iue,t)}getFireworksModelFactory(t){return this.buildModelFactory(xue,t)}getVertexGeminiModelFactory(t){return this.buildModelFactory(Pue,t)}buildModelFactory(t,n,o){let{sessionId:r,parentTraceId:i,xai:s}=n;return t({baseUrl:this.baseUrl,apiKey:this.apiKey,loggerTags:Z1(n),sessionId:r,runner:this.runner,parentTraceId:i,xai:s,...o})}};function Z1(e){return {...fn(e.logger),agentInvocationId:e.agentInvocationId,promptType:e.streamType}}function AZe(e){return {...e,messages:e.messages.map(e2)}}function e2(e){return e instanceof Uint8Array||e instanceof ArrayBuffer?Buffer.from(e).toString("base64"):e instanceof URL?e.toString():Array.isArray(e)?e.map(e2):typeof e!="object"||e===null?e:Object.fromEntries(Object.entries(e).map(([t,n])=>[t,e2(n)]))}async function Wk(e,t,n){let{size:o}=await oo__default.promises.stat(n),r=new URL(e),i=t==="application/zip"?AbortSignal.timeout(nM(o)):void 0,s;if(r.protocol==="http:")s=request;else if(r.protocol==="https:")s=request$1;else throw new Error(`Unsupported signed upload URL protocol: ${r.protocol}`);return new Promise((a,l)=>{let c=oo__default.createReadStream(n),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=s(r,{method:"PUT",signal:i,headers:{"Content-Length":o,"Content-Type":t}},f=>{p=!0;let y=m<o,S=f.socket;c.unpipe(d),c.destroy(),!d.destroyed&&!d.writableEnded&&d.end();let b=f.statusCode??500,v=b===204||b===205||b===304;if(y&&b>=200&&b<300&&!v){h=!0,d.destroy(),f.destroy(),S.destroy(),u.then(()=>l(new Error(`Upload server returned ${b} before the request body was fully written.`)));return}let A=[];f.on("data",R=>A.push(R)),f.on("error",g),f.on("end",()=>{if(h)return;h=!0,d.destroy(),y&&S.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=v?null:Buffer.concat(A);u.then(()=>{try{a(new Response(w,{headers:R,status:b,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 kue(e,t,n,o){return fetch(e,{method:"PUT",body:n,signal:o,headers:{"Content-Type":t}})}var wZe=2e3,Nt=class extends ua{apiPathPrefix;constructor(t){super(t),this.apiPathPrefix=t.apiPathPrefix??`/${Le}`;}getAppUrl(){return Bb(this.baseUrl)}limbarPath(t){return `${this.apiPathPrefix}/limbar/${t}`}async getAuthInfo(){let t;try{t=await this.sendRequest(`/${Le}/auth/check`,{method:"GET",retries:10,requestTimeoutMs:5e3});}catch(n){throw n instanceof GR?new ue(`Your Momentic API key was rejected (${n.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:n}):n instanceof Hn?n.status>=400&&n.status<500?new ue(n.rawError,{cause:n}):new Error(`Momentic server error (HTTP ${n.status}). Please try again in a moment.`,{cause:n}):n instanceof ue?n:new Error(`Could not reach Momentic server at ${this.baseUrl}. Check your network connection. If you're on a restricted network (VPN, firewall, or proxy), you may need to whitelist Momentic's servers: https://momentic.ai/docs/environment/authentication#ip-whitelist`,{cause:n})}return Aee.parse(t)}async getFeatureFlags(){let t=await this.sendRequest(`/${Le}/auth/flags`,{method:"GET",retries:1,requestTimeoutMs:5e3});return wee.parse(t)}async getCliAnnouncements(){let t=await this.sendRequest(`/${Le}/announcements`,{method:"GET",retries:1,requestTimeoutMs:5e3});return CZ.parse(t).announcements}async createMoSessionUpload(t,n){let o;try{o=await this.sendRequest(`/${Le}/mo/sessions/${encodeURIComponent(t)}/uploads`,{method:"POST",body:n,retries:3,requestTimeoutMs:15e3});}catch(r){throw r instanceof Hn&&r.status===404?new ue(`Mo session ${t} was not found.`,{cause:r}):r}return M8.parse(o)}async createMoSessionDownload(t,n,o){let r;try{r=await this.sendRequest(`/${Le}/mo/sessions/${encodeURIComponent(t)}/downloads`,{method:"POST",body:n,retries:3,requestTimeoutMs:15e3,signal:o});}catch(i){throw i instanceof Hn&&i.status===404?new ue(i.rawError,{cause:i}):i}return O8.parse(r)}async getLatestProductUpdate(){let t=await this.sendRequest(`/${Le}/product-updates/latest`,{method:"GET",retries:1,requestTimeoutMs:5e3});return Yee.parse(t).update}async getQuotaStatus(){let t=await this.sendRequest(`/${Le}/billing/check-quota`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Eee.parse(t)}async createRemoteBrowserConnection(t){let n=await this.sendRequest(`/${Le}/browsers/connection`,{method:"POST",body:{...t?.envName?{envName:t.envName}:{},...t?.runAttemptId?{runAttemptId:t.runAttemptId}:{},...t?.runGroupId?{runGroupId:t.runGroupId}:{},...t?.testId?{testId:t.testId}:{},...t?.testName?{testName:t.testName}:{},...t?.runId?{runId:t.runId}:{},...t?.attemptedProviders?{attemptedProviders:t.attemptedProviders}:{}},retries:3,requestTimeoutMs:12e4});return Vee.parse(n)}async tryCreateBrowserFleetAccessToken(t,n){let o;try{o=await this.sendRequest(`/${Le}/browsers/token`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4,signal:n});}catch(i){if(i instanceof Hn&&(i.status===400||i.status===404||i.status===409))return null;throw i}let r=zee.parse(o);return "network"in r?r:null}async bulkGetRunStatus(t){let n=await this.sendRequest(`/${Le}/runs/status`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return yee.parse(n)}async getOrgLevelFailureRate(t){let n=t?`?environment=${encodeURIComponent(t)}`:"",o=await this.sendRequest(`/${Le}/org-level-failure-rate${n}`,{method:"GET",retries:1,requestTimeoutMs:5e3});return oO.parse(o)}async recordRunOutcomeForFailureRate(t){await this.sendRequest(`/${Le}/org-level-failure-rate`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});}async getRunExport(t){let n=await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4});return JP.parse(n)}submitInteractiveAgentFeedback(t){try{this.sendRequest(`/${Le}/traces/interactive-agent-feedback`,{method:"POST",body:t,retries:1,requestTimeoutMs:2e3}).catch(n=>{});}catch(n){}return Promise.resolve()}async getResultClassificationCacheEntries(t){let n=await this.sendRequest(`/${Le}/result-classification-cache`,{method:"POST",body:t,retries:1,requestTimeoutMs:1e4});return ite.parse(n)}async createResultClassificationCacheEntries(t){await this.sendRequest(`/${Le}/result-classification-cache`,{method:"PATCH",body:t,retries:1,requestTimeoutMs:1e4});}async createAiTriageMetrics(t){await this.sendRequest(`/${Le}/ai-triage-metrics`,{method:"POST",body:t,retries:1,requestTimeoutMs:3e3});}async getAiTriageExistingFixes(t){let n=await this.sendRequest(`/${Le}/ai-triage-metrics/existing-fixes`,{method:"POST",body:t,retries:1,requestTimeoutMs:5e3});return Q6.parse(n)}async saveRunClassification(t,n){await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/classification`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async uploadRunHealTraceZip(t,n){let o=await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/heal-trace/upload-url`,{method:"POST",retries:3,requestTimeoutMs:1e4}),{uploadUrl:r}=XP.parse(o),i=await kue(r,"application/zip",n,AbortSignal.timeout(nM(n.byteLength)));if(!i.ok)throw new Error(`Failed to upload heal trace: ${await i.text()}`)}async saveRunHealMetadataBatch(t){await this.sendRequest(`/${Le}/runs/heal-metadata`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:1e4});}async getTestYAMLExport(t){let n=await this.sendRequest(`/${Le}/tests/export`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return cee.parse(n)}async updateStepCaches(t,n){await this.sendRequest(`/${Le}/cache`,{method:"PATCH",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async updateSnapshotCaches(t,n){await this.sendRequest(`/${Le}/snapshot-cache`,{method:"PATCH",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getStepCacheForTest(t,n){let o=await this.sendRequest(`/${Le}/cache`,{method:"POST",body:t,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return dee.parse(o)}async getSnapshotCacheForTest(t,n){let o=await this.sendRequest(`/${Le}/snapshot-cache`,{method:"POST",body:t,extraHeaders:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return mee.parse(o)}async deleteStepCacheEntry(t,n){await this.sendRequest(`/${Le}/cache/entry`,{method:"DELETE",body:t,extraHeaders:n,retries:3,requestTimeoutMs:1e4});}async getWebStepCacheMemoryTraces(t){let n=await this.sendRequest(`/${Le}/cache/traces`,{method:"POST",body:t,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return C$.parse(n)}cacheRouteForPlatform(t){switch(t){case "ANDROID":return "android-cache";case "IOS":return "ios-cache"}}async deleteMobileStepCacheEntry({platform:t,body:n,headers:o}){await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t)}/entry`,{method:"DELETE",body:n,extraHeaders:o,retries:3,requestTimeoutMs:1e4});}async getMobileStepCacheMemoryTraces(t,n){let o=await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t)}/traces`,{method:"POST",body:n,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return C$.parse(o)}async updateMobileStepCaches(t){await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t.platform)}`,{method:"PATCH",body:t.body,extraHeaders:t.headers,retries:3,requestTimeoutMs:1e4,initialRetryDelayMs:3e3});}async getMobileStepCacheForTest({platform:t,body:n,headers:o}){let r=await this.sendRequest(`/${Le}/${this.cacheRouteForPlatform(t)}`,{method:"POST",body:n,extraHeaders:o,retries:10,requestTimeoutMs:3e4,initialRetryDelayMs:3e3});return pee[t](r)}async queueTests(t){let n=await this.sendRequest(`/${Le}/tests/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return lee.parse(n)}async uploadScreenshot(t){let n=await this.sendRequest(`/${Le}/screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return Tee.parse(n)}async uploadOnDemandScreenshot(t){return await this.sendRequest(`/${Le}/on-demand-screenshots`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3}),{apiServerUrl:`${this.baseUrl}/${Le}/on-demand-screenshots/${t.id}`}}async fetchOnDemandScreenshot(t){let n={};return {data:await this.sendRequest(`/${Le}/on-demand-screenshots/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:5e3,responseType:"buffer",responseHeadersObject:n}),contentType:n["content-type"]??"image/jpeg"}}async getAllEnvironments(){let t=await this.sendRequest(`/${Le}/environments`,{method:"GET",retries:3,requestTimeoutMs:5e3});return vee.parse(t)}async acquireCacheLock(t,n){let o=await this.sendRequest(`/${Le}/result-cache/lock`,{method:"POST",body:t,signal:n,retries:3,requestTimeoutMs:3e4});return Zee.parse(o)}async releaseCacheLock(t){await this.sendRequest(`/${Le}/result-cache/lock`,{method:"DELETE",body:{key:t},retries:3,requestTimeoutMs:5e3});}async deleteCacheResult(t){await this.sendRequest(`/${Le}/result-cache/entry`,{method:"DELETE",body:t,retries:3,requestTimeoutMs:5e3});}async setCacheResult(t){await this.sendRequest(`/${Le}/result-cache/entry`,{method:"PATCH",body:t,retries:3,requestTimeoutMs:5e3});}async getCacheResult(t){try{return await this.sendRequest(`/${Le}/result-cache/entry`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3})}catch(n){if(n instanceof Error&&n.message.includes("404"))return null;throw n}}async queueSuiteRuns(t){let n=await this.sendRequest(`/${Le}/suites/queue`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});return Iee.parse(n)}async bulkGetRunGroupStatus(t){let n={runGroupIds:t},o=await this.sendRequest(`/${Le}/run-groups/status`,{method:"POST",body:n,retries:3,requestTimeoutMs:5e3});return hQ.array().parse(o)}async getRunGroupWithRuns(t){try{let n=await this.sendRequest(`/${Le}/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return tP.parse(n)}catch(n){if(n instanceof Hn&&n.status===404)return null;throw n}}async getRun(t){try{let n=await this.sendRequest(`/${Le}/runs/${encodeURIComponent(t)}/metadata`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Ys.parse(n)}catch(n){if(n instanceof Hn&&n.status===404)return null;throw n}}async getRunsByCommit(t){let o=[];for(let r=1;;r++){let i=await this.listRuns({gitCommitSha:t,includeFailureDetails:true,limit:100,page:r});if(o.push(...i.runs.map(s=>({...s,test:null}))),i.runs.length<100||r>=i.pageCount)break}return o}async getRunGroupRuns(t){let n=await this.sendRequest(`/${Le}/run-groups/${encodeURIComponent(t)}/runs`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Pee.parse(n)}async updateGithubPRHealRiskSummary(t,n){await this.sendRequest(`/${Le}/run-groups/${encodeURIComponent(t)}/github-pr-heal-risk-summary`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async uploadProposedSteps(t,n){try{await this.sendRequest(`/${Le}/test-fragments/`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});}catch(o){n.error({err:o},"Failed to upload proposed steps");}}async reportBillableEvents(t,n){try{await this.sendRequest(`/${Le}/billing/events`,{method:"POST",body:n,retries:10,requestTimeoutMs:1e4});}catch(o){t.error({err:o},"Failed to report billable event");}}async fetchTestFragment(t){let n=await this.sendRequest(`/${Le}/test-fragments/${t}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return xee.parse(n)}async patchTestFragment(t,n){await this.sendRequest(`/${Le}/test-fragments/${t}`,{method:"PATCH",body:n,retries:3,requestTimeoutMs:1e4});}async getPastTestResults(t,n){let o=await this.sendRequest(`/${Le}/results/tests/${t}`,{method:"POST",body:n,retries:3,requestTimeoutMs:1e4});return _ee.parse(o)}async listRuns(t){let n=await this.sendRequest(`/${Le}/results/runs`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Oee.parse(n)}async generateTestResultsUploadUrl(){let t=await this.sendRequest(`/${Le}/results/uploads`,{method:"POST",retries:3,requestTimeoutMs:1e4});return Mee.parse(t)}async startProcessingResultsUpload(t,n){let o=await this.sendRequest(`/${Le}/results/uploads/${t}/process`,{method:"POST",body:n,retries:3,requestTimeoutMs:1e4});return kee.parse(o)}async startExploreTraceUpload(t){let n=await this.sendRequest(`/${Le}/explore/trace-uploads`,{method:"POST",body:t,retries:3,requestTimeoutMs:3e4});return fte.parse(n)}async fetchIconKnowledgeBase(t){try{let n=await this.sendRequest(`/${Le}/knowledge-base/icons`,{method:"GET",retries:3,requestTimeoutMs:5e3});return lte.parse(n)}catch(n){return t.error({err:n},"Failed to fetch icon knowledge base"),null}}async saveNewIcons(t,n){try{await this.sendRequest(`/${Le}/knowledge-base/icons`,{method:"POST",body:t,retries:3,requestTimeoutMs:5e3});}catch(o){n.error({err:o},"Failed to save new icons to icon knowledge base");}}async retrieveKnowledgeBase({query:t,clientName:n,testId:o,environmentId:r,types:i,agentSubtype:s,limit:a,mode:l,scoreMultiplier:c,scopeBuckets:u,retries:d,signal:m,timeoutMs:p},h){try{let g=await this.sendRequest(`/${Le}/knowledge-base/retrieve`,{method:"POST",body:{query:t,clientName:n,testId:o,environmentId:r,types:i,agentSubtype:s,limit:a,mode:l,scoreMultiplier:c,scopeBuckets:u,timeoutMs:p},retries:d??3,requestTimeoutMs:p===void 0?5e3:p+wZe,signal:m});return N5.parse(g)}catch(g){return h.warn({err:g},"Failed to retrieve from knowledge base"),null}}async createKnowledgeItem(t){let n=await this.sendRequest(`/${Le}/knowledge-base/items`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return $H.parse(n)}async getMergeBaseCommitFromGithub(t,n,o,r){let i=new URLSearchParams;i.set("base",o),i.set("head",r);let s=await this.sendRequest(`/${Le}/git/github/${t}/${n}/merge-base-commit?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Qw.parse(s)}async compareCommitsFromGithub({owner:t,repo:n,base:o,head:r},i){i?.throwIfAborted();let s=new URLSearchParams;s.set("base",o),s.set("head",r);let a=await this.sendRequest(`/${Le}/git/github/${t}/${n}/compare?${s.toString()}`,{signal:i,method:"GET",retries:3,requestTimeoutMs:5e3});return ZZ.parse(a)}async listGithubCommitsForPath({owner:t,repo:n,path:o,ref:r,limit:i}){let s=new URLSearchParams;s.set("path",o),s.set("ref",r),s.set("limit",String(i));let a=await this.sendRequest(`/${Le}/git/github/${t}/${n}/commits?${s.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return e8.parse(a).commits}async getGithubFileContent({owner:t,repo:n,path:o,ref:r}){let i=new URLSearchParams;i.set("path",o),i.set("ref",r);let s=await this.sendRequest(`/${Le}/git/github/${t}/${n}/contents?${i.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return t8.parse(s).content??void 0}async getGithubBranchMetadata(t,n,o){let r=new URLSearchParams;r.set("branch",o);let i=await this.sendRequest(`/${Le}/git/github/${t}/${n}/branch-metadata?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return n8.parse(i)}async createGithubPullRequest(t,n,o){let r=await this.sendRequest(`/${Le}/git/github/${t}/${n}/pull-requests`,{method:"POST",body:o,retries:3,requestTimeoutMs:6e4});return GZ.parse(r)}async createGithubCommit(t,n,o){let r=await this.sendRequest(`/${Le}/git/github/${t}/${n}/commits`,{method:"POST",body:o,retries:3,requestTimeoutMs:6e4});return zZ.parse(r)}async getGithubPullRequestTemplate(t,n){try{let o=await this.sendRequest(`/${Le}/git/github/${t}/${n}/pull-request-template`,{method:"GET",retries:3,requestTimeoutMs:1e4});return i8.parse(o).template}catch(o){if(o instanceof Hn&&o.status===404)return;throw o}}async getGithubPullRequestForBranch(t,n,o){let r=new URLSearchParams;r.set("branch",o);let i;try{i=await this.sendRequest(`/${Le}/git/github/${t}/${n}/pull-requests?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(s){if(s instanceof Hn&&s.status===404)return;throw s}return JZ.parse(i)}async getCommitFromGithub(t,n,o){let r=await this.sendRequest(`/${Le}/git/github/${t}/${n}/commits/${o}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Qw.parse(r)}async getGithubDefaultBranch(t,n){try{let o=await this.sendRequest(`/${Le}/git/github/${t}/${n}/default-branch`,{method:"GET"}),r=z$1.object({defaultBranch:z$1.string().min(1)}).safeParse(o);return r.success?r.data.defaultBranch:void 0}catch{return}}async getGithubCollaboratorsWithMergeAccess(t,n,o){let r=await this.sendRequest(`/${Le}/git/github/${t}/${n}/collaborator-merge-access`,{method:"POST",body:{usernames:o},retries:3,requestTimeoutMs:15e3});return VZ.parse(r).usernamesWithMergeAccess}async searchGithubRelatedPullRequests(t,n,o){let r=await this.sendRequest(`/${Le}/git/github/${t}/${n}/related-pull-requests`,{method:"POST",body:{query:o},retries:2,requestTimeoutMs:6e4});return KZ.parse(r)}async getGithubRelatedPullRequestDetails(t,n,o){let r=await this.sendRequest(`/${Le}/git/github/${t}/${n}/related-pull-requests/${o}`,{method:"GET",retries:2,requestTimeoutMs:6e4});return z$1.object({pullRequest:Qj}).parse(r).pullRequest}async getGithubCommitDetails(t,n,o){let r=WZ.parse({shas:o}),i=await this.sendRequest(`/${Le}/git/github/${t}/${n}/commit-details`,{method:"POST",body:r,retries:3,requestTimeoutMs:2e4});return qZ.parse(i)}async getMergedBranchFromGithub(t,n,o,r){let i=encodeURIComponent(o),s=await this.sendRequest(`/${Le}/git/github/${t}/${n}/${i}/${r}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return L$.parse(s)}async getMergeBaseCommitFromGitlab(t,n,o){let r=new URLSearchParams;r.set("base",n),r.set("head",o);let i=encodeURIComponent(t),s=await this.sendRequest(`/${Le}/git/gitlab/${i}/merge-base-commit?${r.toString()}`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Qw.parse(s)}async getGitlabMergeRequestForBranch(t,n){let o=new URLSearchParams;o.set("branch",n);let r=encodeURIComponent(t),i;try{i=await this.sendRequest(`/${Le}/git/gitlab/${r}/merge-requests?${o.toString()}`,{method:"GET",retries:3,requestTimeoutMs:1e4});}catch(s){if(s instanceof Hn&&s.status===404)return;throw s}return o8.parse(i)}async getCommitFromGitlab(t,n){let o=encodeURIComponent(t),r=await this.sendRequest(`/${Le}/git/gitlab/${o}/commits/${n}`,{method:"GET",retries:3,requestTimeoutMs:1e4});return Qw.parse(r)}async getMergedBranchFromGitlab(t,n,o){let r=encodeURIComponent(n),i=encodeURIComponent(t),s=await this.sendRequest(`/${Le}/git/gitlab/${i}/${r}/${o}/merged-branch`,{method:"GET",retries:3,requestTimeoutMs:1e4});return L$.parse(s)}async getAgentConfig(){let t=await this.sendRequest(`/${Le}/web-agent/agent-config`,{method:"GET",retries:3,requestTimeoutMs:5e3});return z$1.record(z$1.string(),z$1.string()).parse(t)}async getOrgSettings(){try{let t=await this.sendRequest(`/${Le}/org-settings`,{method:"GET",retries:3,requestTimeoutMs:5e3});return Z5(t)}catch(t){if(t instanceof Hn&&t.status===404)return this.logger.warn({err:t},"Momentic server does not expose org settings; continuing with local project settings"),db.parse({});throw t}}async getQuarantinedTests(){let t=await this.sendRequest(`/${Le}/quarantine`,{method:"GET"});return Lee.parse(t)}async listQuarantinedTests(t){let n=await this.sendRequest(`/${Le}/quarantine/details`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return Nee.parse(n)}async sendExploreSlackNotification(t){await this.sendRequest(`/${Le}/explore/slack-notification`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async recordExplorerSuggestedTests(t){await this.sendRequest(`/${Le}/explore/suggested-tests`,{method:"POST",body:t,retries:2,requestTimeoutMs:1e4});}async quarantineTest(t,n,o){await this.sendRequest(`/${Le}/quarantine`,{method:"POST",body:{testId:t.id,testName:t.name,reason:n,...o??{}},retries:3,requestTimeoutMs:1e4});}async unquarantineTest(t,n,o){await this.sendRequest(`/${Le}/quarantine/${t.id}`,{method:"DELETE",body:{testName:t.name,reason:n,...o??{}},retries:3,requestTimeoutMs:1e4});}platformRoute(t){switch(t){case "ANDROID":return "android";case "IOS":return "ios"}}async createAndroidEmulator(t){let n=await this.sendRequest(this.limbarPath("android"),{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return Fee.parse(n)}async extendEmulatorTtl(t,n){let o=Date.now();try{await this.sendRequest(this.limbarPath(`${this.platformRoute(t)}/${n}/keepalive`),{method:"POST",retries:3,requestTimeoutMs:15e3}),this.logger.debug({platform:t,emulatorName:n,durationMs:Date.now()-o},"Extended emulator keepalive");}catch(r){this.logger.warn({err:r,platform:t,emulatorName:n,durationMs:Date.now()-o},"Failed to extend emulator keepalive");}}async generateAssetUploadUrl({channel:t,tag:n,alias:o,md5:r,platform:i}){let s={channel:t,tag:n,alias:o,md5:r},a=await this.sendRequest(this.limbarPath(`${this.platformRoute(i)}/upload-url`),{method:"POST",retries:3,body:s,requestTimeoutMs:15e3,logResponse:true});return Uee.parse(a)}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 Hee.parse(t)}async getLimbarAssetDownloadUrl(t,n,o){let r=await this.sendRequest(this.limbarPath(`assets/${t}/${n}/${this.platformRoute(o)}/download-url`),{method:"GET",retries:2,requestTimeoutMs:3e4});return jee.parse(r)}async deleteAsset(t,n,o){await this.sendRequest(this.limbarPath(`assets/${t}/${n}/${this.platformRoute(o)}`),{method:"DELETE",retries:3,requestTimeoutMs:1e4});}async createIosEmulator(t){let n=await this.sendRequest(this.limbarPath("ios"),{method:"POST",retries:3,body:t,requestTimeoutMs:9e4,initialRetryDelayMs:5e3,maxRetryDelayMs:15e3});return Bee.parse(n)}async deleteIosEmulator(t){await this.sendRequest(this.limbarPath(`ios/${t}`),{method:"DELETE",retries:3,requestTimeoutMs:3e4});}async generateMobileLogcatUploadUrl(t){let n=await this.sendRequest(`/${Le}/logcat/mobile/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return TZ.parse(n)}async generateMcpSessionTraceUploadUrl(t){let n=await this.sendRequest(`/${Le}/mcp/upload`,{method:"POST",body:t,retries:3,requestTimeoutMs:1e4});return XP.parse(n)}};async function my(e){let t=process.versions.node,n=parseInt(t.split(".")[0]);(isNaN(n)||n<18)&&(C.error(`Node.js version 20 or higher is required to run the CLI. Detected: ${process.versions.node}.`),process.exit(1)),C.debug(`Identified node version ${t}`);let o=await e.client.getAuthInfo();return C.debug("Got auth info from API"),o}var Qm=class{apiClient;constructor(t){this.apiClient=t;}async reportBillableEvents(t,n){await this.apiClient.reportBillableEvents(t,n);}};async function Zm({reporter:e,logger:t,feature:n,cached:o,outcome:r,result:i,runId:s,testId:a,testName:l,labels:c,triageTestResults:u=[],sessionId:d,agentInvocationId:m,transactionId:p}){if(n==="triage"&&r===void 0)throw new Error("Triage invocation outcome is required");if(n==="triage"&&(!d||!m))throw new Error("Triage invocation IDs are required");if(n!=="triage"&&u.length>0)throw new Error("Only triage invocations can report test outcomes");let h=new Date().toISOString(),g=new Set(u.map(v=>v.outcome)),f=r;i==="failure"&&(f="error");let y={cached:o,sessionId:d,agentInvocationId:m},S=QP.parse({...y,runId:s,testId:a,testName:l,aiFeature:n,outcome:f,labels:c,hasFixedTest:g.has("fixed"),hasCannotFixTest:g.has("cannot-fix"),hasNoFixNeededTest:g.has("no-fix-needed")}),b=[{event:"ai-agent-invocation",timestamp:h,transactionId:p,properties:S},...u.map(v=>({event:"ai-triage-test-result",timestamp:h,transactionId:`${p}:test-result:${v.testId}`,properties:QP.parse({...y,runId:v.runId,testId:v.testId,testName:v.testName,aiFeature:"triage",outcome:v.outcome,labels:v.labels})}))];try{await e.reportBillableEvents(t,b);}catch(v){t.warn({err:v,feature:n,cached:o,outcome:f},"Failed to report AI agent invocation");}}var ep=class extends ua{generator;constructor(t,n){super(t),this.generator=n;}async runTemplateMatching(t,n={}){let o=await this.sendRequest(`/${Le}/web-agent/template-matching`,{method:"POST",body:t,signal:n?.signal});return XX.parse(o)}async constructIframeRegex(t,n={}){return this.generator.getIframeRegex(t,{abortSignal:n.signal,loggerTags:n.loggerTags})}};var VT=class{constructor(t,n){this.client=t;this.orgId=n;}getApiServerUrl(){return this.client.baseUrl}getAppServerUrl(){let t=this.getApiServerUrl();return Bb(t)}async acquireCacheLock(t,n){return this.client.acquireCacheLock(t,n)}async createOnDemandScreenshot(t,n,o){let{apiServerUrl:r}=await this.client.uploadOnDemandScreenshot({id:t,screenshot:n.toString("base64"),contentType:o});return {apiServerUrl:r,appServerUrl:`${this.getAppServerUrl()}/api/on-demand-screenshots/${t}`,universalHandle:{id:t,contentType:o}}}async fetchOnDemandScreenshot(t){return this.client.fetchOnDemandScreenshot(t.id)}async releaseCacheLock(t){return this.client.releaseCacheLock(t)}async deleteCacheResult(t){return this.client.deleteCacheResult(t)}async setCacheResult(t){return this.client.setCacheResult(t)}async getCacheResult(t){return this.client.getCacheResult(t)}fetchIconKnowledgeBase(t){return this.client.fetchIconKnowledgeBase(t)}saveNewIcons(t,n){return this.client.saveNewIcons(t,n)}};var RZe="x-momentic-internal-api-endpoint-secret",qk=class extends Nt{internalHeaders;constructor({internalApiSecret:t,...n}){super(n),this.internalHeaders=t?{[RZe]:t}:{},t&&C.addRedactedValue(t);}async getRunExport(t){let n=await this.sendRequest(`/internal/eval/runs/${encodeURIComponent(t)}/export`,{method:"GET",retries:3,requestTimeoutMs:1e4,extraHeaders:this.internalHeaders});return JP.parse(n)}async getRunGroupWithRuns(t){try{let n=await this.sendRequest(`/internal/eval/run-groups/${encodeURIComponent(t)}`,{method:"GET",retries:3,requestTimeoutMs:1e4,extraHeaders:this.internalHeaders});return tP.parse(n)}catch(n){if(n instanceof Hn&&n.status===404)return null;throw n}}};var tp="v1",xZe=2e3,Lue="sms.lease() and sms.release() are only supported when running tests via the Momentic CLI.",np=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(`/${tp}/tools/sms/send`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):new Error(`Failed to send sms: ${n.message}`)})}async fetchLatestSms(t){return this.httpClient.sendRequest(`/${tp}/tools/sms/fetchLatest`,{method:"POST",body:t}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):n})}async leasePhoneNumber(t){if(!this.supportsLease)throw new Error(Lue);let n=await this.httpClient.sendRequest(`/${tp}/tools/sms/lease`,{method:"POST",body:t??{}}).catch(r=>{throw r instanceof Hn?new Error(r.rawError):new Error(`Failed to lease phone number: ${r.message}`)}),o=IZ.parse(n);return this.activeLeases.set(o.phoneNumber,{leaseToken:o.leaseToken}),o}async releasePhoneNumber(t){if(!this.supportsLease)throw new Error(Lue);return this.activeLeases.delete(t.phoneNumber),this.httpClient.sendRequest(`/${tp}/tools/sms/release`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):new Error(`Failed to release phone number: ${n.message}`)})}async dispose(){let t=[...this.activeLeases.entries()];this.activeLeases.clear(),await Promise.allSettled(t.map(([n,{leaseToken:o}])=>ge(this.httpClient.sendRequest(`/${tp}/tools/sms/release`,{method:"POST",body:{phoneNumber:n,leaseToken:o}}),{milliseconds:xZe,fallback:()=>{}})));}async sendEmail(t){return this.httpClient.sendRequest(`/${tp}/tools/email/send`,{method:"POST",body:t}).then(()=>{}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):new Error(`Failed to send email: ${n.message}`)})}async fetchAllEmails(t){return this.httpClient.sendRequest(`/${tp}/tools/email/fetchAll`,{method:"POST",body:t}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):new Error(`Failed to fetch all emails: ${n.message}`)})}async fetchLatestEmail(t){return this.httpClient.sendRequest(`/${tp}/tools/email/fetchLatest`,{method:"POST",body:t}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):new Error(`Failed to fetch latest emails: ${n.message}`)})}async createEmail(){let t=await this.httpClient.sendRequest(`/${tp}/tools/email/create`,{method:"POST",body:{}}).catch(n=>{throw n instanceof Hn?new Error(n.rawError):new Error(`Failed to create email inbox: ${n.message}`)});return xZ.parse(t)}};var WT=class{constructor(t){this.client=t;}async uploadResultsArchive(t){let{runGroupId:n,archivePath:o,persist:r}=t,{uploadUrl:i,id:s}=await this.client.generateTestResultsUploadUrl(),a=await Wk(i,"application/zip",o);if(!a.ok)throw new Error(`Failed to upload test results: ${await a.text()}`);let{runGroupId:l}=await this.client.startProcessingResultsUpload(s,{resultType:"run",runGroupId:n,persist:r});return l}async uploadExploreArchive(t){let{exploreRunId:n,metadata:o,archivePath:r,videos:i}=t,{uploadUrl:s,videoUploadUrls:a}=await this.client.startExploreTraceUpload({exploreRunId:n,metadata:o,videoAssets:i?.map(c=>c.name)});for(let c of i??[]){let u=a?.[c.name];if(!u)throw new Error(`Missing upload URL for video asset ${c.name}`);let d=await Wk(u,c.contentType,c.path);if(!d.ok)throw new Error(`Failed to upload explore video ${c.name}: ${await d.text()}`)}let l=await Wk(s,"application/zip",r);if(!l.ok)throw new Error(`Failed to upload explore results: ${await l.text()}`)}};function op({logger:e,orgId:t,client:n,gitMetadata:o,regenerateCache:r,alwaysSaveCache:i,noCache:s,isolateCachesByEnvironment:a=false,bustOldestCachePercentage:l}){return s?new iO:new t2(e,t,n,o,{regenerateCache:r,alwaysSaveCache:i,bustOldestCachePercentage:l,isolateCachesByEnvironment:a})}var t2=class{constructor(t,n,o,r,i){this.orgId=n;this.client=o;let{regenerateCache:s,alwaysSaveCache:a,bustOldestCachePercentage:l,isolateCachesByEnvironment:c}=i,{gitBranchName:u,gitProtectedBranches:d}=r;t.info({options:i,gitBranchName:u,gitProtectedBranches:d},"Cache storage initialization options"),this.cacheHeaders=YP(r),this.isolateCachesByEnvironment=c,this.readCaches=!s;let m=u&&d.includes(u);a||!m?this.writeCaches=true:this.writeCaches=false,m||(this.bustOldestCachePercentage=l);}cacheHeaders;readCaches;writeCaches;isolateCachesByEnvironment;bustOldestCachePercentage;async saveStepCacheEntries({entries:t,logger:n}){if(!this.writeCaches){n.debug("Skipping cache storage because branch is protected");return}try{await this.client.updateStepCaches({entries:U$(t,this.isolateCachesByEnvironment)},this.cacheHeaders);}catch(o){n.error({err:o},"Failed to save step cache entries");}}async saveSnapshotCacheEntries({entries:t,logger:n}){if(t.length!==0)try{await this.client.updateSnapshotCaches({entries:U$(t,this.isolateCachesByEnvironment)},this.cacheHeaders);}catch(o){n.error({err:o},"Failed to save snapshot cache entries");}}async deleteStepCacheEntry({logger:t,testId:n,key:o,environment:r}){await this.client.deleteStepCacheEntry({testId:n,key:o,environment:this.isolateCachesByEnvironment?r:void 0},this.cacheHeaders),t.debug({testId:n,key:o},"Deleted step cache entry");}async resolveStepCacheEntries(t){let{restoredIdentity:n,restoredStepLists:o}=await this.restoreAndPersistStepIdentity(t);if(!this.readCaches)return t.logger.debug("Skipping cache resolution because of regenerate flag"),{restoredStepLists:o};let{steps:r,beforeSteps:i,afterSteps:s}=t.stepLists,a=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(a).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 a[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,s]){if(!d)continue;let m=Mh({steps:d,stepCacheEntries:a,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);}n&&PZe({cacheResolutionStats:l,logger:t.logger,restoredIdentity:n,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.56.2"];if(dn.increment("step_cache_resolution",l.cacheKeysHit.length,[...c,"outcome:hit"]),dn.increment("step_cache_resolution",l.cacheKeysMissed.length,[...c,"outcome:miss"]),dn.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:o};let{cachesToSave:u}=await Co({stepLists:t.stepLists,useSnapshotIdentityCache:false,cacheCreationParams:{environment:t.environment,testId:t.testId,orgId:this.orgId}});return this.saveStepCacheEntries({entries:u,logger:t.logger}),{restoredStepLists:o}}async restoreAndPersistStepIdentity(t){let n=t.useSnapshotIdentityCache?await this.tryRestoreStepIdsFromSnapshot(t):void 0;if(!n)return {restoredIdentity:void 0,restoredStepLists:void 0};let{snapshotCachesToSave:o}=await Co({stepLists:t.stepLists,useSnapshotIdentityCache:true,cacheCreationParams:{environment:t.environment,testId:t.testId,orgId:this.orgId}});return this.saveSnapshotCacheEntries({entries:o,logger:t.logger}),{restoredIdentity:n,restoredStepLists:structuredClone(n.stepLists)}}async tryRestoreStepIdsFromSnapshot(t){try{return await this.restoreStepIdsFromSnapshot(t)}catch(n){t.logger.warn({err:n,testId:t.testId},"Failed to restore step ids from snapshot cache; proceeding without identity cache"),dn.increment("step_cache_resolution",1,["platform:web","source:local","fileFormat:v2","snapshotIdentityCache:true",`orgId:${this.orgId}`,"cliVersion:3.56.2","outcome:identity_restore_error"]);return}}async restoreStepIdsFromSnapshot(t){let{logger:n,testId:o}=t,r=await this.client.getSnapshotCacheForTest({testId:o,environment:this.isolateCachesByEnvironment?t.environment:void 0},this.cacheHeaders);for(let a of r){if(!a.schema_version)continue;let l=Wj(a.schema_version),c=Wj(Ct);if(l&&c&&l.compare(c)>0){n.warn(`Snapshot cache for test ${o} was written at schema version ${a.schema_version}, which is newer than this CLI's latest (${Ct}). Please update your momentic package version. Skipping identity restoration from snapshot cache.`);return}}let i=PM({entries:r,orgId:this.orgId,testId:o,logger:n}),s=_M({currentStepLists:t.stepLists,previousSnapshot:i.testSnapshot,previousModuleSnapshots:i.moduleSnapshots,generateUuid:randomUUID});return t.stepLists.steps.splice(0,t.stepLists.steps.length,...s.stepLists.steps),t.stepLists.beforeSteps=s.stepLists.beforeSteps,t.stepLists.afterSteps=s.stepLists.afterSteps,n.debug({snapshotEntries:r.length,testSnapshotHit:!!i.testSnapshot,moduleSnapshots:Array.from(i.moduleSnapshots.keys()),mintedSteps:s.stats.mintedSteps,stats:s.stats,moduleRestoreResults:s.moduleRestoreResults.map(({moduleId:a,snapshotHit:l,stats:c})=>({moduleId:a,snapshotHit:l,stats:c}))},"Restored step ids from snapshot cache"),s}};function PZe({cacheResolutionStats:e,logger:t,restoredIdentity:n,schemaVersion:o,testId:r}){let i=e.cacheKeysHit.length,s=e.cacheKeysMissed.length,a=i+s,l=a>0?Math.round(s/a*1e3)/10:0,c=n.stats.matchedSteps+n.stats.mintedSteps,u=c>0?Math.round(n.stats.mintedSteps/c*1e3)/10:0,d=n.moduleRestoreResults.filter(({snapshotHit:g,stats:f})=>!g||f.mintedSteps>0||f.bustedConditionals>0).slice(0,10).map(({moduleId:g,snapshotHit:f,stats:y})=>({moduleId:g,snapshotHit:f,stats:y})),m=n.stats.mintedSteps>=5&&u>=25,p=m||n.stats.bustedConditionals>0||d.some(({stats:g})=>g.mintedSteps>=5||g.bustedConditionals>0),h={cacheHits:i,cacheMissRate:l,cacheMisses:s,cacheMissSamples:e.cacheMissSamples.slice(0,10),hasHighMintRate:m,identityMintRate:u,moduleIdentityIssueCount:d.length,moduleIdentityIssues:d,schemaVersion:o,snapshotIdentityCache:true,stepIdentityStats:n.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 ha({project:e,apiClient:t,classificationOverrides:n}){let{classification:o,healing:r,explore:i}=(await OZe(t))?.ai??{},s=kZe({flags:n,config:e.config.ai?.classification,cloudCategories:o?.categories}),a={...e.config.ai};return n?.disabled&&(a.aiFailureAnalysis=false),{...e,config:{...e.config,ai:{...a,classification:s,healing:r,explore:i}}}}async function OZe(e){try{return await e.getOrgSettings()}catch(t){if(!MZe(t))throw t;C.warn({err:t},"Could not load organization settings from Momentic. Continuing with local project configuration.");return}}function MZe(e){return e instanceof Hn?e.status>=500:e instanceof Ua||gR(e)}function kZe({flags:e,config:t,cloudCategories:n}){if(!(!t&&!n))return {enabled:e?.disabled?false:t?.enabled??false,overrideExitCode:e?.overrideExitCode??t?.overrideExitCode??yJ,categories:n??Ca}}var Nue="golden/visual-diff",Due="reports",uu="test-results";var LZe=z$1.object({width:z$1.number(),height:z$1.number()}),KT=class{defaultGoldenScreenshotDir;regenerateGoldenFiles;apiClient;constructor(t,n,o){let r=mo__default.join(t.rootDir,t.config.goldenFileDir??Nue);this.defaultGoldenScreenshotDir=r,this.regenerateGoldenFiles=o,this.apiClient=n;}async prepareGoldenScreenshotForComparison(t,n,o){if(lX(n.screenshot?.data))return {buffer:(await this.apiClient.fetchOnDemandScreenshot(n.screenshot.data.id)).data,width:n.screenshot.width,height:n.screenshot.height};if(n.screenshot?.data?.startsWith("https://")){let s=await fetch(n.screenshot.data);return {buffer:Buffer.from(await s.arrayBuffer()),width:n.screenshot.width,height:n.screenshot.height}}let r=n.screenshot?.data;r||(r=mo__default.join(this.defaultGoldenScreenshotDir,`${n.id}.jpg`));let i=`${r}.metadata.json`;if(this.regenerateGoldenFiles)return oo__default.mkdirSync(mo__default.dirname(r),{recursive:true}),oo__default.writeFileSync(r,o.buffer),oo__default.writeFileSync(i,JSON.stringify({width:o.width,height:o.height})),{buffer:Buffer.from(o.buffer),width:o.width,height:o.height};if(oo__default.existsSync(r)){let s=oo__default.readFileSync(r),a=LZe.parse(JSON.parse(oo__default.readFileSync(i,"utf-8")));return {buffer:s,width:a.width,height:a.height}}else throw new oe("UserConfigurationError",`Cannot execute visual diff without a saved baseline screenshot at ${r}`)}};var Bue=3e3,DZe=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 FZe(){let e={};for(let[t,n]of Object.entries(process.env))n!==void 0&&!DZe.has(t.toLowerCase())&&(e[t]=n);return e.LC_ALL="C",e.LANG="C",e}var BZe=FZe();function Cd(e,t){return t?.throwIfAborted(),c2({baseDir:e??process.cwd(),abort:t,unsafe:{allowUnsafeAskPass:true,allowUnsafeGitProxy:true,allowUnsafeSshCommand:true}}).env(BZe)}var mi=Cd();async function r2(e,t,n){try{return await Cd(e,n).revparse(t)}catch(o){if(n?.throwIfAborted(),Gue(o))return;throw o}}async function Ac(e,t){return r2(e,["--show-toplevel"],t)}async function YT(e){let t=await Ac(e);if(!t)return;let n=mo__default.relative(t,e);if(!(n.startsWith("..")||mo__default.isAbsolute(n)))return n===""?".":n}async function Uue(e){return r2(e,["HEAD"])}async function Hue(e){try{return (await Cd(e).revparse(["--is-shallow-repository"])).trim()==="true"}catch{return false}}async function jue(e){return r2(e,["--abbrev-ref","HEAD"])}async function JT({cwd:e,base:t,head:n,logger:o,abortSignal:r}){try{let i=(await Cd(e,r).raw(["merge-base",t,n])).trim();if(i.length>0)return i;o.warn({base:t,head:n},"git merge-base returned empty");}catch(i){r?.throwIfAborted(),o.warn({err:i,base:t,head:n},"git merge-base failed");}}function i2(){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 XT({client:e,repository:t,base:n,head:o,logger:r,abortSignal:i}){let s=yr(t);if(s)try{i?.throwIfAborted();let a=await e.compareCommitsFromGithub({owner:s.owner,repo:s.repo,base:n,head:o},i);return a.commits.length===0?void 0:a}catch(a){i?.throwIfAborted(),r.warn({err:a,repository:t,base:n,head:o},"remote commit compare failed");return}}async function Tc(e){let{logger:t,operation:n,fn:o,context:r}=e,i=Date.now();try{return await o()}finally{let s=Date.now()-i;s>Bue&&!process.env.CI&&t.warn({operation:n,durationMs:s,thresholdMs:Bue,...r??{}},"[timing] slow git metadata operation");}}function Rd(e){if(e)try{let t=new Date(e);return isNaN(t.getTime())?void 0:t}catch{return}}async function $ue(e,t){let n=await Oo(e,t.raw(["config","--null","--list"])),o={};if(!n)return o;for(let r of n.split("\0")){let i=r.indexOf(`
|
|
332
332
|
`);if(i===-1)continue;let s=r.slice(0,i),a=r.slice(i+1).trim();o[s]=a;}return o}function tC(e){if(e.startsWith("git@")){let t=e.split(":");if(t.length===2){let n=t[1].replace(".git","").split("/");if(n.length===2){let o=n[0],r=n[1];return `${o}/${r}`}}}else if(e.startsWith("http")||e.startsWith("https")){let n=new URL(e).pathname.split("/").filter(Boolean);if(n.length>=2){let o=n[0],r=n[1].replace(".git","");return `${o}/${r}`}}}var UZe=["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 Gue(e){return e instanceof Error?UZe.some(t=>e.message.includes(t)):false}async function Oo(e,t){try{return (await t).trim()}catch(n){if(Gue(n))return;e.error({err:n},"Failed to run git command");return}}async function ns(e,t,n){if(e)try{return (await Cd(t,n).revparse([e]))?.trim()||void 0}catch{n?.throwIfAborted();return}}async function nC(e){let t=await ns(e);return t||await ns(`origin/${e}`)}function zue(){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 HZe(e){let[t,n,o]=await Promise.all([Oo(e,mi.show(["--no-patch","--format=%ci"])),Oo(e,mi.show(["-s","--pretty=%B"])),Oo(e,mi.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?Rd(t):void 0,gitBranchName:process.env.GITHUB_HEAD_REF||process.env.GITHUB_REF_NAME,gitOriginUrl:r,gitCommitMessage:n,gitCommitAuthorName:o,githubRepository:process.env.GITHUB_REPOSITORY,pipelineId:process.env.GITHUB_RUN_ID,ciBuildUrl:r&&process.env.GITHUB_RUN_ID?`${r}/actions/runs/${process.env.GITHUB_RUN_ID}`:void 0,ciWorkflowName:process.env.GITHUB_WORKFLOW}}async function jZe(e){let[t,n,o]=await Promise.all([Oo(e,mi.listRemote(["--get-url","origin"])),Oo(e,mi.show(["-s","--pretty=%B"])),Oo(e,mi.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?Rd(process.env.CI_COMMIT_TIMESTAMP):void 0,gitBranchName:process.env.CI_COMMIT_BRANCH||process.env.CI_COMMIT_REF_NAME,gitOriginUrl:t,gitCommitMessage:n,gitCommitAuthorName:o,gitlabProjectPath:process.env.CI_PROJECT_PATH,pipelineId:`${process.env.CI_PIPELINE_ID}:${process.env.CI_JOB_ID}`,ciBuildUrl:process.env.CI_PIPELINE_URL,ciWorkflowName:process.env.CI_PIPELINE_NAME}}async function $Ze(e){let[t,n,o,r]=await Promise.all([Oo(e,mi.show(["--no-patch","--format=%ci"])),Oo(e,mi.listRemote(["--get-url","origin"])),Oo(e,mi.show(["-s","--pretty=%B"])),Oo(e,mi.show(["-s","--pretty=%an"]))]),s=process.env.CIRCLE_REPOSITORY_URL?.trim()||void 0||n||void 0,a=s?.includes("github.com")??false,l=s?.includes("gitlab.com")??false,c=s?tC(s):void 0;return {ciProvider:"CircleCI",gitCommitSha:process.env.CIRCLE_SHA1,gitCommitShaShort:process.env.CIRCLE_SHA1?.slice(0,6),gitCommitTimestamp:t?Rd(t):void 0,gitBranchName:process.env.CIRCLE_BRANCH,gitOriginUrl:s,gitCommitMessage:o,gitCommitAuthorName:r,githubRepository:a?c:void 0,gitlabProjectPath:l?c:void 0,pipelineId:process.env.CIRCLE_PIPELINE_ID,ciBuildUrl:process.env.CIRCLE_WORKFLOW_ID?`https://app.circleci.com/pipelines/workflows/${process.env.CIRCLE_WORKFLOW_ID}`:void 0}}async function GZe(e){let[t,n,o]=await Promise.all([Oo(e,mi.show(["--no-patch","--format=%ci"])),Oo(e,mi.show(["-s","--pretty=%B"])),Oo(e,mi.show(["-s","--pretty=%an"]))]),r=process.env.BUILDKITE_REPO,i=r?.includes("github.com"),s=r?.includes("gitlab.com"),a=r?tC(r):void 0;return {ciProvider:"Buildkite",gitCommitSha:process.env.BUILDKITE_COMMIT,gitCommitShaShort:process.env.BUILDKITE_COMMIT?.slice(0,6),gitCommitTimestamp:t?Rd(t):void 0,gitBranchName:process.env.BUILDKITE_BRANCH,gitOriginUrl:r,gitCommitMessage:n,gitCommitAuthorName:o,githubRepository:i?a:void 0,gitlabProjectPath:s?a:void 0,pipelineId:`${process.env.BUILDKITE_PIPELINE_ID}:${process.env.BUILDKITE_BUILD_ID}:${process.env.BUILDKITE_JOB_ID}`,ciBuildUrl:process.env.BUILDKITE_BUILD_URL,ciWorkflowName:process.env.BUILDKITE_PIPELINE_NAME}}async function zZe(e){let[t,n,o]=await Promise.all([Oo(e,mi.show(["--no-patch","--format=%ci"])),Oo(e,mi.show(["-s","--pretty=%B"])),Oo(e,mi.show(["-s","--pretty=%an"]))]),r=process.env["Build.Repository.Uri"],i=r?.includes("github.com"),s=r?.includes("gitlab.com"),a=r?tC(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?Rd(t):void 0,gitBranchName:Sh(process.env["System.PullRequest.SourceBranch"]??c),gitOriginUrl:r,gitCommitMessage:n,gitCommitAuthorName:o,githubRepository:i?a:void 0,gitlabProjectPath:s?a:void 0,pipelineId:`${process.env["System.JobId"]}:${process.env["System.JobAttempt"]}`}}async function Vue(e,t,n,o="full"){let r=Cd(n?.repoDir),[i,s,a,l,c]=await Promise.all([VZe(e,r,o),Oo(e,r.revparse(["--abbrev-ref","HEAD"])),Oo(e,r.listRemote(["--get-url","origin"])),t?Oo(e,r.raw(["merge-base","--fork-point",t])):Promise.resolve(void 0),o==="full"?$ue(e,r):Promise.resolve(void 0)]),u=i.sha??await Oo(e,r.revparse(["HEAD"])),d=a??c?.["remote.origin.url"]??await Oo(e,r.raw(["config","--get","remote.origin.url"])),m=l||(t?await Oo(e,r.raw(["merge-base",t,"HEAD"])):void 0),p=m?await Oo(e,r.show(["--no-patch","--format=%cI",m])):void 0,h=d?.includes("github.com"),g=d?.includes("gitlab.com"),f=d?tC(d):void 0,y=c?.["user.email"]||void 0,S=c?.["user.name"]||void 0,b=c?.["user.username"]||void 0,v=c?.["github.user"]||void 0,A=b??v??void 0;return {ciProvider:"none",gitCommitSha:u,gitCommitShaShort:i.shaShort,gitBranchName:s,gitOriginUrl:d,gitCommitTimestamp:Rd(i.timestamp),gitCommitMessage:i.message,gitCommitAuthorName:i.authorName,gitLocalUsername:A,gitLocalEmail:y,gitLocalName:S,lastCommitOnMainSha:m,lastCommitOnMainTimestamp:p?Rd(p):void 0,githubRepository:h?f:void 0,gitlabProjectPath:g?f:void 0,pipelineId:void 0}}async function VZe(e,t,n){let o=n==="full"?"%H%x00%h%x00%cI%x00%an%x00%B":"%H%x00%cI",r=await Oo(e,t.raw(["log","-1",`--format=${o}`,"HEAD"]));if(!r)return {};if(n==="cache"){let[u,d]=r.split("\0");return {sha:u||void 0,timestamp:d||void 0}}let[i,s,a,l,...c]=r.split("\0");return {sha:i||void 0,shaShort:s||void 0,timestamp:a||void 0,authorName:l||void 0,message:c.join("\0")||void 0}}async function WZe(e){let[t,n]=await Promise.all([Oo(e,mi.show(["--no-patch","--format=%ci"])),Oo(e,mi.show(["-s","--pretty=%an"]))]),o=process.env.GIT_REPOSITORY_URL,r=o?.includes("github.com"),i=o?.includes("gitlab.com"),s=o?tC(o):void 0;return {ciProvider:"Bitrise",gitCommitSha:process.env.BITRISE_GIT_COMMIT,gitCommitShaShort:process.env.BITRISE_GIT_COMMIT?.slice(0,6),gitCommitTimestamp:t?Rd(t):void 0,gitBranchName:process.env.BITRISE_GIT_BRANCH,gitOriginUrl:o,gitCommitMessage:process.env.BITRISE_GIT_MESSAGE,gitCommitAuthorName:n,githubRepository:r?s:void 0,gitlabProjectPath:i?s:void 0,pipelineId:`${process.env.BITRISE_APP_SLUG}:${process.env.BITRISE_BUILD_SLUG}`,ciBuildUrl:process.env.BITRISE_BUILD_URL,ciWorkflowName:process.env.BITRISE_TRIGGERED_WORKFLOW_TITLE}}async function qZe(){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 KZe(){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:Rd(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:Rd(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 Kk({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 py(e){try{let t=(await Cd(e).raw(["symbolic-ref","--quiet","refs/remotes/origin/HEAD"])).trim(),n="refs/remotes/origin/";return t.startsWith(n)?t.slice(n.length):void 0}catch{return}}async function YZe(e){let t=[...e.config.gitProtectedBranches??[]];return e.config.gitMainBranch&&t.push(e.config.gitMainBranch),{gitMainBranch:e.config.gitMainBranch??await py(e.rootDir),gitProtectedBranches:t}}async function Ec(e,t,n){let o=zue();if(!o)return Vue(e,t,n);switch(o){case "GithubActions":return HZe(e);case "GitlabCI":return jZe(e);case "CircleCI":return $Ze(e);case "Buildkite":return GZe(e);case "AzureDevOps":return zZe(e);case "GCPCloudBuild":return qZe();case "Bitrise":return WZe(e);case "Custom":return KZe()}}async function s2(e,t){let n=await $ue(e,Cd(t));return {gitLocalUsername:n["user.username"]??n["github.user"]??void 0,gitLocalEmail:n["user.email"]||void 0,gitLocalName:n["user.name"]||void 0}}async function JZe(e,t,n,o,r){let i=o,s=o.gitCommitSha;if(!s)return i;if(!i.gitCommitTimestamp||r==="full"&&(!i.gitCommitAuthorName||!i.gitCommitMessage))try{let c=await Tc({logger:e,operation:"getRemoteMetadataFromGitlab.getCommitFromGitlab",fn:()=>t.getCommitFromGitlab(n,s),context:{projectPath:n,gitCommitSha:s}});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=o.gitMainBranch;if(l&&(!i.lastCommitOnMainSha||!i.lastCommitOnMainTimestamp))try{let c=await Tc({logger:e,operation:"getRemoteMetadataFromGitlab.getMergeBaseCommitFromGitlab",fn:()=>t.getMergeBaseCommitFromGitlab(n,l,s),context:{projectPath:n,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(o.gitBranchName&&o.gitBranchName===o.gitMainBranch&&!i.mergedGitBranchName){let c=o.gitBranchName;try{let u=await Tc({logger:e,operation:"getRemoteMetadataFromGitlab.getMergedBranchFromGitlab",fn:()=>t.getMergedBranchFromGitlab(n,c,s),context:{projectPath:n,branchName:c,gitCommitSha:s}});u.mergedBranch&&(i={...i,mergedGitBranchName:u.mergedBranch});}catch(u){e.warn({err:u},"Failed to get merged branch from Gitlab");}}return i}async function XZe(e,t,n,o,r,i){let s=r,a=r.gitCommitSha;if(!a)return s;if(!s.gitCommitTimestamp||i==="full"&&(!s.gitCommitAuthorName||!s.gitCommitMessage))try{let u=await Tc({logger:e,operation:"getRemoteMetadataFromGitHub.getCommitFromGithub",fn:()=>t.getCommitFromGithub(n,o,a),context:{owner:n,repo:o,gitCommitSha:a}});u&&(s={...s,gitCommitTimestamp:s.gitCommitTimestamp??u.committer.date,gitCommitAuthorName:s.gitCommitAuthorName??u.author.name,gitCommitMessage:s.gitCommitMessage??u.message});}catch(u){e.warn({err:u},"Failed to get commit from GitHub");}let c=r.gitMainBranch;if(c&&(!s.lastCommitOnMainSha||!s.lastCommitOnMainTimestamp))try{let u=await Tc({logger:e,operation:"getRemoteMetadataFromGitHub.getMergeBaseCommitFromGithub",fn:()=>t.getMergeBaseCommitFromGithub(n,o,c,a),context:{owner:n,repo:o,mainBranch:c}});s={...s,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&&!s.mergedGitBranchName){let u=r.gitBranchName;try{let d=await Tc({logger:e,operation:"getRemoteMetadataFromGitHub.getMergedBranchFromGithub",fn:()=>t.getMergedBranchFromGithub(n,o,u,a),context:{owner:n,repo:o,branchName:u,gitCommitSha:a}});d.mergedBranch&&(s={...s,mergedGitBranchName:d.mergedBranch});}catch(d){e.warn({err:d},"Failed to get merged branch from GitHub");}}return s}async function QZe(e,t,n,o){try{if(n.githubRepository){let{owner:r,repo:i}=s8(n.githubRepository);return await Tc({logger:e,operation:"getRemoteMetadataIfNeeded.getRemoteMetadataFromGitHub",fn:()=>XZe(e,t,r,i,n,o),context:{githubRepository:n.githubRepository}})}else if(n.gitlabProjectPath){let r=n.gitlabProjectPath;return await Tc({logger:e,operation:"getRemoteMetadataIfNeeded.getRemoteMetadataFromGitlab",fn:()=>JZe(e,t,r,n,o),context:{gitlabProjectPath:r}})}}catch(r){e.warn({err:r},"Failed to get remote git metadata");}return n}async function Wue(e,t,n,o){let r=o==="full"?"getGitMetadata":"getGitMetadataForCache",i={},s={gitMainBranch:n.config.gitMainBranch};return Tc({logger:e,operation:`${r}.total`,fn:async()=>{let[a,l]=await Promise.all([Tc({logger:e,operation:`${r}.getConfiguredGitMetadata`,fn:()=>YZe(n),context:{projectConfigPath:n.configFilePath}}),Tc({logger:e,operation:`${r}.getEnvironmentGitMetadata`,fn:async()=>{let d=zue()?await Ec(e,n.config.gitMainBranch,{repoDir:n.rootDir}):await Vue(e,n.config.gitMainBranch,{repoDir:n.rootDir},o);return s.ciProvider=d.ciProvider,d},context:s})]),c={...a,...l};i.gitBranchName=c.gitBranchName,i.githubRepository=c.githubRepository,i.gitlabProjectPath=c.gitlabProjectPath,(!c.lastCommitOnMainSha||!c.lastCommitOnMainTimestamp)&&c.gitBranchName===a.gitMainBranch&&(c.lastCommitOnMainSha=c.gitCommitSha,c.lastCommitOnMainTimestamp=c.gitCommitTimestamp);let u=await Tc({logger:e,operation:`${r}.getRemoteMetadataIfNeeded`,fn:()=>QZe(e,t,c,o),context:{githubRepository:c.githubRepository,gitlabProjectPath:c.gitlabProjectPath,gitBranchName:c.gitBranchName}});return {...a,...l,...u}},context:i})}async function que(e){try{let t=await Cd(e).remote(["show","origin"]);return t?t.match(/HEAD branch: (.*)$/m)?.[1]?.trim():void 0}catch{return}}async function Kue(){try{return (await mi.revparse(["--is-inside-work-tree"])).trim()==="true"}catch{return false}}var ZR,eC;async function Yue(e,t){let n=Cd(t.rootDir),[o,r]=await Promise.all([n.raw(["symbolic-ref","--short","-q","HEAD"]).then(a=>a.trim()||void 0).catch(()=>{}),Oo(e,n.revparse(["--verify","HEAD"]).then(a=>a.trim()))]);if(!r)return;let i=`${t.configFilePath}:${t.config.gitMainBranch}:${t.config.gitProtectedBranches?.join(",")}`,s=o?`branch:${o}`:"detached";return `${t.rootDir}:${s}:${r}:${i}`}async function eg(e,t,n){let o=await Yue(e,n);if(o&&ZR?.snapshotKey===o)return e.debug("Using cached git metadata"),await ZR.value;let r=Wue(e,t,n,"full");o&&(ZR={snapshotKey:o,value:r});try{return await r}catch(i){throw ZR?.value===r&&(ZR=void 0),i}}async function Id(e,t,n){let o=await Yue(e,n);if(o&&eC?.snapshotKey===o)return e.debug("Using cached git metadata for cache resolution"),await eC.value;let r=Wue(e,t,n,"cache").then(i=>({gitMainBranch:i.gitMainBranch,gitProtectedBranches:i.gitProtectedBranches,gitBranchName:i.gitBranchName,gitCommitTimestamp:i.gitCommitTimestamp,lastCommitOnMainSha:i.lastCommitOnMainSha,lastCommitOnMainTimestamp:i.lastCommitOnMainTimestamp,mergedGitBranchName:i.mergedGitBranchName}));o&&(eC={snapshotKey:o,value:r});try{return await r}catch(i){throw eC?.value===r&&(eC=void 0),i}}var e8e=z$1.object({pull_request:z$1.object({body:z$1.string().nullable().optional()}).optional()});async function Yk({client:e,gitMetadata:t,logger:n}){let o=process.env.CI_MERGE_REQUEST_DESCRIPTION;if(o&&o.trim().length>0)return o;let r=await t8e(n);if(r!==void 0)return r;let i=t.gitBranchName;if(i)try{if(t.githubRepository){let s=yr(t.githubRepository);if(!s)return;let a=await e.getGithubPullRequestForBranch(s.owner,s.repo,i);return a?.body?.trim()?a.body:void 0}if(t.gitlabProjectPath){let s=await e.getGitlabMergeRequestForBranch(t.gitlabProjectPath,i);return s?.description?.trim()?s.description:void 0}}catch(s){n.warn({err:s},"Failed to load change request description from remote git metadata");}}async function t8e(e){let t=process.env.GITHUB_EVENT_PATH;if(t)try{let n=JSON.parse(await readFile(t,"utf8")),r=e8e.parse(n).pull_request?.body;return r?.trim()?r:void 0}catch(n){e.warn({err:n,eventPath:t},"Failed to load change request description from GitHub event");return}}var n8e=1024*1024;async function tg({absoluteRepoRoot:e,baseRef:t="HEAD",candidateRepoRelativePaths:n}){rC(e);let o=c2(e),r=n?oC(n):[];if(n&&r.length===0)return [];for(let l of r)u2({absoluteRepoRoot:e,repoRelativePath:l});let i=r.map(l2),[s,a]=await Promise.all([o.diff(["--name-only","--diff-filter=ACDMRTUXB",t,"--",...i]),o.raw(["ls-files","--others","--exclude-standard","--",...i])]);return o8e(oC([...Jue(s),...Jue(a)]))}function o8e(e){return e.filter(ip)}function ip(e){let t=rp.basename(e);return e.endsWith(".test.yaml")||e.endsWith(".module.yaml")||t===Ga||t===$R}async function Jk({absoluteRepoRoot:e,repoRelativePaths:t,maxFileSizeBytes:n=n8e}){rC(e);let o=[];for(let r of oC(t)){let i=u2({absoluteRepoRoot:e,repoRelativePath:r});if(!ip(r))throw new Error(`Pull request path is not a Momentic file: ${r}`);let s=await promises.stat(i).catch(()=>{});if(!s){o.push({operation:"delete",path:r});continue}if(!s.isFile())throw new Error(`Cannot create pull request change for non-file path: ${r}`);if(s.size>n)throw new Error(`Cannot create pull request change for oversized file: ${r}`);let a=await promises.readFile(i,"utf8");if(a.includes("\0"))throw new Error(`Cannot create pull request change for binary file: ${r}`);o.push({operation:"upsert",path:r,content:a});}return o}async function ng({absoluteRepoRoot:e,repoRelativePaths:t,baseRef:n="HEAD",maxFileSizeBytes:o}){rC(e);let r=oC(t??await tg({absoluteRepoRoot:e,baseRef:n}));if(r.length===0)return "";let s=(await Jk({absoluteRepoRoot:e,repoRelativePaths:r,maxFileSizeBytes:o})).filter(l=>l.operation==="upsert").map(l=>l.path),a=await promises.mkdtemp(rp.join(Xue.tmpdir(),"momentic-git-patch-"));try{let l=c2(e).env("GIT_INDEX_FILE",rp.join(a,"index"));return await l.raw(["read-tree",n]),s.length>0&&await l.raw(["add","--intent-to-add","--",...s.map(l2)]),await l.raw(["diff","--binary","--",...r.map(l2)])}finally{await promises.rm(a,{recursive:true,force:true});}}async function Que({absoluteRepoRoot:e,patch:t}){rC(e);let n=await promises.mkdtemp(rp.join(Xue.tmpdir(),"momentic-git-apply-")),o=rp.join(n,"heal.patch");try{await promises.writeFile(o,t,"utf8");let r=c2(e),i=r8e(await r.raw(["apply","--numstat","-z","--",o]));if(i.length===0)throw new Error("Cannot apply an empty heal patch.");for(let s of i)if(u2({absoluteRepoRoot:e,repoRelativePath:s}),!ip(s))throw new Error(`Heal patch path is not a Momentic file: ${s}`);return await r.raw(["apply","--check","--",o]),await r.raw(["apply","--",o]),i}finally{await promises.rm(n,{recursive:true,force:true});}}async function Zue({absoluteRepoRoot:e,repoRelativePaths:t,baseBranch:n,baseCommitSha:o,headBranch:r,branchPrefix:i,idempotencyKey:s,commitMessage:a,title:l,body:c,reviewers:u,teamReviewers:d,fallbackReviewers:m,draft:p,coAuthorRange:h,omitBaseCommitCoAuthors:g,requestCommitAuthorsAsReviewers:f,assignCommitAuthorsAsAssignees:y,assignees:S,maxFileSizeBytes:b}){rC(e);let v=await Jk({absoluteRepoRoot:e,repoRelativePaths:t??await tg({absoluteRepoRoot:e,baseRef:o}),maxFileSizeBytes:b}),A=n??await jue(e);if(!A)throw new ue(`Cannot determine base branch because git is not usable in '${e}'.`);let R=o??await Uue(e);if(!R)throw new ue(`Cannot determine base commit SHA because git is not usable in '${e}'.`);return {baseBranch:A,baseCommitSha:R,headBranch:r,branchPrefix:i,idempotencyKey:s,commitMessage:a,title:l,body:c,changes:v,reviewers:u,teamReviewers:d,fallbackReviewers:m,draft:p,coAuthorRange:h,requestCommitAuthorsAsReviewers:f,assignCommitAuthorsAsAssignees:y,assignees:S,omitBaseCommitCoAuthors:g}}function Jue(e){return e?e.split(`
|
|
333
333
|
`).filter(t=>t.length>0):[]}function oC(e){return [...new Set(e)]}function l2(e){return `:(literal)${e}`}function r8e(e){let t=e.split("\0"),n=[];for(let o=0;o<t.length;o++){let r=t[o];if(!r)continue;let i=r.split(" ");if(i.length<3)throw new Error("Cannot determine files touched by heal patch.");let s=i.slice(2).join(" ");if(s){n.push(s);continue}let a=t[++o],l=t[++o];if(!a||!l)throw new Error("Cannot determine renamed files touched by heal patch.");n.push(a,l);}return oC(n)}function rC(e){if(!rp.isAbsolute(e))throw new Error(`Git repository root must be absolute: ${e}`)}function u2({absoluteRepoRoot:e,repoRelativePath:t}){if(!t||rp.isAbsolute(t)||t.includes("\0"))throw new Error(`Unsafe pull request path: ${t}`);let n=rp.resolve(e,t);if(n!==e&&!n.startsWith(`${e}${rp.sep}`))throw new Error(`Pull request path escapes repository root: ${t}`);return n}var ede=mo__default.join(".momentic","skills"),tde="SKILL.md",a8e=/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/,l8e=50;function c8e({rootDir:e,fileSystem:t}){let n=mo__default.resolve(e);for(let o=0;o<l8e;o++){let r=mo__default.join(n,ede);if(t.existsSync(r))return r;let i=mo__default.dirname(n);if(i===n)break;n=i;}return mo__default.join(mo__default.resolve(e),ede)}function u8e({rootDir:e,fileSystem:t=mt}){let n=c8e({rootDir:e,fileSystem:t}),o=nde({skillsDir:n,fileSystem:t}),r=[];for(let i of o){let s=mo__default.basename(mo__default.dirname(i)),a=mo__default.relative(n,mo__default.dirname(i)).split(mo__default.sep).join("/"),l=d8e({dirName:s,skillPath:a,filePath:i,fileSystem:t});l&&r.push(l);}return r.sort((i,s)=>i.name.localeCompare(s.name)||i.path.localeCompare(s.path))}function QT({rootDir:e,agent:t,fileSystem:n=mt}){let o=u8e({rootDir:e,fileSystem:n}).filter(r=>r.agents===void 0||r.agents.includes(t));if(o.length!==0)return o.map(r=>`<skill name="${r.name}" path="${r.path}" description="${r.description}">
|
|
334
334
|
${r.body}
|
|
@@ -442,7 +442,7 @@ ${r.code(er(u,o))}`,i),t)try{await l7e(u);}catch{e.warn(`Could not open a browse
|
|
|
442
442
|
`);if(o===this.lastFrame&&this.liveRows===n.length)return;let r=this.eraseSeq();n.length>0&&(r+=`${o}
|
|
443
443
|
`),r+=this.cursorSeq(n.length>0),r.length>0&&this.opts.stream.write(r),this.commitFrame(n,o);}commitFrame(t,n){this.liveRows=t.length,this.lastFrame=n,t.length===0?this.stopTicker():this.ensureTicker();}eraseSeq(){return this.liveRows===0?"":ene+tne.repeat(this.liveRows)+nne}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 tet=80,net=120,oet=20,ret="classifying failure",wL=class{totalTests=0;nextIndex=0;running=new Map;quarantined=new Set;recovered=new Set;region;theme;screen;constructor(t){this.screen={...t,isTTY:ld(t)},this.theme=Je(this.screen),this.region=new lg({stream:process.stdout,isTTY:this.screen.isTTY,tickMs:tet,render:n=>this.renderRunningRows(n)});}onBegin(t){this.totalTests=t.tests.length,this.nextIndex=0,this.quarantined.clear(),this.recovered.clear();for(let n of t.tests)n.quarantined&&this.quarantined.add(n.relativeFilePath);for(let n of t.tests)n.skipped&&(this.nextIndex+=1,this.commitRow({testRef:n.relativeFilePath,status:"SKIP",index:this.nextIndex,note:n.skipped.kind==="quarantined"?n.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,n,o){let r=this.running.get(t);r?(r.status=n,r.note=o,r.step=void 0,r.classifying=false):(this.nextIndex+=1,this.running.set(t,{index:this.nextIndex,status:n,note:o,startedAt:Date.now()})),this.region.update();}onStepStart(t,n){let o=this.running.get(t);if(o){if(o.step={text:n},o.classifying=n===dm,o.classifying&&!this.screen.isTTY){let r=this.formatRow({testRef:t,status:o.status,index:o.index,classifying:true,classifyPending:true});r&&this.region.writeAbove(r);return}this.region.update();}}onStepEnd(t,n,o){}onSectionStart(t,n){}onTestEnd(t,n,o){o?.recovered&&this.recovered.add(t);let r=this.running.get(t),i=r?this.formatRow({testRef:t,status:n,index:r.index,elapsedMs:Date.now()-r.startedAt}):this.formatRow({testRef:t,status:n,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 n=this.formatRow(t);n&&this.region.writeAbove(n);}renderRunningRows(t){let n=[];for(let[o,r]of this.running){let i=this.formatRow({testRef:o,status:r.status,index:r.index,note:r.note,elapsedMs:Date.now()-r.startedAt,step:r.step,tick:t,classifying:r.classifying});i&&n.push(i);}return n}formatRow(t){let n=lR(t.status,this.screen,t.tick);if(!n)return;let o=t.classifying===true&&!n.isTerminal,r=o?this.theme.classifySpinner(t.tick??0):n.badge,s=String(this.totalTests).length*2+3,a=`[${t.index}/${this.totalTests}]`.padStart(s),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=(n.isTerminal?typeof t.elapsedMs=="number":u>=1)?` (${Math.max(1,u)}s)`:"",p=this.screen.columns>0?this.screen.columns:net,h=s+3+t.testRef.length+l.length+c.length+m.length,g=Math.max(oet,p-1)-h,f=o?`${ret}${t.classifyPending?"\u2026":""}`:t.step&&!n.isTerminal?t.step.text:void 0,S=f?H2(o?" \xB7 ":" \u203A ",f,g):"";g-=S.length;let b=t.note?H2(" ",t.note,g):"";return `${this.theme.dim(a)} ${r} ${t.testRef}${this.theme.dim(l)}${this.theme.dim(c)}${this.theme.dim(S)}${b}${this.theme.dim(m)}`}};var RL=class{constructor(t){this.reporters=t;}onBegin(t){for(let n of this.reporters)n.onBegin(t);}onTestBegin(t){for(let n of this.reporters)n.onTestBegin(t);}onTestStatus(t,n,o){for(let r of this.reporters)r.onTestStatus(t,n,o);}onStepStart(t,n,o){for(let r of this.reporters)r.onStepStart(t,n,o);}onStepEnd(t,n,o){for(let r of this.reporters)r.onStepEnd(t,n,o);}onSectionStart(t,n){for(let o of this.reporters)o.onSectionStart(t,n);}onTestEnd(t,n,o){for(let r of this.reporters)r.onTestEnd(t,n,o);}onEnd(t){for(let n of this.reporters)n.onEnd(t);}};var iet="classifying failure",CL=class{totalTests=0;nextIndex=0;running=new Map;quarantined=new Set;recovered=new Set;theme;screen;constructor(t){this.screen=t,this.theme=Je(t);}onBegin(t){this.totalTests=t.tests.length,this.nextIndex=0,this.quarantined.clear(),this.recovered.clear();for(let n of t.tests)n.quarantined&&this.quarantined.add(n.relativeFilePath);for(let n of t.tests){if(!n.skipped)continue;this.nextIndex+=1;let o=n.skipped.kind==="quarantined"?` ${n.skipped.reason}`:"";this.write(`${this.counter(this.nextIndex)}${this.theme.statusGlyph("skip")} ${n.relativeFilePath}${o}`);}}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,n,o){let r=this.running.get(t);r||(this.nextIndex+=1,r={index:this.nextIndex,startedAt:Date.now()},this.running.set(t,r));let i=lR(n,this.screen);if(!i||i.isTerminal||n==="RUN")return;let s=o?` ${this.theme.dim(o)}`:"";this.detail(r,1,`${i.badge} ${this.theme.dim(n.toLowerCase())}${s}`);}onStepStart(t,n,o=0){let r=this.running.get(t);if(r){if(n===dm){this.detail(r,1,`${this.theme.classifySpinner(0)} ${this.theme.dim(`${iet}\u2026`)}`);return}this.detail(r,this.stepIndent(r,o),this.theme.dim(`- ${n}`));}}onStepEnd(t,n,o){let r=this.running.get(t);if(!r)return;let i=this.theme.statusGlyph(o.success?"pass":"fail");this.detail(r,this.stepIndent(r,o.depth),`${i} ${this.theme.dim(ap(o.durationMs))}`);}onSectionStart(t,n){let o=this.running.get(t);o&&(o.sectioned=true,this.detail(o,1,this.theme.dim(n)));}onTestEnd(t,n,o){o?.recovered&&this.recovered.add(t);let r=this.running.get(t),i=lR(n,this.screen),s=r?.index??++this.nextIndex;if(r&&this.running.delete(t),!i)return;let a=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(s)}${i.badge}${u}${this.theme.dim(a)}${this.theme.dim(l)}${this.theme.dim(c)}`);}onEnd(t){}stepIndent(t,n){return n+(t.sectioned?2:1)}detail(t,n,o){this.write(`${this.counter(t.index)}${" ".repeat(n)}${o}`);}counter(t){if(this.totalTests<=1)return "";let o=String(this.totalTests).length*2+3;return this.theme.dim(`[${t}/${this.totalTests}]`.padStart(o))+" "}write(t){process.stdout.write(`${t}
|
|
444
444
|
`);}};var aet="list",hpe="steps",gpe="dot",IL=["json","junit","allure","allure-json","playwright-json","buildkite-json"],xL=["newrelic"],ppe=[aet,hpe,gpe,...IL,...xL];function fpe(e,t){if(!ppe.includes(e))throw new InvalidArgumentError$2(`Allowed choices are ${ppe.join(", ")}.`);return [...t,e]}function ype(e){let t=[],n=[];for(let r of e.reporter??[]){let i=IL.find(a=>a===r);i&&t.push(i);let s=xL.find(a=>a===r);s&&n.push(s);}let o;return e.reporter?.includes(gpe)?o=new vL(e.screen):e.reporter?.includes(hpe)?o=new CL(e.screen):o=new wL(e.screen),{live:new RL([o]),files:t,network:n}}function _L(e,t){return e.split(`
|
|
445
|
-
`).map(n=>t.color?n.startsWith("+")?Jl.green(n):n.startsWith("-")?Jl.red(n):n.startsWith("@@")?t.dim(n):n:n)}var cet="https://api.momentic.ai";function bpe({server:e,serverSource:t,apiKeySource:n}){return t!=="default"||n==="default"?e:cet}function Tpe(e,t){switch(e){case "cli":return "--api-key";case "env":return "MOMENTIC_API_KEY";default:return t}}function Ape({auth:e,serverUrl:t,appUrl:n,keySource:o,screen:r}){let i=Je(r),s=e.name??e.email??e.userId,a=[];e.email!==void 0&&a.push({label:"Email",value:e.email}),a.push({label:"User ID",value:e.userId},{label:"Org ID",value:e.orgId},{label:"Server",value:t},{label:"App",value:er(n,r)},{label:"API key",value:i.dim(o)}),C.log(`Signed in as ${i.bold(s)}`),C.log(Pd(a,r));}var wC=25;function Epe(e){return {v2ProjectConfig:{...e.config,fileFormat:"v2"},migratedFilePaths:[]}}function vpe(e){return {legacyProjectConfig:{...e.config,fileFormat:"v1"},migratedFilePaths:[]}}function X2({project:e,newProjectConfig:t,fileFormatLabel:n,migratedFilePaths:o}){e.config=t,ty(e.config,e.configFilePath),o.push(e.configFilePath),C.info(`Updated ${e.configFilePath} to use ${n} file format`),t.hooks?.postSave&&(C.info(`Running post-save hook for ${o.length} migrated files`),OT([...new Set(o)],t));}async function RC(e,t,n){for(let o=0;o<e.length;o+=t)await Promise.all(e.slice(o,o+t).map(n));}function Q2(e){return e.upgradedAgents.length>0||e.enabledUseMemory||e.enabledFailureRecovery}function det(e){let t=e.ai??={},n=t.agentConfig??={},o=[];for(let[s,a]of Object.entries(Kp)){let l=n[s];l!==a&&(l?.startsWith(`${a}.`)||(n[s]=a,o.push({type:s,newValue:a})));}let r=t.useMemory!==true;r&&(t.useMemory=true);let i=t.failureRecovery!==true;return i&&(t.failureRecovery=true),{upgradedAgents:o,enabledUseMemory:r,enabledFailureRecovery:i}}async function wpe({project:e,dryRun:t,migrate:n}){let o=e.config.fileFormat!=="v2",r=ca.stringify(e.config),i=det(e.config);if(!o)return !t&&Q2(i)&&ty(e.config,e.configFilePath),{fileFormatChanged:false,aiSettings:i,migration:Z2(),configDiff:Y2(r,e.config)};let s=await n();return {fileFormatChanged:o,aiSettings:i,migration:s,configDiff:Y2(r,{...e.config,fileFormat:"v2"})}}function Y2(e,t){return jf(e,ca.stringify(t),{n_surrounding:2})}function Rpe(e){return Y2(ca.stringify(e),{...e,fileFormat:"v2"})}function Z2(){return {migratedTestPaths:[],migratedModulePaths:[],alreadyV2TestCount:0,alreadyV2ModuleCount:0}}function eV({summary:e,fileFormatChanged:t,configChange:n,dryRun:o,testNoun:r="test",moduleNoun:i="module"}){let s=qe(),a=Je(s),l=a.green("~");C.info(""),C.info(ag(o?"Upgrade Preview":"Upgrade Summary",s)),C.info("");let c=p=>` ${l} ${a.code(mo__default.relative(process.cwd(),p))}`,u=(p,h)=>{let g=eT(p,h);return `${a.bold(g.charAt(0).toUpperCase()+g.slice(1))} ${a.dim(`(${h})`)}`},d=e.migratedTestPaths.length,m=e.migratedModulePaths.length;if(t||d>0||m>0){let p=o?"Would migrate":"Migrated";if(C.info(`${p} ${a.bold(`${d} ${eT(r,d)}`)} and ${a.bold(`${m} ${eT(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 ${eT(r,e.alreadyV2TestCount)} and ${e.alreadyV2ModuleCount} already-migrated ${eT(i,e.alreadyV2ModuleCount)}.`),C.info(""));}if(n&&n.diff.trim().length>0){C.info(u("config",1)),C.info(c(n.configFilePath));for(let p of _L(n.diff,a))C.info(` ${p}`);C.info("");}}var tV=false,Cpe;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.56.1",tracesSampleRate:0,skipOpenTelemetrySetup:!0,sendDefaultPii:!0,beforeSend(n,o){return Soe(o?.originalException)||iv(o?.originalException,ue)||boe(o?.originalException)?null:n}}),Zte(e.captureException),Cpe=n=>{if(!n){e.setUser(null);return}e.setUser({id:n.userId,organizationId:n.orgId,...n.email&&{email:n.email}});},tV=!0;}catch{}var Ipe=e=>Cpe?.(e);var pet=new ZO(30,60*1e3),IC="https://api.momentic.ai",dA,xpe,cp=e=>{IC=e;},_l=()=>IC,_pe=()=>Bb(IC),cg=e=>{xpe=e;},pu=()=>xpe,No=()=>dA,Ppe=()=>{if(!dA)throw new Error("Global API client has not been initialized.");return dA};var CC,OL,Ope,Mpe,kpe,ML,Lpe,Npe=({authInfo:e,apiKey:t,apiClient:n})=>{IC=n.baseUrl,dA=n,CC=e.orgId,OL=e.userId,Ope=e.email,Mpe=e.name,kpe=e.pylonEmailHash,ML=t,Lpe=e.selfServe;},ug=async({apiClient:e,apiKey:t,skipPrompts:n})=>{let o=await my({client:e});return Npe({authInfo:o,apiKey:t,apiClient:e}),o},NL=async({apiKey:e,mode:t,runner:n})=>{if(dA&&CC&&ML)return CC;let o=new Nt({baseUrl:IC,apiKey:e,logger:C,mode:t,runner:n});dA=o;try{let r=await o.getAuthInfo();return Npe({authInfo:r,apiKey:e,apiClient:o}),r.orgId}catch(r){throw new Error(`Error checking API key against server: ${r}`,{cause:r})}},xr=()=>{if(!CC)throw new Error("Your organization ID is invalid.");return CC},kd=()=>{if(!OL)throw new Error("Your user ID is invalid.");return OL},Dpe=()=>OL,mA=()=>Ope,Fpe=()=>Mpe,Bpe=()=>kpe,DL=()=>Lpe,up=()=>{if(!ML)throw new Error("Your API key is invalid.");return ML},kL,LL,dp=()=>{LL?.abort(),LL=void 0;},dg=(e,t)=>{kL=e,dp(),LL=new AbortController;let n=LL.signal,o=[e.configFilePath];e.config.environments?.forEach(r=>{if(!r.envFile)return;let i=mo__default.resolve(e.rootDir,r.envFile);try{if(oo__default.lstatSync(i).isSymbolicLink())return;oo__default.existsSync(i)&&o.push(i);}catch(s){C.warn({err:s},`Failed to check if env file ${i} exists`);}});try{het({filesToWatch:o,revalidator:t,signal:n,project:e});}catch(r){C.error({err:r},"Failed to start config file watchers");}};async function pA({project:e,apiClient:t}){let n=o=>ha({project:o,apiClient:t});dg(await n(e),async o=>n(await Rn({configFilePath:o})));}var xt=()=>{if(!kL)throw new ue("No Momentic project is currently loaded. Open or select a project before invoking this action.");return kL};function het({filesToWatch:e,revalidator:t,signal:n,project:o}){C.debug("Starting watch on the following files:"),e.forEach(r=>{C.debug(`- ${r}`);}),e.forEach(r=>{let i=async(a,l)=>{if(a.mtime.getTime()!==l.mtime.getTime()){pet.increment("setLocalProject")&&C.warn(`A file change under the ${o.rootDir} directory has caused Momentic to reload its configuration more than 30 times in the last minute. Rapid changes to files may indicate your momentic.config.yaml 'include' glob is incorrect. Please ensure temporary, library, and auto-generated files are not included in Momentic's context.`);try{kL=await Promise.resolve(t(o.configFilePath));}catch(c){C.warn({err:c},`Failed to reload Momentic configuration after a change to ${r}; continuing with the previously loaded configuration`);}}};oo__default.watchFile(r,{persistent:false},i);let s=()=>{oo__default.unwatchFile(r,i),n.removeEventListener("abort",s);};n.addEventListener("abort",s);});}function zt(e){return function(...t){let n=t[t.length-1],o=e(...t);Promise.resolve(o).catch(n);}}var fet="3.56.1",mp=$b({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:fet});(async()=>{try{let e=await Ec(mp);e.gitBranchName&&mp.addBinding("branch",e.gitBranchName);}catch{}})();var Upe=Router();Upe.get("/",async(e,t)=>{let n=xt(),o=No();if(!o){t.status(500).json({message:"API client not initialized"});return}let r=await Id(mp,o,n),i=r?.gitProtectedBranches&&r?.gitBranchName&&r.gitProtectedBranches.includes(r.gitBranchName),{noCache:s,alwaysSaveCache:a}=pu(),l=!s&&(a||!i);t.status(200).json({saveCaches:l,checkedOutBranch:r?.gitBranchName});});var nV=Upe;var Tet=5e3,Aet=[".js",".mjs",".cjs",".ts"];function oV(e={}){let t=Router();function n(){let d=xt();return mo__default.dirname(d.configFilePath)}function o(d){return mo__default.join(n(),...d)}function r(d){let m=mo__default.relative(n(),d);return m?m.split(mo__default.sep):[]}function i(d,m){let p=oo__default.statSync(d),h=r(d);return r$.parse({name:m,absolutePath:d,relativePath:h.join(mo__default.sep),pathSegments:h,isDirectory:p.isDirectory(),size:p.size,createdAt:p.birthtime,modifiedAt:p.mtime,accessedAt:p.atime})}function s(d){let m=mo__default.relative(n(),d);return m===""||!m.startsWith("..")&&!mo__default.isAbsolute(m)}async function a(d){let m=xt();return fd(["*"],{cwd:d,ignore:m.config.exclude??[],maxDepth:1,nodir:false,signal:AbortSignal.timeout(Tet)})}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=mo__default.relative(d,m).split(mo__default.sep).join("/");return p?h?`${h}/`:"./":h}return t.post("/file-reference-suggestions",zt(async(d,m,p)=>{let h=v8.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??Aet).map(I=>I.toLowerCase())),S=l(f);if(S.directoryText.startsWith("/")){m.status(200).json({suggestions:[]});return}let b=mo__default.resolve(n(),...c(g)),v=mo__default.resolve(b,...c(S.directoryText));if(!s(b)||!s(v)){m.status(200).json({suggestions:[]});return}if(!oo__default.existsSync(v)||!oo__default.statSync(v).isDirectory()){m.status(200).json({suggestions:[]});return}let A;try{A=await a(v);}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=A.map(I=>{let _=mo__default.join(v,I);return {entryName:I,targetPath:_,isDirectory:oo__default.statSync(_).isDirectory()}}),w=S.filePrefix.toLowerCase(),O=R.filter(I=>I.entryName.startsWith(".")||!I.entryName.toLowerCase().startsWith(w)?false:I.isDirectory?true:y.has(mo__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:b,targetPath:I.targetPath,isDirectory:I.isDirectory})}));m.status(200).json({suggestions:O});})),t.post("/",zt(async(d,m,p)=>{let h,g;try{let A=E8.parse(d.body);h=A.pathSegments,g=A.directoriesOnly??!1;}catch(A){m.status(400).json({error:`Failed to parse folder read body: ${A}`});return}let f=o(h);if(!oo__default.existsSync(f)){m.status(404).json({error:`Path not found: ${h.join(mo__default.sep)}`});return}if(!oo__default.statSync(f).isDirectory()){m.status(400).json({error:`Path is not a directory: ${h.join(mo__default.sep)}`});return}let S;try{S=await a(f);}catch(A){if(A instanceof Error&&A.name==="TimeoutError"){m.status(408).json({error:"Folder listing timed out. This directory may contain too many files."});return}throw A}let b=S.map(A=>{let R=mo__default.join(f,A);return i(R,A)});if(g&&(b=b.filter(A=>A.isDirectory)),e.allowedFileTypes){let A=new Set(e.allowedFileTypes);b=(await Promise.all(b.map(async R=>{if(R.isDirectory||!(R.name.endsWith(".test.yaml")||R.name.endsWith(".module.yaml")))return R;let O=await Eet(R.absolutePath);return O!==void 0&&A.has(O)?R:null}))).filter(R=>R!==null);}let v={absolutePath:f,pathSegments:h,contents:b};m.status(200).json(v);})),t.put("/",zt(async(d,m,p)=>{let h;try{h=w8.parse(d.body).pathSegments;}catch(y){m.status(400).json({error:`Failed to parse folder create body: ${y}`});return}let g=o(h);if(oo__default.existsSync(g)){m.status(200).json({success:true,message:`Folder already exists: ${h.join(mo__default.sep)}`,pathSegments:h});return}oo__default.mkdirSync(g,{recursive:true});let f={success:true,message:`Folder created: ${h.join(mo__default.sep)}`,pathSegments:h};m.status(201).json(f);})),t.patch("/",zt(async(d,m,p)=>{let h,g;try{let v=R8.parse(d.body);h=v.pathSegments,g=v.newPathSegments;}catch(v){m.status(400).json({error:`Failed to parse folder update body: ${v}`});return}let f=o(h),y=o(g);if(!oo__default.existsSync(f)){m.status(400).json({error:`Folder not found: ${h.join(mo__default.sep)}`});return}if(oo__default.existsSync(y)){m.status(400).json({error:`Destination already exists: ${g.join(mo__default.sep)}`});return}let S=mo__default.dirname(y);oo__default.existsSync(S)||oo__default.mkdirSync(S,{recursive:true}),oo__default.renameSync(f,y);let b={success:true,message:`Folder moved from ${h.join(mo__default.sep)} to ${g.join(mo__default.sep)}`,pathSegments:g};m.status(200).json(b);})),t.delete("/",zt(async(d,m,p)=>{let h,g=true;try{let b=C8.parse(d.body);h=b.pathSegments,g=b.recursive??!0;}catch(b){m.status(400).json({error:`Failed to parse folder delete body: ${b}`});return}let f=o(h);if(!oo__default.existsSync(f)){m.status(200).json({success:true,message:`Folder not found: ${h.join(mo__default.sep)}`,pathSegments:h});return}if(!oo__default.statSync(f).isDirectory()){m.status(400).json({error:`Path is not a directory: ${h.join(mo__default.sep)}`});return}try{if(g)oo__default.rmSync(f,{recursive:!0,force:!0});else {if(oo__default.readdirSync(f).length>0){m.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${h.join("/")}`});return}oo__default.rmdirSync(f);}}catch(b){let{status:v,body:A}=xde(b,`delete folder ${h.join("/")}`);m.status(v).json(A);return}let S={success:true,message:`Folder deleted: ${h.join("/")}`,pathSegments:h};m.status(200).json(S);})),t}async function Eet(e){try{let t=await oo__default.promises.open(e,"r");try{let n=Buffer.alloc(4096),{bytesRead:o}=await t.read(n,0,n.length,0);return n.toString("utf-8",0,o).match(/^fileType:\s*(.+)$/m)?.[1]?.trim()}finally{await t.close();}}catch{}}var Hpe=Router();Hpe.get("/",async(e,t)=>{let n=xt(),o=No();if(!o){t.status(500).json({message:"API client not initialized"});return}let r=await eg(mp,o,n);t.status(200).json(r);});var rV=Hpe;var jpe=Router();jpe.get("/latest",async(e,t)=>{let n=No(),o=null;try{o=await n?.getLatestProductUpdate()??null;}catch(r){mp.debug({err:r},"Failed to fetch latest product update");}t.status(200).json({update:o});});var iV=jpe;var Ret=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return async()=>{t.info({sessionId:o},"Cancel event received");let r=n.getSession(o);if(!r)throw new Error("No active session found");try{r.controller.setClosed();}catch{}}},$pe={event:"cancel",createHandler:Ret};var Cet=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{testId:o,sessionId:r}=e;return async(i,s)=>{let{stepId:a,environment:l,parentStepIdChain:c}=i;t.info({testId:o,stepId:a},"Clearing AI action cache");try{let u=n.getSession(r);if(!u)throw new Error("No active session found");let d=oT(a,c.join(":")||void 0);await Promise.all(d.map(m=>u.cacheStorage.deleteStepCacheEntry({logger:t,testId:o,key:m,environment:l}))),s({ok:!0});}catch(u){t.error({testId:o,stepId:a,err:u},"Failed to clear AI action cache"),s({ok:false,error:z(u)});}}},Gpe={event:"clearAIActionCache",createHandler:Cet};var Iet=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return async(r,i)=>{let s=n.getSession(o);if(!s)throw new Error("No active session found");s.controller.setOpen();let a=s.controller.browser;try{let c=(await a.getBrowserState({skipWait:!0})).serialize();t.debug({a11yTree:c},"Fetched a11y tree from the browser"),i({a11yTree:c});}catch(l){t.error({err:l},"Error fetching a11y tree from the browser"),i({err:l.message});}}},zpe={event:"fetchA11yTree",createHandler:Iet};var xet=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return async(r,i)=>{let s=n.getSession(o);if(!s)throw new Error("No active session found");s.controller.setOpen();let a=s.controller.browser;try{let l=await a.html();i({html:l});}catch(l){t.error({err:l},"Error fetching DOM from the browser"),l.name==="TimeoutError"?i({err:"Timed out fetching DOM tree. This page may be too large for Momentic to process."}):i({err:l.message});}}},Vpe={event:"fetchDom",createHandler:xet};var _et=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return r=>{t.info({sessionId:o,reason:r},`Disconnect event received (${r})`),n.removeSession(o,t);}},Wpe={event:"disconnect",createHandler:_et};function Ja(e){let{result:t,nestedResults:n}=e;if(!e.nestedResults.length)return;let{firstMetadata:o,lastMetadata:r}=Pet(n);Oet(t,o,r);let i=n[n.length-1];i.status!=="SUCCESS"&&(t.message=i.message,t.failureReason=i.failureReason,t.failureClassification=i.failureClassification);let s=[...e.asyncTasks];e.asyncTasks.push((async()=>{try{await Met(s,t,o,r);}catch(a){e.logger.error({result:e.result,err:a},"Error hoisting scalar result metadata");}})());}function Pet(e){let t=e[0],n;for(;;){switch(t.type){case "PRESET_ACTION":case "CONDITIONAL":n=t;break;case "AI_ACTION_DYNAMIC":case "AI_ACTION":case "MODULE":case "SECTION":case "WHILE_LOOP":if(!t.results.length){n=t;break}t=t.results[0];break;default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}if(n)break}let o=e[e.length-1],r;for(;;){switch(o.type){case "PRESET_ACTION":{r=o;break}case "AI_ACTION_DYNAMIC":case "CONDITIONAL":case "AI_ACTION":case "MODULE":case "SECTION":case "WHILE_LOOP":if(!o.results.length){r=o;break}o=o.results[o.results.length-1];break;default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}if(r)break}return {firstMetadata:n,lastMetadata:r}}function Oet(e,t,n){t&&(e.beforeUrl=t.beforeUrl),n&&(e.afterUrl=n.afterUrl,e.data=n.data);}async function Met(e,t,n,o){await Promise.allSettled(e),n&&(t.beforeSnapshot=n.beforeSnapshot),o&&(t.afterSnapshot=o.afterSnapshot);}function xC(e,t,n){let o={};return Object.entries(t).forEach(([i,s])=>{o[i]=JSON.stringify(s);}),{type:"MODULE",id:e.id,moduleId:e.moduleId,moduleName:e.name,startedAt:new Date,cacheConfig:e.cacheConfig,inputs:o,results:[],finishedAt:new Date,status:n}}async function mg(e,t,n){return ket(e,t,n)}async function ket(e,t,n){let o=new Date;try{return n.throwIfAborted(),await t()}catch(r){let i=new Date,s="FAILED",a;if(n.aborted||r instanceof DOMException&&r.name==="AbortError"?(a="Step aborted by user.",s="CANCELLED"):r instanceof oe?a=`${r}`:a=`An unexpected error occurred: ${r.message}`,e.type==="RESOLVED_MODULE"){let l=xC(e,{},"FAILED");return l.message=a,l.startedAt=o,l.finishedAt=i,l}return {...uT(e),startedAt:o,finishedAt:i,status:s,data:null,message:a,results:[]}}}async function Ps(e,t){let n=false;try{return e&&!e.state.failureRecoveryDisabled&&(e.state.failureRecoveryDisabled=!0,n=!0),await t()}finally{e&&n&&(e.state.failureRecoveryDisabled=void 0);}}var hA=20,FL=100;function sV(e){return e.baseDerivedFrom==="estimate"}var Let={config:"the main branch configured for this project","run-metadata":"the main branch recorded with this run","origin-head":"the remote's default branch from origin/HEAD, which git records at clone time and never refreshes \u2014 if this repository's default branch has changed since, this window is against the old one",estimate:"an estimate: a fixed number of commits back from head, because the main branch could not be resolved. The window therefore contains commits made on the main branch that this branch did not make, and a file may appear newly added when it merely predates the base. Do not conclude that this branch introduced a change from its presence in this window alone"};function BL(e){return e.baseDerivedFrom?` The base of this comparison window is ${Let[e.baseDerivedFrom]}.`:""}function L({text:e,section:t}){if(!t)return [{type:"text",text:e}];let n=`### ${t}`;return e.length===0?[{type:"text",text:n}]:[{type:"text",text:`${n}
|
|
445
|
+
`).map(n=>t.color?n.startsWith("+")?Jl.green(n):n.startsWith("-")?Jl.red(n):n.startsWith("@@")?t.dim(n):n:n)}var cet="https://api.momentic.ai";function bpe({server:e,serverSource:t,apiKeySource:n}){return t!=="default"||n==="default"?e:cet}function Tpe(e,t){switch(e){case "cli":return "--api-key";case "env":return "MOMENTIC_API_KEY";default:return t}}function Ape({auth:e,serverUrl:t,appUrl:n,keySource:o,screen:r}){let i=Je(r),s=e.name??e.email??e.userId,a=[];e.email!==void 0&&a.push({label:"Email",value:e.email}),a.push({label:"User ID",value:e.userId},{label:"Org ID",value:e.orgId},{label:"Server",value:t},{label:"App",value:er(n,r)},{label:"API key",value:i.dim(o)}),C.log(`Signed in as ${i.bold(s)}`),C.log(Pd(a,r));}var wC=25;function Epe(e){return {v2ProjectConfig:{...e.config,fileFormat:"v2"},migratedFilePaths:[]}}function vpe(e){return {legacyProjectConfig:{...e.config,fileFormat:"v1"},migratedFilePaths:[]}}function X2({project:e,newProjectConfig:t,fileFormatLabel:n,migratedFilePaths:o}){e.config=t,ty(e.config,e.configFilePath),o.push(e.configFilePath),C.info(`Updated ${e.configFilePath} to use ${n} file format`),t.hooks?.postSave&&(C.info(`Running post-save hook for ${o.length} migrated files`),OT([...new Set(o)],t));}async function RC(e,t,n){for(let o=0;o<e.length;o+=t)await Promise.all(e.slice(o,o+t).map(n));}function Q2(e){return e.upgradedAgents.length>0||e.enabledUseMemory||e.enabledFailureRecovery}function det(e){let t=e.ai??={},n=t.agentConfig??={},o=[];for(let[s,a]of Object.entries(Kp)){let l=n[s];l!==a&&(l?.startsWith(`${a}.`)||(n[s]=a,o.push({type:s,newValue:a})));}let r=t.useMemory!==true;r&&(t.useMemory=true);let i=t.failureRecovery!==true;return i&&(t.failureRecovery=true),{upgradedAgents:o,enabledUseMemory:r,enabledFailureRecovery:i}}async function wpe({project:e,dryRun:t,migrate:n}){let o=e.config.fileFormat!=="v2",r=ca.stringify(e.config),i=det(e.config);if(!o)return !t&&Q2(i)&&ty(e.config,e.configFilePath),{fileFormatChanged:false,aiSettings:i,migration:Z2(),configDiff:Y2(r,e.config)};let s=await n();return {fileFormatChanged:o,aiSettings:i,migration:s,configDiff:Y2(r,{...e.config,fileFormat:"v2"})}}function Y2(e,t){return jf(e,ca.stringify(t),{n_surrounding:2})}function Rpe(e){return Y2(ca.stringify(e),{...e,fileFormat:"v2"})}function Z2(){return {migratedTestPaths:[],migratedModulePaths:[],alreadyV2TestCount:0,alreadyV2ModuleCount:0}}function eV({summary:e,fileFormatChanged:t,configChange:n,dryRun:o,testNoun:r="test",moduleNoun:i="module"}){let s=qe(),a=Je(s),l=a.green("~");C.info(""),C.info(ag(o?"Upgrade Preview":"Upgrade Summary",s)),C.info("");let c=p=>` ${l} ${a.code(mo__default.relative(process.cwd(),p))}`,u=(p,h)=>{let g=eT(p,h);return `${a.bold(g.charAt(0).toUpperCase()+g.slice(1))} ${a.dim(`(${h})`)}`},d=e.migratedTestPaths.length,m=e.migratedModulePaths.length;if(t||d>0||m>0){let p=o?"Would migrate":"Migrated";if(C.info(`${p} ${a.bold(`${d} ${eT(r,d)}`)} and ${a.bold(`${m} ${eT(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 ${eT(r,e.alreadyV2TestCount)} and ${e.alreadyV2ModuleCount} already-migrated ${eT(i,e.alreadyV2ModuleCount)}.`),C.info(""));}if(n&&n.diff.trim().length>0){C.info(u("config",1)),C.info(c(n.configFilePath));for(let p of _L(n.diff,a))C.info(` ${p}`);C.info("");}}var tV=false,Cpe;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.56.2",tracesSampleRate:0,skipOpenTelemetrySetup:!0,sendDefaultPii:!0,beforeSend(n,o){return Soe(o?.originalException)||iv(o?.originalException,ue)||boe(o?.originalException)?null:n}}),Zte(e.captureException),Cpe=n=>{if(!n){e.setUser(null);return}e.setUser({id:n.userId,organizationId:n.orgId,...n.email&&{email:n.email}});},tV=!0;}catch{}var Ipe=e=>Cpe?.(e);var pet=new ZO(30,60*1e3),IC="https://api.momentic.ai",dA,xpe,cp=e=>{IC=e;},_l=()=>IC,_pe=()=>Bb(IC),cg=e=>{xpe=e;},pu=()=>xpe,No=()=>dA,Ppe=()=>{if(!dA)throw new Error("Global API client has not been initialized.");return dA};var CC,OL,Ope,Mpe,kpe,ML,Lpe,Npe=({authInfo:e,apiKey:t,apiClient:n})=>{IC=n.baseUrl,dA=n,CC=e.orgId,OL=e.userId,Ope=e.email,Mpe=e.name,kpe=e.pylonEmailHash,ML=t,Lpe=e.selfServe;},ug=async({apiClient:e,apiKey:t,skipPrompts:n})=>{let o=await my({client:e});return Npe({authInfo:o,apiKey:t,apiClient:e}),o},NL=async({apiKey:e,mode:t,runner:n})=>{if(dA&&CC&&ML)return CC;let o=new Nt({baseUrl:IC,apiKey:e,logger:C,mode:t,runner:n});dA=o;try{let r=await o.getAuthInfo();return Npe({authInfo:r,apiKey:e,apiClient:o}),r.orgId}catch(r){throw new Error(`Error checking API key against server: ${r}`,{cause:r})}},xr=()=>{if(!CC)throw new Error("Your organization ID is invalid.");return CC},kd=()=>{if(!OL)throw new Error("Your user ID is invalid.");return OL},Dpe=()=>OL,mA=()=>Ope,Fpe=()=>Mpe,Bpe=()=>kpe,DL=()=>Lpe,up=()=>{if(!ML)throw new Error("Your API key is invalid.");return ML},kL,LL,dp=()=>{LL?.abort(),LL=void 0;},dg=(e,t)=>{kL=e,dp(),LL=new AbortController;let n=LL.signal,o=[e.configFilePath];e.config.environments?.forEach(r=>{if(!r.envFile)return;let i=mo__default.resolve(e.rootDir,r.envFile);try{if(oo__default.lstatSync(i).isSymbolicLink())return;oo__default.existsSync(i)&&o.push(i);}catch(s){C.warn({err:s},`Failed to check if env file ${i} exists`);}});try{het({filesToWatch:o,revalidator:t,signal:n,project:e});}catch(r){C.error({err:r},"Failed to start config file watchers");}};async function pA({project:e,apiClient:t}){let n=o=>ha({project:o,apiClient:t});dg(await n(e),async o=>n(await Rn({configFilePath:o})));}var xt=()=>{if(!kL)throw new ue("No Momentic project is currently loaded. Open or select a project before invoking this action.");return kL};function het({filesToWatch:e,revalidator:t,signal:n,project:o}){C.debug("Starting watch on the following files:"),e.forEach(r=>{C.debug(`- ${r}`);}),e.forEach(r=>{let i=async(a,l)=>{if(a.mtime.getTime()!==l.mtime.getTime()){pet.increment("setLocalProject")&&C.warn(`A file change under the ${o.rootDir} directory has caused Momentic to reload its configuration more than 30 times in the last minute. Rapid changes to files may indicate your momentic.config.yaml 'include' glob is incorrect. Please ensure temporary, library, and auto-generated files are not included in Momentic's context.`);try{kL=await Promise.resolve(t(o.configFilePath));}catch(c){C.warn({err:c},`Failed to reload Momentic configuration after a change to ${r}; continuing with the previously loaded configuration`);}}};oo__default.watchFile(r,{persistent:false},i);let s=()=>{oo__default.unwatchFile(r,i),n.removeEventListener("abort",s);};n.addEventListener("abort",s);});}function zt(e){return function(...t){let n=t[t.length-1],o=e(...t);Promise.resolve(o).catch(n);}}var fet="3.56.2",mp=$b({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:fet});(async()=>{try{let e=await Ec(mp);e.gitBranchName&&mp.addBinding("branch",e.gitBranchName);}catch{}})();var Upe=Router();Upe.get("/",async(e,t)=>{let n=xt(),o=No();if(!o){t.status(500).json({message:"API client not initialized"});return}let r=await Id(mp,o,n),i=r?.gitProtectedBranches&&r?.gitBranchName&&r.gitProtectedBranches.includes(r.gitBranchName),{noCache:s,alwaysSaveCache:a}=pu(),l=!s&&(a||!i);t.status(200).json({saveCaches:l,checkedOutBranch:r?.gitBranchName});});var nV=Upe;var Tet=5e3,Aet=[".js",".mjs",".cjs",".ts"];function oV(e={}){let t=Router();function n(){let d=xt();return mo__default.dirname(d.configFilePath)}function o(d){return mo__default.join(n(),...d)}function r(d){let m=mo__default.relative(n(),d);return m?m.split(mo__default.sep):[]}function i(d,m){let p=oo__default.statSync(d),h=r(d);return r$.parse({name:m,absolutePath:d,relativePath:h.join(mo__default.sep),pathSegments:h,isDirectory:p.isDirectory(),size:p.size,createdAt:p.birthtime,modifiedAt:p.mtime,accessedAt:p.atime})}function s(d){let m=mo__default.relative(n(),d);return m===""||!m.startsWith("..")&&!mo__default.isAbsolute(m)}async function a(d){let m=xt();return fd(["*"],{cwd:d,ignore:m.config.exclude??[],maxDepth:1,nodir:false,signal:AbortSignal.timeout(Tet)})}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=mo__default.relative(d,m).split(mo__default.sep).join("/");return p?h?`${h}/`:"./":h}return t.post("/file-reference-suggestions",zt(async(d,m,p)=>{let h=v8.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??Aet).map(I=>I.toLowerCase())),S=l(f);if(S.directoryText.startsWith("/")){m.status(200).json({suggestions:[]});return}let b=mo__default.resolve(n(),...c(g)),v=mo__default.resolve(b,...c(S.directoryText));if(!s(b)||!s(v)){m.status(200).json({suggestions:[]});return}if(!oo__default.existsSync(v)||!oo__default.statSync(v).isDirectory()){m.status(200).json({suggestions:[]});return}let A;try{A=await a(v);}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=A.map(I=>{let _=mo__default.join(v,I);return {entryName:I,targetPath:_,isDirectory:oo__default.statSync(_).isDirectory()}}),w=S.filePrefix.toLowerCase(),O=R.filter(I=>I.entryName.startsWith(".")||!I.entryName.toLowerCase().startsWith(w)?false:I.isDirectory?true:y.has(mo__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:b,targetPath:I.targetPath,isDirectory:I.isDirectory})}));m.status(200).json({suggestions:O});})),t.post("/",zt(async(d,m,p)=>{let h,g;try{let A=E8.parse(d.body);h=A.pathSegments,g=A.directoriesOnly??!1;}catch(A){m.status(400).json({error:`Failed to parse folder read body: ${A}`});return}let f=o(h);if(!oo__default.existsSync(f)){m.status(404).json({error:`Path not found: ${h.join(mo__default.sep)}`});return}if(!oo__default.statSync(f).isDirectory()){m.status(400).json({error:`Path is not a directory: ${h.join(mo__default.sep)}`});return}let S;try{S=await a(f);}catch(A){if(A instanceof Error&&A.name==="TimeoutError"){m.status(408).json({error:"Folder listing timed out. This directory may contain too many files."});return}throw A}let b=S.map(A=>{let R=mo__default.join(f,A);return i(R,A)});if(g&&(b=b.filter(A=>A.isDirectory)),e.allowedFileTypes){let A=new Set(e.allowedFileTypes);b=(await Promise.all(b.map(async R=>{if(R.isDirectory||!(R.name.endsWith(".test.yaml")||R.name.endsWith(".module.yaml")))return R;let O=await Eet(R.absolutePath);return O!==void 0&&A.has(O)?R:null}))).filter(R=>R!==null);}let v={absolutePath:f,pathSegments:h,contents:b};m.status(200).json(v);})),t.put("/",zt(async(d,m,p)=>{let h;try{h=w8.parse(d.body).pathSegments;}catch(y){m.status(400).json({error:`Failed to parse folder create body: ${y}`});return}let g=o(h);if(oo__default.existsSync(g)){m.status(200).json({success:true,message:`Folder already exists: ${h.join(mo__default.sep)}`,pathSegments:h});return}oo__default.mkdirSync(g,{recursive:true});let f={success:true,message:`Folder created: ${h.join(mo__default.sep)}`,pathSegments:h};m.status(201).json(f);})),t.patch("/",zt(async(d,m,p)=>{let h,g;try{let v=R8.parse(d.body);h=v.pathSegments,g=v.newPathSegments;}catch(v){m.status(400).json({error:`Failed to parse folder update body: ${v}`});return}let f=o(h),y=o(g);if(!oo__default.existsSync(f)){m.status(400).json({error:`Folder not found: ${h.join(mo__default.sep)}`});return}if(oo__default.existsSync(y)){m.status(400).json({error:`Destination already exists: ${g.join(mo__default.sep)}`});return}let S=mo__default.dirname(y);oo__default.existsSync(S)||oo__default.mkdirSync(S,{recursive:true}),oo__default.renameSync(f,y);let b={success:true,message:`Folder moved from ${h.join(mo__default.sep)} to ${g.join(mo__default.sep)}`,pathSegments:g};m.status(200).json(b);})),t.delete("/",zt(async(d,m,p)=>{let h,g=true;try{let b=C8.parse(d.body);h=b.pathSegments,g=b.recursive??!0;}catch(b){m.status(400).json({error:`Failed to parse folder delete body: ${b}`});return}let f=o(h);if(!oo__default.existsSync(f)){m.status(200).json({success:true,message:`Folder not found: ${h.join(mo__default.sep)}`,pathSegments:h});return}if(!oo__default.statSync(f).isDirectory()){m.status(400).json({error:`Path is not a directory: ${h.join(mo__default.sep)}`});return}try{if(g)oo__default.rmSync(f,{recursive:!0,force:!0});else {if(oo__default.readdirSync(f).length>0){m.status(409).json({error:`Cannot delete non-empty directory without recursive flag: ${h.join("/")}`});return}oo__default.rmdirSync(f);}}catch(b){let{status:v,body:A}=xde(b,`delete folder ${h.join("/")}`);m.status(v).json(A);return}let S={success:true,message:`Folder deleted: ${h.join("/")}`,pathSegments:h};m.status(200).json(S);})),t}async function Eet(e){try{let t=await oo__default.promises.open(e,"r");try{let n=Buffer.alloc(4096),{bytesRead:o}=await t.read(n,0,n.length,0);return n.toString("utf-8",0,o).match(/^fileType:\s*(.+)$/m)?.[1]?.trim()}finally{await t.close();}}catch{}}var Hpe=Router();Hpe.get("/",async(e,t)=>{let n=xt(),o=No();if(!o){t.status(500).json({message:"API client not initialized"});return}let r=await eg(mp,o,n);t.status(200).json(r);});var rV=Hpe;var jpe=Router();jpe.get("/latest",async(e,t)=>{let n=No(),o=null;try{o=await n?.getLatestProductUpdate()??null;}catch(r){mp.debug({err:r},"Failed to fetch latest product update");}t.status(200).json({update:o});});var iV=jpe;var Ret=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return async()=>{t.info({sessionId:o},"Cancel event received");let r=n.getSession(o);if(!r)throw new Error("No active session found");try{r.controller.setClosed();}catch{}}},$pe={event:"cancel",createHandler:Ret};var Cet=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{testId:o,sessionId:r}=e;return async(i,s)=>{let{stepId:a,environment:l,parentStepIdChain:c}=i;t.info({testId:o,stepId:a},"Clearing AI action cache");try{let u=n.getSession(r);if(!u)throw new Error("No active session found");let d=oT(a,c.join(":")||void 0);await Promise.all(d.map(m=>u.cacheStorage.deleteStepCacheEntry({logger:t,testId:o,key:m,environment:l}))),s({ok:!0});}catch(u){t.error({testId:o,stepId:a,err:u},"Failed to clear AI action cache"),s({ok:false,error:z(u)});}}},Gpe={event:"clearAIActionCache",createHandler:Cet};var Iet=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return async(r,i)=>{let s=n.getSession(o);if(!s)throw new Error("No active session found");s.controller.setOpen();let a=s.controller.browser;try{let c=(await a.getBrowserState({skipWait:!0})).serialize();t.debug({a11yTree:c},"Fetched a11y tree from the browser"),i({a11yTree:c});}catch(l){t.error({err:l},"Error fetching a11y tree from the browser"),i({err:l.message});}}},zpe={event:"fetchA11yTree",createHandler:Iet};var xet=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return async(r,i)=>{let s=n.getSession(o);if(!s)throw new Error("No active session found");s.controller.setOpen();let a=s.controller.browser;try{let l=await a.html();i({html:l});}catch(l){t.error({err:l},"Error fetching DOM from the browser"),l.name==="TimeoutError"?i({err:"Timed out fetching DOM tree. This page may be too large for Momentic to process."}):i({err:l.message});}}},Vpe={event:"fetchDom",createHandler:xet};var _et=({metadata:e,logger:t,globalE2eStateManager:n})=>{let{sessionId:o}=e;return r=>{t.info({sessionId:o,reason:r},`Disconnect event received (${r})`),n.removeSession(o,t);}},Wpe={event:"disconnect",createHandler:_et};function Ja(e){let{result:t,nestedResults:n}=e;if(!e.nestedResults.length)return;let{firstMetadata:o,lastMetadata:r}=Pet(n);Oet(t,o,r);let i=n[n.length-1];i.status!=="SUCCESS"&&(t.message=i.message,t.failureReason=i.failureReason,t.failureClassification=i.failureClassification);let s=[...e.asyncTasks];e.asyncTasks.push((async()=>{try{await Met(s,t,o,r);}catch(a){e.logger.error({result:e.result,err:a},"Error hoisting scalar result metadata");}})());}function Pet(e){let t=e[0],n;for(;;){switch(t.type){case "PRESET_ACTION":case "CONDITIONAL":n=t;break;case "AI_ACTION_DYNAMIC":case "AI_ACTION":case "MODULE":case "SECTION":case "WHILE_LOOP":if(!t.results.length){n=t;break}t=t.results[0];break;default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}if(n)break}let o=e[e.length-1],r;for(;;){switch(o.type){case "PRESET_ACTION":{r=o;break}case "AI_ACTION_DYNAMIC":case "CONDITIONAL":case "AI_ACTION":case "MODULE":case "SECTION":case "WHILE_LOOP":if(!o.results.length){r=o;break}o=o.results[o.results.length-1];break;default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}if(r)break}return {firstMetadata:n,lastMetadata:r}}function Oet(e,t,n){t&&(e.beforeUrl=t.beforeUrl),n&&(e.afterUrl=n.afterUrl,e.data=n.data);}async function Met(e,t,n,o){await Promise.allSettled(e),n&&(t.beforeSnapshot=n.beforeSnapshot),o&&(t.afterSnapshot=o.afterSnapshot);}function xC(e,t,n){let o={};return Object.entries(t).forEach(([i,s])=>{o[i]=JSON.stringify(s);}),{type:"MODULE",id:e.id,moduleId:e.moduleId,moduleName:e.name,startedAt:new Date,cacheConfig:e.cacheConfig,inputs:o,results:[],finishedAt:new Date,status:n}}async function mg(e,t,n){return ket(e,t,n)}async function ket(e,t,n){let o=new Date;try{return n.throwIfAborted(),await t()}catch(r){let i=new Date,s="FAILED",a;if(n.aborted||r instanceof DOMException&&r.name==="AbortError"?(a="Step aborted by user.",s="CANCELLED"):r instanceof oe?a=`${r}`:a=`An unexpected error occurred: ${r.message}`,e.type==="RESOLVED_MODULE"){let l=xC(e,{},"FAILED");return l.message=a,l.startedAt=o,l.finishedAt=i,l}return {...uT(e),startedAt:o,finishedAt:i,status:s,data:null,message:a,results:[]}}}async function Ps(e,t){let n=false;try{return e&&!e.state.failureRecoveryDisabled&&(e.state.failureRecoveryDisabled=!0,n=!0),await t()}finally{e&&n&&(e.state.failureRecoveryDisabled=void 0);}}var hA=20,FL=100;function sV(e){return e.baseDerivedFrom==="estimate"}var Let={config:"the main branch configured for this project","run-metadata":"the main branch recorded with this run","origin-head":"the remote's default branch from origin/HEAD, which git records at clone time and never refreshes \u2014 if this repository's default branch has changed since, this window is against the old one",estimate:"an estimate: a fixed number of commits back from head, because the main branch could not be resolved. The window therefore contains commits made on the main branch that this branch did not make, and a file may appear newly added when it merely predates the base. Do not conclude that this branch introduced a change from its presence in this window alone"};function BL(e){return e.baseDerivedFrom?` The base of this comparison window is ${Let[e.baseDerivedFrom]}.`:""}function L({text:e,section:t}){if(!t)return [{type:"text",text:e}];let n=`### ${t}`;return e.length===0?[{type:"text",text:n}]:[{type:"text",text:`${n}
|
|
446
446
|
${e}`}]}function ki({base64Data:e,mediaType:t,section:n}){return n?[{type:"text",text:`### ${n}`},{type:"media",data:e,mediaType:t}]:[{type:"media",data:e,mediaType:t}]}function UL(e,t){return {role:"user",content:e.map(o=>o.type==="media"?{type:"image",image:o.data,mediaType:o.mediaType}:{type:"text",text:o.text}),providerOptions:t}}function Y(e){if(e.length===0)throw new Gt("No content parts provided to construct the tool response content.");return {type:"content",value:e}}function Xa(e){return {type:"content",value:[{type:"text",text:e}]}}function lV({data:e,filters:t}){let n=Gne(e,t??[]);return Ku(n)?n:{}}function HL({data:e,filters:t,tokenLimit:n,perItemLimit:o=Math.max(1,Math.floor(n/4))}){let r=lV({data:e,filters:t}),i=JSON.stringify(r,null,2);if(Rt(i)<=n)return i;let s=cV({environmentVariables:r,perItemLimit:o}),a=JSON.stringify(s,null,2);return Rt(a)<=n?a:JSON.stringify(uV(s,n),null,2)}function cV({environmentVariables:e,perItemLimit:t}){return Object.fromEntries(Object.entries(e).map(([n,o])=>{if(Ku(o))return [n,qpe(o,t)];let r=qpe({[n]:o},t);return [n,r[n]]}))}function qpe(e,t=2e4){let n={};for(let[o,r]of Object.entries(e)){if(typeof r=="object"&&r!==null){let i=JSON.stringify(r,null,2);if(Rt(i)>t){n[o]="[too large truncated]";continue}n[o]=r;continue}if(typeof r=="string"){n[o]=Net(r,t);continue}n[o]=r;}return n}function Net(e,t){let n=Rt(e);if(n<=t)return e;let o=Math.max(1,Math.floor(t*(e.length/n)));return `${e.slice(0,o)}... [truncated]`}function uV(e,t){let n={},o=0,r=Object.entries(e).map(([i,s])=>{let a=JSON.stringify(s,null,2),l=Rt(a);return {key:i,value:s,tokens:l}}).sort((i,s)=>i.tokens-s.tokens);for(let{key:i,value:s,tokens:a}of r)o+a<=t&&(n[i]=s,o+=a);return n}function Kpe({projectRoot:e,filePath:t,pathLabel:n="path"}){if(!t||!mo__default.isAbsolute(t))return t;let o=mo__default.relative(e,t);if(o.startsWith("..")||mo__default.isAbsolute(o))throw new Error(`Error: ${n} "${t}" must be inside project root "${e}".`);return o}function Ype(e){return e.map(t=>{switch(t.type){case "text":return t;case "media":return {type:"image",data:t.data,mimeType:t.mediaType};default:return (o=>{throw new Error("Unhandled content part")})()}})}var ehe=["__generated__"],the=[".env",".npmrc",".netrc",".git-credentials","credentials","credentials.json"],nhe=[".env.","id_rsa","id_ecdsa","id_ed25519","service-account"],ohe=[".pem",".key",".p12",".pfx",".keystore",".jks",".tfstate"],rhe=[".tfstate."],$L=[...the.map(e=>`**/${e}`),...nhe.map(e=>`**/${e}*`),...ohe.map(e=>`**/*${e}`),...rhe.map(e=>`**/*${e}*`)];function Jpe(e){let t=mo__default.basename(e).toLowerCase();return the.includes(t)||nhe.some(n=>t.startsWith(n))||ohe.some(n=>t.endsWith(n))||rhe.some(n=>t.includes(n))}function gA(e){return `Relative paths resolve at the Git repository root \`${e}\`, never at the server cwd; absolute paths are also accepted.`}function Xpe(e,t){return mo__default.resolve(mo__default.resolve(e),t)}async function _C(e,t){let n=Xpe(e,t);if(mo__default.isAbsolute(t)||await Qpe(n))return n;let o=Xpe(process.cwd(),t);return o===n||!await Qpe(o)?n:o}async function Qpe(e){try{return await mV.stat(e),!0}catch{return false}}async function ihe(e,t){let n=await _C(e,t);if(Jpe(n))throw new Error(`Path '${t}' matches the sensitive-file deny list (likely credentials or secrets) and cannot be read.`);let o=await mV.realpath(n);if(Jpe(o))throw new Error(`Path '${t}' matches the sensitive-file deny list (likely credentials or secrets) and cannot be read.`);return o}var Fet=z$1.object({pattern:z$1.string().min(1).describe("Glob pattern to match against file paths (relative to the search root). Patterns are NOT recursive by default \u2014 `*` matches a single path segment, the same way shell globs do. Prefix with `**/` for recursive globs (e.g. `**/*.ts` to find all TypeScript files, `**/open-app*` to find any file whose basename starts with `open-app`)."),path:z$1.string().optional().describe("Optional 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$1.int().min(1).max(1e3).default(100).describe("Maximum number of paths to return. Defaults to 100.")});function Bet(e){return `Find files by glob pattern. ${gA(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 zL(e){return {tool:tool({description:Bet(e.repoRoot),inputSchema:Fet,execute:async(n,{abortSignal:o})=>{let r=await Uet(n,e,o);return Y(L({text:Het(n.pattern,r)}))},toModelOutput:({output:n})=>n}),name:ar}}async function Uet({pattern:e,path:t,maxResults:n},o,r){let i=sc({signal:r,timeoutMs:3e4});i.throwIfAborted();let s=mo__default.resolve(o.repoRoot),a=t?await _C(s,t):s,l=await fd([e],{cwd:a,ignore:[...ehe.map(c=>`**/${c}`),...$L],maxDepth:1/0,nodir:true,signal:i});return i.throwIfAborted(),l.slice(0,n).map(c=>mo__default.relative(s,mo__default.resolve(a,c)))}function Het(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(`
|
|
447
447
|
`)}async function VL({baseRef:e,headRef:t,context:n,abortSignal:o}){if(!e&&!t)return {baseSha:n.baseSha,headSha:n.headSha};if(!e||!t)throw new Error("baseRef and headRef must be provided together");let[r,i]=await Promise.all([ns(`${e}^{commit}`,n.repoRoot,o),ns(`${t}^{commit}`,n.repoRoot,o)]);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 PC({lines:e,startLine:t,maxLines:n,maxBytes:o,truncateLineChars:r}){let i=e.length,s=Math.max(1,t);if(s>i)return {content:"",endLine:s-1,droppedLines:0,droppedBytesFromByteCap:0};let a=Math.min(i,s-1+n),l=e.slice(s-1,a).map(g=>r?she(g,300):g),c=l.join(`
|
|
448
448
|
`),u=Buffer.byteLength(c,"utf-8");if(u<=o)return {content:c,endLine:a,droppedLines:i-a,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>o)break;m+=f,d++;}let p=l.slice(0,d).join(`
|
|
@@ -7951,7 +7951,7 @@ ${l}`,{errOptions:{cause:e}})}if(i.includes("element is not visible")){let l="Th
|
|
|
7951
7951
|
//# sourceURL=momentic-injected/extra-scripts.js`}function Cbe(e){return e?.split(",").map(t=>t.trim()).filter(t=>t.length>0)??[]}function Mut(e){let t=e.indexOf("=");return t===-1?e:e.slice(0,t)}function wbe(e,t=process.env.MOMENTIC_CHROME_REMOVE_ARGS){let n=new Set(Cbe(t));return n.size===0?e:e.filter(o=>{let r=Mut(o);return !n.has(o)&&!n.has(r)})}var kut=500,Lut=2e3,Nut=3,Dut=3e4,sI=class{constructor(t,n,o={}){this.debugDataType=t;this.logger=n;this.slowOperationMs=o.slowOperationMs??kut,this.hardOperationMs=o.hardOperationMs??Lut,this.slowOperationLimit=o.slowOperationLimit??Nut,this.windowMs=o.windowMs??Dut,this.now=o.now??Date.now,this.consoleWarn=o.consoleWarn??(r=>C.warn(r)),this.onDisable=o.onDisable,this.onResume=o.onResume,this.resumeAfterMs=o.resumeAfterMs,this.scheduleResume=o.scheduleResume??((r,i)=>{let s=setTimeout(r,i);return s.unref(),()=>clearTimeout(s)}),this.activityWindowMs=o.activityWindowMs,this.maxEventsPerWindow=o.maxEventsPerWindow,this.maxCharsPerWindow=o.maxCharsPerWindow,this.maxActiveOperations=o.maxActiveOperations;}slowOperationMs;hardOperationMs;slowOperationLimit;windowMs;now;consoleWarn;onDisable;onResume;resumeAfterMs;scheduleResume;activityWindowMs;maxEventsPerWindow;maxCharsPerWindow;maxActiveOperations;slowOperationTimestamps=[];disabled=false;cancelResume;activeOperations=0;activityWindowStartedAt;activityEventCount=0;activityCharCount=0;isDisabled(){return this.disabled}dispose(){this.cancelResume?.(),this.cancelResume=void 0;}async run({stage:t,fn:n}){if(this.disabled)return;if(this.maxActiveOperations!==void 0&&this.activeOperations>=this.maxActiveOperations){this.disable({stage:t,reason:"concurrent operation limit reached"});return}let o=performance.now();this.activeOperations++;try{await n();}finally{this.activeOperations--,this.record({stage:t,durationMs:performance.now()-o});}}record({stage:t,durationMs:n}){if(this.disabled||n<this.slowOperationMs)return;let o=this.now();this.slowOperationTimestamps=this.slowOperationTimestamps.filter(i=>o-i<=this.windowMs),this.slowOperationTimestamps.push(o);let r=n>=this.hardOperationMs;!r&&this.slowOperationTimestamps.length<this.slowOperationLimit||this.disable({stage:t,durationMs:n,reason:r?"hard operation latency limit reached":"repeated slow operations"});}recordActivity({stage:t,charCount:n}){if(this.disabled||this.activityWindowMs===void 0||this.maxEventsPerWindow===void 0&&this.maxCharsPerWindow===void 0)return;let o=this.now();(this.activityWindowStartedAt===void 0||o-this.activityWindowStartedAt>=this.activityWindowMs)&&(this.activityWindowStartedAt=o,this.activityEventCount=0,this.activityCharCount=0),this.activityEventCount++,this.activityCharCount+=n;let r=this.maxEventsPerWindow!==void 0&&this.activityEventCount>=this.maxEventsPerWindow,i=this.maxCharsPerWindow!==void 0&&this.activityCharCount>=this.maxCharsPerWindow;!r&&!i||this.disable({stage:t,reason:r?"event rate limit reached":"log volume limit reached",activityEventCount:this.activityEventCount,activityCharCount:this.activityCharCount,activityWindowMs:this.activityWindowMs});}recordBufferOverflow({stage:t,bufferLimit:n}){this.disabled||this.disable({stage:t,reason:"buffer capacity reached",bufferLimit:n});}disable({stage:t,reason:n,durationMs:o,activityEventCount:r,activityCharCount:i,activityWindowMs:s,bufferLimit:a}){this.disabled=true;let l=`Disabling browser ${this.debugDataType} debug data recording to protect Playwright performance`;this.logger.warn({debugDataType:this.debugDataType,stage:t,durationMs:o===void 0?void 0:Math.round(o),activeOperations:this.activeOperations,slowOperationCount:this.slowOperationTimestamps.length,slowOperationMs:this.slowOperationMs,hardOperationMs:this.hardOperationMs,windowMs:this.windowMs,activityEventCount:r,activityCharCount:i,activityWindowMs:s,bufferLimit:a,maxActiveOperations:this.maxActiveOperations,reason:n},l);let c=o!==void 0?`${Math.round(o)}ms during ${t}`:`${n} during ${t}`;this.consoleWarn(`${l} (${c})`);try{this.onDisable?.();}catch(u){this.logger.warn({err:u,debugDataType:this.debugDataType},"Failed to stop browser debug data recording");}this.scheduleResumeIfEnabled();}scheduleResumeIfEnabled(){this.resumeAfterMs!==void 0&&(this.cancelResume?.(),this.cancelResume=this.scheduleResume(()=>this.resume(),this.resumeAfterMs));}resume(){if(this.cancelResume=void 0,!!this.disabled){this.disabled=false,this.slowOperationTimestamps=[],this.activityWindowStartedAt=void 0,this.activityEventCount=0,this.activityCharCount=0,this.logger.info({debugDataType:this.debugDataType},"Resuming browser debug data recording after cooldown");try{this.onResume?.();}catch(t){this.logger.warn({err:t,debugDataType:this.debugDataType},"Failed to resume browser debug data recording");}}}};function Aq(e){let t=[],n="";for(let o of e)o==="+"&&n?(t.push(n),n=""):n+=o;return t.push(n),t}function AD(e,t){return e instanceof Error&&e.message.includes("Unknown key:")?new qp(`Invalid key "${t}" in keyboard step. Use the canonical key name (e.g. "Escape", "Enter", "ArrowUp", "Control", "Meta").`,{cause:e}):e}var Fut=["clipboard-read","clipboard-write","microphone","camera","geolocation","local-network-access"];function Ibe(e){return e}function xbe(e){return Ibe(e||Fut)}var Eq="__momentic_session_storage_initialized";function aI(e){return e.parentFrame!==void 0}async function _be(e,t,n){try{let o=await Uut(e);if(o.entries.length===0)return;let r=t.origins?.find(i=>i.origin===o.origin);r?r.sessionStorage=o.entries:(t.origins=t.origins??[],t.origins.push({origin:o.origin,localStorage:[],sessionStorage:o.entries})),n.info(`Saved ${o.entries.length} session storage entries`);}catch(o){n.warn({err:o},"Failed to extract session storage, continuing...");}}async function Uut(e){return e.evaluate(t=>{let n=[];for(let o=0;o<window.sessionStorage.length;o++){let r=window.sessionStorage.key(o);if(r&&r!==t){let i=window.sessionStorage.getItem(r);i!==null&&n.push({name:r,value:i});}}return {origin:window.location.origin,entries:n}},Eq)}function Pbe(e,t){if(!e||!t)return;let n=e.x+e.width/2,o=e.y+e.height/2,r=t.x+t.width/2,i=t.y+t.height/2,s=r-n,a=i-o,l=Math.atan2(a,s);return l<0?l+2*Math.PI:l}function Obe(e,t){if(!e||!t)return;let n=e.x+e.width/2,o=e.y+e.height/2,r=t.x+t.width/2,i=t.y+t.height/2,s=r-n,a=i-o;return Math.sqrt(s*s+a*a)}async function Hut(e){let{initialLocationResult:t,cacheEvaluationParams:n,locator:o,bannedAttributes:r}=e;return o.evaluate((i,s)=>{let l=window._momentic,{initialLocationResult:c,cacheEvaluationParams:u,bannedAttributes:d}=s;if(!l?.momenticConstants)throw new Error("Momentic constants not found");if(!l.getImportantElementAttributes)throw new Error("Momentic element serialization scripts not found");if(i.tagName.toLowerCase()!==c.tagName.toLowerCase())return "Tag name mismatch";let m=(i.textContent??"").slice(0,l.momenticConstants.serializedElementForCachingTruncateLength),p=(c.textContent??"").slice(0,l.momenticConstants.serializedElementForCachingTruncateLength);if(m!==p)return "Text content mismatch";let h=l.getImportantElementAttributes(i,{bannedAttributes:d});for(let[y,S]of Object.entries(c.importantAttributes))if(h[y]!==S)return `Attribute ${y} mismatch`;let g=c.boundingBox.width*c.boundingBox.height,f=i.getBoundingClientRect().width*i.getBoundingClientRect().height;if(g===0||f===0){if(g!==f)return "Area mismatch"}else if(Math.abs(g-f)/g>.05)return "Area mismatch";if(c.identityHash&&l.getElementIdentityHash&&c.identityHash!==l.getElementIdentityHash(i,{bannedAttributes:d}))return "Identity hash mismatch";if(u&&l.evaluatePrimaryCaches){let{css:y,hybrid:S}=l.evaluatePrimaryCaches(u);if(S?.result&&S.result.mPath&&c.mPath&&JSON.stringify(S.result.mPath)!==JSON.stringify(c.mPath))return "Hybrid selector returned a different element than the original";if(!S&&y&&y.result&&y.result.dataMomenticId!==c.dataMomenticId)return "CSS selector returned a different element than the original"}},{initialLocationResult:t,cacheEvaluationParams:n,bannedAttributes:r},{timeout:gt})}async function vq(e){let{logger:t}=e;try{let n=await Hut(e);if(!n)return;throw t.warn({failReason:n},"Locator no longer matches cache, re-triggering evaluation"),new ku("Locator no longer matches cache")}catch(n){if(n instanceof ku)throw n;if(BU(n))throw t.warn({err:n},"Locator selector is no longer valid, re-triggering evaluation"),new ku("Locator selector is no longer valid");t.warn({err:n},"Failed to check whether locator has drifted from cache");}}var $ut=createRequire(import.meta.url),ED;function vD(){if(process.env.MOMENTIC_DISABLE_SHARP==="1")return null;if(ED===void 0)try{ED=$ut("sharp");}catch{ED=null;}return ED}async function Mbe(e,t){let{data:n,info:o}=await e(t,{ignoreIcc:true}).toColourspace("srgb").ensureAlpha().raw().toBuffer({resolveWithObject:true});if(o.channels!==4)throw new Error(`Expected sharp to decode RGBA, got ${o.channels} channels`);return {data:n,width:o.width,height:o.height}}var Dbe=100,kbe=Buffer.from([137,80,78,71,13,10,26,10]);function wD(e){if(e.subarray(0,kbe.length).equals(kbe))return Vut(e);if(e.length>=2&&e[0]===255&&e[1]===216)return Wut(e);throw new Error("Unsupported image format: expected PNG or JPEG")}function Vut(e){if(e.length<24||e.toString("latin1",12,16)!=="IHDR")throw new Error("Invalid PNG: missing IHDR chunk");return {width:e.readUInt32BE(16),height:e.readUInt32BE(20)}}function Wut(e){let t=2;for(;t+4<=e.length;){if(e[t]!==255)throw new Error("Invalid JPEG: expected marker");let n=e.readUInt8(t+1);if(n===255){t+=1;continue}if(n===1||n>=208&&n<=217){t+=2;continue}if(n>=192&&n<=207&&n!==196&&n!==200&&n!==204){if(t+9>e.length)break;return {height:e.readUInt16BE(t+5),width:e.readUInt16BE(t+7)}}t+=2+e.readUInt16BE(t+2);}throw new Error("Invalid JPEG: no frame header found")}async function Fbe(e,t){let n=vD();return de({name:"browser.image.resize",serviceName:"browser",attributes:{"momentic.image_processor":n?"sharp":"jimp"},fn:async()=>n?n(e).resize(t.width,t.height,{fit:"fill"}).jpeg({quality:Dbe}).toBuffer():(await Jimp.fromBuffer(e)).resize({w:t.width,h:t.height}).getBuffer("image/jpeg")})}async function Bbe(e,t){let n=vD();return de({name:"browser.image.crop",serviceName:"browser",attributes:{"momentic.image_processor":n?"sharp":"jimp"},fn:async()=>n?n(e).extract({left:t.x,top:t.y,width:t.width,height:t.height}).jpeg({quality:Dbe}).toBuffer():(await Jimp.fromBuffer(e)).crop({x:t.x,y:t.y,w:t.width,h:t.height}).getBuffer("image/jpeg")})}function Ube(e,t,n=.01){let o=vD();return de({name:"browser.getJpegDiffPercent",serviceName:"browser",attributes:{"momentic.image_processor":o?"sharp":"jpeg-js"},fn:async()=>{if(e.equals(t))return 0;let[r,i]=await Promise.all([Lbe(e,o),Lbe(t,o)]);if(r.width!==i.width||r.height!==i.height)return 100;let s=r.width,a=r.height;return zut(r.data,i.data,null,s,a,{threshold:n})/(s*a)*100}})}async function Lbe(e,t){return t?Mbe(t,e):Dq.decode(e)}var jbe=["date","datetime-local","month","time","week"],Hbe={date:/^\d{4}-\d{2}-\d{2}$/,"datetime-local":/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/,month:/^\d{4}-\d{2}$/,time:/^\d{2}:\d{2}$/,week:/^\d{4}-W\d{2}$/};async function $be(e){try{await ge(qut(e),{milliseconds:gt});}catch(t){e.logger.warn({err:t},"Failed to transform native datetime input, continuing...");}}async function qut({root:e,text:t,options:n,logger:o,callbacks:r}){let i=(await Or({root:e,fn:()=>document.activeElement?.getAttribute("type")??"",timeout:Mn,arg:void 0,waitForPageLoad:r.waitForPageLoad,codePath:"transforming native datetime input"})).toLowerCase();if(!Hbe[i])return;Hbe[i].test(t)&&o.warn(`Detected datetime input (${t}) in normalized format - this may fail to fill correctly as it is not how the user would input the value`),n.clearContent=false,n.fill=void 0,o.info("Transforming datetime input to use sequential key presses");}var Gbe=z$1.object({x:z$1.number(),y:z$1.number()}),zbe=z$1.object({doubleClick:z$1.boolean().optional(),rightClick:z$1.boolean().optional(),force:z$1.boolean().optional(),waitForDownload:z$1.boolean().optional(),delayMs:z$1.number().optional(),downloadTimeoutMs:z$1.number().optional(),relativePosition:Gbe.optional(),iterations:z$1.number().optional()});z$1.object({relativePosition:Gbe.optional()});z$1.object({repeat:z$1.number().optional(),convertMeta:z$1.boolean().optional().describe("misleading name due to backcompat. converts keyshortcuts + meta/control to platform-specific combos. defaults to true"),delayMs:z$1.number().optional()});async function RD(e){return de({name:"browser.highlightLocator",serviceName:"browser",fn:()=>Kut(e)})}async function Kut({locator:e,callbacks:t,logger:n,timeoutMs:o=Mn}){try{await wq(t,o);let r=e.evaluate(s=>{let l=window._momentic;if(!l)throw new Error("Momentic namespace is not initialized");l.removeHighlightTimers??=[],l.removeHighlightFunctions??={};let c=h=>{let f=window.getComputedStyle(h,null).getPropertyValue("display");if(f==="none"||f==="contents")return !1;let y=h.getBoundingClientRect();return !(!y.height||!y.width)},u=0;for(;!c(s)&&u<3;){if(!s.parentElement)throw new Error("No eligible non-empty parent found for highlighting");s=s.parentElement,u++;}let d=s.style.getPropertyValue("outline"),m=s.style.getPropertyPriority("outline");s.style.setProperty("outline","5px dashed rgb(255, 0, 153)","important");let p=`momentic${Math.floor(Math.random()*1e7)}`;l.removeHighlightFunctions[p]=()=>{s.style.removeProperty("outline"),s.style.setProperty("outline",d,m),s.getAttribute("style")||s.removeAttribute("style");},l.removeHighlightTimers.push(window.setTimeout(()=>{l.removeHighlightFunctions?.[p]?.(),l.removeHighlightFunctions?.[p]&&delete l.removeHighlightFunctions[p];},5e3));},void 0,{timeout:o}).then(()=>!0).catch(s=>(n.debug({err:s},"Failed to add node highlight, a page navigation likely occurred. This is non-fatal for tests."),!1));return await ge(r,{milliseconds:o})}catch(r){return n.debug({err:r},"Failed to add node highlight, a page navigation likely occurred. This is non-fatal for tests."),false}}async function wq(e,t=Mn){let n=await e.state.getRoot();await Or({root:n,fn:()=>{let i=window._momentic;if(!i)return;let s=i.removeHighlightTimers??[];for(;s.length;){let a=s.pop();a!==void 0&&clearTimeout(a);}Object.values(i.removeHighlightFunctions??{}).forEach(a=>{a();});},timeout:t,arg:void 0,waitForPageLoad:e.waitForPageLoad,codePath:"removing element highlights"});}async function Rq(e){let t=!!e.browserCallbacks.state.userBrowserSettings.visualActions;return jy({action:"clicking element",targetingResult:e.targetingResult,logger:e.logger,retryTimeoutMs:e.retryTimeoutMs,callbacks:e.browserCallbacks,func:async n=>Wbe({...e,targetingResult:n,useVisualClick:t})})}async function Cq({targetingResult:e,relativePosition:t}){let n=e.serverSideBoundingBox??await e.locator.boundingBox({timeout:gt}),o=t.x,r=t.y;return n?.width&&(o=Math.max(0,Math.min(t.x,n.width))),n?.height&&(r=Math.max(0,Math.min(t.y,n.height))),{x:(n?.x??0)+o,y:(n?.y??0)+r}}async function Qut(e){return de({name:"browser.applyChakraClickRedirect",serviceName:"browser",fn:()=>Zut(e)})}async function Zut({actionSource:e,position:t,targetingResult:n,logger:o}){let{locator:r}=n;if(e!=="click"||t)return {locator:r,position:t,redirected:false};let i=await zSe({targetingResult:n,logger:o});return i?{locator:i.locator,position:i.relativePoint,redirected:true}:{locator:r,position:t,redirected:false}}async function edt(e,t){try{return await tdt(e,t)}catch(n){throw t.logger.warn({redirectionAttemptError:n,originalError:e},"Error handling click error, rethrowing original error"),e}}async function tdt(e,t){let{logger:n,redirectionAttempts:o=0}=t,r=t.targetingResult.locator;if(e.message.includes("label")&&e.message.includes("for=")&&e.message.includes("intercepts pointer events")){let i=await r.getAttribute("id",{timeout:Mn});if(!i)throw e;let s=r.page().locator(`[for=${JSON.stringify(i)}]`),a=await s.boundingBox({timeout:Mn});if(!a||a.width===0||a.height===0)throw n.warn("Label element has no bounding box, throwing original error..."),e;return n.warn({err:e},"Attempting locator redirection due to input being covered by label"),Wbe({...t,targetingResult:{locator:s,originalElementLocationResult:void 0,serverSideBoundingBox:a},redirectionAttempts:o+1})}else throw n.warn({err:e},"Click error does not match any known recoverable patterns, rethrowing"),e}async function ndt(e){let{logger:t,targetingResult:n,position:o,options:r}=e,i=zbe.safeParse(r),s=Date.now(),{clickX:a,clickY:l,reason:c}=await sdt({targetingResult:n,position:o,options:r,logger:t});return t.info({position:o,options:i.success?i.data:void 0,clickLocation:{clickX:a,clickY:l,reason:c},duration:Date.now()-s},"Visual click"),{x:a,y:l}}async function odt(e){return de({name:"browser.locatorBasedClickImplementation",serviceName:"browser",fn:()=>rdt(e)})}async function rdt(e){let{actionSource:t,targetingResult:n,options:o,logger:r}=e,i=e.targetingResult.locator,s=o?.relativePosition??e.position;({locator:i,position:s}=await Qut({actionSource:t,position:s,targetingResult:n,logger:r}));let a=o?.force||n.hints?.force||false;a&&!s&&n.hints?.relativeXYToLocator&&(s=n.hints.relativeXYToLocator);let l=i.toString();r.info({locator:l,position:s,forceClick:a},"Locator click");try{qbe(o)?await i.dblclick({button:o?.rightClick?"right":"left",timeout:gt,position:s,delay:o?.delayMs??25,force:a,noWaitAfter:!0}):await i.click({button:o?.rightClick?"right":"left",timeout:gt,position:s,delay:o?.delayMs??25,force:a,clickCount:o?.iterations,noWaitAfter:!0});}catch(c){if(udt(c))r.warn({err:c},"Click action timed out while waiting for navigation after completion, continuing...");else {if((e.redirectionAttempts??0)<1)return r.warn({err:c},"Error clicking on locator, attempting to recover..."),edt(c,{...e,targetingResult:n});throw c}}return {locatorSource:l}}async function Wbe(e){let{options:t,logger:n,browserCallbacks:o,controllerCallbacks:r,useVisualClick:i,targetingResult:s}=e,a=s.locator.page(),l,c;if(t?.waitForDownload){let p=a.context(),h=new Set(p.pages());c=h,l=(async()=>{let g=t.downloadTimeoutMs??nI;try{return await p.waitForEvent("download",{timeout:g,predicate:f=>{let y=f.page();return y===a||!h.has(y)}})}catch(f){return f instanceof errors.TimeoutError?new oe("ActionFailureError",`Download did not complete in ${g}ms`):new oe("ActionFailureError",`Download failed: ${f.message}`)}})();}try{await RD({locator:s.locator,callbacks:o,logger:n,timeoutMs:Mn});}catch(p){n.warn({err:p},"Error highlighting locator in click, continuing...");}let u,d,m=async()=>{if(i){u=await ndt(e);return}d=(await odt(e)).locatorSource;};if(e.actionSource==="click"?await o.runWithMainFrameNavigationLatch({page:a,action:m}):await m(),t?.waitForDownload)if(l){if(!r?.createIsolatedFolder)throw new oe("InternalWebAgentError","Cannot wait for download without a callback to create an isolated folder");n.info("Waiting for download to start and complete");let p=await ge(l,{milliseconds:t.downloadTimeoutMs??nI});if(p instanceof Error)throw p;let h=await cdt(p,r.createIsolatedFolder,n,o);return await ldt({download:p,clickPage:a,pagesBeforeClick:c,logger:n}),{downloadedFile:h,coordinates:u,locatorSource:d}}else throw new Error("No download promise or error but the step requested to wait for a download");return {coordinates:u,locatorSource:d}}async function idt(e,t){let n=e.serverSideBoundingBox??await e.locator.boundingBox({timeout:gt});if(!n){let i=e.originalElementLocationResult?.serializedElement;throw new oe("ActionFailureError",`${UU}${i?`: ${i}`:""}`)}if(e.hints?.relativeXYToLocator){let i=n.x+e.hints.relativeXYToLocator.x,s=n.y+e.hints.relativeXYToLocator.y;return [{x:i,y:s},"targeting hint"]}let o=n.x+n.width/2,r=n.y+n.height/2;return [{x:o,y:r},"halfway point"]}async function sdt(e){return de({name:"browser.clickOnLocatorXY",serviceName:"browser",fn:()=>adt(e)})}async function adt({options:e,targetingResult:t,position:n,logger:o}){let r,i,s;if(e?.relativePosition)(({x:r,y:i}=await Cq({targetingResult:t,relativePosition:e.relativePosition}))),s="relative position from user";else if(n){let u=t.serverSideBoundingBox??await t.locator.boundingBox({timeout:gt});r=(u?.x??0)+n.x,i=(u?.y??0)+n.y,s="predefined position";}else {let[u,d]=await idt(t);r=u.x,i=u.y,s=d;}let a=t.locator.page(),l=e?.rightClick?"right":"left",c=e?.delayMs??25;return qbe(e)?await a.mouse.dblclick(r,i,{button:l,delay:c}):await a.mouse.click(r,i,{button:l,delay:c,clickCount:e?.iterations}),{clickX:r,clickY:i,reason:s}}function qbe(e){return e?.doubleClick===true||e?.iterations===2}async function ldt(e){let{download:t,clickPage:n,pagesBeforeClick:o,logger:r}=e,i=t.page();if(!(i===n||i.isClosed()||o?.has(i)))try{await i.close(),r.info("Closed transient tab opened for download");}catch(s){r.warn({err:s},"Failed to close transient download tab, continuing...");}}async function cdt(e,t,n,o){n.info("Download detected, saving file to disk");let r=o.state.isRemoteBrowser,i;r||(i=await e.path());let s=aq(e.suggestedFilename()),a=t();await de({name:"web-agent.download.save_as",attributes:{"momentic.download.filename":s.slice(0,200),"momentic.download.remote_browser_session":r},fn:()=>ge(e.saveAs(join(a,s)),{milliseconds:nI,message:new oe("ActionFailureError",`Download save timed out after ${nI/1e3}s.`)})}),i&&rmSync(i,{force:true}),setTimeout(()=>{rmSync(a,{recursive:true,force:true});},5*60*1e3);let l=qSe(basename(a),s);return n.info({uri:l,downloadFolder:a},"Saved download to isolated folder"),l}function udt(e){return e.message.includes("locator.click: Timeout")&&e.message.includes("click action done")}async function Iq({frame:e,page:t,deltaX:n,directionX:o,deltaY:r,directionY:i,signal:s,callbacks:a,logger:l}){if(!n&&!r)return;let c=o==="left"?-1:1,u=i==="up"?-1:1;if(e)await Or({root:e,fn:([d,m,p,h])=>window.scrollTo(window.scrollX+(d??window.innerWidth)*p,window.scrollY+(m??window.innerHeight)*h),arg:[n,r,c,u],waitForPageLoad:a.waitForPageLoad,timeout:zn,codePath:"scrolling page"});else {let d=t.viewportSize()||qi,m=await Or({root:t,fn:()=>document.body.scrollHeight,arg:void 0,waitForPageLoad:a.waitForPageLoad,timeout:zn,codePath:"computing page height"}),[p,h,g]=await Or({root:t,fn:()=>{let f=document.activeElement;if(!f)return [void 0,void 0,void 0];let y=f.getBoundingClientRect();return [f.scrollTop,y.x,y.y]},arg:void 0,waitForPageLoad:a.waitForPageLoad,timeout:zn,codePath:"computing active element position"});await t.mouse.wheel((n??d.width)*c,(r??d.height)*u);try{let f=Date.now();for(;Date.now()-f<zn;){s?.throwIfAborted();let y=await ge(t.evaluate(()=>document.body.scrollHeight),{milliseconds:Mn}),[S,b,v]=await ge(t.evaluate(()=>{let A=document.activeElement;if(!A)return [void 0,void 0,void 0];let R=A.getBoundingClientRect();return [A.scrollTop,R.x,R.y]}),{milliseconds:Mn});if(y===m&&S===p&&b===h&&v===g)break;m=y,p=S,h=b,g=v,await ht(Qr);}}catch(f){l.warn({err:f},"Failed to wait for scroll to complete, continuing...");}}}async function xq(e,t){let n,o;for(let r=0;r<4;r++)try{return n=e.pages(),await Promise.all(n.map(async i=>{let s="";try{s=t?.getTitles?await ge(i.title(),{milliseconds:mSe}):"";}catch{s="Unknown page";}return {id:t.getPageId(i),title:s,url:i.url()}}))}catch(i){o=i,await ht(Qr);}throw new Error(`Failed to get tab titles after all retries: ${o?.message}`)}async function _q(e){let{page:t,deltaX:n,deltaY:o,steps:r,visualTarget:i,isAndroid:s,hoverDurationMs:a}=e;if(s){await ddt(e);return}await t.mouse.move(i.x,i.y),await t.mouse.down(),await t.mouse.move(n+i.x,o+i.y,{steps:r}),await ht(a??Ep),await t.mouse.up();}async function Kbe({page:e,fromLocator:t,toLocator:n,stepCount:o,dragDurationMs:r,hoverDurationMs:i}){let s=await n.boundingBox({timeout:gt});if(!s)throw new oe("ActionFailureError","Could not get bounding box of 'to' target element");let a=await t.boundingBox({timeout:gt});if(!a)throw new oe("ActionFailureError","Could not get bounding box of 'from' target element");let l=s.x+s.width/2,c=s.y+s.height/2,u=a.x+a.width/2,d=a.y+a.height/2;await _q({page:e,deltaX:l-u,deltaY:c-d,steps:o,dragDurationMs:r,hoverDurationMs:i,visualTarget:{x:u,y:d},isAndroid:true});}async function Ybe(e,t,n,o){await e.mouse.move(t.x,t.y,{steps:3}),await e.mouse.down(),await e.mouse.move(n.x,n.y,{steps:3}),await ht(Math.min(o.hoverDurationMs??500,dD)),await e.mouse.up();}async function ddt(e){let{page:t,deltaX:n,deltaY:o,steps:r,visualTarget:i,dragDurationMs:s,hoverDurationMs:a}=e,l=Math.max(1,r??1),c=i.x,u=i.y,d=i.x+n,m=i.y+o;await t.evaluate(async({startX:p,startY:h,endX:g,endY:f,stepCount:y,dragDurationMs:S,hoverDurationMs:b})=>{let v=document.elementFromPoint(p,h)??document.body??document.documentElement,w=window._momentic._momenticMobileUtilities.dispatchTouch;w(v,"touchstart",p,h);for(let O=1;O<=y;O+=1){let I=p+(g-p)*O/y,_=h+(f-h)*O/y;w(v,"touchmove",I,_),await new Promise(P=>setTimeout(P,Math.floor((S??500)/y)));}b&&await new Promise(O=>setTimeout(O,b)),w(v,"touchend",g,f);},{startX:c,startY:u,endX:d,endY:m,stepCount:l,dragDurationMs:s,hoverDurationMs:a});}var zA="<empty>",mdt=["doubleclick.net","googletagmanager.com","googlesyndication.com","s.amazon-adsystem.com","smartadserver.com","omnitagjs.com","x.adroll.com"];function pdt(e){return mdt.some(t=>e.includes(t))}function Zbe(e){let t=e.adFrameStatus?.adFrameType;return t==="child"||t==="root"||pdt(e.url)}async function hdt(e,t){let n=await e.send({timeout:gt,method:"DOM.getFrameOwner",params:{frameId:t},retries:1}),r=(await e.send({timeout:gt,method:"DOM.pushNodesByBackendIdsToFrontend",params:{backendNodeIds:[n.backendNodeId]},retries:1})).nodeIds[0],s=(await e.send({timeout:gt,method:"DOM.describeNode",params:{backendNodeId:n.backendNodeId},retries:1})).node;return s.nodeId=r,s}async function VA({cdpClient:e,page:t,logger:n}){let o={type:"root",childFrames:[],page:t},r=[],[i,s]=await Promise.all([e.send({timeout:GA,method:"Page.getFrameTree",params:{}}),e.send({timeout:GA,method:"DOM.getDocument",params:{depth:0}})]),c=(i.frameTree.childFrames??[]).map(async(d,m)=>{if(Zbe(d.frame))return null;try{return await eTe({cdpClient:e,rawFrameTree:d,indices:[m],parent:o,warnings:r,logger:n})}catch(p){return r.push(`Failed to get child frame: ${p}`),null}}),u=await Promise.all(c);return o.childFrames=u.filter(d=>d!==null),r.length&&n?.warn({warnings:r},"Got warnings when fetching frame tree"),o}var gdt=["name","id","title","src","srcdoc","sandbox"];async function eTe({cdpClient:e,rawFrameTree:t,indices:n,parent:o,warnings:r,logger:i}){let s=t.frame.id,a=await hdt(e,s),l=a.attributes??[],c=null,u=[];for(let h of gdt){let g=_g(l,h);g&&(u.push(`${h}=${JSON.stringify(g)}`),h==="src"&&(c=g));}let d={type:"frame",cdpFrame:t.frame,url:t.frame.url,frameId:s,locationData:{indices:n,attributeSelectors:u},src:c,childFrames:[],parent:o,domNode:a},p=(t.childFrames??[]).map(async(h,g)=>{if(Zbe(h.frame))return null;try{return await eTe({cdpClient:e,rawFrameTree:h,indices:[...n,g],parent:d,warnings:r,logger:i})}catch(f){return r.push(`Failed to get child frame (child ${g} of frame with url ${t.frame.url}): ${f}`),null}});return d.childFrames=(await Promise.all(p)).filter(h=>h!==null),d}async function fdt(e){try{return await e.owner().count()===1}catch{return false}}async function ydt(e){try{return await e.count()===1}catch{return false}}function Jbe(e){return e.split("=")[0]}function Xbe(e,t){let n=e.locationData.attributeSelectors,o=t?n.filter(r=>!r.startsWith(`${t}=`)):n;return [...o.length?o:n,zA]}async function kg(e,t,n){let o=[],r=e;for(;r.parent.type==="frame";)o.push(r.parent),r=r.parent;o.reverse();let i=t,s=[];for(let[u,d]of o.entries()){let m=false;for(let p of Xbe(d,n?.get(u))){let h=i.frameLocator(p===zA?"iframe":`iframe[${p}]`);if(await fdt(h)){m=true,i=h,s.push(p);break}}if(!m)throw new oe("ActionFailureError",`Failed to find a unique attribute to identify intermediate frame with url matching '${d.url}'. Please attach a unique 'id', 'name', 'title', or 'src' attribute to the frame.`)}let a;for(let u of Xbe(e,n?.get(o.length))){let d=i.locator(u===zA?"iframe":`iframe[${u}]`);if(await ydt(d)){a=d,s.push(u);break}}if(!a)throw new oe("ActionFailureError",`Failed to find a unique attribute to identify target frame with url matching '${e.url}'. Please attach a unique 'id', 'name', 'title', or 'src' attribute to the frame.`);let l=await a.evaluateHandle(u=>u),c=await l.asElement().contentFrame();if(!c)throw new oe("InternalWebAgentError",`Failed to load Playwright Frame for iframe with url '${e.url}'`);return await l.dispose(),{frame:c,mPathSelectorTokens:s}}function Qbe(e,t){let n=[...e],o=[];for(;n.length;){let r=n.shift();t(r)&&o.push(r),n.push(...r.childFrames);}return o}async function Pq({handle:e,page:t,frameTree:n,excludedAttributes:o}){let{frame:r,mPathSelectorTokens:i}=await kg(e,t,o);return {type:"auto",frame:r,handle:e,mPathSelectorTokens:i,frameTree:n}}async function tTe({page:e,frameTree:t,cache:n}){let o,r=t.childFrames,i=[],s=new Map;if(n.mPathSelectorTokens.length){let l=r;for(let d=0;d<n.mPathSelectorTokens.length-1;d++){let m=n.mPathSelectorTokens[d];if(m===zA){l=l.length===1?l[0].childFrames:[];continue}let p=l.filter(h=>h.locationData.attributeSelectors.includes(m));!p.length&&!s.size&&s.set(d,Jbe(m)),l=p.map(h=>h.childFrames).flat();}let c=[],u=n.mPathSelectorTokens[n.mPathSelectorTokens.length-1];if(u===zA?c=l:c=l.filter(d=>d.locationData.attributeSelectors.includes(u)),c.length===1){o=c[0],i.push(`Found unique frame with mpath ${n.mPathSelectorTokens.join(" > ")}`);let{frame:d}=await kg(o,e);return {resolution:{type:"auto",frame:d,handle:o,mPathSelectorTokens:n.mPathSelectorTokens,frameTree:t},logs:i}}else i.push(`Found ${c.length} frames with mpath ${n.mPathSelectorTokens.join(" > ")}`),!s.size&&u!==zA&&s.set(n.mPathSelectorTokens.length-1,Jbe(u));for(let[d,m]of s)i.push(`Excluding attribute ${m} at frame depth ${d}`);}if(n.frameSrcRegex){let l=new RegExp(n.frameSrcRegex),c=Qbe(r,u=>!!u.src&&l.test(u.src));if(c.length===1)return o=c[0],i.push(`Found unique frame with src regex ${n.frameSrcRegex}`),{resolution:await Pq({handle:o,page:e,frameTree:t,excludedAttributes:s}),logs:i};i.push(`Found ${c.length} frames with src regex ${n.frameSrcRegex}`),n.frameSrcRegex=void 0;}if(n.frameUrlRegex){let l=new RegExp(n.frameUrlRegex),c=Qbe(r,u=>!!u.url&&l.test(u.url));if(c.length===1)return o=c[0],i.push(`Found unique frame with url regex ${n.frameUrlRegex}`),{resolution:await Pq({handle:o,page:e,frameTree:t,excludedAttributes:s}),logs:i};i.push(`Found ${c.length} frames with url regex ${n.frameUrlRegex}`),n.frameUrlRegex=void 0;}let a=r;for(let l=0;l<n.indices.length-1;l++)a=a[n.indices[l]]?.childFrames??[];if(o=a[n.indices[n.indices.length-1]],o)return i.push(`Found unique frame with indices ${n.indices.join(" > ")}`),{resolution:await Pq({handle:o,page:e,frameTree:t}),logs:i};throw i.push(`Found ${a.length} frames with indices ${n.indices}`),new us("Failed to find the iframe that previously contained this element",[{type:"AUTO_FRAME",matched:false,logs:i}],"could-not-find-iframe")}function CD(e){return e.type==="auto"?JSON.stringify({type:"auto",frameId:e.handle.frameId}):JSON.stringify(e)}function Oq(e){for(;e.parent.type==="frame";)e=e.parent;return e.parent}function nTe(e){let t=Oq(e),n=e.src??"",o=e.url??"",r=[],i=[],s=[...t.childFrames];for(;s.length;){let a=s.shift();a.src&&r.push(a.src),a.url&&i.push(a.url),s.push(...a.childFrames);}return {srcs:r,urls:i,desiredSrc:n,desiredUrl:o}}function oTe(e){return e.type==="auto"?{type:"auto",frameId:e.handle.frameId,url:e.handle.url,src:e.handle.src??"",mPathSelectorTokens:e.mPathSelectorTokens.join(" > ")}:{type:"url",url:e.url}}async function rTe({frame:e,logger:t,signal:n}){let o;try{o=await e.frameElement(),await Sdt({frameElementHandle:o,logger:t,signal:n});}catch(r){o?t.warn({err:r},"Failed to scroll iframe into view, trying with raw JS"):t.warn("Failed to scroll iframe into view - no frame element");}finally{await o?.dispose();}}async function Sdt({frameElementHandle:e,logger:t,signal:n}){let o=await e.boundingBox(),i=await cT({promiseGenerator:async()=>e.evaluate(async s=>{let a=s.scrollTop,l=s.getBoundingClientRect(),c=0,u=0,d=window.innerWidth,m=window.innerHeight,p=l.top>=c&&l.left>=u&&l.bottom<=m&&l.right<=d,h=l.bottom>c&&l.top<m&&l.right>u&&l.left<d,g=Math.max(l.top,c),f=Math.min(l.bottom,m),y=Math.max(0,f-g),S=h&&y/window.innerHeight>=.8;if(p)return {didScroll:false,reason:"already-fully-visible"};if(S)return {didScroll:false,reason:"already-occupies-most-of-viewport"};s.scrollIntoView({behavior:"instant",block:"center",inline:"center"}),await new Promise(R=>setTimeout(R,250));let b=Date.now();for(;Date.now()-b<1e3;){let R=s.scrollTop;if(R===a)break;a=R,await new Promise(w=>setTimeout(w,250));}let v=s.getBoundingClientRect();return v.top!==l.top||v.left!==l.left||v.right!==l.right||v.bottom!==l.bottom?{didScroll:true,reason:"scrolled",afterRect:v}:{didScroll:false,reason:"no-more-scroll-possible",afterRect:v}}),timeoutMs:zn,codePath:"scrollIframeIntoView",signal:n});i.didScroll&&t.info({oldBb:o,newBb:await e.boundingBox(),evalResult:i},"Successfully scrolled iframe into view");}var Mq=()=>{let e,t,n=new Promise((o,r)=>{e=o,t=r;});return {resolve:e,reject:t,value:n}};var iTe=(e,t)=>{let n=e.name??`batcher:${Math.random().toString(16).slice(2)})`,o=e.scheduler??bdt(10),r=globalThis.__BATSHIT_DEVTOOLS__?.for(n),i={seq:0,batch:new Set,currentRequest:Mq(),timer:void 0,start:null,latest:null,abortController:new AbortController};r?.create({seq:i.seq});let s=()=>{i.batch=new Set,i.currentRequest=Mq(),i.timer=void 0,i.start=null,i.latest=null,i.abortController=new AbortController;},a=()=>{let d=i.seq,m=e.fetcher([...i.batch],i.abortController.signal),p=i.currentRequest;return r?.fetch({seq:d,batch:[...i.batch]}),s(),m.then(h=>{r?.data({seq:d,data:h}),p.resolve(h);}).catch(h=>{r?.error({seq:d,error:h}),p.reject(h);}),i.seq++,m};return {fetch:d=>{i.start||(i.start=Date.now()),i.latest=Date.now(),i.batch.add(d),clearTimeout(i.timer);let m=o(i.start,i.latest,i.batch.size);if(r?.queue({seq:i.seq,query:d,batch:[...i.batch],scheduled:m,latest:i.latest,start:i.start}),m==="immediate"){let p=i.currentRequest;return a(),p.value.then(h=>e.resolver(h,d))}else return m==="never"?i.currentRequest.value.then(p=>e.resolver(p,d)):(i.timer=setTimeout(a,m),i.currentRequest.value.then(p=>e.resolver(p,d)))},next:()=>{a();},abort:()=>{i.abortController.abort(),i.currentRequest.reject(new DOMException("Aborted","AbortError")),s();}}};var bdt=e=>(t,n)=>{let o=n-t;return e-o};var sTe=({windowMs:e,maxBatchSize:t})=>(n,o,r)=>{if(r>=t)return "immediate";let i=o-n;return e-i};var Adt=100,Edt=2e3;function aTe(e){return iTe({fetcher:async n=>{e(reduce(n,(o,r)=>({...o,...r}),{}));},resolver:()=>{},scheduler:sTe({windowMs:Edt,maxBatchSize:Adt})})}async function lTe({event:e,transformer:t,enricher:n,frame:o,lastScreenshotForRecording:r,logger:i,autoExpandIframes:s}){let{warnings:a,error:l,properties:c}=e.target;if(l){i.error({err:l,warnings:a},"Error while capturing passive click");return}if(a.length&&i.warn({warnings:a},"Warnings while capturing passive click"),!c)return;let u=o.parentFrame()?o.url():void 0,m=o.page().frames().map(g=>g.url());i.debug({frameUrl:u,...e},"Passive click event captured on element");let p,h;if(u&&!s)try{let g=await o.frameElement();p=await ge(g?.boundingBox(),{milliseconds:gt})??void 0;let f=await n.constructIframeRegex({urls:m,srcs:[],desiredUrl:u},{loggerTags:fn(i)});if(f.urlRegex)h={type:"url",url:`/${f.urlRegex}/`};else throw new Error(`Got no url regex options: ${JSON.stringify(f)}`)}catch(g){i.warn({err:g},"Failed to construct iframe details for recorded action, using hardcoded URL only"),h={type:"url",url:u};}(async()=>{try{await t.recordElementAction({...e,screenshotBase64:r,frameConfig:h,frameBoundingBox:p,autoExpandIframes:s,isInIframe:!!u});}catch(g){i.error({err:g},"Failed to transform passive click action");}})();}var wdt=["Dead"],ID=class{recordedSteps=new Map;callbacks;signal;generator;testId;orgId;nextStepOffset=0;logger;constructor({signal:t,callbacks:n,generator:o,testId:r,orgId:i,logger:s}){this.signal=t,this.logger=s,this.testId=r,this.orgId=i,this.callbacks={onStepRecorded:(a,l)=>{this.recordedSteps.set(l,{step:a}),n.onStepRecorded(a,l);},onActionReceived:(a,l)=>{this.recordedSteps.set(l,{step:a}),n.onActionReceived?.(a,l);}},this.generator=o;}reserveIndexForCommand(t){let n=this.nextStepOffset;return this.recordedSteps.set(n,{step:{id:randomUUID(),type:"PRESET_ACTION",command:$l(t)}}),this.nextStepOffset++,n}async recordElementAction(t){let{type:n,target:o,frameConfig:r,autoExpandIframes:i,isInIframe:s}=t,a=!!i&&!!s;if(this.signal.aborted){this.logger.debug("Transformer was already cleaned up, ignoring click...");return}let l,c,u=o.properties.attributes.nodeOnlySerializedHtml.trim(),d=u,m;switch(t.frameConfig?t.frameBoundingBox?m={x:t.frameBoundingBox.x+o.properties.boundingBox.x,y:t.frameBoundingBox.y+o.properties.boundingBox.y,width:o.properties.boundingBox.width,height:o.properties.boundingBox.height}:this.logger.warn(t,"No frame bounding box found, refusing to write bounding box"):m=o.properties.boundingBox,n){case "CLICK":{l="CLICK";let S=$l(l);c={id:randomUUID(),type:"PRESET_ACTION",command:{...S,target:{type:"description",elementDescriptor:d},iframeUrl:r?.url,cache:a?void 0:{target:{id:-1,...o.properties.attributes,targetSource:"RECORDING",targetUpdateTime:new Date().toUTCString(),boundingBox:m}}}};break}case "SELECT":{l="SELECT_OPTION";let S=$l(l);c={id:randomUUID(),type:"PRESET_ACTION",command:{...S,type:"SELECT_OPTION",iframeUrl:r?.url,target:{type:"description",elementDescriptor:d},cache:a?void 0:{target:{id:-1,...o.properties.attributes,targetSource:"RECORDING",targetUpdateTime:new Date().toUTCString(),boundingBox:m}},choice:{type:"VALUE",value:t.selectedValue??"Unknown option"}}};break}case "MOUSE_DRAG":{l="MOUSE_DRAG";let S=$l(l);c={id:randomUUID(),type:"PRESET_ACTION",command:{...S,target:{type:"description",elementDescriptor:d},deltaX:t.deltaX.toString(),deltaY:t.deltaY.toString(),iframeUrl:r?.url,cache:a?void 0:{target:{id:-1,...o.properties.attributes,targetSource:"RECORDING",targetUpdateTime:new Date().toUTCString(),targetUpdateLoggerTags:fn(this.logger),boundingBox:m}}}};break}default:throw new Error(`Unknown action type: ${n}`)}let p;t.offset===void 0?(p=this.nextStepOffset,this.nextStepOffset++):p=t.offset,this.callbacks.onActionReceived?.(c,p);let h=t.target.browserState;try{h=vdt.html(h,{indent_size:1,indent_with_tabs:!1,preserve_newlines:!1}),h=Xye(h,"data-momentic-interacted",4e4);}catch{}let g;try{g=(await this.generator.getReverseMappedDescription({target:h,screenshot:t.screenshotBase64?`data:image/jpeg;base64,${t.screenshotBase64}`:void 0,boundingBox:o.properties.boundingBox},{disableCache:!1,loggerTags:{testId:this.testId,...fn(this.logger)}})).phrase;}catch(S){this.logger.error({err:S},"Error generating reverse mapping description"),g=u;}let f=this.recordedSteps.get(p)?.step??c,y=f?.command;y&&"target"in y&&y.target?(y.target={type:"description",elementDescriptor:g},"cache"in y&&y.cache&&"target"in y.cache&&(y.cache.target.inputDescription=g),this.callbacks.onStepRecorded({...f,command:y},p)):this.logger.warn("Could not find existing command to update after description mapping");}recordKeystroke(t){let{key:n,combinable:o}=t;if(wdt.includes(n)||this.signal.aborted)return;let r="normal";n.length>1&&(r="special");let i;if(r==="normal"){let d=$l("TYPE");i={id:randomUUID(),type:"PRESET_ACTION",command:{...d,target:void 0,value:n,clearContent:false}};}else {let d=$l("PRESS");i={id:randomUUID(),type:"PRESET_ACTION",command:{...d,value:n}};}let s,a=this.nextStepOffset-1,l=this.recordedSteps.get(a),c=l?.step,u=c?.command;if(o){if(u?.type===i.command.type){let d=u.value,m=i.command.value;i={id:randomUUID(),type:"PRESET_ACTION",command:{...u,value:i.command.type==="PRESS"?`${d}+${m}`:`${d}${m}`}},s=a;}else if(u?.type==="CLICK"&&i.command.type==="TYPE")c.command={...i.command,target:u.target,cache:u.cache},i=l.step,s=a;else if(u?.type==="TYPE"&&i.command.type==="PRESS"&&i.command.value==="Backspace"){let d=u.value;i={id:randomUUID(),type:"PRESET_ACTION",command:{...u,value:d.slice(0,d.length-1)}},s=a;}}s===void 0&&(s=this.nextStepOffset,this.nextStepOffset++),this.callbacks.onStepRecorded(i,s);}recordScroll(t){if(this.signal.aborted)return;let n=()=>{let{deltaY:i}=t;if(!i)return;let s=this.nextStepOffset-1,a=this.recordedSteps.get(s)?.step.command,l;a?.type==="SCROLL_DOWN"&&a.deltaY?(i+=a.deltaY,l=s):a?.type==="SCROLL_UP"&&a.deltaY?(i-=a.deltaY,l=s):(l=this.nextStepOffset,this.nextStepOffset++);let c=i>0?"SCROLL_DOWN":"SCROLL_UP",u=$l(c);u.deltaY=Math.abs(i);let d={id:randomUUID(),type:"PRESET_ACTION",command:u};this.callbacks.onStepRecorded(d,l);},o=()=>{let{deltaX:i}=t;if(!i)return;let s=this.nextStepOffset-1,a=this.recordedSteps.get(s)?.step.command,l;a?.type==="SCROLL_RIGHT"&&a.deltaX?(i+=a.deltaX,l=s):a?.type==="SCROLL_LEFT"&&a.deltaX?(i-=a.deltaX,l=s):(l=this.nextStepOffset,this.nextStepOffset++);let c=i>0?"SCROLL_RIGHT":"SCROLL_LEFT",u=$l(c);u.deltaX=Math.abs(i);let d={id:randomUUID(),type:"PRESET_ACTION",command:u};this.callbacks.onStepRecorded(d,l);},r=this.recordedSteps.get(this.nextStepOffset-1);r?.step.command.type==="SCROLL_LEFT"||r?.step.command.type==="SCROLL_RIGHT"?(o(),t.deltaY>=20&&n()):(n(),t.deltaX>=20&&o());}};var xD=class{smartWaitingTimeoutMs;pageLoadTimeoutMs;allowPartialAccessibilityTree;logger;cdpClient;pageGetter;abortSignalGetter;userControlledBrowserSettings;enricher;iconKnowledgeBase;computedStylesToFetch=["display","opacity","visibility","height","position","background-image"];activeFrameCache;activeFrameConfig;lastA11yIdToNodeMap={};lastDataMomenticIdToNodeMap={};lastSelectorToNodeMap={};lastA11yTreeRoot;lastDomGraph;lastA11yTreeFetchTimeMs;pageLoadWaitStateByPage=new WeakMap;allowedA11yIgnoreReasonsOverride;constructor({smartWaitingTimeoutMs:t,pageLoadTimeoutMs:n,allowPartialAccessibilityTree:o,logger:r,cdpClient:i,pageGetter:s,abortSignalGetter:a,enricher:l,iconKnowledgeBase:c,userBrowserSettings:u,allowedA11yIgnoreReasonsOverride:d}){if(this.smartWaitingTimeoutMs=t,this.pageLoadTimeoutMs=n,this.allowPartialAccessibilityTree=o,this.logger=r,this.cdpClient=i,this.pageGetter=s,this.abortSignalGetter=a,this.enricher=l,this.iconKnowledgeBase=c,this.userControlledBrowserSettings=u,this.allowedA11yIgnoreReasonsOverride=d,this.userControlledBrowserSettings.importantStyles)for(let m of this.userControlledBrowserSettings.importantStyles){let p=m.split(":");if(p.length!==2){this.logger.warn({style:m},"Invalid style property passed to importantStyles");continue}let h=p[0]?.trim(),g=p[1]?.trim();if(h===void 0||g===void 0){this.logger.warn({style:m},"Invalid style property passed to importantStyles");continue}this.computedStylesToFetch.includes(h)||this.computedStylesToFetch.push(h);}}get frameConfig(){return this.activeFrameConfig}get domGraph(){return this.lastDomGraph}get selectorToNodeMap(){return this.lastSelectorToNodeMap}get dataMomenticIdToNodeMap(){return this.lastDataMomenticIdToNodeMap}get a11yIdToNodeMap(){return this.lastA11yIdToNodeMap}get a11yTreeRoot(){return this.lastA11yTreeRoot}setActiveFrameConfig(t){t?(this.activeFrameConfig=t,this.activeFrameCache=void 0):(this.activeFrameConfig=void 0,this.activeFrameCache=void 0);}reset(){this.activeFrameCache=void 0,this.activeFrameConfig=void 0,this.lastA11yIdToNodeMap={},this.lastDataMomenticIdToNodeMap={},this.lastSelectorToNodeMap={},this.lastA11yTreeRoot=void 0,this.lastDomGraph=void 0,this.lastA11yTreeFetchTimeMs=void 0;}saveAutoFrameCacheDetails(t){if(!this.activeFrameConfig||this.activeFrameConfig.type!=="auto"||!this.userControlledBrowserSettings.autoExpandIframes)return;let n={...t,indices:this.activeFrameConfig.handle.locationData.indices,mPathSelectorTokens:this.activeFrameConfig.mPathSelectorTokens};return this.constructIframeRegexAsync(this.activeFrameConfig.handle,n),n}async getAutoFrameDetailsFromHandle(t){let n=this.pageGetter(),o=Oq(t),{frame:r,mPathSelectorTokens:i}=await kg(t,n),s={indices:t.locationData.indices,mPathSelectorTokens:i};return this.constructIframeRegexAsync(t,s),{cache:s,config:{type:"auto",frame:r,handle:t,mPathSelectorTokens:i,frameTree:o,cache:s}}}async resolveAutoFrameCache(t){let n=this.pageGetter(),o=await VA({cdpClient:this.cdpClient,page:n,logger:this.logger}),{resolution:r,logs:i}=await tTe({page:n,frameTree:o,cache:t});return this.logger.info({logs:i},"Resolved auto frame cache"),{...r,cache:t}}async resolveActiveFrameConfig({logger:t=this.logger,signal:n=this.abortSignalGetter()}){if(!this.frameConfig)return null;if(this.activeFrameCache)if(CD(this.frameConfig)!==this.activeFrameCache.frameIdentifierStringified)this.activeFrameCache=void 0;else if(this.activeFrameCache.frame&&"isDetached"in this.activeFrameCache.frame&&this.activeFrameCache.frame.isDetached())this.activeFrameCache=void 0;else return this.activeFrameCache;let o;return this.frameConfig.type==="url"?o=await this.resolveUrlMatcherFrameConfig({config:this.frameConfig,logger:t,signal:n}):o={source:"auto",frame:this.frameConfig.frame,handle:this.frameConfig.handle,frameIdentifierStringified:CD(this.frameConfig),cacheTime:Date.now(),frameTree:this.frameConfig.frameTree,mPathSelectorTokens:this.frameConfig.mPathSelectorTokens},await rTe({frame:o.frame,logger:t,signal:n}),this.activeFrameCache=o,o}async executeFunctionInAllFrames(t,n){let o=this.pageGetter(),r=await VA({cdpClient:this.cdpClient,page:o,logger:this.logger}),i=[ge(o.evaluate(t,n),{milliseconds:zn})],s=Array.from(r.childFrames);for(;s.length>0;){let l=s.shift(),c=l.url;c==="about:blank"||c.startsWith("chrome-error://")||(s.push(...l.childFrames),i.push(kg(l,o).then(({frame:u})=>ge(u.evaluate(t,n),{milliseconds:zn})).catch(u=>(this.logger.warn({err:u,frameUrl:l.url},"Failed to evaluate function in frame"),"MOMENTIC_FRAME_EVAL_ERROR"))));}return (await Promise.all(i)).filter(l=>l!=="MOMENTIC_FRAME_EVAL_ERROR")}async getAllChildFrameUrls(){let t=this.pageGetter(),n=await VA({cdpClient:this.cdpClient,page:t,logger:this.logger}),o=Array.from(n.childFrames),r=[];for(;o.length>0;){let i=o.shift();o.push(...i.childFrames),r.push(i.src??i.url);}return r}async getDomGraph({devicePixelRatio:t,signal:n,logger:o}){let r=await this.getDOMTree({devicePixelRatio:t??1,signal:n,logger:o??this.logger});return this.lastDomGraph=r,r}async getA11yTree(t){let n={},o=t.logger??this.logger,r=t.abortSignal??this.abortSignalGetter(),i=this.pageGetter(),s=await this.waitForPageLoadBeforeA11yTree({page:i,skipPageLoad:t.skipPageLoad,logger:o}),{frameContext:a,startingFrameId:l}=await this.getFrameTreeAndAddMomenticIds({logger:o,signal:r,logTimings:n}),c=await xc({fn:()=>this.getDomGraph({devicePixelRatio:t.devicePixelRatio??1,signal:r,logger:o}),codePath:"domFetch",logObject:n,signal:r,logger:o}),u=await xc({fn:()=>this.getRawA11yGraph({cdpClient:this.cdpClient,frameId:l,childFrames:a.childFrames,logTimings:n,logger:o,signal:r}),codePath:"totalA11yFetch",logObject:n,signal:r,logger:o}),{tree:d}=await xc({fn:()=>this.composeA11yDomGraph({opts:t,a11yGraph:u,domGraph:c,startingFrameId:l,frameContext:a,logger:o,iconKnowledgeBase:this.iconKnowledgeBase,showZeroOpacityElements:t.showZeroOpacityElements,flagNotActionableNodes:t.flagNotActionableNodes,allowIneligibleTagRedirect:t.allowIneligibleTagRedirect}),codePath:"a11yProcess",logObject:n,signal:r,logger:o});if(Object.values(n).some(m=>m>750)&&o.warn({logTimings:n},"A11y tree fetch component took a long time"),t.skipPageLoad!==true&&s){let m=this.pageGetter()!==i,p=false;if(m||(p=await this.getPageLoadWaitState(i)!==s),m||p)throw new Error("Page navigated while collecting page state")}return this.lastA11yIdToNodeMap=d.a11yIdNodeMap,this.lastDataMomenticIdToNodeMap=d.dataMomenticIdMap,this.lastA11yTreeRoot=d.root,this.lastDomGraph=c,this.lastSelectorToNodeMap=d.selectorToNodeMap,this.lastA11yTreeFetchTimeMs=Date.now(),d}getNodeUsingDataMomenticId(t){if(this.lastA11yTreeFetchTimeMs&&!(Date.now()-this.lastA11yTreeFetchTimeMs>1e4))return this.lastDataMomenticIdToNodeMap[t]}async getFrameTreeAndAddMomenticIds({logger:t=this.logger,signal:n=this.abortSignalGetter(),logTimings:o}){let r=this.pageGetter(),i,s,a=null;if(this.frameConfig?.type==="url"){if(i=await xc({fn:()=>this.resolveActiveFrameConfig({logger:t,signal:n}),codePath:"getActiveFrameDetails",logObject:o,signal:n,logger:t})??void 0,!i)throw new oe("ActionFailureError","Got null frame details despite active frame config");s=i.handle,a=s.frameId;}else this.userControlledBrowserSettings.autoExpandIframes?(s=await xc({fn:()=>VA({cdpClient:this.cdpClient,page:this.pageGetter(),logger:t}),codePath:"getMomenticFrameTree",logObject:o,signal:n,logger:t}),a=null):(s={type:"root",page:r,childFrames:[]},a=null);return await xc({fn:async()=>this.addMomenticIds({rootPage:r,childFrames:s.childFrames,frameFilter:i?.frame,logger:t}),codePath:"addIdsToElement",logObject:o,signal:n,logger:t}),{startingFrameOverride:i,frameContext:s,startingFrameId:a}}async getPageLoadWaitState(t){if(this.userControlledBrowserSettings.ignorePageLoadTimeouts!==true)return;let{frameTree:n}=await this.cdpClient.send({method:"Page.getFrameTree",params:{}}),o=n.frame.loaderId,r=this.pageLoadWaitStateByPage.get(t);if(r?.documentId===o)return r;let i={documentId:o,didTimeOut:false};return this.pageLoadWaitStateByPage.set(t,i),i}async waitForPageLoadBeforeA11yTree({page:t,skipPageLoad:n,logger:o}){if(n)return;let r=await this.getPageLoadWaitState(t);if(r?.didTimeOut)return r;try{await t.waitForLoadState("load",{timeout:this.pageLoadTimeoutMs});}catch(i){if(o.warn({err:i},"Failed to wait for page load event before a11y tree fetch, attempting to continue without it..."),r&&i instanceof errors.TimeoutError)return r.didTimeOut=true,r;await this.cdpClient.reinitialize();}return r}async fetchA11yTreeForRecording(t,n){if(await this.getA11yTree({devicePixelRatio:t,abortSignal:n,logger:bs,filterByViewport:false,flagNotActionableNodes:false,allowIneligibleTagRedirect:true,skipPageLoad:true}),Math.random()<.1){let o=this.lastA11yTreeRoot?.serialize();this.logger.debug({tree:o&&o.length>4e5?"REDACTED_DUE_TO_SIZE":o},"Refreshed a11y tree during recording");}}async getLocatorFromA11yNode({page:t,root:n,node:o}){if(o.backendNodeId===void 0)throw new Error(`Node with a11y id ${o.id} has no backend node ID: ${o.getNodeOnlySerializedForm()}`);if(this.userControlledBrowserSettings.visualActions){let r=this.domGraph?.backendIdToNode[o.backendNodeId];if(!r)throw new Error(`Could not find DOM node for backend node ID ${o.backendNodeId}`);let i=_Se({node:r,domGraph:this.domGraph});return PSe(t,i)}else return o.domNode||this.logger.warn({a11yRole:o.role,content:o.content},"Attempting to get locator from a11y node with no DOM node"),this.getLocatorFromBackendId(n,o.backendNodeId)}async getLocatorFromBackendId(t,n){let o=await this.cdpClient.send({method:"DOM.resolveNode",params:{backendNodeId:n},timeout:gt,retries:1});if(!o||!o.object.objectId)throw new Error(`Could not resolve backend node ${n}`);let r;try{r=await OSe(this.cdpClient,o.object.objectId);}catch(i){throw this.logger.debug({err:i,object:JSON.stringify(o.object)},"Failed to get ID attribute for target"),i}return t.locator(Ap(r))}getNodeUsingMPathSelector(t){let n=this.selectorToNodeMap[t];if(n)return n}async resolveUrlMatcherFrameConfig({config:t,signal:n=this.abortSignalGetter(),logger:o=this.logger}){let r=Date.now(),i,s,a,l=0;for(;Date.now()-r<this.smartWaitingTimeoutMs;)try{i=await VA({cdpClient:this.cdpClient,page:this.pageGetter(),logger:o}),s=await this.getMatchingFrameByUrlWithCdp(i,t),o.info({frameId:s.handle.frameId,url:s.handle.url,src:s.handle.src,locationData:s.handle.locationData},`Found matching frame using ${s.matchType}`);break}catch(c){if(a=c,c instanceof oe&&c.reason==="UserInfrastructureError")throw c;l%3===0&&this.logger.warn({attempt:l,err:c},"Failed to resolve active frame, retrying..."),await ht(Qr,n);}finally{l++;}if(s)return {source:"url",frame:s.frame,handle:s.handle,frameIdentifierStringified:CD(t),cacheTime:Date.now(),frameTree:i,mPathSelectorTokens:[]};throw a}async getMatchingFrameByUrlWithCdp(t,n){let o=n.url,r=this.pageGetter(),i=Array.from(t.childFrames),s=[];for(;i.length>0;){let a=i.shift(),l=a.domNode;i.push(...a.childFrames);let c=_g(l.attributes??[],"src"),u=l.contentDocument?.documentURL;if(!c&&!u){this.logger.debug("Skipping frame with no URL or src");continue}for(let d of [c,u])if(d){if(o.startsWith("/")&&o.endsWith("/")){if(new RegExp(o.slice(1,-1)).test(d)){s.push({handle:a,matchType:"regex",...await kg(a,r)});break}}else if(o.trim()===d.trim()){s.push({handle:a,matchType:"url",...await kg(a,r)});break}}}if(s.length===1){let a=s[0];return this.userControlledBrowserSettings.autoExpandIframes||(a.handle.childFrames=[]),a}else throw s.length>1?new Error(`Found multiple frames with src matching '${o}'. Please use a more specific selector.`):new oe("ActionFailureError",`Failed to find frame with src matching: ${o}`)}async composeA11yDomGraph({opts:t,a11yGraph:n,domGraph:o,startingFrameId:r,frameContext:i,logger:s,iconKnowledgeBase:a,showZeroOpacityElements:l,flagNotActionableNodes:c,allowIneligibleTagRedirect:u}){let d=await HSe({rawA11yGraph:n,startingFrameId:r,frameContext:i,domGraph:o,logger:s,cdpClient:this.cdpClient,showZeroOpacityElements:l,flagNotActionableNodes:c,allowIneligibleTagRedirect:u,filterByViewport:t.filterByViewport,importantProperties:{attributes:this.userControlledBrowserSettings.importantAttributes,classes:this.userControlledBrowserSettings.importantClasses,styles:this.userControlledBrowserSettings.importantStyles,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},viewportDetails:void 0,iconKnowledgeBase:a,useMPaths:this.userControlledBrowserSettings.visualActions,allowedA11yIgnoreReasonsOverride:this.allowedA11yIgnoreReasonsOverride,defaultSerializeParams:this.userControlledBrowserSettings.includeLocatorBoundingBoxes?{includeAllBoundingBoxes:true}:void 0});if(!d||!d.root)throw new Error("Accessibility tree appears empty");return {tree:d}}async addMomenticIds({rootPage:t,childFrames:n,frameFilter:o,logger:r}){if(this.userControlledBrowserSettings.visualActions)return;let i=await this.addMomenticIdsHelper(o??t,1);if(!this.userControlledBrowserSettings.autoExpandIframes||o)return;let s=Array.from(n),a=[];for(;s.length>0;){let l=s.shift();s.push(...l.childFrames);let c=async()=>{try{let{frame:u}=await kg(l,t);i=await this.addMomenticIdsHelper(u,i);}catch(u){l.url!=="about:blank"&&r.warn({err:u},"Error adding momentic IDs to child frame, continuing...");}};a.push(c());}await Promise.all(a);}async addMomenticIdsHelper(t,n){if(this.userControlledBrowserSettings.visualActions)return n;let o=this.logger;return await Or({root:t,fn:i=>window._momentic?.addIdsToElement?.(document.body,i),arg:n,timeout:zn,waitForPageLoad:async()=>{try{await t.waitForLoadState("domcontentloaded",{timeout:this.smartWaitingTimeoutMs});}catch(i){o.warn({err:i},"Error loading frame root adding momentic ids, continuing...");}},codePath:"adding Momentic element IDs to the page"})??n}async decideChildFrameUnrollEligibility({logger:t,warnings:n,handle:o}){try{let{shouldUnroll:r,reason:i}=await this.decideChildFrameUnrollEligibilityHelper({domNode:o.domNode});return {shouldUnroll:r,reason:i}}catch(r){if(r.message.includes("Could not compute box model"))return {shouldUnroll:false};let i=`Got error when determining whether to filter frame ${o.frameId} with url ${o.url}, allowing it to be fetched: ${r}`;return n?.push(i),t?.warn({err:r},i),{shouldUnroll:true}}}async decideChildFrameUnrollEligibilityHelper({domNode:t}){let n=t.attributes??[];if(_g(n,"aria-hidden")==="true")return {shouldUnroll:false,reason:"aria-hidden"};let o=_g(n,"style");if(o?.includes("display: none")||o?.includes("visibility: hidden"))return {shouldUnroll:false,reason:"hidden CSS style"};await this.cdpClient.send({timeout:gt,method:"DOM.pushNodesByBackendIdsToFrontend",params:{backendNodeIds:[t.backendNodeId]}});let[r,i]=await Promise.all([this.cdpClient.send({timeout:gt,method:"DOM.getBoxModel",params:{backendNodeId:t.backendNodeId}}),this.cdpClient.send({timeout:gt,method:"CSS.getComputedStyleForNode",params:{nodeId:t.nodeId}})]);if(!r.model||!r.model.height||!r.model.width)return {shouldUnroll:false,reason:"no bounding box"};if(r.model.height<10||r.model.width<10)return {shouldUnroll:false,reason:"small bounding box"};for(let s of i.computedStyle){if(s.name==="display"&&s.value==="none")return {shouldUnroll:false,reason:"display: none"};if(s.name==="visibility"&&s.value==="hidden")return {shouldUnroll:false,reason:"visibility: hidden"};if(s.name==="opacity"&&s.value==="0")return {shouldUnroll:false,reason:"opacity: 0"}}return {shouldUnroll:true}}async getRawA11yGraph({cdpClient:t,frameId:n,childFrames:o,logTimings:r,logger:i=this.logger,signal:s=this.abortSignalGetter()}){let a=[],l,c;for(let p=0;p<3;p++)try{c=await xc({fn:()=>this.getRawA11yTreeForFrame({frameId:n,timeoutMs:this.pageLoadTimeoutMs,logTimings:r}),codePath:"a11y-tree-fetch-root",logObject:r,logger:i});break}catch(h){l=h,i.warn({err:h},"Reinitializing CDP client before retrying a11y graph fetch"),await this.cdpClient.reinitialize();}if(!c)throw new Error(`Failed to fetch accessibility tree for root page: ${l}`);let u={};if(u[n??"root"]=c,!this.userControlledBrowserSettings.autoExpandIframes)return u;let d=Array.from(o),m=[];for(;d.length>0;){let p=d.shift();try{let{shouldUnroll:g}=await this.decideChildFrameUnrollEligibility({handle:p,warnings:a});if(!g)continue}catch(g){if(g.message.includes("Could not compute box model"))continue;a.push(`Got error when determining whether to filter frame ${p.frameId} with url ${p.url}, allowing it to be fetched: ${g}`);}d.push(...p.childFrames);let h=async()=>{try{let g=await xc({fn:()=>this.getRawA11yTreeForFrame({frameId:p.frameId,timeoutMs:this.smartWaitingTimeoutMs,logTimings:r}),codePath:`a11y-tree-fetch-child-${p.frameId}`,logObject:r,logger:i});u[p.frameId]=g;}catch(g){i.warn({err:g,url:p.url,src:p.src},`Error getting raw a11y tree for child frame ${p.frameId}, continuing...`);}};m.push(h());}return await Promise.all(m),a.length>0&&this.logger.warn({warnings:a},"Got warnings when fetching the raw a11y graph"),u}async getRawA11yTreeForFrame({frameId:t,timeoutMs:n,logTimings:o}){let r=await this.cdpClient.withDomainEnabled({domain:"Accessibility",fn:async()=>{if(this.allowPartialAccessibilityTree)return (await xc({fn:()=>this.cdpClient.send({method:"Accessibility.getFullAXTree",params:{frameId:t??void 0},timeout:n,timeoutMsg:`Fetching the document tree took over ${n}ms. This usually indicates that the current page is too large to be loaded at once, or your machine is severely resource constrained.`}),codePath:"cdp-query-ax-tree",logObject:o,logger:this.logger})).nodes;let s=(await xc({fn:()=>this.cdpClient.send({method:"Accessibility.getRootAXNode",params:{frameId:t??void 0},timeout:zn}),codePath:"cdp-get-root-ax-node",logObject:o,logger:this.logger})).node.backendDOMNodeId;return (await xc({fn:()=>this.cdpClient.send({method:"Accessibility.queryAXTree",params:{backendNodeId:s},timeout:n,timeoutMsg:`Fetching the document tree took over ${n}ms. This usually indicates that the current page is too large to be loaded at once, or your machine is severely resource constrained.`}),codePath:"cdp-query-ax-tree",logObject:o,logger:this.logger})).nodes}});if(!r||r.length<=1)throw new Error("Document is entirely empty");return {root:r[0],allNodes:r}}async getDOMTree({devicePixelRatio:t,signal:n,logger:o}){let r,i=0,s;for(;!r&&i<3;)try{if(r=await this.cdpClient.send({method:"DOMSnapshot.captureSnapshot",params:{computedStyles:this.computedStylesToFetch},timeout:gt}),!r||!r.documents.length)throw new Error("Got empty DOM tree")}catch(a){await ht(Qr,n),i++,s=a;}if(!r||!r.documents.length)throw o.error({err:s},"Fatal error fetching DOM tree"),new oe("UserInfrastructureError",`Received an empty HTML snapshot from the browser. This usually indicates the page has crashed due to resource consumption issues or hanging client-side JavaScript code: ${s?.message}`);return xSe({snapshot:r,devicePixelRatio:t,computedStylesToFetch:this.computedStylesToFetch,logger:o})}constructIframeRegexAsync(t,n){if(n.frameSrcRegex||n.frameUrlRegex)return;let o=nTe(t);if(!o.desiredSrc&&!o.desiredUrl){this.logger.debug({params:o},"Skipping iframe regex construction because desiredSrc and desiredUrl are both empty");return}(async()=>{try{let r=await this.enricher?.constructIframeRegex(o,{loggerTags:fn(this.logger)});r?.srcRegex&&(n.frameSrcRegex=r.srcRegex),r?.urlRegex&&(n.frameUrlRegex=r.urlRegex),this.logger.debug({result:r,params:o},"Constructed iframe regex for cache");}catch(r){this.logger.warn({err:r},"Failed to construct iframe regex, skipping...");}})();}};function Cdt(e,t,n={}){e.warn({behavior:t,...n},"Suspicious usage detected");}function cTe({logger:e,url:t}){let n=Idt(t);n&&Wne(n)&&Cdt(e,"navigate_to_sanctioned_tld",{hostname:n});}function Idt(e){try{return new URL(e).hostname.toLowerCase().replace(/\.$/,"")}catch{return null}}var _D=class{constructor(t,n=Date.now){this.maxAgeMs=t;this.now=n;}cached;clear(){this.cached=void 0;}store({buffer:t,...n}){this.cached={...n,buffer:t,capturedAt:this.now(),viewport:n.viewport?{...n.viewport}:null};}take({clearHighlights:t,page:n,quality:o,url:r,viewport:i}){let s=this.cached;if(this.cached=void 0,!s)return;let a=this.now()-s.capturedAt;if(!(a<0||a>this.maxAgeMs||s.page!==n||s.url!==r||s.quality!==o||t&&!s.clearHighlights||s.viewport?.width!==i?.width||s.viewport?.height!==i?.height))return s.buffer}};var Bdt=5e3;function pTe(e){return `${e}
|
|
7952
7952
|
//# sourceURL=momentic-injected/rrweb-record.js`}var Ng=class e{static NAVIGATION_SETTLE_MS=750;initOptions;abortSignal=void 0;contextInitialized=false;cleanedUp=false;browser;context;properties;page;userControlledBrowserSettings;pageLoadPromises={};lastTabChangeEventTimeout=void 0;pageLoadAbortControllers=new Set;pageLoadAbortListenerCleanup;clientCallbacks;harBatcher;popupDocumentAttributionAbortController=new AbortController;pendingPopupDocumentCaptures=new Set;pendingPopupDocumentResponseCollections=new Set;consoleLogCircuitBreaker;networkLogCircuitBreaker;pageIds=new WeakMap;consoleLogListeners=new WeakMap;networkRouteHandlers=new WeakMap;customHeaderRouteHandlers=new WeakMap;iconKnowledgeBase;cdpClient;debugData={logsPerPage:[]};rootUrlLastChangedAt=new WeakMap;pendingMainFrameNavigationObservations=[];recentFrameNavigations={};requestRecorders={};mocks={};offline=false;customHeaders=[];enricher;storage;logger;stateManager;transformer;lastScreenshotForRecording=void 0;traceScreenshotCache=new _D(pSe);originsVisited=new Set;viewport;onVideoPageChange;videoOutputPath;isRemoteBrowser;operatingSystem;pendingRemoteVideoSaves=[];activeRemoteVideoSaves=[];trackedVideoNames=new WeakMap;lastVideoActivationPage;baseUrl;get executionMode(){return this.initOptions?.browserExecutionMode!==void 0?this.initOptions.browserExecutionMode:this.userControlledBrowserSettings.turbo?"turbo":"standard"}updateRuntimeSettings(t){if(!this.initOptions)throw new Error("Cannot update browser runtime settings before initialization");return t.executionMode!==void 0&&(this.initOptions.browserExecutionMode=t.executionMode),{executionMode:this.executionMode}}constructor({storage:t,enricher:n,browser:o,context:r,page:i,baseUrl:s,logger:a,userBrowserSettings:l,viewport:c,properties:u,clientCallbacks:d,iconKnowledgeBase:m,onVideoPageChange:p,videoOutputPath:h,isRemoteBrowser:g}){gte(l),this.storage=t,this.enricher=n,this.browser=o,this.context=r,this.page=i,this.baseUrl=s,this.logger=a,this.consoleLogCircuitBreaker=new sI("console",a,{activityWindowMs:ySe,maxEventsPerWindow:SSe,maxCharsPerWindow:bSe,maxActiveOperations:TSe,onDisable:()=>this.removeConsoleLogListeners()}),this.networkLogCircuitBreaker=new sI("network",a,{...g?{slowOperationMs:ESe,hardOperationMs:vSe,slowOperationLimit:wSe,windowMs:RSe}:{},resumeAfterMs:ASe,onDisable:()=>this.scheduleRemoveUnusedNetworkRoutes(),onResume:()=>this.scheduleEnsureNetworkRoutes()}),this.userControlledBrowserSettings=l,this.viewport=c,this.properties=u,this.clientCallbacks=d,this.iconKnowledgeBase=m,this.onVideoPageChange=p,this.videoOutputPath=h,this.isRemoteBrowser=g??false,this.operatingSystem=u.operatingSystem;}registerAbortSignal(t){if(this.pageLoadAbortListenerCleanup&&(this.pageLoadAbortListenerCleanup(),this.pageLoadAbortListenerCleanup=void 0),this.abortSignal=t,!this.abortSignal)return;let n=()=>{for(let o of this.pageLoadAbortControllers)o.abort();this.pageLoadAbortControllers.clear();};if(this.abortSignal.aborted){n();return}this.abortSignal.addEventListener("abort",n),this.pageLoadAbortListenerCleanup=()=>{this.abortSignal?.removeEventListener("abort",n);};}async initialize({grantPermissions:t,permissionsToGrant:n,runInitScripts:o,timingRecorder:r}){if(this.contextInitialized)return;let i={[Jye]:this.userBrowserSettings.visualActions},s=[];this.userControlledBrowserSettings.extraHeaders&&s.push(this.context.setExtraHTTPHeaders(this.userControlledBrowserSettings.extraHeaders)),t&&s.push(this.context.grantPermissions(xbe(n))),s.push(this.context.addInitScript({content:`${eq.htmlUtilsLibJs}
|
|
7953
7953
|
//# sourceURL=momentic-injected/browser-scripts.js`}),this.context.addInitScript({content:Tq(i,this.userBrowserSettings.disableFullStory)}),this.exposeRecordingBindings());let a=this.clientCallbacks?.rrweb;a&&s.push(this.context.addInitScript({content:pTe(a.recordScript)}),this.exposeRrwebBinding());let l=p=>this.handleNewPageEvent(p);this.context.on("page",l);let c=p=>this.handleContextRequestEvent(p);this.context.on("request",c),this.handleNewPageEventHelper(this.page),this.context.on("close",()=>{this.context.off("page",l),this.context.off("request",c);});let u=false;if(o){let p=async()=>{let h=Date.now();try{let g=[this.page.addScriptTag({content:`${eq.htmlUtilsLibJs}
|
|
7954
|
-
//# sourceURL=momentic-injected/browser-scripts.js`}),this.page.addScriptTag({content:Tq(i,this.userBrowserSettings.disableFullStory)})];a&&g.push(this.page.addScriptTag({content:pTe(a.recordScript)})),await Promise.all(g);}catch(g){if(g instanceof Error&&(g.message.includes("Content Security Policy")||g.message.includes("TrustedScript")))this.logger.warn({err:g},"Content Security Policy error from adding Momentic scripts, reloading page instead"),u=true;else throw g}(r??{})["add-init-scripts"]=Date.now()-h;};s.push(p());}if(!this.properties.systemDevicePixelRatio)if(process.env.MOMENTIC_LOCAL_DEV==="1"&&!this.isRemoteBrowser&&platform()==="darwin"&&execSync("system_profiler SPDisplaysDataType").toString().includes("Retina"))C.warn("[DEV] Setting device pixel ratio to 2 in local dev since a Retina display was detected"),this.properties.systemDevicePixelRatio=2;else {let p=async()=>{let h=Date.now();this.properties.systemDevicePixelRatio=await this.page.evaluate(()=>window.devicePixelRatio),(r??{})["fetch-dpr"]=Date.now()-h;};s.push(p());}let d=Date.now();await ge(Promise.all(s),{milliseconds:this.pageLoadTimeout,message:"Timed out attaching Chrome permissions and initialization scripts",signal:this.abortSignal});let m=Date.now();(r??{})["ops-attach"]=m-d,u&&await this.page.reload(),this.cdpClient=await hD.init({logger:this.logger,contextGetter:()=>this.context,pageGetter:()=>this.page,defaultTimeoutMs:this.pageLoadTimeout,onAttach:async p=>{await this.initializeScreencast(p);}}),(r??{})["cdp-init"]=Date.now()-m,this.stateManager=new xD({smartWaitingTimeoutMs:this.smartWaitingTimeout,pageLoadTimeoutMs:this.pageLoadTimeout,allowPartialAccessibilityTree:this.userControlledBrowserSettings.allowPartialAccessibilityTree??true,logger:this.logger,cdpClient:this.cdpClient,pageGetter:()=>this.page,abortSignalGetter:()=>this.abortSignal,enricher:this.enricher,iconKnowledgeBase:this.iconKnowledgeBase,userBrowserSettings:this.userBrowserSettings,allowedA11yIgnoreReasonsOverride:this.properties.allowedA11yIgnoreReasonsOverride}),this.contextInitialized=true;}async fixViewportForNewHeadless(t=this.cdpClient){this.properties.isNewHeadless&&(this.properties.isAndroid||this.viewport&&await t.send({method:"Emulation.setDeviceMetricsOverride",params:{width:this.viewport.width,height:this.viewport.height,deviceScaleFactor:0,mobile:this.viewport.width<1e3}}));}async waitForRootNavSettle(t){return de({name:"browser.waitForRootNavSettle",serviceName:"browser",fn:()=>this.waitForRootNavSettleHelper(t)})}async waitForRootNavSettleHelper(t){let n=this.rootUrlLastChangedAt.get(this.page)??0,o=Date.now()-n;if(o>=e.NAVIGATION_SETTLE_MS)return;let r=e.NAVIGATION_SETTLE_MS-o;try{await ge(this.page.waitForLoadState("load",{timeout:r}),{milliseconds:r,signal:t,fallback:()=>{}});}catch{t?.throwIfAborted();}}async initializeScreencast(t){await this.fixViewportForNewHeadless(t),this.clientCallbacks?.onScreencastFrame&&this.viewport&&(await t.send({method:"Page.startScreencast",params:{format:"jpeg",quality:75,maxWidth:this.viewport.width,maxHeight:this.viewport.height}}),t.on("Page.screencastFrame",n=>{let o=n.sessionId,r=Buffer.from(n.data,"base64");this.lastScreenshotForRecording=r,this.clientCallbacks?.onScreencastFrame?.(r,()=>{(async()=>{try{await t.send({method:"Page.screencastFrameAck",params:{sessionId:o}});}catch{}})();});}));}static async init(t){let n;try{n=await bq(t);}catch(r){throw Sq(r,t.userBrowserSettings.browserType)}let o=new e(n);return o.initOptions=t,await o.trackPageVideo(o.page),await o.initialize({grantPermissions:true,permissionsToGrant:t.userBrowserSettings.grantedPermissions,runInitScripts:false}),o}static async fromExistingContext({context:t,page:n,attachTimeoutMs:o,storage:r,enricher:i,userBrowserSettings:s,properties:a,logger:l,timingRecorder:c}){let u=n??t.pages()[0];if(!u)throw new Error("No page found in existing context");let d=u.viewportSize();if(!d){let h=Date.now();d=await ge(u.evaluate(()=>({width:window.innerWidth,height:window.innerHeight})),{milliseconds:o??1/0,message:"Timed out connecting Playwright to the webview"}),c["eval-viewport"]=Date.now()-h;}let m=u?.url(),p=new e({browser:t.browser(),context:t,page:u,baseUrl:m,logger:l,storage:r,enricher:i,userBrowserSettings:s,viewport:d,properties:a,clientCallbacks:void 0,iconKnowledgeBase:null});try{await ge(p.initialize({grantPermissions:!1,runInitScripts:!0,timingRecorder:c}),{milliseconds:o??1/0,message:"Timed out connecting Playwright to the webview"});}catch(h){throw await p.cleanup(),h}return p}async handleAvailableTabsChangeHelper(){try{let t=await xq(this.context,{getTitles:!0,getPageId:o=>this.getPageId(o)}),n=this.getPageId(this.page);this.clientCallbacks?.onTabsChange?.(t,n);}catch(t){this.logger.error({err:t},"Error sending available tabs to frontend");}}handleAvailableTabsChange(){try{clearTimeout(this.lastTabChangeEventTimeout),this.lastTabChangeEventTimeout=setTimeout(()=>this.handleAvailableTabsChangeHelper(),500);}catch(t){this.logger.warn({err:t},"Error handling available tabs change");}}addToPageLoadPromises(t,n){let o=randomUUID(),r=`${t}-${o}`,i=Date.now(),s=false,a=new AbortController;this.pageLoadAbortControllers.add(a);let l=async()=>{try{await ge(n(),{signal:a.signal,milliseconds:this.pageLoadTimeout,message:`Page load promise for code path ${t} timed out after ${this.pageLoadTimeout}ms`});}catch(c){c.name!=="AbortError"&&!this.closed&&this.logger.error({err:c,promiseKey:r,codePath:t,duration:Date.now()-i},`Page load promise for code path ${t} encountered error`);}finally{delete this.pageLoadPromises[r],this.pageLoadAbortControllers.delete(a),s=true;}};this.pageLoadPromises[r]=l().catch(()=>{}),s&&delete this.pageLoadPromises[r];}handlePageClosedEvent(t){if(this.pendingMainFrameNavigationObservations=this.pendingMainFrameNavigationObservations.filter(o=>o.page!==t),this.page!==t){this.logger.debug({url:t.url()},"Detected background page was closed, just updating available tabs only"),this.handleAvailableTabsChange();return}let n=async()=>{if(this.closed)return;this.logger.info({url:t.url()},"Detected active page was closed, switching to another tab");let o=this.context.pages();for(let r=o.length-1;r>=0;r--){let i=o[r];if(!(!i||i.isClosed()||!Nh(i.url()))){this.logger.info(`Automatically switching to tab ${r} after close: ${i.url()}`),await this.switchToPage({type:"INDEX",index:String(r)});break}}};this.addToPageLoadPromises("page closed handler",n);}handleNewPageEvent(t){let n=t.url();this.logger.info({url:n},"Detected new page event, registering handlers and waiting for load to complete");try{this.handleNewPageEventHelper(t);}catch(o){this.logger.warn({err:o},"Error handling new page open, continuing....");}}handleNewPageEventHelper(t){let n=this.getPageId(t),o="new-page-load-handler";t.on("close",s=>this.handlePageClosedEvent(s)),t.on("framenavigated",s=>this.handleFrameNavigationEvent(s)),t.on("crash",()=>{this.logger.error("Page crashed at the Playwright level!");});let r=this.context.pages().indexOf(t);if((!this.userBrowserSettings.disableBrowserMonitoring||this.userControlledBrowserSettings.lightweightConsoleLogs)&&!this.userControlledBrowserSettings.disableConsoleLogs&&!this.consoleLogCircuitBreaker.isDisabled()){let s=a=>{this.consoleLogCircuitBreaker.recordActivity({stage:"receive",charCount:a.text().length}),!this.consoleLogCircuitBreaker.isDisabled()&&this.consoleLogCircuitBreaker.run({stage:"serialize",fn:async()=>{await XSe(t,r,this.debugData,a,this.logger,this.userControlledBrowserSettings.lightweightConsoleLogs?{includeArgs:false,maxLogsPerPage:zW}:void 0)&&this.consoleLogCircuitBreaker.recordBufferOverflow({stage:"serialize",bufferLimit:this.userControlledBrowserSettings.lightweightConsoleLogs?zW:mD});}});};this.consoleLogListeners.set(t,s),t.on("console",s);}let i=async()=>{this.shouldCaptureNetworkLogs()&&(cq(this.logger,n,this.clientCallbacks?.onNetworkPage),!this.harBatcher&&this.clientCallbacks?.onNetworkLogs&&(this.harBatcher=aTe(this.clientCallbacks.onNetworkLogs))),await this.ensureNetworkRoutes({page:t,pageId:n}),await this.trackPageVideo(t),await this.loadFrameAndRecordUrl({root:t,codePath:o}),this.handleAvailableTabsChange();};this.addToPageLoadPromises(o,i);}async ensureNetworkRoutes({page:t,pageId:n}){if((this.shouldCaptureNetworkLogs()||this.customHeaders.length>0||this.hasActiveRequestInterceptors())&&!this.networkRouteHandlers.has(t)){let r=async(i,s)=>{let a=this.shouldCaptureNetworkLogs(),l=a&&!this.hasActiveRequestRecorders();if(!a&&!this.hasActiveRequestInterceptors()){await i.continue();return}await dq({pageId:n,route:i,request:s,onHarEntry:a?(c,u)=>{this.harBatcher?.fetch({[c]:u}).catch(()=>{});}:void 0,logger:this.logger,requestRecorders:this.requestRecorders,mocks:this.mocks,isBrowserClosed:()=>this.closed,onCollectionTiming:l?c=>this.networkLogCircuitBreaker.record(c):void 0});};this.networkRouteHandlers.set(t,r);try{await t.route("**/*",r);}catch(i){throw this.networkRouteHandlers.delete(t),i}}if(this.customHeaders.length>0&&!this.customHeaderRouteHandlers.has(t)){let r=tbe(this.customHeaders,this.logger);this.customHeaderRouteHandlers.set(t,r);try{await t.route("**/*",r);}catch(i){throw this.customHeaderRouteHandlers.delete(t),i}}}handleContextRequestEvent(t){let n=this.harBatcher;if(!(this.cleanedUp||!n||t.resourceType()!=="document"||!t.isNavigationRequest()||t.serviceWorker()||!this.shouldCaptureNetworkLogs()))try{t.frame();}catch{let o=this.capturePopupDocumentRequest({request:t,harBatcher:n});this.pendingPopupDocumentCaptures.add(o),o.finally(()=>{this.pendingPopupDocumentCaptures.delete(o);});}}async capturePopupDocumentRequest({request:t,harBatcher:n}){try{let o=randomUUID(),r=randomUUID(),i=sc({signal:this.popupDocumentAttributionAbortController.signal,timeoutMs:VW}),s=this.context.waitForEvent("page",{predicate:d=>{try{return t.frame().page()===d}catch{return !1}},timeout:VW}).catch(()=>{}),a=await oI(o,t,{abortSignal:i}),l=await ge(s,{signal:i,milliseconds:1/0}).catch(()=>{});l?a.pageref=this.getPageId(l):cq(this.logger,o,this.clientCallbacks?.onNetworkPage,this.page);let c=(d,m)=>{n.fetch({[d]:m}).catch(()=>{});};c(r,a);let u=SD({request:t,onHarEntry:c,logger:this.logger,requestRecorders:{},entry:a,requestId:r,neverRedact:!1,isBrowserClosed:()=>this.closed});this.pendingPopupDocumentResponseCollections.add(u),u.finally(()=>{this.pendingPopupDocumentResponseCollections.delete(u);});}catch(o){this.closed||this.logger.warn({err:o},"Failed to capture popup document request in HAR");}}async finishPendingPopupDocumentCaptures(){this.popupDocumentAttributionAbortController.abort(),await Promise.all(this.pendingPopupDocumentCaptures),this.pendingPopupDocumentCaptures.clear();}async finishPendingPopupDocumentResponseCollections(){await Promise.all(this.pendingPopupDocumentResponseCollections),this.pendingPopupDocumentResponseCollections.clear();}async ensureNetworkRoutesForOpenPages(){await Promise.all(this.context.pages().map(async t=>{let n=this.pageIds.get(t);n&&await this.ensureNetworkRoutes({page:t,pageId:n});}));}removeConsoleLogListeners(){for(let t of this.context.pages()){let n=this.consoleLogListeners.get(t);n&&(t.off("console",n),this.consoleLogListeners.delete(t));}}async removeUnusedNetworkRoutes(){this.shouldCaptureNetworkLogs()||this.customHeaders.length>0||this.hasActiveRequestInterceptors()||await Promise.all(this.context.pages().map(async t=>{let n=this.networkRouteHandlers.get(t);if(n){this.networkRouteHandlers.delete(t);try{await t.unroute("**/*",n);}catch(o){this.closed||(this.networkRouteHandlers.set(t,n),this.logger.warn({err:o},"Failed to remove browser network debug data route"));}}}));}async removeCustomHeaderRoutes(){await Promise.all(this.context.pages().map(async t=>{let n=this.customHeaderRouteHandlers.get(t);if(n){this.customHeaderRouteHandlers.delete(t);try{await t.unroute("**/*",n);}catch(o){this.closed||(this.customHeaderRouteHandlers.set(t,n),this.logger.warn({err:o},"Failed to remove browser custom header route"));}}}));}scheduleRemoveUnusedNetworkRoutes(){this.removeUnusedNetworkRoutes().catch(t=>{this.logger.warn({err:t},"Failed to stop browser network debug data recording");});}scheduleEnsureNetworkRoutes(){this.closed||this.ensureNetworkRoutesForOpenPages().catch(t=>{this.logger.warn({err:t},"Failed to resume browser network debug data recording");});}shouldCaptureNetworkLogs(){return this.networkLogCircuitBreaker.isDisabled()?false:!this.userBrowserSettings.disableBrowserMonitoring&&!this.userControlledBrowserSettings.disableNetworkLogs}hasActiveRequestInterceptors(){return this.hasActiveRequestRecorders()||Object.keys(this.mocks).length>0}hasActiveRequestRecorders(){return Object.keys(this.requestRecorders).length>0}async handleCollectSvgs(t){}handleFrameNavigationEvent(t){let n=t.url(),o=t.parentFrame()?"has-parent":"no-parent",r=`frame-navigation-handler-${n.slice(0,50)} (${o})`;if(!n||n==="about:blank"||!Nh(n))return;t.parentFrame()||this.rootUrlLastChangedAt.set(t.page(),Date.now());let i=this.recentFrameNavigations[r];if(i&&Date.now()-i<1e3)return;this.recentFrameNavigations[r]=Date.now(),t.parentFrame()||cTe({logger:this.logger,url:n});let s=async()=>{try{if(t.isDetached())return;await this.loadFrameAndRecordUrl({root:t,codePath:r}),this.handleAvailableTabsChange(),!t.parentFrame()&&!t.isDetached()&&this.clientCallbacks?.onSvgsCollected&&(setTimeout(()=>{(async()=>{try{await this.handleCollectSvgs(t);}catch(l){this.logger.warn({err:l},"Failed to collect SVGs on page, continuing...");}})();},5e3),this.transformer&&await this.injectKnowledgeBaseIntoBrowser(t));}catch(a){a.name!=="AbortError"&&this.logger.warn({err:a,url:n,codePath:r},"Failed to handle frame navigation event, continuing...");}};this.addToPageLoadPromises(r,s);}async injectKnowledgeBaseIntoBrowser(t){try{if(!this.iconKnowledgeBase||await t.evaluate(()=>!!window._momentic._MOMENTIC_ICON_KNOWLEDGE_BASE))return;let o={};Object.keys(this.iconKnowledgeBase).forEach(r=>{this.iconKnowledgeBase[r]?.description&&(o[r]=this.iconKnowledgeBase[r].description);}),await t.evaluate(r=>{let s=window._momentic;s._MOMENTIC_ICON_KNOWLEDGE_BASE=r;},o);}catch(n){this.logger.warn({err:n},"Failed to inject icon knowledge base into browser, continuing...");}}getBrowserCallbacks(){return {runWithMainFrameNavigationLatch:t=>this.runWithMainFrameNavigationLatch(t),waitForPageLoad:()=>this.waitForPageLoad(),waitForUrl:t=>this.waitForUrl(t),waitForStability:t=>this.waitForStability(t),state:{url:()=>this.url(),getDomGraph:()=>this.stateManager.domGraph,getOpenPages:()=>this.getOpenPages(),getRoot:()=>this.getActivePageOrFrame(),userBrowserSettings:this.userBrowserSettings,isRemoteBrowser:this.isRemoteBrowser},pageLoadTimeoutMs:this.pageLoadTimeout,signal:this.abortSignal}}ping(){if(this.closed)throw new Error("Page has been closed")}setActiveFrameConfig(t){this.stateManager.setActiveFrameConfig(t);}async reset(t){if(this.debugData.logsPerPage=[],this.pageLoadPromises={},this.pendingMainFrameNavigationObservations=[],this.traceScreenshotCache.clear(),t.newUrl&&(this.baseUrl=t.newUrl),this.closed){await this.restartBrowser(t);return}try{this.requestRecorders={},this.mocks={},this.customHeaders.length=0,this.offline&&(await this.context.setOffline(!1),this.offline=!1),await Promise.all([this.removeUnusedNetworkRoutes(),this.removeCustomHeaderRoutes()]),await this.clearAuthState({closeNonActiveTabs:!0}),await this.stopScreencast(),await this.reinitializeCDPClient(),await this.navigate({url:this.baseUrl,initialNavigation:!0,loadTimeoutMs:t.timeout}),this.stateManager.reset();}catch(n){if(!this.closed)throw n;await this.restartBrowser(t);}}async restartBrowser(t){if(!this.initOptions)throw new Error("Cannot restart browser: no init options available");this.logger.info("Browser closed, restarting from scratch"),await this.finishPendingPopupDocumentCaptures();try{await this.context.close();}catch{}try{await this.browser?.close();}catch{}await this.finishPendingPopupDocumentResponseCollections(),this.harBatcher?.next();let n;try{n=await bq(this.initOptions);}catch(o){throw Sq(o,this.initOptions.userBrowserSettings.browserType)}this.browser=n.browser,this.context=n.context,this.page=n.page,this.viewport=n.viewport,this.properties=n.properties,this.cleanedUp=false,this.contextInitialized=false,this.originsVisited=new Set,this.mocks={},this.requestRecorders={},this.customHeaders=[],this.offline=false,this.harBatcher=void 0,this.popupDocumentAttributionAbortController=new AbortController,this.recentFrameNavigations={},this.pageLoadAbortControllers.forEach(o=>o.abort()),this.pageLoadAbortControllers.clear(),this.pageLoadAbortListenerCleanup=void 0,await this.trackPageVideo(this.page),await this.initialize({grantPermissions:true,permissionsToGrant:this.initOptions.userBrowserSettings.grantedPermissions,runInitScripts:false}),await this.navigate({url:this.baseUrl,initialNavigation:true,loadTimeoutMs:t.timeout}),this.stateManager.reset();}async clearHighlights(){try{await ge(wq(this.getBrowserCallbacks()),{milliseconds:Mn});}catch(t){this.logger.debug({err:t},"Failed to clear highlights, continuing...");}}async cleanup(t={}){this.abortSignal=void 0,this.cleanedUp=true,await this.finishPendingPopupDocumentCaptures(),this.networkLogCircuitBreaker.dispose(),this.consoleLogCircuitBreaker.dispose(),t.saveRemoteVideos??true?this.startPendingRemoteVideoSaves():this.pendingRemoteVideoSaves.splice(0);try{this.pageLoadAbortListenerCleanup?.(),this.pageLoadAbortListenerCleanup=void 0,this.pageLoadAbortControllers.forEach(o=>o.abort()),this.pageLoadAbortControllers.clear(),this.originsVisited.clear(),await this.context.close();}catch(o){this.logger.warn({err:o},"Error cleaning up browser, continuing...");}try{await this.finishPendingRemoteVideoSaves(),await this.browser?.close();}catch(o){this.logger.warn({err:o},"Error cleaning up browser, continuing...");}await this.finishPendingPopupDocumentResponseCollections(),this.harBatcher?.next(),this.browser=null;}get closed(){return this.cleanedUp||this.context.pages().every(t=>t.isClosed())||!!this.browser&&!this.browser.isConnected()}async ensureMomenticBrowserScriptsLoaded(t,n,o){return de({name:"browser.ensureMomenticBrowserScriptsLoaded",serviceName:"browser",fn:()=>this.ensureMomenticBrowserScriptsLoadedHelper(t,n,o)})}async ensureMomenticBrowserScriptsLoadedHelper(t,n,o){let r=Date.now(),i=0,s=0;for(;Date.now()-r<GA;){s++,o?.throwIfAborted();try{if(await Or({fn:()=>{let c=window._momentic;return !!(c.generateCssSelectors&&c.evaluateCssSelectors&&c.evaluatePrimaryCaches&&c.generateHtmlCacheAttributes&&c.ldist)},timeout:Mn,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad({signal:o}),root:t,codePath:"ensuring Momentic system scripts are loaded"}))return}catch(a){if(i++,i>=3){n.warn({err:a},"Multiple errors checking if Momentic scripts are loaded, aborting...");return}}await ht(Qr),s%2===0&&n.warn("Still waiting for momentic browser scripts to load...");}throw new Error(`Failed to load momentic browser scripts on page ${t.url()}`)}async html(){let t=await this.getActivePageOrFrame();return await this.ensureMomenticBrowserScriptsLoaded(t,this.logger),Or({root:t,fn:()=>{let o=window._momentic;if(!o.getFullHtmlTree)throw new Error("Missing Momentic HTML library when fetching page HTML");return o.getFullHtmlTree()},arg:void 0,timeout:gt,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the full HTML tree"})}url(){return this.page.url()}async stabilizePageForScreenshot(){try{await this.evaluateFunctionInPage(()=>{let n=window._momentic,o=[],r=new Map;document.querySelectorAll("input,textarea,[contenteditable]").forEach(i=>{r.set(i,{value:i.style.getPropertyValue("caret-color"),priority:i.style.getPropertyPriority("caret-color")}),i.style.setProperty("caret-color","transparent","important");}),o.push(()=>{for(let[i,s]of r)i.style.setProperty("caret-color",s.value,s.priority);}),n._MOMENTIC_SCREENSHOT_CLEANUP=()=>{for(let i of o)i();delete n._MOMENTIC_SCREENSHOT_CLEANUP;};},void 0,"stabilizing page for screenshot");}catch(t){(!(t instanceof Error)||!t.message.includes("Execution context was destroyed"))&&this.logger.warn({err:t},"Failed to stabilize page before screenshot, continuing...");}}async removeScreenshotStabilization(){return de({name:"browser.removeScreenshotStabilization",serviceName:"browser",fn:()=>this.removeScreenshotStabilizationHelper()})}async removeScreenshotStabilizationHelper(){try{await this.evaluateFunctionInPage(()=>{window._momentic._MOMENTIC_SCREENSHOT_CLEANUP?.();},void 0,"removing screenshot stabilization");}catch{}}async screenshot(t){let n=()=>gi({logger:this.logger,operation:"screenshot",trace:{name:"browser.screenshot"},fn:()=>this.screenshotHelper(t)});return t.traceScreenshotRole?jo().startAsyncSpan("GET_PAGE_SCREENSHOT",n,{}):n()}async screenshotHelper(t){let{retries:n=1,stabilizeBeforeScreenshot:o=false}=t,r=this.page,i=r.url();if(t.traceScreenshotRole==="before"){let a=this.traceScreenshotCache.take({clearHighlights:t.clearHighlights===true,page:r,quality:t.quality,url:i,viewport:this.getViewport()});if(a&&!t.locator&&!t.boundingBoxOverride&&!t.respectActiveFrame&&!t.saveToDiskPath)return a}else this.traceScreenshotCache.clear();o&&await de({name:"browser.stabilizePageForScreenshot",serviceName:"browser",fn:()=>this.stabilizePageForScreenshot()});let s=Date.now();try{await this.waitForRootNavSettle(),await this.fixViewportForNewHeadless();let a=await this.captureScreenshot({...t,retries:n});if(a.byteLength>5e6)this.logger.warn("Page screenshot is greater than 5MB, which may cause performance issues with some AI models");else if(a.length===0)throw new Error("Got empty screenshot");if(t.traceScreenshotRole==="after"&&r===this.page&&i===r.url()&&!t.locator&&!t.boundingBoxOverride&&!t.respectActiveFrame&&!t.saveToDiskPath){let l=this.getViewport();this.traceScreenshotCache.store({buffer:a,clearHighlights:t.clearHighlights===!0,page:r,quality:t.quality,url:i,viewport:l});}return a}catch(a){if(n<=0||a.message.includes("has been closed"))throw a;return this.logger.warn({err:a,pageUrl:i},"Failed taking screenshot, retrying..."),await ht(Ep),this.screenshotHelper({...t,retries:n-1})}finally{Date.now()-s>1e3&&this.logger.warn({pageUrl:i,duration:Date.now()-s},"Screenshot took longer than expected"),o&&await this.removeScreenshotStabilization();}}async captureScreenshot({locator:t,quality:n,saveToDiskPath:o,timeout:r,respectActiveFrame:i,clearHighlights:s=false,boundingBoxOverride:a}){s&&await de({name:"browser.screenshot.clearHighlights",serviceName:"browser",fn:()=>this.clearHighlights()}),i&&this.stateManager.frameConfig&&(t=await(await this.getActivePageOrFrame()).frameElement());let l=await this.cdpClient.send({method:"Page.captureScreenshot",params:{format:"jpeg",quality:n,optimizeForSpeed:true},timeout:r??dSe});return de({name:"browser.screenshot.processImage",serviceName:"browser",attributes:{"momentic.screenshot_base64_length":l.data.length},fn:async c=>{let u=await this.processCapturedScreenshotImage({screenshotData:l.data,locator:t,boundingBoxOverride:a,saveToDiskPath:o});return c?.setAttributes({"momentic.screenshot_cropped":u.cropped,"momentic.screenshot_raw_height":u.rawHeight,"momentic.screenshot_raw_width":u.rawWidth,"momentic.screenshot_resized":u.resized,"momentic.screenshot_source":"cdp",...u.viewportHeight===void 0?{}:{"momentic.screenshot_viewport_height":u.viewportHeight},...u.viewportWidth===void 0?{}:{"momentic.screenshot_viewport_width":u.viewportWidth}}),u.buffer}})}async processCapturedScreenshotImage({screenshotData:t,locator:n,boundingBoxOverride:o,saveToDiskPath:r}){try{let i=Buffer.from(t,"base64"),{width:s,height:a}=wD(i),{width:l,height:c}=this.getViewport()??{},u=i,d=s,m=a,p=!1;if(l&&c&&(s!==l||a!==c)&&(u=await Fbe(i,{width:l,height:c}),d=l,m=c,p=!0),r&&writeFileSync(r,u),this.lastScreenshotForRecording=u,!n&&!o)return {buffer:u,cropped:!1,rawHeight:a,rawWidth:s,resized:p,viewportHeight:c,viewportWidth:l};let h=o??(n?await n.boundingBox({timeout:gt}):void 0);if(!h)throw new Error("Attempted to screenshot an element that is not visible on the page");if(!h.width||!h.height)throw new Error("Attempted to screenshot an element with zero width or height");let g=Math.max(0,Math.min(Math.floor(h.x),d-1)),f=Math.max(0,Math.min(Math.floor(h.y),m-1)),y=Math.max(1,Math.min(Math.floor(h.width),d-g)),S=Math.max(1,Math.min(Math.floor(h.height),m-f));try{return {buffer:await Bbe(u,{x:g,y:f,width:y,height:S}),cropped:!0,rawHeight:a,rawWidth:s,resized:p,viewportHeight:c,viewportWidth:l}}catch(b){throw new Error(`Failed taking element screenshot at coordinates (${g}, ${f}) with size (${y}, ${S}): ${b}`)}}finally{n&&"dispose"in n&&await n.dispose();}}getViewport(){if(this.viewport)return this.viewport;let t=this.page.viewportSize();return t||null}async getUserAgent(){try{return await Or({root:this.page,fn:()=>navigator.userAgent,arg:void 0,timeout:gt,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"reading the browser user agent"})}catch(t){return this.logger.warn({err:t},"Failed to read browser user agent"),pD}}async navigate({url:t,initialNavigation:n=false,loadTimeoutMs:o=this.pageLoadTimeout}){$re(t)&&(t=new URL(t,this.baseUrl).toString());let r=Date.now();n||(await this.waitForPageLoad(),await this.waitForStability());let i=false,s;for(let l=0;l<3;l++)try{await this.page.goto(t,{timeout:o,waitUntil:"domcontentloaded"}),i=!0;break}catch(c){if(s=c,this.abortSignal?.throwIfAborted(),this.shouldIgnorePageLoadTimeout(s)){i=true,this.logger.warn({err:s,url:t},"DOMContentLoaded timed out during navigation, continuing due to browser setting");break}let u=s.message.includes("net::ERR_CONNECTION_REFUSED");if(this.logger.warn({err:c},`Error occurred during navigation${l<2&&!u?", retrying...":" (fatal)"}`),u)break;await ht(Qr);try{await this.cdpClient.send({method:"Page.stopLoading",params:{},timeout:o});}catch(d){this.logger.warn({err:d},"Page.stopLoading failed during navigation retry");}}if(!i)throw new oe("UserInfrastructureError",s?.message??"Failed to load page");await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"navigate-step-wait-for-load"}),this.logger.info({url:t},`Navigation complete in ${Math.floor(Date.now()-r)}ms`);let a=this.url();if(fSe.has(a))throw new oe("UserInfrastructureError",`${t} took too long to load \u{1F61E}. Please ensure the site is accessible and returns content within the page load timeout.`);await this.fixViewportForNewHeadless();}async type(t,n={},o=false){await gi({attributes:tq(t,n),logger:this.logger,operation:"type",targetMode:"focused",trace:{name:"browser.type",attributes:{"momentic.type.text_length":t.length,"momentic.type.delay_ms":n.delay??d_,"momentic.type.clear_content":n.clearContent??false,"momentic.type.press_enter":n.pressEnter??false,"momentic.type.require_active_element":o}},fn:()=>this.directTypeHelper(t,n,o)});}async getActiveElementHandle(t){return t.evaluateHandle(()=>document.activeElement)}async getActiveElement(t){try{return await Or({root:t,fn:()=>{let o=document.activeElement?.textContent??void 0;o&&o.length>100&&(o=o.slice(0,100)+"...[TRUNCATED]");let r=!1,i=window.getSelection();i&&!i.isCollapsed&&i.toString().trim().length>0&&(r=!0);let s=document.activeElement;return s&&"selectionStart"in s&&typeof s.selectionStart=="number"&&typeof s.selectionEnd=="number"&&s.selectionStart!==s.selectionEnd&&(r=!0),document.activeElement?{tag:document.activeElement.tagName.toLowerCase(),contentEditable:document.activeElement.getAttribute("contenteditable")??void 0,textContent:o,hasTextSelected:r}:{hasTextSelected:r}},arg:void 0,timeout:Mn,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the active element"})}catch(n){this.logger.warn({err:n},"Failed to get active element");return}}async directTypeHelper(t,n={},o=false){let r=await this.getActivePageOrFrame();await $be({root:r,text:t,options:n,logger:this.logger,callbacks:this.getBrowserCallbacks()});let i=await this.getActiveElement(r);if(o){let l=Date.now();for(;Date.now()-l<this.smartWaitingTimeout&&(!i||i.tag==="body");)await ht(Ep),this.abortSignal?.throwIfAborted(),i=await this.getActiveElement(r);i||this.logger.warn("No active element found to type into, attempting anyways");}if(n.fill){await r.locator(":focus").first().fill(t,{force:n.force,timeout:zn}),n.pressEnter&&await this.press("Enter",{}),await this.waitForStability();return}let s=n.delay??d_,a=i?.tag==="input"||i?.tag==="textarea";if(n.clearContent)if(a||n.forceClearContent)if(this.properties.isAndroid&&!a&&i?.textContent){this.logger.info("Clearing content using backspaces");let l=0,c=i.textContent?.length;for(;c&&l<50;){l++;let u=[...Array(c)].map(()=>"Backspace").join("+");await this.page.keyboard.press(u),i=await this.getActiveElement(r),c=i?.textContent?.length;}c&&this.logger.warn("Content still remains after clearing existing");}else this.properties.isAndroid?await this.page.keyboard.press("Control+A"):this.operatingSystem==="darwin"?await this.page.keyboard.press("Meta+A"):await this.page.keyboard.press("Control+A"),await this.page.waitForTimeout(s),await this.page.keyboard.press("Backspace"),await this.page.waitForTimeout(s);else this.logger.info({activeElementDetails:i},"Currently active element is not eligible for replace content, skipping...");await this.page.keyboard.type(t,{delay:s}),n.pressEnter&&await this.press("Enter",{}),await this.waitForStability();}async scrollIntoViewIfNeeded(t){try{await t.scrollIntoViewIfNeeded({timeout:zn});}catch(n){this.logger.warn({err:n},"Failed to scroll into view, trying with raw JS");try{await t.evaluate(async o=>{let r=o.scrollTop;o.scrollIntoView({block:"nearest"}),await new Promise(s=>setTimeout(s,250));let i=Date.now();for(;Date.now()-i<1e3;){let s=o.scrollTop;if(s===r)break;r=s,await new Promise(a=>setTimeout(a,250));}},void 0,{timeout:zn});}catch(o){this.logger.warn({err:o},"Failed to scroll into view using JS, continuing...");}}}async highlightA11yId(t){try{let{resolution:n}=await this.createTargetFromA11yId({id:t,description:null,targetSource:"AI",skipSaveToCache:!0});return await this.highlight(n.locator),!0}catch(n){return this.logger.debug({err:n,id:t},"Failed to highlight target"),false}}async highlight(t){return RD({locator:t,callbacks:this.getBrowserCallbacks(),logger:this.logger})}recordUrlVisited(t){try{let n=new URL(t).origin;if(n==="null")return;this.originsVisited.add(n);}catch(n){this.logger.warn({err:n},"Failed to record origin visited");}}async waitForPageLoad(t){return de({name:"browser.wait_for_page_load",serviceName:"browser",fn:()=>this.waitForPageLoadHelper(t)})}async runWithMainFrameNavigationLatch({page:t,action:n}){let o=()=>{},r=new Promise(u=>{o=u;}),i=u=>{u.parentFrame()||o(true);};t.on("framenavigated",i);let s;try{s=await n();}catch(u){throw t.off("framenavigated",i),u}if(t.isClosed())return t.off("framenavigated",i),s;let a=performance.now(),l=Promise.race([r,ht(Ep,this.abortSignal).then(()=>false,()=>false)]).then(u=>({observed:u,durationMs:performance.now()-a})).finally(()=>t.off("framenavigated",i)),c={page:t,observation:l};return this.pendingMainFrameNavigationObservations.push(c),t.isClosed()&&(this.pendingMainFrameNavigationObservations=this.pendingMainFrameNavigationObservations.filter(u=>u!==c),t.off("framenavigated",i)),s}consumeMainFrameNavigationObservations(t){let n=[],o=[];for(let r of this.pendingMainFrameNavigationObservations)r.page===t?n.push(r.observation):r.page.isClosed()||o.push(r);return this.pendingMainFrameNavigationObservations=o,Promise.all(n)}async settleObservedMainFrameNavigation({observationsPromise:t,signal:n}){let o=performance.now(),r=await t,i=r.some(a=>a.observed),s=0;if(i){let a=performance.now();await this.waitForPageLoad({signal:n}),s=performance.now()-a;}return {observed:i,attributes:{"momentic.stability.navigation_latch_count":r.length,"momentic.stability.navigation_observed":i,"momentic.stability.navigation_detection_duration_ms":Math.max(0,...r.map(a=>a.durationMs)),"momentic.stability.navigation_observation_wait_duration_ms":Math.max(0,performance.now()-o-s),"momentic.stability.navigation_page_load_duration_ms":s}}}async waitForPageLoadHelper(t){let n=t?.signal??this.abortSignal;await this.awaitOutstandingPageLoadPromises(n)&&await this.waitForRootNavSettle(n);}async awaitOutstandingPageLoadPromises(t){return de({name:"browser.awaitOutstandingPageLoadPromises",serviceName:"browser",fn:()=>this.awaitOutstandingPageLoadPromisesHelper(t)})}async awaitOutstandingPageLoadPromisesHelper(t){let n=Date.now(),o=Object.values(this.pageLoadPromises),r=Object.keys(this.pageLoadPromises),i=-1,s=0;for(;o.length!==0;){if(t?.throwIfAborted(),Date.now()-n>this.pageLoadTimeout){this.logger.warn({outstandingPromiseKeys:r,outstandingPromises:o},"Timed out waiting on page load promises, continuing anyways...");break}if(Date.now()-i<20&&(s++,s>2))return this.logger.error({outstandingPromiseKeys:r,outstandingPromises:o},"Synchronous waiting loop detected, exiting page load wait"),false;i=Date.now(),await Promise.allSettled(o),o=Object.values(this.pageLoadPromises),r=Object.keys(this.pageLoadPromises);}return true}async clearAuthState(t){await this.context.clearCookies();for(let r of this.originsVisited)this.logger.debug({origin:r},`Clearing data using CDP for origin ${r}`),await this.cdpClient.send({method:"Storage.clearDataForOrigin",params:{origin:r,storageTypes:"all"},timeout:Mn}),this.originsVisited.delete(r);let n=this.context.pages().indexOf(this.page),o=[...this.context.pages()];for(let r=0;r<o.length;r++){let i=o[r];if(i.isClosed())continue;let s=i.url();try{this.originsVisited.delete(new URL(s).origin);}catch{}await JSe(i,this.logger),r!==n&&t.closeNonActiveTabs&&(this.logger.info(`Closing tab ${r} with URL ${s}`),await i.close());}}async loadAuthState(t){await this.waitForPageLoad(),await this.waitForStability(),!t||Object.keys(t).length===0?await this.clearAuthState({closeNonActiveTabs:false}):await this.loadAuthStateHelper(t),await this.refresh(),await this.waitForStability();}async loadAuthStateHelper(t){let n=[];for(let l of t.cookies??[]){let c=await this.setCookie(l);n=n.concat(c);}this.logger.info(`Loaded ${t.cookies?.length??0} cookies`);let o=0,r=new Map;await this.cdpClient.withDomainEnabled({domain:"DOMStorage",timeout:Mn,fn:async()=>{for(let l of t.origins??[])for(let c of l.localStorage)try{await this.cdpClient.send({timeout:Mn,method:"DOMStorage.setDOMStorageItem",params:{storageId:{securityOrigin:new URL(l.origin).origin,isLocalStorage:!0},key:c.name,value:c.value}}),o++;}catch{let u=new URL(l.origin).origin,d=r.get(u)??[];d.push(c),r.set(u,d);continue}}});for(let[l,c]of r)await this.loadLocalStorageThroughPage({origin:l,entries:c}),o+=c.length;this.logger.info(`Loaded ${o} local storage entries`);let i={},s=0;for(let l of t.origins??[])if(l.sessionStorage&&l.sessionStorage.length>0){let c={};for(let u of l.sessionStorage)c[u.name]=u.value,s++;i[new URL(l.origin).origin]=c;}s>0&&await this.context.addInitScript(({storageByOrigin:l,markerKey:c})=>{let u=window.location.origin,d=l[u];if(d&&!window.sessionStorage.getItem(c)){for(let[m,p]of Object.entries(d))window.sessionStorage.setItem(m,p);window.sessionStorage.setItem(c,"1");}},{storageByOrigin:i,markerKey:Eq}),this.logger.info(`Loaded ${s} session storage entries`);let a=t.idb;a&&Object.keys(a).length>0&&(await YSe(this.page,a,this.logger),this.logger.info(`Loaded ${Object.keys(a??{}).length} indexedDB databases`));}async loadLocalStorageThroughPage({origin:t,entries:n}){let o=await this.context.newPage();try{if(await o.route(`${t}/**`,async r=>{await r.fulfill({status:200,contentType:"text/html",body:"<!doctype html>"});}),await o.goto(t,{waitUntil:"domcontentloaded",timeout:this.pageLoadTimeout}),new URL(o.url()).origin!==t)throw new Error(`Could not initialize browser storage for ${t}`);await o.evaluate(r=>{for(let{name:i,value:s}of r)window.localStorage.setItem(i,s);},n);}finally{await o.close();}}async saveAuthState(){let n=0,o=null;for(;n<=2;)try{await this.waitForPageLoad(),await this.waitForStability();let r=await this.context.storageState();return r.idb=await KSe(this.page,this.logger),await _be(this.page,r,this.logger),r}catch(r){if(o=r,n++,n<=2){this.logger.warn({err:r,retryCount:n,maxRetries:2},`Error saving auth state, retrying (${n}/2)...`);let i=Math.pow(2,n)*100;await new Promise(s=>setTimeout(s,i));}}throw this.logger.error({err:o},"Failed to save auth state after 2 retries"),new oe("ActionFailureError",`Failed to save auth state: ${o?.message}`)}async getOpenPages(t){return xq(this.context,{...t,getPageId:n=>this.getPageId(n)})}getPageId(t){let n=this.pageIds.get(t);return n||(n=randomUUID(),this.pageIds.set(t,n)),n}getActivePageIndex(){return this.context.pages().indexOf(this.page)}saveA11yDetailsToCache(t,n){n.content=t.content,n.name=t.name,n.role=t.role,n.numChildren=t.children.length,delete n.serializedForm,delete n.nodeOnlySerializedForm;}async updateCacheWithNewNodeDetails({node:t,target:n,locator:o,originalElementLocationResult:r,allowNotActionableNodesOverride:i,logger:s=this.logger,skipSavingVisualAttributes:a=false,acceptElementMovedError:l=false}){if(t&&this.saveA11yDetailsToCache(t,n),n.frameCache=this.stateManager.saveAutoFrameCacheDetails(n.frameCache),o)try{let c=await this.fetchHtmlAttributes({locator:o,logger:s,originalElementLocationResult:r,allowNotActionableNodesOverride:i});c?(n.generatedSelectors=c.generatedSelectors,n.serializedHtml=c.serializedHtml,n.nodeOnlySerializedHtml=c.nodeOnlySerializedHtml,n.hybridSelector=c.hybridSelector,n.svgPathHash=c.svgPathHash):s.warn("Got undefined HTML attributes when trying to update cache");}catch(c){if(c instanceof ku&&l)s.warn({err:c},"Suppressing ElementMovedError due to acceptElementMovedError");else {if(c instanceof IS)throw s.warn({err:c},"Error while fetching HTML attributes triggering retry"),c;s.warn({err:c},"Failed to fetch HTML attributes for target, continuing...");}}try{a||await this.saveElementVisualAttributes({target:n,locator:o,originalElementLocationResult:r,logger:s});}catch(c){s.debug({err:c},"Failed to save element visual details, continuing...");}}async saveElementVisualAttributes({target:t,locator:n,logger:o}){if(!n)return;let r=await n.boundingBox({timeout:Mn});if(!r||!r.width||!r.height){o.debug("Skipping visual attributes saving for element with no bounding box after action"),t.boundingBox=void 0;return}let i=this.getViewport();if(r.x<0||r.y<0||!i||r.x+r.width>i.width||r.y+r.height>i.height||(t.boundingBox=r,this.userBrowserSettings.disableBrowserMonitoring))return;let s=jo();if(s.parent&&bZ(s.parent)&&s.storeTraceAsset){let a=randomUUID();s.parent.elementScreenshotSnapshotId=a,(async()=>{try{let l=await this.screenshot({locator:n,quality:75,retries:0,boundingBoxOverride:r});s.storeTraceAsset?.({snapshotId:a,data:l});}catch(l){this.logger.warn({err:l,screenshotId:a},"Failed to capture element screenshot for trace");}})();}}async resolveAutoFrameCache(t){return this.stateManager.resolveAutoFrameCache(t)}async getElementRequiredValues({logger:t,boundingBox:n,locator:o,requirements:r}){let i={},s=!!r?.position&&r.position!=="irrelevant",a=!!r?.shape&&r.shape!=="irrelevant";if(s||a){if(!n||!n.width||!n.height)throw new oe("ActionFailureError","Element does not have a bounding box as required");a&&(i.shape={width:n.width,height:n.height,tolerance:r.shape}),s&&(i.position={x1:n.x,y1:n.y,x2:n.x+n.width,y2:n.y+n.height,tolerance:r.position});}if(r?.text){let l=await o.evaluate(c=>window._momentic.getElementTextContentForCache(c),void 0,{timeout:gt});l!==void 0&&(i.text=l.trim());}if(r?.attributes&&r.attributes.length>0){let l={};for(let c of r.attributes){let u=c.trim().toLowerCase();if(!(!u||Ic.bannedAiRequiredCacheAttributes.includes(u)))try{let d=await o.getAttribute(u,{timeout:gt});d!==null&&(l[c]=d);}catch(d){t.warn({err:d,attr:c},"Failed to fetch required attribute, continuing...");}}i.attributes=l;}return i}async getAdditionalDetailsForElement({mainLocator:t,mainBoundingBox:n,additionalElement:o,root:r,logger:i}){let s=this.stateManager.a11yIdToNodeMap[o.id];if(!s)return;let a=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:r,node:s});if(t.contentFrame!==a.contentFrame)return;let l=await this.fetchHtmlAttributes({locator:a,logger:i});if(!l?.generatedSelectors||l.generatedSelectors.length===0)return;let c=await a.boundingBox({timeout:gt}),u={selectors:l.generatedSelectors,relativeAngleRadians:Pbe(n,c),relativeDistance:Obe(n,c)};return o.requirements&&(u.requirements=await this.getElementRequiredValues({logger:i,locator:a,boundingBox:c,requirements:o.requirements})),u}async getAllAdditionalElementsDetails({mainElementId:t,mainLocator:n,mainBoundingBox:o,additionalElements:r,root:i,logger:s}){let a=new Set,l=[];for(let d of r)d.id!==t&&(a.has(d.id)||(a.add(d.id),l.push(d)));let c=await Promise.allSettled(l.map(d=>this.getAdditionalDetailsForElement({mainLocator:n,mainBoundingBox:o,additionalElement:d,root:i,logger:s}))),u=[];for(let[d,m]of c.entries()){let p=l[d];if(p){if(m.status==="fulfilled"){let h=m.value;if(!h)continue;u.push(h);continue}this.logger.warn({err:m.reason,additionalElement:p},"Failed to fetch additional element details, continuing...");}}return u}async updateCacheWithAdditionalRequirements({mainElementId:t,requirements:n,additionalElements:o,target:r,locator:i,root:s,logger:a}){let l=await i.boundingBox({timeout:gt});if(n)try{r.requirements=await this.getElementRequiredValues({logger:a,boundingBox:l,locator:i,requirements:n});}catch(c){a.warn({err:c},"Failed to generate required values for target");}o&&o.length>0&&(r.additionalElements=await this.getAllAdditionalElementsDetails({mainElementId:t,mainBoundingBox:l,mainLocator:i,additionalElements:o,root:s,logger:a}));}async createTargetFromA11yId({id:t,description:n,targetSource:o,skipSaveToCache:r,skipSavingVisualAttributes:i,logger:s=this.logger,requirements:a,additionalElements:l,acceptElementMovedError:c}){if(t<0)throw new oe("InternalWebAgentError","Only positive IDs should be passed to resolveAllyIdToTarget");let u=this.stateManager.a11yIdToNodeMap[t];if(!u)throw new oe("InternalWebAgentError",`Resolving target failed because id ${t} does not exist on the page. This generally indicates an incorrect element was targeted.`);let d=this.stateManager.frameConfig,m,p,h,g;if(this.userBrowserSettings.autoExpandIframes&&!d&&u.parentFrame){let A=u.parentFrame,{cache:R,config:w}=await this.stateManager.getAutoFrameDetailsFromHandle(A);p=R,h=w,m=w.frame,g="auto iframe";}else u.parentFrame&&d?(h=d,m=await this.getActivePageOrFrame(),g="hardcoded url already on the state manager"):(m=await this.getActivePageOrFrame(),g="should not be possible");let f=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:m,node:u}),y=await f.evaluate((A,{bannedAttributes:R})=>window._momentic.generateCommonLocationResultMetadata(A,{bannedAttributes:R}),{bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},{timeout:zn}),S={id:t,inputDescription:n??void 0,targetSource:o,targetUpdateTime:new Date().toISOString(),targetUpdateLoggerTags:fn(s),frameCache:p},b,v=false;r||(h&&(s.info({frameConfigSource:g,frameConfig:oTe(h)},"A11y node was resolved to a target within an iframe"),b=this.stateManager.frameConfig,this.stateManager.setActiveFrameConfig(h),v=true),await this.updateCacheWithAdditionalRequirements({mainElementId:t,requirements:a,additionalElements:l,target:S,root:m,locator:f,logger:s}),await this.updateCacheWithNewNodeDetails({node:u,target:S,locator:f,logger:s,allowNotActionableNodesOverride:true,skipSavingVisualAttributes:i,originalElementLocationResult:y,acceptElementMovedError:c}));try{return {resolution:{locator:f,a11yNode:u,displayString:u.getNodeOnlySerializedForm(),originalElementLocationResult:y,decisions:[]},target:S,frameConfig:h,frameConfigSource:g}}finally{v&&this.stateManager.setActiveFrameConfig(b);}}async resolveTarget(t,n={}){return gi({logger:this.logger,operation:"resolve_target",trace:{name:"browser.resolve_target"},fn:()=>this.resolveTargetWithRetries(t,n)})}async resolveTargetWithRetries(t,n={}){let{logger:o=this.logger,signal:r=this.abortSignal,stats:i,allowNotActionableNodesOverride:s,skipWaitForPageLoad:a,acceptElementMovedError:l}=n;if(t.frameCache&&this.userBrowserSettings.autoExpandIframes){let p,h=false,g=Date.now();for(;Date.now()-g<this.smartWaitingTimeout;)try{let f=await this.stateManager.resolveAutoFrameCache(t.frameCache);this.setActiveFrameConfig(f),h=!0;break}catch(f){p=f,await ht(Qr,r);}if(!h)throw p}let c=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(c,o,r);let u=Date.now(),d=0,m;for(;Date.now()-u<this.smartWaitingTimeout;){this.abortSignal?.throwIfAborted(),d++,i&&(i.attempts=d);let p=d===2||Date.now()-u>this.smartWaitingTimeout-2e3&&d%2===0;try{m=await this.resolveTargetHelper({root:c,target:t,stats:i,primaryOnly:!0,shouldLogOnFailure:p,logger:o,allowNotActionableNodesOverride:s,signal:r,skipWaitForPageLoad:a,acceptElementMovedError:l});break}catch(h){if(h instanceof rv)break;r?.throwIfAborted(),p&&o.warn({err:h},`Could not resolve target using primary cache only (x${d})`),await ht(Qr,r);}}return m||(i&&(i.attempts+=1),m=await this.resolveTargetHelper({root:c,target:t,stats:i,primaryOnly:false,logger:o,signal:r,allowNotActionableNodesOverride:s,acceptElementMovedError:l}),o.info({decisions:m.decisions},"Target resolution succeeded after waiting")),m}async resolveTargetHelper({root:t,target:n,stats:o,primaryOnly:r,logger:i,signal:s,allowNotActionableNodesOverride:a,shouldLogOnFailure:l,skipWaitForPageLoad:c,skipSavingVisualAttributes:u,acceptElementMovedError:d}){let m=[],p;if(c||await this.waitForPageLoad(),!this.userBrowserSettings.visualActions){let g={};await this.stateManager.getFrameTreeAndAddMomenticIds({logger:i,signal:s,logTimings:g}),Object.values(g).some(f=>f>750)&&i.warn({logTimings:g},"Momentic ID attach took a long time");}let h;if(n.generatedSelectors||n.hybridSelector){let g;try{g=await this.resolveTargetWithPrimaryMethods({root:t,target:n,stats:o,logger:i,allowNotActionableNodesOverride:a,shouldLogOnFailure:l,skipSavingVisualAttributes:u,acceptElementMovedError:d});}catch(f){h=f,f instanceof us&&(m.push(...f.decisions),p=f.cacheMissReason);}if(g)return {...g,decisions:[...m,...g.decisions]};r||(m.push({type:"CSS_SELECTOR",matched:false,reason:h?.message,selectors:cloneDeep(n.generatedSelectors??[])}),n.generatedSelectors=void 0,n.hybridSelector=void 0);}if(r)throw h;if(!this.userBrowserSettings.disableSecondaryCacheResolution){let g=await this.resolveTargetWithSecondaryMethods({root:t,target:n,decisions:m,logger:i,signal:s,allowNotActionableNodesOverride:a,skipSavingVisualAttributes:u,acceptElementMovedError:d});if(g)return n.targetSource="HEURISTIC_HEALED",n.targetUpdateTime=new Date().toISOString(),n.targetUpdateLoggerTags=fn(i),g;p=p??"secondary-resolution-failed";}throw new us("Could not find any relevant node given target",m,p)}async resolveTargetWithPrimaryMethods({root:t,target:n,stats:o,logger:r,allowNotActionableNodesOverride:i,shouldLogOnFailure:s,skipSavingVisualAttributes:a,acceptElementMovedError:l}){if(!n.nodeOnlySerializedHtml)throw new rv("Insufficient data to resolve target using primary methods (missing node HTML)");let c={x:0,y:0};if(aI(t)){let k=await(await t.frameElement()).boundingBox();k&&(c=k);}let u=this.userControlledBrowserSettings.hybridSelectorMode??hH,d=n.boundingBox,m=!!d?.width&&!!d?.height,p=m&&d?.x!==void 0&&d?.y!==void 0?{x:d.x,y:d.y,width:d.width,height:d.height}:void 0,h=!i&&m,g={ldistThreshold:gSe,disableLdistCacheValidation:this.userControlledBrowserSettings.disableLdistCacheValidation,requireBoundingBox:h,ignoreHrefForCaching:this.userControlledBrowserSettings.ignoreHrefForCaching,requirements:n.requirements,additionalElements:n.additionalElements,importantProperties:{attributes:this.userControlledBrowserSettings.importantAttributes,classes:this.userControlledBrowserSettings.importantClasses,styles:this.userControlledBrowserSettings.importantStyles,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},rootBoundingBox:c,cachedBoundingBox:p},f={cssParams:{selectors:n.generatedSelectors??[],cachedElementSerialized:n.nodeOnlySerializedHtml,opts:g,svgPathHash:n.svgPathHash??void 0},hybridParams:u&&n.hybridSelector?{nodes:n.hybridSelector,cachedElementSerialized:n.nodeOnlySerializedHtml,opts:g,svgPathHash:n.svgPathHash??void 0}:void 0},{css:y,hybrid:S}=await Or({fn:async k=>{let H=Date.now()+1e3;for(;!document.documentElement&&!(Date.now()>=H);)await new Promise(V=>setTimeout(V,10));return window._momentic.evaluatePrimaryCaches(k)},arg:f,root:t,timeout:gt,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"evaluating target caches"});o&&(o.evaluationDurationMs+=(y?.evaluationDurationMs??0)+(S?.evaluationDurationMs??0));let b={rootUrl:t.url(),rootType:aI(t)?"frame":"page",frameDetached:aI(t)?t.isDetached():void 0},v=y.error?new Error(y.error):void 0,A=S?.error?new Error(S.error):void 0;v&&r.error({err:v,browserEvaluation:y.diagnostics,...b},"Cache evaluation errored unexpectedly (CSS)"),A&&r.error({err:A,browserEvaluation:S?.diagnostics,...b},"Cache evaluation errored unexpectedly (Hybrid)");let R,w,O=[];if((u==="prefer"||u==="always")&&S?.result){R=S.result;let k={type:"HYBRID_SELECTOR",matched:true,logs:S.logs,reason:"Discovered a match using Momentic's hybrid text and CSS selector approach"};O.push(k),w="HYBRID_SELECTOR";}else {if(u==="always"&&!S?.result)throw O.push({type:"HYBRID_SELECTOR",matched:false,reason:S?.error?"Hybrid evaluation failed":"No hybrid selectors matched",logs:S?.logs}),new us("Hybrid selector failed to find an element",O,S?.cacheMissReason,A?{cause:A}:void 0);if(y?.result){R=y.result;let k=`${R.workingSelectors.length} CSS selectors matched the following element: ${R.serializedElement}`,H=R.workingSelectors.slice(0,5);O.push({type:"CSS_SELECTOR",matched:true,logs:y.logs,reason:k,selectors:H}),r.debug({reason:k,workingSelectors:H},"Resolved with CSS selectors"),w="CSS_SELECTOR";}else throw O.push({type:"CSS_SELECTOR",matched:false,reason:y.error?"CSS evaluation failed":"No CSS selectors matched",selectors:[],logs:y.logs}),S&&O.push({type:"HYBRID_SELECTOR",matched:false,reason:S.error?"Hybrid evaluation failed":"No hybrid selectors matched",logs:S.logs}),new us("Cache evaluation failed",O,y.cacheMissReason==="no-selectors"&&S?.cacheMissReason?S.cacheMissReason:y.cacheMissReason,A||v?{cause:A??v}:void 0)}let I,_,P;if(this.userBrowserSettings.visualActions){let k=R.mPath;if(!k)throw new Error("Found element did not have an mPath despite using visual actions");let H=k.join(" > ");I=t.locator(H),_=this.stateManager.getNodeUsingMPathSelector(H);}else if(R.dataMomenticId!==void 0)P=parseInt(R.dataMomenticId),_=this.stateManager.getNodeUsingDataMomenticId(P),I=t.locator(Ap(P));else if("workingSelectors"in R)I=t.locator(R.workingSelectors[0]);else throw new oe("InternalWebAgentError","Received an element resolution result with no identifying attributes");let N=cloneDeep(n);await this.updateCacheWithNewNodeDetails({node:_,target:n,locator:I,logger:r,originalElementLocationResult:R,allowNotActionableNodesOverride:i,skipSavingVisualAttributes:a,acceptElementMovedError:l});let D=diff(N,n);return D&&Object.keys(D).length>0&&(n.cacheResolutionUpdateTime=new Date().toISOString(),n.cacheResolutionUpdateLoggerTags=fn(r),n.cacheResolutionUpdateSource=w),{a11yNode:_,displayString:R.serializedElement,locator:I,decisions:O,originalElementLocationResult:R,revalidator:async()=>{await vq({initialLocationResult:R,cacheEvaluationParams:f,locator:I,logger:r,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes});}}}async resolveHardcodedCssSelector(t){let{selector:n,signal:o=this.abortSignal,timeoutMs:r=this.smartWaitingTimeout}=t,i=await this.getActivePageOrFrame(),s=Date.now(),a=0,l,c=[];for(;Date.now()-s<r;){o?.throwIfAborted(),a++;let u=i.locator(n),d;try{await u.waitFor({state:"attached",timeout:Mn});let m=await u.evaluate((p,{bannedAttributes:h})=>window._momentic.generateCommonLocationResultMetadata?.(p,{bannedAttributes:h}),{bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},{timeout:zn});return d=m?.serializedElement??"unknown element",c.push({type:"USER_SELECTOR",matched:!0,reason:`The user-provided CSS selector ${n} matched an element on the page.`}),{locator:u,originalElementLocationResult:m,displayString:d,decisions:c}}catch(m){let p=m.message;l=new oe("ActionFailureError",`CSS selector '${n}' failed to resolve after ${a} attempts: ${p.includes("locator.waitFor: Timeout")?"the selector did not match any element on the page":p}`),await ht(Qr,o);}}throw l}async resolveTargetWithSecondaryMethods(t){if(!t.target.boundingBox)return;let{x:n,y:o,width:r,height:i}=t.target.boundingBox,s=await this.resolveTargetWithSecondaryMethodsHelper(t);if(!s)return;let a=await s.locator.boundingBox({timeout:gt});if(!a){this.logger.debug({proposedNode:s.displayString},"Rejecting secondary matching result due to lack of a bounding box");return}let{x:l,y:c,width:u,height:d}=a;if(Math.abs(u-r)>10||Math.abs(d-i)>10){this.logger.debug({newW:u,oldW:r,newH:d,oldH:i,proposedNode:s.displayString},"Rejecting secondary matching result due to difference in dimensions");return}else if(!n||!o||!l||!c){this.logger.debug({oldX:n,oldY:o,newX:l,newY:c,proposedNode:s.displayString},"Rejecting secondary matching result due to missing x/y coords");return}else if(Math.abs(l-n)>100||Math.abs(c-o)>100){this.logger.debug({newX:l,newY:c,oldX:n,oldY:o,proposedNode:s.displayString},"Rejecting secondary matching result due to large difference in x/y coords");return}return s}async resolveTargetWithSecondaryMethodsHelper({root:t,target:n,decisions:o,logger:r,signal:i,allowNotActionableNodesOverride:s,skipSavingVisualAttributes:a,acceptElementMovedError:l}){if(n.nodeOnlySerializedHtml&&n.nodeOnlySerializedHtml.trim().length<hSe)o.push({type:"HTML_DISTANCE",matched:false,reason:"Refusing to attempt HTML comparison since the saved element is too short."});else if(n.nodeOnlySerializedHtml&&n.nodeOnlySerializedHtml.length>50){let c={x:0,y:0};if(aI(t)){let u=await(await t.frameElement()).boundingBox();u&&(c=u);}try{let u=await Or({fn:d=>window._momentic.findClosestElementByLDist?.(d),arg:{nodeOnlySerializedHtml:n.nodeOnlySerializedHtml,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes,requirements:n.requirements,additionalElements:n.additionalElements,rootBoundingBox:c,svgPathHash:n.svgPathHash??void 0},timeout:zn,root:t,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"finding the closest element on the page"});if(!u)throw new Error(`Got invalid HTML evaluation result: ${JSON.stringify(u)}`);if("closestDistance"in u&&("dataMomenticId"in u&&u?.dataMomenticId||"mPath"in u&&u?.mPath)){let d=u.dataMomenticId?parseInt(u.dataMomenticId):void 0,m,p;if(d)m=this.stateManager.getNodeUsingDataMomenticId(d),p=t.locator(Ap(d));else if(u.mPath){let y=u.mPath.join(" > ");m=this.stateManager.getNodeUsingMPathSelector(y),p=t.locator(y);}else throw new Error("HTML ldist comparison returned no error, data momentic id, or mPath selector");let h=u.serializedElement;r.warn({result:u,originalTarget:n,displayString:h},"Resolved cached target to new node with pure html levenshtein distance");let g=cloneDeep(n);await this.updateCacheWithNewNodeDetails({node:m,target:n,locator:p,logger:r,originalElementLocationResult:u,allowNotActionableNodesOverride:s,skipSavingVisualAttributes:a,acceptElementMovedError:l});let f=diff(g,n);return f&&Object.keys(f).length>0&&(n.cacheResolutionUpdateTime=new Date().toISOString(),n.cacheResolutionUpdateLoggerTags=fn(r),n.cacheResolutionUpdateSource="HTML_DISTANCE",r.info({diffs:f,result:u},"Updated cache after l-dist resolution")),o.push({type:"HTML_DISTANCE",matched:!0,reason:"Found an element on the page with the same string representation as the saved element.",logs:u.logs,distance:u.closestDistance,closestElement:h,savedElement:n.nodeOnlySerializedHtml}),{locator:p,a11yNode:m,displayString:h,decisions:o,originalElementLocationResult:u,revalidator:async()=>{await vq({initialLocationResult:u,locator:p,logger:r,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes});}}}else if("cacheMissReason"in u)throw new Error(u.error??u.cacheMissReason)}catch(u){r.info({err:u},"Failed to find closest HTML node using levenshtein distance"),o.push({type:"HTML_DISTANCE",matched:false,reason:`Error finding closest HTML node by string distance: ${u}`});}}}async typeIntoTarget(t,n,o={}){return gi({attributes:tq(t,o),logger:this.logger,operation:"type",targetMode:"element",trace:{name:"browser.type_into_target",attributes:{"momentic.type.force":o.force??false,"momentic.type.has_relative_position":o.relativePosition!==void 0,"momentic.type.text_length":t.length,"momentic.type.delay_ms":o.delay??d_,"momentic.type.clear_content":o.clearContent??false,"momentic.type.press_enter":o.pressEnter??false}},fn:async()=>{if(o.fill){await n.locator.fill(t,{force:o.force,timeout:zn}),o.pressEnter&&await this.press("Enter",{}),await this.waitForStability();return}await this.highlight(n.locator);let r;n.originalElementLocationResult?r=n.originalElementLocationResult.importantAttributes.type??"":r=await n.locator.getAttribute("type",{timeout:Mn})??"";let i=jbe.some(s=>s===r.toLowerCase());return await Rq({targetingResult:n,options:{force:o.force,relativePosition:o.relativePosition?ds(o.relativePosition):void 0},logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,position:i?{x:1,y:1}:void 0,actionSource:"type",browserCallbacks:this.getBrowserCallbacks(),isAndroid:this.properties.isAndroid??false}),await this.page.waitForTimeout(150),this.directTypeHelper(t,o)}})}async click(t,n,o={}){return gi({logger:this.logger,operation:"click",targetMode:"element",trace:{name:"browser.click"},fn:()=>Rq({targetingResult:t,options:o,logger:this.logger,actionSource:"click",retryTimeoutMs:this.smartWaitingTimeout,controllerCallbacks:n,browserCallbacks:this.getBrowserCallbacks(),isAndroid:this.properties.isAndroid??false})})}async waitForUrl({beforeUrl:t,matcher:n},o){let r=o?.timeout??this.pageLoadTimeout,i=Date.now(),s=false,a=t;for(;Date.now()-i<r;){if(this.abortSignal?.throwIfAborted(),a=this.url(),vM(a,n,o)){s=true;break}await ht(Qr,this.abortSignal);}if(!s){let l=woe(n);throw new oe("ActionFailureError",`The active page URL ${o?.negated?"still does":"does not"} ${sM(n)} in ${r}ms.${l?`
|
|
7954
|
+
//# sourceURL=momentic-injected/browser-scripts.js`}),this.page.addScriptTag({content:Tq(i,this.userBrowserSettings.disableFullStory)})];a&&g.push(this.page.addScriptTag({content:pTe(a.recordScript)})),await Promise.all(g);}catch(g){if(g instanceof Error&&(g.message.includes("Content Security Policy")||g.message.includes("TrustedScript")))this.logger.warn({err:g},"Content Security Policy error from adding Momentic scripts, reloading page instead"),u=true;else throw g}(r??{})["add-init-scripts"]=Date.now()-h;};s.push(p());}if(!this.properties.systemDevicePixelRatio)if(process.env.MOMENTIC_LOCAL_DEV==="1"&&!this.isRemoteBrowser&&platform()==="darwin"&&execSync("system_profiler SPDisplaysDataType").toString().includes("Retina"))C.warn("[DEV] Setting device pixel ratio to 2 in local dev since a Retina display was detected"),this.properties.systemDevicePixelRatio=2;else {let p=async()=>{let h=Date.now();this.properties.systemDevicePixelRatio=await this.page.evaluate(()=>window.devicePixelRatio),(r??{})["fetch-dpr"]=Date.now()-h;};s.push(p());}let d=Date.now();await ge(Promise.all(s),{milliseconds:this.pageLoadTimeout,message:"Timed out attaching Chrome permissions and initialization scripts",signal:this.abortSignal});let m=Date.now();(r??{})["ops-attach"]=m-d,u&&await this.page.reload(),this.cdpClient=await hD.init({logger:this.logger,contextGetter:()=>this.context,pageGetter:()=>this.page,defaultTimeoutMs:this.pageLoadTimeout,onAttach:async p=>{await this.initializeScreencast(p);}}),(r??{})["cdp-init"]=Date.now()-m,this.stateManager=new xD({smartWaitingTimeoutMs:this.smartWaitingTimeout,pageLoadTimeoutMs:this.pageLoadTimeout,allowPartialAccessibilityTree:this.userControlledBrowserSettings.allowPartialAccessibilityTree??true,logger:this.logger,cdpClient:this.cdpClient,pageGetter:()=>this.page,abortSignalGetter:()=>this.abortSignal,enricher:this.enricher,iconKnowledgeBase:this.iconKnowledgeBase,userBrowserSettings:this.userBrowserSettings,allowedA11yIgnoreReasonsOverride:this.properties.allowedA11yIgnoreReasonsOverride}),this.contextInitialized=true;}async fixViewportForNewHeadless(t=this.cdpClient){this.properties.isNewHeadless&&(this.properties.isAndroid||this.viewport&&await t.send({method:"Emulation.setDeviceMetricsOverride",params:{width:this.viewport.width,height:this.viewport.height,deviceScaleFactor:0,mobile:this.viewport.width<1e3}}));}async waitForRootNavSettle(t){return de({name:"browser.waitForRootNavSettle",serviceName:"browser",fn:()=>this.waitForRootNavSettleHelper(t)})}async waitForRootNavSettleHelper(t){let n=this.rootUrlLastChangedAt.get(this.page)??0,o=Date.now()-n;if(o>=e.NAVIGATION_SETTLE_MS)return;let r=e.NAVIGATION_SETTLE_MS-o;try{await ge(this.page.waitForLoadState("load",{timeout:r}),{milliseconds:r,signal:t,fallback:()=>{}});}catch{t?.throwIfAborted();}}async initializeScreencast(t){await this.fixViewportForNewHeadless(t),this.clientCallbacks?.onScreencastFrame&&this.viewport&&(await t.send({method:"Page.startScreencast",params:{format:"jpeg",quality:75,maxWidth:this.viewport.width,maxHeight:this.viewport.height}}),t.on("Page.screencastFrame",n=>{let o=n.sessionId,r=Buffer.from(n.data,"base64");this.lastScreenshotForRecording=r,this.clientCallbacks?.onScreencastFrame?.(r,()=>{(async()=>{try{await t.send({method:"Page.screencastFrameAck",params:{sessionId:o}});}catch{}})();});}));}static async init(t){let n;try{n=await bq(t);}catch(r){throw Sq(r,t.userBrowserSettings.browserType)}let o=new e(n);return o.initOptions=t,await o.trackPageVideo(o.page),await o.initialize({grantPermissions:true,permissionsToGrant:t.userBrowserSettings.grantedPermissions,runInitScripts:false}),o}static async fromExistingContext({context:t,page:n,attachTimeoutMs:o,storage:r,enricher:i,userBrowserSettings:s,properties:a,logger:l,timingRecorder:c}){let u=n??t.pages()[0];if(!u)throw new Error("No page found in existing context");let d=u.viewportSize();if(!d){let h=Date.now();d=await ge(u.evaluate(()=>({width:window.innerWidth,height:window.innerHeight})),{milliseconds:o??1/0,message:"Timed out connecting Playwright to the webview"}),c["eval-viewport"]=Date.now()-h;}let m=u?.url(),p=new e({browser:t.browser(),context:t,page:u,baseUrl:m,logger:l,storage:r,enricher:i,userBrowserSettings:s,viewport:d,properties:a,clientCallbacks:void 0,iconKnowledgeBase:null});try{await ge(p.initialize({grantPermissions:!1,runInitScripts:!0,timingRecorder:c}),{milliseconds:o??1/0,message:"Timed out connecting Playwright to the webview"});}catch(h){throw await p.cleanup(),h}return p}async handleAvailableTabsChangeHelper(){try{let t=await xq(this.context,{getTitles:!0,getPageId:o=>this.getPageId(o)}),n=this.getPageId(this.page);this.clientCallbacks?.onTabsChange?.(t,n);}catch(t){this.logger.error({err:t},"Error sending available tabs to frontend");}}handleAvailableTabsChange(){try{clearTimeout(this.lastTabChangeEventTimeout),this.lastTabChangeEventTimeout=setTimeout(()=>this.handleAvailableTabsChangeHelper(),500);}catch(t){this.logger.warn({err:t},"Error handling available tabs change");}}addToPageLoadPromises(t,n){let o=randomUUID(),r=`${t}-${o}`,i=Date.now(),s=false,a=new AbortController;this.pageLoadAbortControllers.add(a);let l=async()=>{try{await ge(n(),{signal:a.signal,milliseconds:this.pageLoadTimeout,message:`Page load promise for code path ${t} timed out after ${this.pageLoadTimeout}ms`});}catch(c){c.name!=="AbortError"&&!this.closed&&this.logger.error({err:c,promiseKey:r,codePath:t,duration:Date.now()-i},`Page load promise for code path ${t} encountered error`);}finally{delete this.pageLoadPromises[r],this.pageLoadAbortControllers.delete(a),s=true;}};this.pageLoadPromises[r]=l().catch(()=>{}),s&&delete this.pageLoadPromises[r];}handlePageClosedEvent(t){if(this.pendingMainFrameNavigationObservations=this.pendingMainFrameNavigationObservations.filter(o=>o.page!==t),this.page!==t){this.logger.debug({url:t.url()},"Detected background page was closed, just updating available tabs only"),this.handleAvailableTabsChange();return}let n=async()=>{if(this.closed)return;this.logger.info({url:t.url()},"Detected active page was closed, switching to another tab");let o=this.context.pages();for(let r=o.length-1;r>=0;r--){let i=o[r];if(!(!i||i.isClosed()||!Nh(i.url()))){this.logger.info(`Automatically switching to tab ${r} after close: ${i.url()}`),await this.switchToPage({type:"INDEX",index:String(r)});break}}};this.addToPageLoadPromises("page closed handler",n);}handleNewPageEvent(t){let n=t.url();this.logger.info({url:n},"Detected new page event, registering handlers and waiting for load to complete");try{this.handleNewPageEventHelper(t);}catch(o){this.logger.warn({err:o},"Error handling new page open, continuing....");}}handleNewPageEventHelper(t){let n=this.getPageId(t),o="new-page-load-handler";t.on("close",s=>this.handlePageClosedEvent(s)),t.on("framenavigated",s=>this.handleFrameNavigationEvent(s)),t.on("crash",()=>{this.logger.error("Page crashed at the Playwright level!");});let r=this.context.pages().indexOf(t);if((!this.userBrowserSettings.disableBrowserMonitoring||this.userControlledBrowserSettings.lightweightConsoleLogs)&&!this.userControlledBrowserSettings.disableConsoleLogs&&!this.consoleLogCircuitBreaker.isDisabled()){let s=a=>{this.consoleLogCircuitBreaker.recordActivity({stage:"receive",charCount:a.text().length}),!this.consoleLogCircuitBreaker.isDisabled()&&this.consoleLogCircuitBreaker.run({stage:"serialize",fn:async()=>{await XSe(t,r,this.debugData,a,this.logger,this.userControlledBrowserSettings.lightweightConsoleLogs?{includeArgs:false,maxLogsPerPage:zW}:void 0)&&this.consoleLogCircuitBreaker.recordBufferOverflow({stage:"serialize",bufferLimit:this.userControlledBrowserSettings.lightweightConsoleLogs?zW:mD});}});};this.consoleLogListeners.set(t,s),t.on("console",s);}let i=async()=>{this.shouldCaptureNetworkLogs()&&(cq(this.logger,n,this.clientCallbacks?.onNetworkPage),!this.harBatcher&&this.clientCallbacks?.onNetworkLogs&&(this.harBatcher=aTe(this.clientCallbacks.onNetworkLogs))),await this.ensureNetworkRoutes({page:t,pageId:n}),await this.trackPageVideo(t),await this.loadFrameAndRecordUrl({root:t,codePath:o}),this.handleAvailableTabsChange();};this.addToPageLoadPromises(o,i);}async ensureNetworkRoutes({page:t,pageId:n}){let{extraHeaders:o={}}=this.userControlledBrowserSettings,r=Object.keys(o).length>0;if((this.shouldCaptureNetworkLogs()||r||this.customHeaders.length>0||this.hasActiveRequestInterceptors())&&!this.networkRouteHandlers.has(t)){let s=async(a,l)=>{let c=this.shouldCaptureNetworkLogs(),u=c&&!this.hasActiveRequestRecorders();if(!c&&!this.hasActiveRequestInterceptors()){await a.continue();return}await dq({pageId:n,route:a,request:l,onHarEntry:c?(d,m)=>{this.harBatcher?.fetch({[d]:m}).catch(()=>{});}:void 0,logger:this.logger,requestRecorders:this.requestRecorders,mocks:this.mocks,isBrowserClosed:()=>this.closed,onCollectionTiming:u?d=>this.networkLogCircuitBreaker.record(d):void 0});};this.networkRouteHandlers.set(t,s);try{await t.route("**/*",s);}catch(a){throw this.networkRouteHandlers.delete(t),a}}if(this.customHeaders.length>0&&!this.customHeaderRouteHandlers.has(t)){let s=tbe(this.customHeaders,this.logger);this.customHeaderRouteHandlers.set(t,s);try{await t.route("**/*",s);}catch(a){throw this.customHeaderRouteHandlers.delete(t),a}}}handleContextRequestEvent(t){let n=this.harBatcher;if(!(this.cleanedUp||!n||t.resourceType()!=="document"||!t.isNavigationRequest()||t.serviceWorker()||!this.shouldCaptureNetworkLogs()))try{t.frame();}catch{let o=this.capturePopupDocumentRequest({request:t,harBatcher:n});this.pendingPopupDocumentCaptures.add(o),o.finally(()=>{this.pendingPopupDocumentCaptures.delete(o);});}}async capturePopupDocumentRequest({request:t,harBatcher:n}){try{let o=randomUUID(),r=randomUUID(),i=sc({signal:this.popupDocumentAttributionAbortController.signal,timeoutMs:VW}),s=this.context.waitForEvent("page",{predicate:d=>{try{return t.frame().page()===d}catch{return !1}},timeout:VW}).catch(()=>{}),a=await oI(o,t,{abortSignal:i}),l=await ge(s,{signal:i,milliseconds:1/0}).catch(()=>{});l?a.pageref=this.getPageId(l):cq(this.logger,o,this.clientCallbacks?.onNetworkPage,this.page);let c=(d,m)=>{n.fetch({[d]:m}).catch(()=>{});};c(r,a);let u=SD({request:t,onHarEntry:c,logger:this.logger,requestRecorders:{},entry:a,requestId:r,neverRedact:!1,isBrowserClosed:()=>this.closed});this.pendingPopupDocumentResponseCollections.add(u),u.finally(()=>{this.pendingPopupDocumentResponseCollections.delete(u);});}catch(o){this.closed||this.logger.warn({err:o},"Failed to capture popup document request in HAR");}}async finishPendingPopupDocumentCaptures(){this.popupDocumentAttributionAbortController.abort(),await Promise.all(this.pendingPopupDocumentCaptures),this.pendingPopupDocumentCaptures.clear();}async finishPendingPopupDocumentResponseCollections(){await Promise.all(this.pendingPopupDocumentResponseCollections),this.pendingPopupDocumentResponseCollections.clear();}async ensureNetworkRoutesForOpenPages(){await Promise.all(this.context.pages().map(async t=>{let n=this.pageIds.get(t);n&&await this.ensureNetworkRoutes({page:t,pageId:n});}));}removeConsoleLogListeners(){for(let t of this.context.pages()){let n=this.consoleLogListeners.get(t);n&&(t.off("console",n),this.consoleLogListeners.delete(t));}}async removeUnusedNetworkRoutes(){let{extraHeaders:t={}}=this.userControlledBrowserSettings,n=Object.keys(t).length>0;this.shouldCaptureNetworkLogs()||n||this.customHeaders.length>0||this.hasActiveRequestInterceptors()||await Promise.all(this.context.pages().map(async o=>{let r=this.networkRouteHandlers.get(o);if(r){this.networkRouteHandlers.delete(o);try{await o.unroute("**/*",r);}catch(i){this.closed||(this.networkRouteHandlers.set(o,r),this.logger.warn({err:i},"Failed to remove browser network debug data route"));}}}));}async removeCustomHeaderRoutes(){await Promise.all(this.context.pages().map(async t=>{let n=this.customHeaderRouteHandlers.get(t);if(n){this.customHeaderRouteHandlers.delete(t);try{await t.unroute("**/*",n);}catch(o){this.closed||(this.customHeaderRouteHandlers.set(t,n),this.logger.warn({err:o},"Failed to remove browser custom header route"));}}}));}scheduleRemoveUnusedNetworkRoutes(){this.removeUnusedNetworkRoutes().catch(t=>{this.logger.warn({err:t},"Failed to stop browser network debug data recording");});}scheduleEnsureNetworkRoutes(){this.closed||this.ensureNetworkRoutesForOpenPages().catch(t=>{this.logger.warn({err:t},"Failed to resume browser network debug data recording");});}shouldCaptureNetworkLogs(){return this.networkLogCircuitBreaker.isDisabled()?false:!this.userBrowserSettings.disableBrowserMonitoring&&!this.userControlledBrowserSettings.disableNetworkLogs}hasActiveRequestInterceptors(){return this.hasActiveRequestRecorders()||Object.keys(this.mocks).length>0}hasActiveRequestRecorders(){return Object.keys(this.requestRecorders).length>0}async handleCollectSvgs(t){}handleFrameNavigationEvent(t){let n=t.url(),o=t.parentFrame()?"has-parent":"no-parent",r=`frame-navigation-handler-${n.slice(0,50)} (${o})`;if(!n||n==="about:blank"||!Nh(n))return;t.parentFrame()||this.rootUrlLastChangedAt.set(t.page(),Date.now());let i=this.recentFrameNavigations[r];if(i&&Date.now()-i<1e3)return;this.recentFrameNavigations[r]=Date.now(),t.parentFrame()||cTe({logger:this.logger,url:n});let s=async()=>{try{if(t.isDetached())return;await this.loadFrameAndRecordUrl({root:t,codePath:r}),this.handleAvailableTabsChange(),!t.parentFrame()&&!t.isDetached()&&this.clientCallbacks?.onSvgsCollected&&(setTimeout(()=>{(async()=>{try{await this.handleCollectSvgs(t);}catch(l){this.logger.warn({err:l},"Failed to collect SVGs on page, continuing...");}})();},5e3),this.transformer&&await this.injectKnowledgeBaseIntoBrowser(t));}catch(a){a.name!=="AbortError"&&this.logger.warn({err:a,url:n,codePath:r},"Failed to handle frame navigation event, continuing...");}};this.addToPageLoadPromises(r,s);}async injectKnowledgeBaseIntoBrowser(t){try{if(!this.iconKnowledgeBase||await t.evaluate(()=>!!window._momentic._MOMENTIC_ICON_KNOWLEDGE_BASE))return;let o={};Object.keys(this.iconKnowledgeBase).forEach(r=>{this.iconKnowledgeBase[r]?.description&&(o[r]=this.iconKnowledgeBase[r].description);}),await t.evaluate(r=>{let s=window._momentic;s._MOMENTIC_ICON_KNOWLEDGE_BASE=r;},o);}catch(n){this.logger.warn({err:n},"Failed to inject icon knowledge base into browser, continuing...");}}getBrowserCallbacks(){return {runWithMainFrameNavigationLatch:t=>this.runWithMainFrameNavigationLatch(t),waitForPageLoad:()=>this.waitForPageLoad(),waitForUrl:t=>this.waitForUrl(t),waitForStability:t=>this.waitForStability(t),state:{url:()=>this.url(),getDomGraph:()=>this.stateManager.domGraph,getOpenPages:()=>this.getOpenPages(),getRoot:()=>this.getActivePageOrFrame(),userBrowserSettings:this.userBrowserSettings,isRemoteBrowser:this.isRemoteBrowser},pageLoadTimeoutMs:this.pageLoadTimeout,signal:this.abortSignal}}ping(){if(this.closed)throw new Error("Page has been closed")}setActiveFrameConfig(t){this.stateManager.setActiveFrameConfig(t);}async reset(t){if(this.debugData.logsPerPage=[],this.pageLoadPromises={},this.pendingMainFrameNavigationObservations=[],this.traceScreenshotCache.clear(),t.newUrl&&(this.baseUrl=t.newUrl),this.closed){await this.restartBrowser(t);return}try{this.requestRecorders={},this.mocks={},this.customHeaders.length=0,this.offline&&(await this.context.setOffline(!1),this.offline=!1),await Promise.all([this.removeUnusedNetworkRoutes(),this.removeCustomHeaderRoutes()]),await this.clearAuthState({closeNonActiveTabs:!0}),await this.stopScreencast(),await this.reinitializeCDPClient(),await this.navigate({url:this.baseUrl,initialNavigation:!0,loadTimeoutMs:t.timeout}),this.stateManager.reset();}catch(n){if(!this.closed)throw n;await this.restartBrowser(t);}}async restartBrowser(t){if(!this.initOptions)throw new Error("Cannot restart browser: no init options available");this.logger.info("Browser closed, restarting from scratch"),await this.finishPendingPopupDocumentCaptures();try{await this.context.close();}catch{}try{await this.browser?.close();}catch{}await this.finishPendingPopupDocumentResponseCollections(),this.harBatcher?.next();let n;try{n=await bq(this.initOptions);}catch(o){throw Sq(o,this.initOptions.userBrowserSettings.browserType)}this.browser=n.browser,this.context=n.context,this.page=n.page,this.viewport=n.viewport,this.properties=n.properties,this.cleanedUp=false,this.contextInitialized=false,this.originsVisited=new Set,this.mocks={},this.requestRecorders={},this.customHeaders=[],this.offline=false,this.harBatcher=void 0,this.popupDocumentAttributionAbortController=new AbortController,this.recentFrameNavigations={},this.pageLoadAbortControllers.forEach(o=>o.abort()),this.pageLoadAbortControllers.clear(),this.pageLoadAbortListenerCleanup=void 0,await this.trackPageVideo(this.page),await this.initialize({grantPermissions:true,permissionsToGrant:this.initOptions.userBrowserSettings.grantedPermissions,runInitScripts:false}),await this.navigate({url:this.baseUrl,initialNavigation:true,loadTimeoutMs:t.timeout}),this.stateManager.reset();}async clearHighlights(){try{await ge(wq(this.getBrowserCallbacks()),{milliseconds:Mn});}catch(t){this.logger.debug({err:t},"Failed to clear highlights, continuing...");}}async cleanup(t={}){this.abortSignal=void 0,this.cleanedUp=true,await this.finishPendingPopupDocumentCaptures(),this.networkLogCircuitBreaker.dispose(),this.consoleLogCircuitBreaker.dispose(),t.saveRemoteVideos??true?this.startPendingRemoteVideoSaves():this.pendingRemoteVideoSaves.splice(0);try{this.pageLoadAbortListenerCleanup?.(),this.pageLoadAbortListenerCleanup=void 0,this.pageLoadAbortControllers.forEach(o=>o.abort()),this.pageLoadAbortControllers.clear(),this.originsVisited.clear(),await this.context.close();}catch(o){this.logger.warn({err:o},"Error cleaning up browser, continuing...");}try{await this.finishPendingRemoteVideoSaves(),await this.browser?.close();}catch(o){this.logger.warn({err:o},"Error cleaning up browser, continuing...");}await this.finishPendingPopupDocumentResponseCollections(),this.harBatcher?.next(),this.browser=null;}get closed(){return this.cleanedUp||this.context.pages().every(t=>t.isClosed())||!!this.browser&&!this.browser.isConnected()}async ensureMomenticBrowserScriptsLoaded(t,n,o){return de({name:"browser.ensureMomenticBrowserScriptsLoaded",serviceName:"browser",fn:()=>this.ensureMomenticBrowserScriptsLoadedHelper(t,n,o)})}async ensureMomenticBrowserScriptsLoadedHelper(t,n,o){let r=Date.now(),i=0,s=0;for(;Date.now()-r<GA;){s++,o?.throwIfAborted();try{if(await Or({fn:()=>{let c=window._momentic;return !!(c.generateCssSelectors&&c.evaluateCssSelectors&&c.evaluatePrimaryCaches&&c.generateHtmlCacheAttributes&&c.ldist)},timeout:Mn,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad({signal:o}),root:t,codePath:"ensuring Momentic system scripts are loaded"}))return}catch(a){if(i++,i>=3){n.warn({err:a},"Multiple errors checking if Momentic scripts are loaded, aborting...");return}}await ht(Qr),s%2===0&&n.warn("Still waiting for momentic browser scripts to load...");}throw new Error(`Failed to load momentic browser scripts on page ${t.url()}`)}async html(){let t=await this.getActivePageOrFrame();return await this.ensureMomenticBrowserScriptsLoaded(t,this.logger),Or({root:t,fn:()=>{let o=window._momentic;if(!o.getFullHtmlTree)throw new Error("Missing Momentic HTML library when fetching page HTML");return o.getFullHtmlTree()},arg:void 0,timeout:gt,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the full HTML tree"})}url(){return this.page.url()}async stabilizePageForScreenshot(){try{await this.evaluateFunctionInPage(()=>{let n=window._momentic,o=[],r=new Map;document.querySelectorAll("input,textarea,[contenteditable]").forEach(i=>{r.set(i,{value:i.style.getPropertyValue("caret-color"),priority:i.style.getPropertyPriority("caret-color")}),i.style.setProperty("caret-color","transparent","important");}),o.push(()=>{for(let[i,s]of r)i.style.setProperty("caret-color",s.value,s.priority);}),n._MOMENTIC_SCREENSHOT_CLEANUP=()=>{for(let i of o)i();delete n._MOMENTIC_SCREENSHOT_CLEANUP;};},void 0,"stabilizing page for screenshot");}catch(t){(!(t instanceof Error)||!t.message.includes("Execution context was destroyed"))&&this.logger.warn({err:t},"Failed to stabilize page before screenshot, continuing...");}}async removeScreenshotStabilization(){return de({name:"browser.removeScreenshotStabilization",serviceName:"browser",fn:()=>this.removeScreenshotStabilizationHelper()})}async removeScreenshotStabilizationHelper(){try{await this.evaluateFunctionInPage(()=>{window._momentic._MOMENTIC_SCREENSHOT_CLEANUP?.();},void 0,"removing screenshot stabilization");}catch{}}async screenshot(t){let n=()=>gi({logger:this.logger,operation:"screenshot",trace:{name:"browser.screenshot"},fn:()=>this.screenshotHelper(t)});return t.traceScreenshotRole?jo().startAsyncSpan("GET_PAGE_SCREENSHOT",n,{}):n()}async screenshotHelper(t){let{retries:n=1,stabilizeBeforeScreenshot:o=false}=t,r=this.page,i=r.url();if(t.traceScreenshotRole==="before"){let a=this.traceScreenshotCache.take({clearHighlights:t.clearHighlights===true,page:r,quality:t.quality,url:i,viewport:this.getViewport()});if(a&&!t.locator&&!t.boundingBoxOverride&&!t.respectActiveFrame&&!t.saveToDiskPath)return a}else this.traceScreenshotCache.clear();o&&await de({name:"browser.stabilizePageForScreenshot",serviceName:"browser",fn:()=>this.stabilizePageForScreenshot()});let s=Date.now();try{await this.waitForRootNavSettle(),await this.fixViewportForNewHeadless();let a=await this.captureScreenshot({...t,retries:n});if(a.byteLength>5e6)this.logger.warn("Page screenshot is greater than 5MB, which may cause performance issues with some AI models");else if(a.length===0)throw new Error("Got empty screenshot");if(t.traceScreenshotRole==="after"&&r===this.page&&i===r.url()&&!t.locator&&!t.boundingBoxOverride&&!t.respectActiveFrame&&!t.saveToDiskPath){let l=this.getViewport();this.traceScreenshotCache.store({buffer:a,clearHighlights:t.clearHighlights===!0,page:r,quality:t.quality,url:i,viewport:l});}return a}catch(a){if(n<=0||a.message.includes("has been closed"))throw a;return this.logger.warn({err:a,pageUrl:i},"Failed taking screenshot, retrying..."),await ht(Ep),this.screenshotHelper({...t,retries:n-1})}finally{Date.now()-s>1e3&&this.logger.warn({pageUrl:i,duration:Date.now()-s},"Screenshot took longer than expected"),o&&await this.removeScreenshotStabilization();}}async captureScreenshot({locator:t,quality:n,saveToDiskPath:o,timeout:r,respectActiveFrame:i,clearHighlights:s=false,boundingBoxOverride:a}){s&&await de({name:"browser.screenshot.clearHighlights",serviceName:"browser",fn:()=>this.clearHighlights()}),i&&this.stateManager.frameConfig&&(t=await(await this.getActivePageOrFrame()).frameElement());let l=await this.cdpClient.send({method:"Page.captureScreenshot",params:{format:"jpeg",quality:n,optimizeForSpeed:true},timeout:r??dSe});return de({name:"browser.screenshot.processImage",serviceName:"browser",attributes:{"momentic.screenshot_base64_length":l.data.length},fn:async c=>{let u=await this.processCapturedScreenshotImage({screenshotData:l.data,locator:t,boundingBoxOverride:a,saveToDiskPath:o});return c?.setAttributes({"momentic.screenshot_cropped":u.cropped,"momentic.screenshot_raw_height":u.rawHeight,"momentic.screenshot_raw_width":u.rawWidth,"momentic.screenshot_resized":u.resized,"momentic.screenshot_source":"cdp",...u.viewportHeight===void 0?{}:{"momentic.screenshot_viewport_height":u.viewportHeight},...u.viewportWidth===void 0?{}:{"momentic.screenshot_viewport_width":u.viewportWidth}}),u.buffer}})}async processCapturedScreenshotImage({screenshotData:t,locator:n,boundingBoxOverride:o,saveToDiskPath:r}){try{let i=Buffer.from(t,"base64"),{width:s,height:a}=wD(i),{width:l,height:c}=this.getViewport()??{},u=i,d=s,m=a,p=!1;if(l&&c&&(s!==l||a!==c)&&(u=await Fbe(i,{width:l,height:c}),d=l,m=c,p=!0),r&&writeFileSync(r,u),this.lastScreenshotForRecording=u,!n&&!o)return {buffer:u,cropped:!1,rawHeight:a,rawWidth:s,resized:p,viewportHeight:c,viewportWidth:l};let h=o??(n?await n.boundingBox({timeout:gt}):void 0);if(!h)throw new Error("Attempted to screenshot an element that is not visible on the page");if(!h.width||!h.height)throw new Error("Attempted to screenshot an element with zero width or height");let g=Math.max(0,Math.min(Math.floor(h.x),d-1)),f=Math.max(0,Math.min(Math.floor(h.y),m-1)),y=Math.max(1,Math.min(Math.floor(h.width),d-g)),S=Math.max(1,Math.min(Math.floor(h.height),m-f));try{return {buffer:await Bbe(u,{x:g,y:f,width:y,height:S}),cropped:!0,rawHeight:a,rawWidth:s,resized:p,viewportHeight:c,viewportWidth:l}}catch(b){throw new Error(`Failed taking element screenshot at coordinates (${g}, ${f}) with size (${y}, ${S}): ${b}`)}}finally{n&&"dispose"in n&&await n.dispose();}}getViewport(){if(this.viewport)return this.viewport;let t=this.page.viewportSize();return t||null}async getUserAgent(){try{return await Or({root:this.page,fn:()=>navigator.userAgent,arg:void 0,timeout:gt,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"reading the browser user agent"})}catch(t){return this.logger.warn({err:t},"Failed to read browser user agent"),pD}}async navigate({url:t,initialNavigation:n=false,loadTimeoutMs:o=this.pageLoadTimeout}){$re(t)&&(t=new URL(t,this.baseUrl).toString());let r=Date.now();n||(await this.waitForPageLoad(),await this.waitForStability());let i=false,s;for(let l=0;l<3;l++)try{await this.page.goto(t,{timeout:o,waitUntil:"domcontentloaded"}),i=!0;break}catch(c){if(s=c,this.abortSignal?.throwIfAborted(),this.shouldIgnorePageLoadTimeout(s)){i=true,this.logger.warn({err:s,url:t},"DOMContentLoaded timed out during navigation, continuing due to browser setting");break}let u=s.message.includes("net::ERR_CONNECTION_REFUSED");if(this.logger.warn({err:c},`Error occurred during navigation${l<2&&!u?", retrying...":" (fatal)"}`),u)break;await ht(Qr);try{await this.cdpClient.send({method:"Page.stopLoading",params:{},timeout:o});}catch(d){this.logger.warn({err:d},"Page.stopLoading failed during navigation retry");}}if(!i)throw new oe("UserInfrastructureError",s?.message??"Failed to load page");await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"navigate-step-wait-for-load"}),this.logger.info({url:t},`Navigation complete in ${Math.floor(Date.now()-r)}ms`);let a=this.url();if(fSe.has(a))throw new oe("UserInfrastructureError",`${t} took too long to load \u{1F61E}. Please ensure the site is accessible and returns content within the page load timeout.`);await this.fixViewportForNewHeadless();}async type(t,n={},o=false){await gi({attributes:tq(t,n),logger:this.logger,operation:"type",targetMode:"focused",trace:{name:"browser.type",attributes:{"momentic.type.text_length":t.length,"momentic.type.delay_ms":n.delay??d_,"momentic.type.clear_content":n.clearContent??false,"momentic.type.press_enter":n.pressEnter??false,"momentic.type.require_active_element":o}},fn:()=>this.directTypeHelper(t,n,o)});}async getActiveElementHandle(t){return t.evaluateHandle(()=>document.activeElement)}async getActiveElement(t){try{return await Or({root:t,fn:()=>{let o=document.activeElement?.textContent??void 0;o&&o.length>100&&(o=o.slice(0,100)+"...[TRUNCATED]");let r=!1,i=window.getSelection();i&&!i.isCollapsed&&i.toString().trim().length>0&&(r=!0);let s=document.activeElement;return s&&"selectionStart"in s&&typeof s.selectionStart=="number"&&typeof s.selectionEnd=="number"&&s.selectionStart!==s.selectionEnd&&(r=!0),document.activeElement?{tag:document.activeElement.tagName.toLowerCase(),contentEditable:document.activeElement.getAttribute("contenteditable")??void 0,textContent:o,hasTextSelected:r}:{hasTextSelected:r}},arg:void 0,timeout:Mn,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting the active element"})}catch(n){this.logger.warn({err:n},"Failed to get active element");return}}async directTypeHelper(t,n={},o=false){let r=await this.getActivePageOrFrame();await $be({root:r,text:t,options:n,logger:this.logger,callbacks:this.getBrowserCallbacks()});let i=await this.getActiveElement(r);if(o){let l=Date.now();for(;Date.now()-l<this.smartWaitingTimeout&&(!i||i.tag==="body");)await ht(Ep),this.abortSignal?.throwIfAborted(),i=await this.getActiveElement(r);i||this.logger.warn("No active element found to type into, attempting anyways");}if(n.fill){await r.locator(":focus").first().fill(t,{force:n.force,timeout:zn}),n.pressEnter&&await this.press("Enter",{}),await this.waitForStability();return}let s=n.delay??d_,a=i?.tag==="input"||i?.tag==="textarea";if(n.clearContent)if(a||n.forceClearContent)if(this.properties.isAndroid&&!a&&i?.textContent){this.logger.info("Clearing content using backspaces");let l=0,c=i.textContent?.length;for(;c&&l<50;){l++;let u=[...Array(c)].map(()=>"Backspace").join("+");await this.page.keyboard.press(u),i=await this.getActiveElement(r),c=i?.textContent?.length;}c&&this.logger.warn("Content still remains after clearing existing");}else this.properties.isAndroid?await this.page.keyboard.press("Control+A"):this.operatingSystem==="darwin"?await this.page.keyboard.press("Meta+A"):await this.page.keyboard.press("Control+A"),await this.page.waitForTimeout(s),await this.page.keyboard.press("Backspace"),await this.page.waitForTimeout(s);else this.logger.info({activeElementDetails:i},"Currently active element is not eligible for replace content, skipping...");await this.page.keyboard.type(t,{delay:s}),n.pressEnter&&await this.press("Enter",{}),await this.waitForStability();}async scrollIntoViewIfNeeded(t){try{await t.scrollIntoViewIfNeeded({timeout:zn});}catch(n){this.logger.warn({err:n},"Failed to scroll into view, trying with raw JS");try{await t.evaluate(async o=>{let r=o.scrollTop;o.scrollIntoView({block:"nearest"}),await new Promise(s=>setTimeout(s,250));let i=Date.now();for(;Date.now()-i<1e3;){let s=o.scrollTop;if(s===r)break;r=s,await new Promise(a=>setTimeout(a,250));}},void 0,{timeout:zn});}catch(o){this.logger.warn({err:o},"Failed to scroll into view using JS, continuing...");}}}async highlightA11yId(t){try{let{resolution:n}=await this.createTargetFromA11yId({id:t,description:null,targetSource:"AI",skipSaveToCache:!0});return await this.highlight(n.locator),!0}catch(n){return this.logger.debug({err:n,id:t},"Failed to highlight target"),false}}async highlight(t){return RD({locator:t,callbacks:this.getBrowserCallbacks(),logger:this.logger})}recordUrlVisited(t){try{let n=new URL(t).origin;if(n==="null")return;this.originsVisited.add(n);}catch(n){this.logger.warn({err:n},"Failed to record origin visited");}}async waitForPageLoad(t){return de({name:"browser.wait_for_page_load",serviceName:"browser",fn:()=>this.waitForPageLoadHelper(t)})}async runWithMainFrameNavigationLatch({page:t,action:n}){let o=()=>{},r=new Promise(u=>{o=u;}),i=u=>{u.parentFrame()||o(true);};t.on("framenavigated",i);let s;try{s=await n();}catch(u){throw t.off("framenavigated",i),u}if(t.isClosed())return t.off("framenavigated",i),s;let a=performance.now(),l=Promise.race([r,ht(Ep,this.abortSignal).then(()=>false,()=>false)]).then(u=>({observed:u,durationMs:performance.now()-a})).finally(()=>t.off("framenavigated",i)),c={page:t,observation:l};return this.pendingMainFrameNavigationObservations.push(c),t.isClosed()&&(this.pendingMainFrameNavigationObservations=this.pendingMainFrameNavigationObservations.filter(u=>u!==c),t.off("framenavigated",i)),s}consumeMainFrameNavigationObservations(t){let n=[],o=[];for(let r of this.pendingMainFrameNavigationObservations)r.page===t?n.push(r.observation):r.page.isClosed()||o.push(r);return this.pendingMainFrameNavigationObservations=o,Promise.all(n)}async settleObservedMainFrameNavigation({observationsPromise:t,signal:n}){let o=performance.now(),r=await t,i=r.some(a=>a.observed),s=0;if(i){let a=performance.now();await this.waitForPageLoad({signal:n}),s=performance.now()-a;}return {observed:i,attributes:{"momentic.stability.navigation_latch_count":r.length,"momentic.stability.navigation_observed":i,"momentic.stability.navigation_detection_duration_ms":Math.max(0,...r.map(a=>a.durationMs)),"momentic.stability.navigation_observation_wait_duration_ms":Math.max(0,performance.now()-o-s),"momentic.stability.navigation_page_load_duration_ms":s}}}async waitForPageLoadHelper(t){let n=t?.signal??this.abortSignal;await this.awaitOutstandingPageLoadPromises(n)&&await this.waitForRootNavSettle(n);}async awaitOutstandingPageLoadPromises(t){return de({name:"browser.awaitOutstandingPageLoadPromises",serviceName:"browser",fn:()=>this.awaitOutstandingPageLoadPromisesHelper(t)})}async awaitOutstandingPageLoadPromisesHelper(t){let n=Date.now(),o=Object.values(this.pageLoadPromises),r=Object.keys(this.pageLoadPromises),i=-1,s=0;for(;o.length!==0;){if(t?.throwIfAborted(),Date.now()-n>this.pageLoadTimeout){this.logger.warn({outstandingPromiseKeys:r,outstandingPromises:o},"Timed out waiting on page load promises, continuing anyways...");break}if(Date.now()-i<20&&(s++,s>2))return this.logger.error({outstandingPromiseKeys:r,outstandingPromises:o},"Synchronous waiting loop detected, exiting page load wait"),false;i=Date.now(),await Promise.allSettled(o),o=Object.values(this.pageLoadPromises),r=Object.keys(this.pageLoadPromises);}return true}async clearAuthState(t){await this.context.clearCookies();for(let r of this.originsVisited)this.logger.debug({origin:r},`Clearing data using CDP for origin ${r}`),await this.cdpClient.send({method:"Storage.clearDataForOrigin",params:{origin:r,storageTypes:"all"},timeout:Mn}),this.originsVisited.delete(r);let n=this.context.pages().indexOf(this.page),o=[...this.context.pages()];for(let r=0;r<o.length;r++){let i=o[r];if(i.isClosed())continue;let s=i.url();try{this.originsVisited.delete(new URL(s).origin);}catch{}await JSe(i,this.logger),r!==n&&t.closeNonActiveTabs&&(this.logger.info(`Closing tab ${r} with URL ${s}`),await i.close());}}async loadAuthState(t){await this.waitForPageLoad(),await this.waitForStability(),!t||Object.keys(t).length===0?await this.clearAuthState({closeNonActiveTabs:false}):await this.loadAuthStateHelper(t),await this.refresh(),await this.waitForStability();}async loadAuthStateHelper(t){let n=[];for(let l of t.cookies??[]){let c=await this.setCookie(l);n=n.concat(c);}this.logger.info(`Loaded ${t.cookies?.length??0} cookies`);let o=0,r=new Map;await this.cdpClient.withDomainEnabled({domain:"DOMStorage",timeout:Mn,fn:async()=>{for(let l of t.origins??[])for(let c of l.localStorage)try{await this.cdpClient.send({timeout:Mn,method:"DOMStorage.setDOMStorageItem",params:{storageId:{securityOrigin:new URL(l.origin).origin,isLocalStorage:!0},key:c.name,value:c.value}}),o++;}catch{let u=new URL(l.origin).origin,d=r.get(u)??[];d.push(c),r.set(u,d);continue}}});for(let[l,c]of r)await this.loadLocalStorageThroughPage({origin:l,entries:c}),o+=c.length;this.logger.info(`Loaded ${o} local storage entries`);let i={},s=0;for(let l of t.origins??[])if(l.sessionStorage&&l.sessionStorage.length>0){let c={};for(let u of l.sessionStorage)c[u.name]=u.value,s++;i[new URL(l.origin).origin]=c;}s>0&&await this.context.addInitScript(({storageByOrigin:l,markerKey:c})=>{let u=window.location.origin,d=l[u];if(d&&!window.sessionStorage.getItem(c)){for(let[m,p]of Object.entries(d))window.sessionStorage.setItem(m,p);window.sessionStorage.setItem(c,"1");}},{storageByOrigin:i,markerKey:Eq}),this.logger.info(`Loaded ${s} session storage entries`);let a=t.idb;a&&Object.keys(a).length>0&&(await YSe(this.page,a,this.logger),this.logger.info(`Loaded ${Object.keys(a??{}).length} indexedDB databases`));}async loadLocalStorageThroughPage({origin:t,entries:n}){let o=await this.context.newPage();try{if(await o.route(`${t}/**`,async r=>{await r.fulfill({status:200,contentType:"text/html",body:"<!doctype html>"});}),await o.goto(t,{waitUntil:"domcontentloaded",timeout:this.pageLoadTimeout}),new URL(o.url()).origin!==t)throw new Error(`Could not initialize browser storage for ${t}`);await o.evaluate(r=>{for(let{name:i,value:s}of r)window.localStorage.setItem(i,s);},n);}finally{await o.close();}}async saveAuthState(){let n=0,o=null;for(;n<=2;)try{await this.waitForPageLoad(),await this.waitForStability();let r=await this.context.storageState();return r.idb=await KSe(this.page,this.logger),await _be(this.page,r,this.logger),r}catch(r){if(o=r,n++,n<=2){this.logger.warn({err:r,retryCount:n,maxRetries:2},`Error saving auth state, retrying (${n}/2)...`);let i=Math.pow(2,n)*100;await new Promise(s=>setTimeout(s,i));}}throw this.logger.error({err:o},"Failed to save auth state after 2 retries"),new oe("ActionFailureError",`Failed to save auth state: ${o?.message}`)}async getOpenPages(t){return xq(this.context,{...t,getPageId:n=>this.getPageId(n)})}getPageId(t){let n=this.pageIds.get(t);return n||(n=randomUUID(),this.pageIds.set(t,n)),n}getActivePageIndex(){return this.context.pages().indexOf(this.page)}saveA11yDetailsToCache(t,n){n.content=t.content,n.name=t.name,n.role=t.role,n.numChildren=t.children.length,delete n.serializedForm,delete n.nodeOnlySerializedForm;}async updateCacheWithNewNodeDetails({node:t,target:n,locator:o,originalElementLocationResult:r,allowNotActionableNodesOverride:i,logger:s=this.logger,skipSavingVisualAttributes:a=false,acceptElementMovedError:l=false}){if(t&&this.saveA11yDetailsToCache(t,n),n.frameCache=this.stateManager.saveAutoFrameCacheDetails(n.frameCache),o)try{let c=await this.fetchHtmlAttributes({locator:o,logger:s,originalElementLocationResult:r,allowNotActionableNodesOverride:i});c?(n.generatedSelectors=c.generatedSelectors,n.serializedHtml=c.serializedHtml,n.nodeOnlySerializedHtml=c.nodeOnlySerializedHtml,n.hybridSelector=c.hybridSelector,n.svgPathHash=c.svgPathHash):s.warn("Got undefined HTML attributes when trying to update cache");}catch(c){if(c instanceof ku&&l)s.warn({err:c},"Suppressing ElementMovedError due to acceptElementMovedError");else {if(c instanceof IS)throw s.warn({err:c},"Error while fetching HTML attributes triggering retry"),c;s.warn({err:c},"Failed to fetch HTML attributes for target, continuing...");}}try{a||await this.saveElementVisualAttributes({target:n,locator:o,originalElementLocationResult:r,logger:s});}catch(c){s.debug({err:c},"Failed to save element visual details, continuing...");}}async saveElementVisualAttributes({target:t,locator:n,logger:o}){if(!n)return;let r=await n.boundingBox({timeout:Mn});if(!r||!r.width||!r.height){o.debug("Skipping visual attributes saving for element with no bounding box after action"),t.boundingBox=void 0;return}let i=this.getViewport();if(r.x<0||r.y<0||!i||r.x+r.width>i.width||r.y+r.height>i.height||(t.boundingBox=r,this.userBrowserSettings.disableBrowserMonitoring))return;let s=jo();if(s.parent&&bZ(s.parent)&&s.storeTraceAsset){let a=randomUUID();s.parent.elementScreenshotSnapshotId=a,(async()=>{try{let l=await this.screenshot({locator:n,quality:75,retries:0,boundingBoxOverride:r});s.storeTraceAsset?.({snapshotId:a,data:l});}catch(l){this.logger.warn({err:l,screenshotId:a},"Failed to capture element screenshot for trace");}})();}}async resolveAutoFrameCache(t){return this.stateManager.resolveAutoFrameCache(t)}async getElementRequiredValues({logger:t,boundingBox:n,locator:o,requirements:r}){let i={},s=!!r?.position&&r.position!=="irrelevant",a=!!r?.shape&&r.shape!=="irrelevant";if(s||a){if(!n||!n.width||!n.height)throw new oe("ActionFailureError","Element does not have a bounding box as required");a&&(i.shape={width:n.width,height:n.height,tolerance:r.shape}),s&&(i.position={x1:n.x,y1:n.y,x2:n.x+n.width,y2:n.y+n.height,tolerance:r.position});}if(r?.text){let l=await o.evaluate(c=>window._momentic.getElementTextContentForCache(c),void 0,{timeout:gt});l!==void 0&&(i.text=l.trim());}if(r?.attributes&&r.attributes.length>0){let l={};for(let c of r.attributes){let u=c.trim().toLowerCase();if(!(!u||Ic.bannedAiRequiredCacheAttributes.includes(u)))try{let d=await o.getAttribute(u,{timeout:gt});d!==null&&(l[c]=d);}catch(d){t.warn({err:d,attr:c},"Failed to fetch required attribute, continuing...");}}i.attributes=l;}return i}async getAdditionalDetailsForElement({mainLocator:t,mainBoundingBox:n,additionalElement:o,root:r,logger:i}){let s=this.stateManager.a11yIdToNodeMap[o.id];if(!s)return;let a=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:r,node:s});if(t.contentFrame!==a.contentFrame)return;let l=await this.fetchHtmlAttributes({locator:a,logger:i});if(!l?.generatedSelectors||l.generatedSelectors.length===0)return;let c=await a.boundingBox({timeout:gt}),u={selectors:l.generatedSelectors,relativeAngleRadians:Pbe(n,c),relativeDistance:Obe(n,c)};return o.requirements&&(u.requirements=await this.getElementRequiredValues({logger:i,locator:a,boundingBox:c,requirements:o.requirements})),u}async getAllAdditionalElementsDetails({mainElementId:t,mainLocator:n,mainBoundingBox:o,additionalElements:r,root:i,logger:s}){let a=new Set,l=[];for(let d of r)d.id!==t&&(a.has(d.id)||(a.add(d.id),l.push(d)));let c=await Promise.allSettled(l.map(d=>this.getAdditionalDetailsForElement({mainLocator:n,mainBoundingBox:o,additionalElement:d,root:i,logger:s}))),u=[];for(let[d,m]of c.entries()){let p=l[d];if(p){if(m.status==="fulfilled"){let h=m.value;if(!h)continue;u.push(h);continue}this.logger.warn({err:m.reason,additionalElement:p},"Failed to fetch additional element details, continuing...");}}return u}async updateCacheWithAdditionalRequirements({mainElementId:t,requirements:n,additionalElements:o,target:r,locator:i,root:s,logger:a}){let l=await i.boundingBox({timeout:gt});if(n)try{r.requirements=await this.getElementRequiredValues({logger:a,boundingBox:l,locator:i,requirements:n});}catch(c){a.warn({err:c},"Failed to generate required values for target");}o&&o.length>0&&(r.additionalElements=await this.getAllAdditionalElementsDetails({mainElementId:t,mainBoundingBox:l,mainLocator:i,additionalElements:o,root:s,logger:a}));}async createTargetFromA11yId({id:t,description:n,targetSource:o,skipSaveToCache:r,skipSavingVisualAttributes:i,logger:s=this.logger,requirements:a,additionalElements:l,acceptElementMovedError:c}){if(t<0)throw new oe("InternalWebAgentError","Only positive IDs should be passed to resolveAllyIdToTarget");let u=this.stateManager.a11yIdToNodeMap[t];if(!u)throw new oe("InternalWebAgentError",`Resolving target failed because id ${t} does not exist on the page. This generally indicates an incorrect element was targeted.`);let d=this.stateManager.frameConfig,m,p,h,g;if(this.userBrowserSettings.autoExpandIframes&&!d&&u.parentFrame){let A=u.parentFrame,{cache:R,config:w}=await this.stateManager.getAutoFrameDetailsFromHandle(A);p=R,h=w,m=w.frame,g="auto iframe";}else u.parentFrame&&d?(h=d,m=await this.getActivePageOrFrame(),g="hardcoded url already on the state manager"):(m=await this.getActivePageOrFrame(),g="should not be possible");let f=await this.stateManager.getLocatorFromA11yNode({page:this.page,root:m,node:u}),y=await f.evaluate((A,{bannedAttributes:R})=>window._momentic.generateCommonLocationResultMetadata(A,{bannedAttributes:R}),{bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},{timeout:zn}),S={id:t,inputDescription:n??void 0,targetSource:o,targetUpdateTime:new Date().toISOString(),targetUpdateLoggerTags:fn(s),frameCache:p},b,v=false;r||(h&&(s.info({frameConfigSource:g,frameConfig:oTe(h)},"A11y node was resolved to a target within an iframe"),b=this.stateManager.frameConfig,this.stateManager.setActiveFrameConfig(h),v=true),await this.updateCacheWithAdditionalRequirements({mainElementId:t,requirements:a,additionalElements:l,target:S,root:m,locator:f,logger:s}),await this.updateCacheWithNewNodeDetails({node:u,target:S,locator:f,logger:s,allowNotActionableNodesOverride:true,skipSavingVisualAttributes:i,originalElementLocationResult:y,acceptElementMovedError:c}));try{return {resolution:{locator:f,a11yNode:u,displayString:u.getNodeOnlySerializedForm(),originalElementLocationResult:y,decisions:[]},target:S,frameConfig:h,frameConfigSource:g}}finally{v&&this.stateManager.setActiveFrameConfig(b);}}async resolveTarget(t,n={}){return gi({logger:this.logger,operation:"resolve_target",trace:{name:"browser.resolve_target"},fn:()=>this.resolveTargetWithRetries(t,n)})}async resolveTargetWithRetries(t,n={}){let{logger:o=this.logger,signal:r=this.abortSignal,stats:i,allowNotActionableNodesOverride:s,skipWaitForPageLoad:a,acceptElementMovedError:l}=n;if(t.frameCache&&this.userBrowserSettings.autoExpandIframes){let p,h=false,g=Date.now();for(;Date.now()-g<this.smartWaitingTimeout;)try{let f=await this.stateManager.resolveAutoFrameCache(t.frameCache);this.setActiveFrameConfig(f),h=!0;break}catch(f){p=f,await ht(Qr,r);}if(!h)throw p}let c=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(c,o,r);let u=Date.now(),d=0,m;for(;Date.now()-u<this.smartWaitingTimeout;){this.abortSignal?.throwIfAborted(),d++,i&&(i.attempts=d);let p=d===2||Date.now()-u>this.smartWaitingTimeout-2e3&&d%2===0;try{m=await this.resolveTargetHelper({root:c,target:t,stats:i,primaryOnly:!0,shouldLogOnFailure:p,logger:o,allowNotActionableNodesOverride:s,signal:r,skipWaitForPageLoad:a,acceptElementMovedError:l});break}catch(h){if(h instanceof rv)break;r?.throwIfAborted(),p&&o.warn({err:h},`Could not resolve target using primary cache only (x${d})`),await ht(Qr,r);}}return m||(i&&(i.attempts+=1),m=await this.resolveTargetHelper({root:c,target:t,stats:i,primaryOnly:false,logger:o,signal:r,allowNotActionableNodesOverride:s,acceptElementMovedError:l}),o.info({decisions:m.decisions},"Target resolution succeeded after waiting")),m}async resolveTargetHelper({root:t,target:n,stats:o,primaryOnly:r,logger:i,signal:s,allowNotActionableNodesOverride:a,shouldLogOnFailure:l,skipWaitForPageLoad:c,skipSavingVisualAttributes:u,acceptElementMovedError:d}){let m=[],p;if(c||await this.waitForPageLoad(),!this.userBrowserSettings.visualActions){let g={};await this.stateManager.getFrameTreeAndAddMomenticIds({logger:i,signal:s,logTimings:g}),Object.values(g).some(f=>f>750)&&i.warn({logTimings:g},"Momentic ID attach took a long time");}let h;if(n.generatedSelectors||n.hybridSelector){let g;try{g=await this.resolveTargetWithPrimaryMethods({root:t,target:n,stats:o,logger:i,allowNotActionableNodesOverride:a,shouldLogOnFailure:l,skipSavingVisualAttributes:u,acceptElementMovedError:d});}catch(f){h=f,f instanceof us&&(m.push(...f.decisions),p=f.cacheMissReason);}if(g)return {...g,decisions:[...m,...g.decisions]};r||(m.push({type:"CSS_SELECTOR",matched:false,reason:h?.message,selectors:cloneDeep(n.generatedSelectors??[])}),n.generatedSelectors=void 0,n.hybridSelector=void 0);}if(r)throw h;if(!this.userBrowserSettings.disableSecondaryCacheResolution){let g=await this.resolveTargetWithSecondaryMethods({root:t,target:n,decisions:m,logger:i,signal:s,allowNotActionableNodesOverride:a,skipSavingVisualAttributes:u,acceptElementMovedError:d});if(g)return n.targetSource="HEURISTIC_HEALED",n.targetUpdateTime=new Date().toISOString(),n.targetUpdateLoggerTags=fn(i),g;p=p??"secondary-resolution-failed";}throw new us("Could not find any relevant node given target",m,p)}async resolveTargetWithPrimaryMethods({root:t,target:n,stats:o,logger:r,allowNotActionableNodesOverride:i,shouldLogOnFailure:s,skipSavingVisualAttributes:a,acceptElementMovedError:l}){if(!n.nodeOnlySerializedHtml)throw new rv("Insufficient data to resolve target using primary methods (missing node HTML)");let c={x:0,y:0};if(aI(t)){let k=await(await t.frameElement()).boundingBox();k&&(c=k);}let u=this.userControlledBrowserSettings.hybridSelectorMode??hH,d=n.boundingBox,m=!!d?.width&&!!d?.height,p=m&&d?.x!==void 0&&d?.y!==void 0?{x:d.x,y:d.y,width:d.width,height:d.height}:void 0,h=!i&&m,g={ldistThreshold:gSe,disableLdistCacheValidation:this.userControlledBrowserSettings.disableLdistCacheValidation,requireBoundingBox:h,ignoreHrefForCaching:this.userControlledBrowserSettings.ignoreHrefForCaching,requirements:n.requirements,additionalElements:n.additionalElements,importantProperties:{attributes:this.userControlledBrowserSettings.importantAttributes,classes:this.userControlledBrowserSettings.importantClasses,styles:this.userControlledBrowserSettings.importantStyles,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},rootBoundingBox:c,cachedBoundingBox:p},f={cssParams:{selectors:n.generatedSelectors??[],cachedElementSerialized:n.nodeOnlySerializedHtml,opts:g,svgPathHash:n.svgPathHash??void 0},hybridParams:u&&n.hybridSelector?{nodes:n.hybridSelector,cachedElementSerialized:n.nodeOnlySerializedHtml,opts:g,svgPathHash:n.svgPathHash??void 0}:void 0},{css:y,hybrid:S}=await Or({fn:async k=>{let H=Date.now()+1e3;for(;!document.documentElement&&!(Date.now()>=H);)await new Promise(V=>setTimeout(V,10));return window._momentic.evaluatePrimaryCaches(k)},arg:f,root:t,timeout:gt,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"evaluating target caches"});o&&(o.evaluationDurationMs+=(y?.evaluationDurationMs??0)+(S?.evaluationDurationMs??0));let b={rootUrl:t.url(),rootType:aI(t)?"frame":"page",frameDetached:aI(t)?t.isDetached():void 0},v=y.error?new Error(y.error):void 0,A=S?.error?new Error(S.error):void 0;v&&r.error({err:v,browserEvaluation:y.diagnostics,...b},"Cache evaluation errored unexpectedly (CSS)"),A&&r.error({err:A,browserEvaluation:S?.diagnostics,...b},"Cache evaluation errored unexpectedly (Hybrid)");let R,w,O=[];if((u==="prefer"||u==="always")&&S?.result){R=S.result;let k={type:"HYBRID_SELECTOR",matched:true,logs:S.logs,reason:"Discovered a match using Momentic's hybrid text and CSS selector approach"};O.push(k),w="HYBRID_SELECTOR";}else {if(u==="always"&&!S?.result)throw O.push({type:"HYBRID_SELECTOR",matched:false,reason:S?.error?"Hybrid evaluation failed":"No hybrid selectors matched",logs:S?.logs}),new us("Hybrid selector failed to find an element",O,S?.cacheMissReason,A?{cause:A}:void 0);if(y?.result){R=y.result;let k=`${R.workingSelectors.length} CSS selectors matched the following element: ${R.serializedElement}`,H=R.workingSelectors.slice(0,5);O.push({type:"CSS_SELECTOR",matched:true,logs:y.logs,reason:k,selectors:H}),r.debug({reason:k,workingSelectors:H},"Resolved with CSS selectors"),w="CSS_SELECTOR";}else throw O.push({type:"CSS_SELECTOR",matched:false,reason:y.error?"CSS evaluation failed":"No CSS selectors matched",selectors:[],logs:y.logs}),S&&O.push({type:"HYBRID_SELECTOR",matched:false,reason:S.error?"Hybrid evaluation failed":"No hybrid selectors matched",logs:S.logs}),new us("Cache evaluation failed",O,y.cacheMissReason==="no-selectors"&&S?.cacheMissReason?S.cacheMissReason:y.cacheMissReason,A||v?{cause:A??v}:void 0)}let I,_,P;if(this.userBrowserSettings.visualActions){let k=R.mPath;if(!k)throw new Error("Found element did not have an mPath despite using visual actions");let H=k.join(" > ");I=t.locator(H),_=this.stateManager.getNodeUsingMPathSelector(H);}else if(R.dataMomenticId!==void 0)P=parseInt(R.dataMomenticId),_=this.stateManager.getNodeUsingDataMomenticId(P),I=t.locator(Ap(P));else if("workingSelectors"in R)I=t.locator(R.workingSelectors[0]);else throw new oe("InternalWebAgentError","Received an element resolution result with no identifying attributes");let N=cloneDeep(n);await this.updateCacheWithNewNodeDetails({node:_,target:n,locator:I,logger:r,originalElementLocationResult:R,allowNotActionableNodesOverride:i,skipSavingVisualAttributes:a,acceptElementMovedError:l});let D=diff(N,n);return D&&Object.keys(D).length>0&&(n.cacheResolutionUpdateTime=new Date().toISOString(),n.cacheResolutionUpdateLoggerTags=fn(r),n.cacheResolutionUpdateSource=w),{a11yNode:_,displayString:R.serializedElement,locator:I,decisions:O,originalElementLocationResult:R,revalidator:async()=>{await vq({initialLocationResult:R,cacheEvaluationParams:f,locator:I,logger:r,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes});}}}async resolveHardcodedCssSelector(t){let{selector:n,signal:o=this.abortSignal,timeoutMs:r=this.smartWaitingTimeout}=t,i=await this.getActivePageOrFrame(),s=Date.now(),a=0,l,c=[];for(;Date.now()-s<r;){o?.throwIfAborted(),a++;let u=i.locator(n),d;try{await u.waitFor({state:"attached",timeout:Mn});let m=await u.evaluate((p,{bannedAttributes:h})=>window._momentic.generateCommonLocationResultMetadata?.(p,{bannedAttributes:h}),{bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},{timeout:zn});return d=m?.serializedElement??"unknown element",c.push({type:"USER_SELECTOR",matched:!0,reason:`The user-provided CSS selector ${n} matched an element on the page.`}),{locator:u,originalElementLocationResult:m,displayString:d,decisions:c}}catch(m){let p=m.message;l=new oe("ActionFailureError",`CSS selector '${n}' failed to resolve after ${a} attempts: ${p.includes("locator.waitFor: Timeout")?"the selector did not match any element on the page":p}`),await ht(Qr,o);}}throw l}async resolveTargetWithSecondaryMethods(t){if(!t.target.boundingBox)return;let{x:n,y:o,width:r,height:i}=t.target.boundingBox,s=await this.resolveTargetWithSecondaryMethodsHelper(t);if(!s)return;let a=await s.locator.boundingBox({timeout:gt});if(!a){this.logger.debug({proposedNode:s.displayString},"Rejecting secondary matching result due to lack of a bounding box");return}let{x:l,y:c,width:u,height:d}=a;if(Math.abs(u-r)>10||Math.abs(d-i)>10){this.logger.debug({newW:u,oldW:r,newH:d,oldH:i,proposedNode:s.displayString},"Rejecting secondary matching result due to difference in dimensions");return}else if(!n||!o||!l||!c){this.logger.debug({oldX:n,oldY:o,newX:l,newY:c,proposedNode:s.displayString},"Rejecting secondary matching result due to missing x/y coords");return}else if(Math.abs(l-n)>100||Math.abs(c-o)>100){this.logger.debug({newX:l,newY:c,oldX:n,oldY:o,proposedNode:s.displayString},"Rejecting secondary matching result due to large difference in x/y coords");return}return s}async resolveTargetWithSecondaryMethodsHelper({root:t,target:n,decisions:o,logger:r,signal:i,allowNotActionableNodesOverride:s,skipSavingVisualAttributes:a,acceptElementMovedError:l}){if(n.nodeOnlySerializedHtml&&n.nodeOnlySerializedHtml.trim().length<hSe)o.push({type:"HTML_DISTANCE",matched:false,reason:"Refusing to attempt HTML comparison since the saved element is too short."});else if(n.nodeOnlySerializedHtml&&n.nodeOnlySerializedHtml.length>50){let c={x:0,y:0};if(aI(t)){let u=await(await t.frameElement()).boundingBox();u&&(c=u);}try{let u=await Or({fn:d=>window._momentic.findClosestElementByLDist?.(d),arg:{nodeOnlySerializedHtml:n.nodeOnlySerializedHtml,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes,requirements:n.requirements,additionalElements:n.additionalElements,rootBoundingBox:c,svgPathHash:n.svgPathHash??void 0},timeout:zn,root:t,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"finding the closest element on the page"});if(!u)throw new Error(`Got invalid HTML evaluation result: ${JSON.stringify(u)}`);if("closestDistance"in u&&("dataMomenticId"in u&&u?.dataMomenticId||"mPath"in u&&u?.mPath)){let d=u.dataMomenticId?parseInt(u.dataMomenticId):void 0,m,p;if(d)m=this.stateManager.getNodeUsingDataMomenticId(d),p=t.locator(Ap(d));else if(u.mPath){let y=u.mPath.join(" > ");m=this.stateManager.getNodeUsingMPathSelector(y),p=t.locator(y);}else throw new Error("HTML ldist comparison returned no error, data momentic id, or mPath selector");let h=u.serializedElement;r.warn({result:u,originalTarget:n,displayString:h},"Resolved cached target to new node with pure html levenshtein distance");let g=cloneDeep(n);await this.updateCacheWithNewNodeDetails({node:m,target:n,locator:p,logger:r,originalElementLocationResult:u,allowNotActionableNodesOverride:s,skipSavingVisualAttributes:a,acceptElementMovedError:l});let f=diff(g,n);return f&&Object.keys(f).length>0&&(n.cacheResolutionUpdateTime=new Date().toISOString(),n.cacheResolutionUpdateLoggerTags=fn(r),n.cacheResolutionUpdateSource="HTML_DISTANCE",r.info({diffs:f,result:u},"Updated cache after l-dist resolution")),o.push({type:"HTML_DISTANCE",matched:!0,reason:"Found an element on the page with the same string representation as the saved element.",logs:u.logs,distance:u.closestDistance,closestElement:h,savedElement:n.nodeOnlySerializedHtml}),{locator:p,a11yNode:m,displayString:h,decisions:o,originalElementLocationResult:u,revalidator:async()=>{await vq({initialLocationResult:u,locator:p,logger:r,bannedAttributes:this.userControlledBrowserSettings.bannedAttributes});}}}else if("cacheMissReason"in u)throw new Error(u.error??u.cacheMissReason)}catch(u){r.info({err:u},"Failed to find closest HTML node using levenshtein distance"),o.push({type:"HTML_DISTANCE",matched:false,reason:`Error finding closest HTML node by string distance: ${u}`});}}}async typeIntoTarget(t,n,o={}){return gi({attributes:tq(t,o),logger:this.logger,operation:"type",targetMode:"element",trace:{name:"browser.type_into_target",attributes:{"momentic.type.force":o.force??false,"momentic.type.has_relative_position":o.relativePosition!==void 0,"momentic.type.text_length":t.length,"momentic.type.delay_ms":o.delay??d_,"momentic.type.clear_content":o.clearContent??false,"momentic.type.press_enter":o.pressEnter??false}},fn:async()=>{if(o.fill){await n.locator.fill(t,{force:o.force,timeout:zn}),o.pressEnter&&await this.press("Enter",{}),await this.waitForStability();return}await this.highlight(n.locator);let r;n.originalElementLocationResult?r=n.originalElementLocationResult.importantAttributes.type??"":r=await n.locator.getAttribute("type",{timeout:Mn})??"";let i=jbe.some(s=>s===r.toLowerCase());return await Rq({targetingResult:n,options:{force:o.force,relativePosition:o.relativePosition?ds(o.relativePosition):void 0},logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,position:i?{x:1,y:1}:void 0,actionSource:"type",browserCallbacks:this.getBrowserCallbacks(),isAndroid:this.properties.isAndroid??false}),await this.page.waitForTimeout(150),this.directTypeHelper(t,o)}})}async click(t,n,o={}){return gi({logger:this.logger,operation:"click",targetMode:"element",trace:{name:"browser.click"},fn:()=>Rq({targetingResult:t,options:o,logger:this.logger,actionSource:"click",retryTimeoutMs:this.smartWaitingTimeout,controllerCallbacks:n,browserCallbacks:this.getBrowserCallbacks(),isAndroid:this.properties.isAndroid??false})})}async waitForUrl({beforeUrl:t,matcher:n},o){let r=o?.timeout??this.pageLoadTimeout,i=Date.now(),s=false,a=t;for(;Date.now()-i<r;){if(this.abortSignal?.throwIfAborted(),a=this.url(),vM(a,n,o)){s=true;break}await ht(Qr,this.abortSignal);}if(!s){let l=woe(n);throw new oe("ActionFailureError",`The active page URL ${o?.negated?"still does":"does not"} ${sM(n)} in ${r}ms.${l?`
|
|
7955
7955
|
${l}`:""}
|
|
7956
7956
|
Current tab: ${a}`)}try{await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"wait-for-url-step"});}catch(l){this.logger.warn({err:l},"Failed waiting for page load after URL change, continuing...");}}async dragAndDrop(t,n,o={}){await gi({logger:this.logger,operation:"drag",targetMode:"element",trace:{name:"browser.drag"},fn:()=>this.dragAndDropHelper(t,n,o)});}async dragAndDropHelper(t,n,o={}){let r=o.steps??5,i=Math.min(o.hoverDurationMs??500,zn);if(await this.highlight(t.locator),this.properties.isAndroid){await Kbe({page:this.page,fromLocator:t.locator,toLocator:n.locator,stepCount:r,dragDurationMs:o.dragDurationMs??1e3,hoverDurationMs:i}),await this.highlight(n.locator);return}await this.hover(t),await this.page.mouse.down();let s=await n.locator.boundingBox({timeout:gt});if(!s)throw new oe("ActionFailureError","Could not get bounding box of target element");let a=s.x+s.width/2,l=s.y+s.height/2;await this.page.mouse.move(a,l,{steps:r}),await ht(i),await this.highlight(n.locator),await this.page.mouse.up();}async mouseDrag(t,n,o,r){await gi({logger:this.logger,operation:"drag",targetMode:r?"element":"focused",trace:{name:"browser.drag"},fn:()=>this.mouseDragHelper(t,n,o,r)});}async mouseDragHelper(t,n,o,r){r&&await this.hover({locator:r,originalElementLocationResult:void 0,serverSideBoundingBox:null}),await this.page.mouse.down();let i;if(r){let s=await r.boundingBox({timeout:gt});s&&(i={x:s.x+s.width/2,y:s.y+s.height/2});}i||(this.logger.warn("Could not get starting position from fromTarget, falling back to (0,0)"),i={x:0,y:0}),await this.page.mouse.move(i.x+t,i.y+n,{steps:o}),await ht(Ep),await this.page.mouse.up();}async hover(t,n){await gi({logger:this.logger,operation:"hover",targetMode:"element",trace:{name:"browser.hover"},fn:()=>this.hoverHelper(t,n)});}async hoverHelper(t,n){await this.highlight(t.locator),await jy({func:async o=>{await this.scrollIntoViewIfNeeded(o.locator);let r,i;if(n?.relativePosition)({x:r,y:i}=await Cq({targetingResult:o,relativePosition:n.relativePosition}));else {let s=await o.locator.boundingBox({timeout:gt});if(!s)throw new Error("Attempted to hover over element with no bounding box");r=s.x+s.width/2,i=s.y+s.height/2;}await this.page.mouse.move(r,i,{steps:3});},action:"hovering over element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,targetingResult:t,callbacks:this.getBrowserCallbacks()});}async focus(t){await this.highlight(t.locator),await jy({func:n=>n.locator.focus({timeout:zn}),action:"focusing element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),targetingResult:t});}async blur(t){if(!t){let n=await this.getActivePageOrFrame();await Or({fn:()=>{let o=document.activeElement;o&&o.nodeType===1&&o.blur();},root:n,arg:void 0,waitForPageLoad:()=>this.waitForPageLoad(),timeout:Mn,codePath:"blurring the active element"});return}await this.highlight(t.locator),await jy({func:n=>n.locator.blur({timeout:zn}),action:"blurring element",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),targetingResult:t});}async selectOption(t,n,o=false){await gi({logger:this.logger,operation:"select",trace:{name:"browser.select"},fn:()=>this.selectOptionHelper(t,n,o)});}async selectOptionHelper(t,n,o=false){await this.highlight(t.locator),await jy({action:"selecting option from dropdown",logger:this.logger,retryTimeoutMs:this.smartWaitingTimeout,callbacks:this.getBrowserCallbacks(),func:async r=>{if(n.type==="INDEX"){let i=Number(n.index);if(isNaN(i))throw new oe("UserConfigurationError",`Page index ${n.index} is not a number`)}await r.locator.selectOption({value:n.type==="VALUE"?n.value:void 0,label:n.type==="LABEL"?n.label:void 0,index:n.type==="INDEX"?Number(n.index):void 0},{force:o,timeout:gt});},targetingResult:t});}async press(t,n){await this.runWithMainFrameNavigationLatch({page:this.page,action:()=>gi({logger:this.logger,operation:"press",trace:{name:"browser.press"},fn:()=>this.pressHelper(t,n)})}),await this.waitForStability();}async pressHelper(t,n){let o=n.repeat??1;if(n.convertMeta){let r=yD({combination:t,operatingSystem:this.operatingSystem,isAndroid:this.properties.isAndroid});r!==t&&(this.logger.info({key:t,convertedKey:r},"Converted platform dependent keys"),t=r);}for(let r=0;r<o;r++)try{await this.page.keyboard.press(t,{delay:n.delayMs??0});}catch(i){throw AD(i,t)}}async keyDown(t,n){if(n.convertMeta){let o=yD({combination:t,operatingSystem:this.operatingSystem,isAndroid:this.properties.isAndroid});o!==t&&(this.logger.info({keyString:t,convertedKey:o},"Converted platform dependent keys"),t=o);}for(let o of Aq(t))try{await this.page.keyboard.down(o);}catch(r){throw AD(r,o)}}async keyUp(t,n){if(n.convertMeta){let o=yD({combination:t,operatingSystem:this.operatingSystem,isAndroid:this.properties.isAndroid});o!==t&&(this.logger.info({keyString:t,convertedKey:o},"Converted platform dependent keys"),t=o);}for(let o of Aq(t))try{await this.page.keyboard.up(o);}catch(r){throw AD(r,o)}}async refresh(t){let n=t?.loadTimeoutMs??this.pageLoadTimeout;await this.waitForPageLoad();let o=0,r=2;for(;o<r;){o++;try{await this.page.reload({waitUntil:"domcontentloaded",timeout:n});break}catch(i){if(this.abortSignal?.throwIfAborted(),this.shouldIgnorePageLoadTimeout(i)){this.logger.warn({err:i,attempt:o},"DOMContentLoaded timed out during reload, continuing due to browser setting");break}this.logger.warn({err:i,attempt:o},`Failed to reload page${o<r?", retrying...":", continuing..."}`);}}await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"reload-step"}),await this.waitForStability();}async getBrowserState(t){let{maxAttempts:n=2,logger:o=this.logger,skipWaitForPageLoad:r,allowNotActionableNodesOverride:i,allowIneligibleTagRedirect:s,showZeroOpacityElementsOverride:a,shouldLogOnFailure:l}=t,c=t.abortSignal??this.abortSignal,u=!i,d=a??(i?true:this.userControlledBrowserSettings.showZeroOpacityElements),m=l?o:bs;r||await this.waitForPageLoad(),t.skipWait||await this.waitForStability({logger:o,signal:c});let p=0,h;for(;p<n;){p++;try{return await ge(this.stateManager.getA11yTree({devicePixelRatio:this.devicePixelRatio,abortSignal:c,logger:o,filterByViewport:t.filterByViewport,showZeroOpacityElements:d,flagNotActionableNodes:u,allowIneligibleTagRedirect:s,skipPageLoad:t.skipWaitForPageLoad}),{milliseconds:this.pageLoadTimeout*p,signal:c,message:"Getting browser state took too long"})}catch(g){if(c?.throwIfAborted(),h=g instanceof Error?g.message:`${g}`,p>=n)throw g;m.warn({err:g,url:this.url()},"Error getting a11y tree, retrying...");}}throw new oe("ActionFailureError",`Getting page content failed after ${n} attempts. Error: ${h}`)}async getViewportOffsetDetails(t){let[n,o,r,i,s]=await Or({root:t,fn:()=>[window.scrollY,window.scrollX,window.screen.width,window.screen.height,window.devicePixelRatio],arg:void 0,timeout:gt,waitForPageLoad:async()=>{},codePath:"getting current viewport details"});return {upperBound:n,lowerBound:n+i,leftBound:o,rightBound:o+r,width:r,height:i,devicePixelRatio:this.properties.systemDevicePixelRatio??s}}async waitForStability(t){let n=this.consumeMainFrameNavigationObservations(this.page);return de({name:"browser.wait_for_stability",serviceName:"browser",attributes:gD(this.logger),fn:async o=>{if(this.executionMode==="turbo"){let i=await this.settleObservedMainFrameNavigation({observationsPromise:n,signal:t?.signal});o?.setAttributes(i.attributes);return}let r=await this.waitForStabilityWithWebTracer({opts:t,navigationObservationsPromise:n});o?.setAttributes(r);}})}async waitForStabilityWithWebTracer({opts:t,navigationObservationsPromise:n}){return jo().startAsyncSpan("WAIT_FOR_STABILITY",async r=>{let{logger:i=this.logger,timeout:s=this.smartWaitingTimeout,signal:a}=t??{},l={lastAt:Date.now(),eventCount:0},c=()=>{l.lastAt=Date.now(),l.eventCount++;};this.cdpClient.addListener("Page.frameDetached",c),this.cdpClient.addListener("Page.frameStartedLoading",c),this.cdpClient.addListener("Page.navigatedWithinDocument",c),this.cdpClient.addListener("Page.frameRequestedNavigation",c);let u=new Map,d=new Set,m=randomUUID(),p={"momentic.stability.timeout_ms":s,"momentic.stability.dom_tracking_begin_duration_ms":0,"momentic.stability.dom_tracking_end_duration_ms":0};try{let h=performance.now();await this.updateDomMutationTracking("begin",u,d,m),p["momentic.stability.dom_tracking_begin_duration_ms"]=performance.now()-h,Object.assign(p,await this.waitUntilStable({pageActivity:l,domMutationRevisions:u,domMutationFrames:d,domMutationTrackerId:m,logger:i,timeout:s,signal:a,navigationObservationsPromise:n}));}finally{let h=performance.now();await this.updateDomMutationTracking("end",void 0,d,m),p["momentic.stability.dom_tracking_end_duration_ms"]=performance.now()-h,p["momentic.stability.page_activity_event_count"]=l.eventCount,Object.assign(r.attributes,p),this.cdpClient.removeListener("Page.frameDetached",c),this.cdpClient.removeListener("Page.frameStartedLoading",c),this.cdpClient.removeListener("Page.navigatedWithinDocument",c),this.cdpClient.removeListener("Page.frameRequestedNavigation",c);}return p},{})}async waitUntilStable({pageActivity:t,domMutationRevisions:n,domMutationFrames:o,domMutationTrackerId:r,logger:i,timeout:s,signal:a=this.abortSignal,navigationObservationsPromise:l}){let c=false,u=Date.now(),d,m={quality:25,retries:0},p=false,h=true,g={cycleCount:0,intervalSleepDurationMs:0,pageActivityUnstableCycleCount:0,dom:{mutationCycleCount:0,navigationRearmDurationMs:0,trackingReadDurationMs:0},screenshot:{captureCount:0,captureDurationMs:0,changeCycleCount:0,diffDurationMs:0,errorCount:0}},f=async()=>{let A=performance.now();g.screenshot.captureCount++;try{return await this.screenshot(m)}finally{g.screenshot.captureDurationMs+=performance.now()-A;}},y=A=>{g.screenshot.errorCount++,g.screenshot.errorCount%3===0&&i.warn({err:A,screenshotErrors:g.screenshot.errorCount},"Failed to take screenshot for DOM stability check"),a?.throwIfAborted();};try{d=await f();}catch(A){y(A);}let S=await this.settleObservedMainFrameNavigation({observationsPromise:l,signal:a});if(S.observed){let A=performance.now();await this.updateDomMutationTracking("end",void 0,o,r),n.clear(),await this.updateDomMutationTracking("begin",n,o,r),g.dom.navigationRearmDurationMs=performance.now()-A,d=void 0,t.lastAt=Date.now();try{d=await f();}catch(R){y(R);}}let b=Date.now(),v=S.observed?b:u;for(;Date.now()-b<s;){a?.throwIfAborted(),g.cycleCount++;let A=Date.now();if(A-v<Ep){let I=performance.now();await ht(Ep-(A-v),a),g.intervalSleepDurationMs+=performance.now()-I;}if(v=Date.now(),d)try{let I=await f(),_=performance.now(),P;try{P=await Ube(d,I);}finally{g.screenshot.diffDurationMs+=performance.now()-_;}P>1?(d=I,p=!1,g.screenshot.changeCycleCount++):p=!0;}catch(I){y(I);}else try{d=await f();continue}catch(I){y(I);}let R=performance.now(),w=await this.updateDomMutationTracking("read",n,o,r);g.dom.trackingReadDurationMs+=performance.now()-R,h=!w,w&&g.dom.mutationCycleCount++;let O=Date.now()-t.lastAt>=GW;if(O||g.pageActivityUnstableCycleCount++,!(!h||!O||!p)){c=true;break}}return c||i.warn({duration:Date.now()-u,settleDuration:Date.now()-b,stable:{dom:h,navigation:Date.now()-t.lastAt>=GW,screenshot:p}},"Stability wait completed due to timeout, continuing..."),{...S.attributes,"momentic.stability.outcome":c?"stable":"timeout","momentic.stability.duration_ms":Date.now()-u,"momentic.stability.settle_duration_ms":Date.now()-b,"momentic.stability.cycle_count":g.cycleCount,"momentic.stability.interval_sleep_duration_ms":g.intervalSleepDurationMs,"momentic.stability.screenshot_capture_count":g.screenshot.captureCount,"momentic.stability.screenshot_capture_duration_ms":g.screenshot.captureDurationMs,"momentic.stability.screenshot_diff_duration_ms":g.screenshot.diffDurationMs,"momentic.stability.screenshot_error_count":g.screenshot.errorCount,"momentic.stability.screenshot_change_cycle_count":g.screenshot.changeCycleCount,"momentic.stability.dom_tracking_read_duration_ms":g.dom.trackingReadDurationMs,"momentic.stability.dom_tracking_navigation_rearm_duration_ms":g.dom.navigationRearmDurationMs,"momentic.stability.dom_mutation_cycle_count":g.dom.mutationCycleCount,"momentic.stability.page_activity_unstable_cycle_count":g.pageActivityUnstableCycleCount}}async updateDomMutationTracking(t,n,o,r){let i=t==="end"&&o?Array.from(o):this.page.frames(),s=i.map(c=>t==="read"&&!o?.has(c)?"begin":t),a=await Promise.allSettled(i.map((c,u)=>{let d=s[u],m=c.evaluate(({operation:p,trackerId:h})=>{let g=window._momentic;switch(p){case "begin":case "read":return g?.ensureDomMutationTracking?.(h);case "end":g?.endDomMutationTracking?.(h);return}},{operation:d,trackerId:r});return cT({promiseGenerator:()=>m,timeoutMs:Mn,codePath:`updateDomMutationTracking.${d}`,logger:this.logger}).catch(p=>{throw d!=="end"&&m.then(async h=>{h?.started&&await c.evaluate(g=>{window._momentic?.endDomMutationTracking?.(g);},r);}).catch(()=>{}),p})})),l=false;for(let[c,u]of a.entries()){let d=i[c],m=s[c];if(t==="end"&&o?.delete(d),u.status!=="fulfilled"||u.value===void 0)continue;m==="begin"&&o?.add(d);let p=n?.get(d);n?.set(d,u.value.revision),t==="read"&&(m==="begin"||u.value.started||p!==u.value.revision)&&(l=true);}return l}async clickUsingVisualCoordinates(t,n){return gi({logger:this.logger,operation:"click",targetMode:"coordinates",trace:{name:"browser.click"},fn:async()=>{let{x:o,y:r}=t;this.logger.debug({x:o,y:r},"Executing mouse click with visual coordinates"),await this.waitForPageLoad(),await this.runWithMainFrameNavigationLatch({page:this.page,action:()=>this.page.mouse.click(o,r,{button:n.rightClick?"right":"left",clickCount:n.iterations??(n.doubleClick?2:1)})});}})}async dragAndDropUsingVisualCoordinates(t,n,o){await gi({logger:this.logger,operation:"drag",targetMode:"coordinates",trace:{name:"browser.drag"},fn:()=>Ybe(this.page,t,n,o)});}async mouseDragUsingVisualCoordinates(t){await gi({logger:this.logger,operation:"drag",targetMode:"coordinates",trace:{name:"browser.drag"},fn:async()=>{let{fromTarget:n,...o}=t;await _q({...o,page:this.page,visualTarget:n,isAndroid:this.properties.isAndroid??false});}});}async hoverUsingVisualCoordinates(t){await gi({logger:this.logger,operation:"hover",targetMode:"coordinates",trace:{name:"browser.hover"},fn:()=>this.page.mouse.move(t.x,t.y,{steps:3})});}async getElementLocation(t){let n=await this.cdpClient.send({method:"DOMSnapshot.captureSnapshot",params:{computedStyles:[],includeDOMRects:true,includePaintOrder:true},timeout:gt}),o=await ge(this.page.evaluate(()=>window.devicePixelRatio),{milliseconds:zn});this.operatingSystem==="darwin"&&o===1&&(o=cSe);let r=n.documents[0],i=r.layout,s=r.nodes,a=s.nodeName||[],l=s.backendNodeId||[],c=i.nodeIndex,u=i.bounds,d=-1;for(let S=0;S<a.length;S++)if(l[S]===t){d=c.indexOf(S);break}if(d===-1)throw new Error(`Could not find any backend node with ID ${t}`);let[m=0,p=0,h=0,g=0]=u[d];m/=o,p/=o,h/=o,g/=o;let f=m+h/2,y=p+g/2;return {centerX:f,centerY:y}}async scrollVertical(t){return gi({logger:this.logger,operation:"scroll",trace:{name:"browser.scroll"},fn:async()=>Iq({frame:this.stateManager.frameConfig?await this.getActivePageOrFrame():null,page:this.page,deltaX:0,directionX:null,deltaY:t?Math.abs(t):null,directionY:t&&t>0?"down":"up",signal:this.abortSignal,callbacks:this.getBrowserCallbacks(),logger:this.logger})})}async scrollHorizontal(t){return gi({logger:this.logger,operation:"scroll",trace:{name:"browser.scroll"},fn:async()=>Iq({frame:this.stateManager.frameConfig?await this.getActivePageOrFrame():null,page:this.page,deltaX:t?Math.abs(t):null,directionX:t&&t>0?"right":"left",deltaY:0,directionY:null,signal:this.abortSignal,callbacks:this.getBrowserCallbacks(),logger:this.logger})})}async goForward(){await this.waitForPageLoad();try{await this.page.goForward({waitUntil:"domcontentloaded",timeout:this.pageLoadTimeout});}catch(t){if(this.abortSignal?.throwIfAborted(),!this.shouldIgnorePageLoadTimeout(t))throw t;this.logger.warn({err:t},"DOMContentLoaded timed out during forward navigation, continuing due to browser setting");}await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"go-forward"});}async goBack(){await this.waitForPageLoad();try{await this.page.goBack({waitUntil:"domcontentloaded",timeout:this.pageLoadTimeout});}catch(t){if(this.abortSignal?.throwIfAborted(),!this.shouldIgnorePageLoadTimeout(t))throw t;this.logger.warn({err:t},"DOMContentLoaded timed out during back navigation, continuing due to browser setting");}await this.loadFrameAndRecordUrl({root:this.page,signal:this.abortSignal,codePath:"go-back"});}async reinitializeCDPClient(t){if(!await this.cdpClient.reinitialize(t))throw new oe("UserInfrastructureError",`Failed to attach Chrome inspector session to tab (${this.page.url()})`)}async stopScreencast(){if(this.clientCallbacks?.onScreencastFrame)try{await this.cdpClient.send({method:"Page.stopScreencast",params:{}});}catch{}}async changeActivePage(t,n){let o=this.page!==t;o&&await this.stopScreencast(),await t.bringToFront(),o&&(this.recordUrlVisited(t.url()),await this.trackPageVideo(t),await this.callRrweb(this.page,"__momenticRrwebFlush"),this.page=t,await this.callRrweb(t,"__momenticRrwebTakeFullSnapshot")),await this.reinitializeCDPClient(n??this.pageLoadTimeout);}async trackPageVideo(t){if(!this.onVideoPageChange)return;this.lastVideoActivationPage=t;let n=new Date,o=this.trackedVideoNames.get(t);if(o){this.onVideoPageChange({videoName:o,timestamp:n});return}if(!this.isRemoteBrowser){let a=await t.video()?.path();if(a){let l=basename(a);this.trackedVideoNames.set(t,l),this.onVideoPageChange({videoName:l,timestamp:n});}return}let r=t.video();if(!r||!this.videoOutputPath)return;let i=this.videoOutputPath,s=`${Date.now()}-${randomUUID()}.webm`;this.trackedVideoNames.set(t,s),this.onVideoPageChange({videoName:s,timestamp:n}),this.pendingRemoteVideoSaves.push(()=>de({name:"web-agent.video.save_as",serviceName:"browser",attributes:{"momentic.video.name":s,"momentic.video.remote_browser_session":true},fn:()=>r.saveAs(join(i,s))}));}async recordTabActivation(t){!this.onVideoPageChange||t===this.lastVideoActivationPage||await this.trackPageVideo(t);}startPendingRemoteVideoSaves(){let t=this.pendingRemoteVideoSaves.splice(0);if(t.length!==0)for(let n of t)this.activeRemoteVideoSaves.push(n());}async finishPendingRemoteVideoSaves(){let t=this.activeRemoteVideoSaves.splice(0);if(t.length===0)return;let n=await de({name:"web-agent.video.finish_pending_saves",serviceName:"browser",attributes:{"momentic.video.pending_save_count":t.length,"momentic.video.remote_browser_session":this.isRemoteBrowser},fn:()=>Promise.allSettled(t)});for(let o of n)o.status==="rejected"&&this.logger.warn({err:o.reason},"Could not save browser video, continuing...");}async createNewTab(t,n){let o=await this.context.newPage();await this.changeActivePage(o,n?.loadTimeoutMs),await this.navigate({url:t,initialNavigation:true,...n}),this.handleAvailableTabsChange();}async switchToPage(t,n){let o,r=0,i=Date.now(),s=n?.timeoutMs??this.smartWaitingTimeout,a=Math.max(n?.loadTimeoutMs??this.pageLoadTimeout,this.pageLoadTimeout),l=true;for(;l;){try{await this.switchToPageHelper(t,{loadTimeoutMs:a});return}catch(c){this.logger.warn({err:c},"Error switching to page, retrying..."),o=c,r++;}if(l=r<2||n?.retry===true&&Date.now()-i<s,!l)break;await ht(Qr);try{await this.waitForPageLoad();}catch(c){this.logger.warn({err:c},"Error waiting for page load during page switch, retrying...");}}throw o}findMatchingOpenPage(t){let n=this.context.pages().map((r,i)=>({page:r,url:r.url(),index:i})),o;if(t.type==="INDEX"){let r=Number(t.index);if(isNaN(r))throw new oe("UserConfigurationError",`Page index ${t.index} is not a number`);if(r<0||r>=n.length)throw new oe("ActionFailureError",`Page index ${t.index} exceeds the number of available pages: ${JSON.stringify(n.map(i=>i.url))}`);o=n[r];}else {let r=n.filter(i=>t.type==="SUBSTRING"?i.url.includes(t.substring):i.url.match(t.pattern));r.length>1&&this.logger.warn(`More than one page matches the page switch criteria: ${JSON.stringify(r.map(i=>i.url))}`),o=r[r.length-1];}if(!o)throw new oe("ActionFailureError",`Could not find matching page using criteria: ${JSON.stringify(t)}.
|
|
7957
7957
|
Available pages:${JSON.stringify(n.map(r=>r.url))}`);return o}async switchToPageById(t,n){let o=this.context.pages(),r=o.find(i=>this.pageIds.get(i)===t);return r?(await this.activateMatchedPage({page:r,url:r.url(),index:o.indexOf(r)},`tab id ${t}`,n),true):false}async switchToPageHelper(t,n){let o=this.findMatchingOpenPage(t);await this.activateMatchedPage(o,JSON.stringify(t),n);}async activateMatchedPage(t,n,o){if(!Nh(t.url,this.logger)){this.logger.warn(`Refusing to switch to page with invalid URL: ${t.url}`);return}this.logger.info(`Switching to tab ${t.index} with url ${t.url}`),await this.changeActivePage(t.page,o?.loadTimeoutMs),await this.loadFrameAndRecordUrl({root:t.page,signal:this.abortSignal,codePath:"switch-to-tab-step",loadTimeoutMs:o?.loadTimeoutMs});let r=t.page.url();if(this.page!==t.page||t.page.isClosed())throw new oe("InvalidBrowserStateError",`Tab switch verification failed. Expected ${n}, active URL is ${r}`);this.handleAvailableTabsChange();}async closePage(t,n){let o,r=0,i=Date.now();for(;r<2||n?.retry&&Date.now()-i<this.smartWaitingTimeout;){try{let s=t.type==="CURRENT"?this.page:this.findMatchingOpenPage(t).page;if(this.context.pages().length<=1)throw new oe("InvalidBrowserStateError","Cannot close last open tab");if(!Nh(s.url(),this.logger))throw new oe("ActionFailureError",`Cannot close page with invalid URL: ${s.url()}`);this.logger.info(`Closing tab with URL: ${s.url()}`),await s.close(),await this.waitForPageLoad(),this.handleAvailableTabsChange();return}catch(s){if(s instanceof oe)throw s;this.logger.warn({err:s},"Error closing page, retrying..."),o=s,r++,await ht(Qr);}try{await this.waitForPageLoad();}catch(s){this.logger.warn({err:s},"Error waiting for page load during tab close, retrying...");}}throw o}async setCookie(t){let n;return typeof t=="string"?n=TP(t):n=[t],await this.context.addCookies(n),n}async setLocalStorage(t,n){let o;for(let r=0;r<2;r++)try{await this.evaluateFunctionInPage(([i,s])=>{i&&localStorage.setItem(i,s||"");},[t,n],`setting local storage key ${t}`);return}catch(i){o=i;}if(o)throw o}getActiveFrameConfig(){return this.stateManager.frameConfig}async exposeRecordingBindings(){try{await ge(this.exposeRecordingBindingsHelper(),{milliseconds:this.pageLoadTimeout});}catch(t){t instanceof Error&&t.message.includes("already registered")||this.logger.error({err:t},"Failed to install Momentic libraries for action recording");}}async exposeRecordingBindingsHelper(){await this.context.exposeBinding("isRecordingActive",()=>this.transformer!==void 0),await this.context.exposeBinding("captureTargetedEvent",({frame:t},n)=>{this.transformer&&lTe({event:n,frame:t,transformer:this.transformer,enricher:this.enricher,lastScreenshotForRecording:this.lastScreenshotForRecording?.toString("base64"),logger:this.logger,autoExpandIframes:!!this.userControlledBrowserSettings.autoExpandIframes});}),await this.context.exposeBinding("captureKeystroke",async(t,n)=>{this.transformer&&this.transformer.recordKeystroke(n);});}async exposeRrwebBinding(){try{await ge(this.context.exposeBinding("__momenticRrwebEmit",(t,n)=>{t.page===this.page&&this.handleRrwebEventsJson(n);}),{milliseconds:this.pageLoadTimeout});}catch(t){t instanceof Error&&t.message.includes("already registered")||this.logger.error({err:t},"Failed to expose rrweb recording binding");}}handleRrwebEventsJson(t){let n=this.clientCallbacks?.rrweb;if(!n)return;let o;try{o=JSON.parse(t);}catch(i){this.logger.warn({err:i},"Dropped an unparseable rrweb event batch");return}let r=z$1.array(pte).safeParse(o);!r.success||r.data.length===0||n.onEvents(r.data);}async callRrweb(t,n){if(!(!this.clientCallbacks?.rrweb||t.isClosed()))try{await ge(t.evaluate(o=>window[o]?.(),n),{milliseconds:Bdt});}catch(o){this.logger.warn({err:o,method:n},"rrweb call in the tab failed");}}async startRecordingCrons(t){if(t.aborted)return;let n,o=(await this.getOpenPages()).map(l=>l.url),r=0,i=false,s=async()=>{if(t.aborted||r>8){clearTimeout(n);return}i=true;let l;try{l=(await this.getOpenPages()).map(u=>u.url),r=0;}catch(u){this.logger.debug({err:u},"Failed getting new open pages during recording tab switch cron, skipping..."),r++;return}let c=this.url();for(let u=l.length-1;u>=o.length;u--){let d=l[u];Nh(d,this.logger)&&d!==c&&this.logger.info({lastActivePages:o,currentUrl:c,newOpenPages:l},"Auto-following new tab during recording"),await this.switchToPage({type:"INDEX",index:String(u)});break}o=l;};n=setInterval(async()=>{if(!i){i=true;try{await s();}catch(l){this.logger.error({err:l},"Error while checking pages during recording");}finally{i=false;}}},Qr);let a=async()=>{clearInterval(n);};t.addEventListener("abort",a,{once:true});}async startRecording(t,n,o){this.logger.debug({isClickToRecord:o},"Starting recording mode in Chrome browser"),await this.startRecordingCrons(t),await this.page.evaluate(i=>{let a=window._momentic;a._MOMENTIC_RECORDING_ACTIVE=true,a._MOMENTIC_CLICK_RECORD_ACTIVE=i;},o),this.transformer=n,await this.injectKnowledgeBaseIntoBrowser(this.page);let r=async()=>{this.transformer=void 0,this.lastScreenshotForRecording=void 0;try{await this.page.evaluate(()=>{let s=window._momentic;s._MOMENTIC_RECORDING_ACTIVE=!1,s._MOMENTIC_CLICK_RECORD_ACTIVE=!1;});}catch{}};t.addEventListener("abort",r,{once:true});}async getSelectOptions(t){return await t.evaluate(o=>Array.from(o.querySelectorAll("option")).map(i=>({value:i.value,label:i.label})),void 0,{timeout:Mn})}getActivePage(){return this.page}async getActivePageOrFrame(){return de({name:"browser.getActivePageOrFrame",serviceName:"browser",fn:()=>this.getActivePageOrFrameHelper()})}async getActivePageOrFrameHelper(){let t=await this.stateManager.resolveActiveFrameConfig({});return t?(await this.loadFrameAndRecordUrl({root:t.frame,signal:this.abortSignal,codePath:"get-active-frame-locator"}),t.frame):this.page}async loadFrameAndRecordUrl({root:t,signal:n,codePath:o,loadTimeoutMs:r}){let i=r??this.pageLoadTimeout,s=t.url();if(!s.includes("chrome-error://")){try{await cT({promiseGenerator:async()=>t.waitForLoadState("domcontentloaded",{timeout:i}),signal:n,codePath:`loadFrameAndRecordUrlDomContentLoad-${o}`,logger:this.logger,timeoutMs:i});}catch(a){let l=a;if(n?.throwIfAborted(),this.shouldIgnorePageLoadTimeout(l,true))this.logger.warn({err:l,url:s,codePath:o},"DOMContentLoaded timed out while waiting for frame load, continuing due to browser setting");else {if(l.name==="AbortError")throw new oe("UserInfrastructureError",`The page with URL ${to(s,50)} did not load within the configured timeout (${i}ms)`);if(!l.message.includes("detached"))throw l}}try{await cT({promiseGenerator:async()=>t.waitForLoadState("load",{timeout:i}),signal:n,codePath:`loadFrameAndRecordUrlPageLoad-${o}`,logger:this.logger,timeoutMs:i});}catch(a){this.logger.warn({err:a,codePath:o,url:s},"Failed waiting for current frame to load, continuing...");}this.recordUrlVisited(t.url());}}async getCondensedHtml(t){let{skipWait:n=false}=t??{};return n||(await this.waitForPageLoad(),await this.waitForStability()),this.getCondensedHtmlHelper()}async getCondensedHtmlHelper(){let t=await this.getRawCondensedHtml();return vdt.html(t,{indent_size:1,indent_with_tabs:false,preserve_newlines:false})}async getRawCondensedHtml(){return jo().startAsyncSpan("GET_PAGE_STATE",()=>gi({logger:this.logger,operation:"read_page",trace:{name:"browser.read_page"},fn:()=>this.getRawCondensedHtmlHelper()}),{})}async getRawCondensedHtmlHelper(){let t=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(t,this.logger,this.abortSignal);let{result:n,error:o}=await Or({fn:({bannedAttributes:r})=>window._momentic.getCondensedHtmlTree({bannedAttributes:r}),root:t,arg:{bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},timeout:zn,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting condensed HTML tree"});if(o)throw new Error(`Failed to process page HTML: ${o}`);if(!n)throw new oe("InternalWebAgentError","Got empty HTML tree - are you sure the page is fully loaded?");return n}async getRawArchivalHtml(){let t=await this.getActivePageOrFrame();await this.ensureMomenticBrowserScriptsLoaded(t,this.logger,this.abortSignal);let{result:n,error:o}=await Or({fn:({bannedAttributes:r})=>window._momentic.getArchivalHtmlTree({bannedAttributes:r}),root:t,arg:{bannedAttributes:this.userControlledBrowserSettings.bannedAttributes},timeout:zn,waitForPageLoad:()=>this.waitForPageLoad(),codePath:"getting archival HTML tree"});if(o)throw new Error(`Failed to process page HTML: ${o}`);if(!n)throw new oe("InternalWebAgentError","Got empty HTML tree - are you sure the page is fully loaded?");return n}registerDialogHandler(t){let n=async o=>{try{t==="ACCEPT"?await o.accept():await o.dismiss();}catch(r){this.logger.warn({err:r},"Failed to handle dialog");}};this.page.once("dialog",n);}async evaluateFunctionInAllFrames(t,n){return this.stateManager.executeFunctionInAllFrames(t,n)}async evaluateFunctionInPage(t,n,o,r=zn){let i=await this.getActivePageOrFrame();return Or({root:i,fn:t,arg:n,timeout:r,waitForPageLoad:()=>this.waitForPageLoad(),codePath:o})}async evaluateCodeInPage({code:t,fragment:n,context:o,timeoutMs:r=fh}){let i=lbe(),s={code:t,fragment:n,context:o},{result:a}=await ge(this.page.evaluate(i,s),{milliseconds:r,fallback:()=>{throw this.abortSignal?.throwIfAborted(),new oe("ActionFailureError",`Code evaluation in browser exceeded the allowed timeout of ${r/1e3} seconds`)},signal:this.abortSignal});return a}async getDomNodeFromPixelPosition(t,n){await this.cdpClient.send({method:"DOM.getDocument",params:{depth:0},timeout:zn});let o;try{o=await this.cdpClient.send({method:"DOM.getNodeForLocation",params:{x:t,y:n},timeout:Mn});}catch(r){throw this.logger.warn({err:r,x:t,y:n},"Failed to get DOM node from position percents"),new Error("No element was found at the given location")}return o}async getDomNodeFromPositionPercentages(t,{percentX:n,percentY:o}){if(n<0||n>1||o<0||o>1)throw new oe("UserConfigurationError","Invalid percent passed to percentage location");let{width:r,height:i,upperBound:s,leftBound:a}=await this.getViewportOffsetDetails(t),l=Math.round(s),c=Math.round(a),u=Math.ceil(r*n),d=Math.ceil(i*o),m=u+c,p=d+l;return this.getDomNodeFromPixelPosition(m,p)}async highlightFromPositionPercentages(t){let n=await this.getActivePageOrFrame(),o;try{o=await this.getDomNodeFromPositionPercentages(n,t);}catch{}return o?(await this.cdpClient.send({method:"Overlay.highlightNode",timeout:Mn,params:{highlightConfig:ISe,backendNodeId:o.backendNodeId}}),async()=>{try{await this.cdpClient.send({timeout:Mn,method:"Overlay.hideHighlight",params:{backendNodeId:o?.backendNodeId}});}catch{}}):async()=>{}}async clearAllCdpHighlights(){try{await this.cdpClient.send({method:"Overlay.hideHighlight",params:void 0,timeout:Mn});}catch{}}async getTargetFromPositionPercentages(t){let n=await this.getActivePageOrFrame(),o=await this.getDomNodeFromPositionPercentages(n,t);return this.getTargetFromBackendNodeId({root:n,backendNodeId:o.backendNodeId,allowNotActionableNodesOverride:t.allowNotActionableNodesOverride})}async getTargetFromBackendNodeId({root:t,backendNodeId:n,allowNotActionableNodesOverride:o}){let r=this.stateManager.domGraph?.backendIdToNode[n];if(!r)throw new Error("No DOM node was found with the given backend ID");let i=r?.attributes[By],s=parseInt(i??"");if(!i||isNaN(s))throw new Error("No data-momentic-id was found on the DOM node");let a=t.locator(Ap(s)),l=await this.fetchHtmlAttributes({locator:a,logger:this.logger,allowNotActionableNodesOverride:o}),c={id:-1,dataMomenticId:s,targetSource:"XY_PERCENT",targetUpdateTime:new Date().toUTCString(),...l};return this.logger.debug({target:c},"Tied backend ID to HTML node"),{target:c,locator:a}}async performTargetRedirection(t,n){try{return await gi({logger:n,operation:"locator_redirect",fn:()=>de({name:"browser.target_redirection",attributes:{op:"locator_redirect","momentic.locator_redirect.timeout_ms":gt,...gD(n)},fn:async o=>{try{let r=await ge(this.performTargetRedirectionHelper(t,n),{milliseconds:gt});return o?.setAttribute("momentic.locator_redirect.outcome",r.metadata.outcome),o?.setAttribute("momentic.locator_redirect.timed_out",!1),r}catch(r){throw o?.setAttributes({"momentic.locator_redirect.outcome":"error","momentic.locator_redirect.timed_out":r instanceof Ua}),r}}})})}catch(o){return n.warn({err:o},"Error performing target redirection, using original element"),{metadata:{outcome:"error"}}}}async performTargetRedirectionHelper(t,n){let o=Date.now(),{locator:r,originalElementLocationResult:i}=t,s=await r.boundingBox({timeout:gt});if(!s)return n.warn(`Attempted to click on element with no bounding box: ${i?.serializedElement}`),{metadata:{outcome:"no bounding box"}};let{x:a,y:l,width:c,height:u}=s,d=this.getViewport();if(a<0||l<0||!d||a+c>d.width||l+u>d.height)return n.info("Skipping locator redirection because the element is outside the viewport"),{metadata:{outcome:"element outside viewport"}};let m=await this.getActivePageOrFrame(),{dataMomenticId:p,mPathSelector:h,error:g,serializedElement:f,foundElementRelativePoint:y,force:S,logs:b}=await r.evaluate(A=>{let w=window._momentic;if(!w?.performTargetRedirection)throw new Error("performTargetRedirection script is not defined");return w.performTargetRedirection(A)},void 0,{timeout:Mn}),v=Date.now()-o;return g?(n.warn({err:g,serializedElement:f,duration:v,force:S,logs:b},"Got error from target redirection with bounding box"),{metadata:{outcome:"error",logs:b,serializedElement:f,force:S}}):p?(n.info({newDataMomenticId:p,serializedElement:f,duration:v,force:S,logs:b},"Redirected target to new element with bounding box with data-momentic-id"),{targetingResult:{locator:m.locator(Ap(p)),originalElementLocationResult:void 0,serverSideBoundingBox:null,hints:{relativeXYToLocator:y,force:S}},metadata:{outcome:"redirected to new element",logs:b,serializedElement:f,relativeClickPoint:y,force:S}}):h?(n.info({newMPathSelector:h,serializedElement:f,duration:v,force:S,logs:b},"Redirected target to new element with bounding box with mPath"),{targetingResult:{locator:m.locator(h),originalElementLocationResult:void 0,serverSideBoundingBox:null,hints:{relativeXYToLocator:y,force:S}},metadata:{outcome:"redirected to new element",logs:b,serializedElement:f,relativeClickPoint:y,force:S}}):y?(n.info({foundElementRelativePoint:y,serializedElement:f,duration:v,force:S,logs:b},"Chose specific visible point on original element"),{targetingResult:{locator:r,originalElementLocationResult:i,serverSideBoundingBox:await r.boundingBox({timeout:gt}),hints:{relativeXYToLocator:y,force:S}},metadata:{outcome:"specific visible point on original",logs:b,serializedElement:f,relativeClickPoint:y,force:S}}):S?this.userControlledBrowserSettings.forceClickForMissingRedirectElement?(n.info({serializedElement:f,duration:v,force:S,logs:b},"Forcing click on original element"),{targetingResult:{locator:r,serverSideBoundingBox:await r.boundingBox({timeout:gt}),originalElementLocationResult:i,hints:{force:S}},metadata:{outcome:"force click on original",logs:b,serializedElement:f,force:S}}):(n.info({serializedElement:f,duration:v,force:S,logs:b},"No redirect candidates found and forceClickForMissingRedirectElement is off, skipping force click"),{metadata:{outcome:"no action taken"}}):{metadata:{outcome:"no action taken"}}}async fetchHtmlAttributes({locator:t,logger:n=this.logger,originalElementLocationResult:o,allowNotActionableNodesOverride:r}){let{showZeroOpacityElements:i,bannedAttributes:s}=this.userControlledBrowserSettings,a=this.userControlledBrowserSettings.hybridSelectorMode??hH,l=await t.evaluate((c,u)=>{let m=window._momentic;return m?.generateHtmlCacheAttributes?m.generateHtmlCacheAttributes(c,u):{warnings:[],error:"generateHtmlCacheAttributes is not defined"}},{generateHybridSelector:a==="test"||a==="prefer"||a==="always",originalElementLocationResult:o,showZeroOpacityElements:r?true:i,bannedAttributes:s},{timeout:zn});if("error"in l&&l.error)throw l.error.startsWith(Kye)?new ku(l.error):l.error.startsWith(Yye)?new Zx(l.error):new Error(l.error);return l.warnings.length&&n.warn(l,"Got warnings while generating HTML attributes for target"),l.attributes}async moveMouseFromPositionPercentages(t,n){let o=this.getViewport();if(!o)throw new Error("Cannot move mouse using percentages without viewport");let r=Math.ceil(o.width*t),i=Math.ceil(o.height*n);return await this.cdpClient.send({method:"Input.dispatchMouseEvent",params:{type:"mouseMoved",x:r,y:i,button:"left",clickCount:0}}),{x:r,y:i}}async clickMouseFromPositionPercentages(t,n,o){let r=this.getViewport();if(!r)throw new Error("Cannot click mouse using percentages without viewport");let i=Math.ceil(r.width*n),s=Math.ceil(r.height*o);await this.cdpClient.send({method:"Input.dispatchMouseEvent",params:{type:t==="down"?"mousePressed":"mouseReleased",x:i,y:s,button:"left",clickCount:t==="down"?1:0},timeout:Mn});}async scrollFromPositionPercentages(t,n,o,r){let i=this.getViewport();if(!i)throw new Error("Cannot scroll using percentages without viewport");let s=Math.ceil(i.width*t),a=Math.ceil(i.height*n);return await this.cdpClient.send({method:"Input.dispatchMouseEvent",params:{type:"mouseWheel",deltaX:s,deltaY:a,x:o,y:r}}),{deltaX:s,deltaY:a}}async getAllFrameUrls(){return await this.stateManager.getAllChildFrameUrls()}async setFileChooserHandler(t){setTimeout(()=>{try{t.cleanup();}catch(n){this.logger.debug({err:n,filePath:t.filePath},"Failed cleaning up file after upload");}},3e4),await this.setFileChooserHandlerHelper(t);}logToUserConsole(t,n,o,...r){let i=this.context.pages().indexOf(t);i=i===-1?0:i,lq(t,this.debugData,i,{type:n,text:`[MOMENTIC] ${o}`,args:r});}async setFileChooserHandlerHelper({filePath:t,filename:n}){if(!existsSync(t)){let l=`File chooser triggered after the source file ${t} has been cleaned up, ignoring...`;this.logger.warn(l),this.logToUserConsole(this.page,"error",l);return}if(statSync(t).isDirectory())throw new qp(`The file for the upload step is a directory, not a file: ${t}. Please provide a path to a file.`);let o=n?.trim()||basename(t),r=readFileSync(t),i=extname(t),s=Hw[i];this.page.once("filechooser",async l=>{this.logger.info({filePath:t,fileName:o},"File chooser triggered");try{if(!existsSync(t))throw new Error(`File chooser triggered after the source file ${t} has been cleaned up, ignoring...`);await l.setFiles({name:o,buffer:r,mimeType:Ldt.getType(t)||"application/octet-stream"},{timeout:dD});}catch(c){this.logger.error({err:c},"Error handling file chooser"),this.logToUserConsole(this.page,"error",c.message);}});let a=r.toString("base64");await this.evaluateFunctionInPage(({fileName:l,base64Data:c,mimeType:u})=>{let d=window,m=atob(c),p=new Array(m.length);for(let g=0;g<m.length;g++)p[g]=m.charCodeAt(g);let h=new Uint8Array(p);d.showOpenFilePicker=async()=>(console.info("[MOMENTIC] showOpenFilePicker called"),[{kind:"file",name:l,isSameEntry(f){return Promise.resolve(f.name===l)},queryPermission(f){return console.info("[MOMENTIC] MomenticFile.queryPermission called"),Promise.resolve("granted")},async requestPermission(f){return console.info("[MOMENTIC] MomenticFile.requestPermission called"),Promise.resolve("granted")},async getFile(){console.info("[MOMENTIC] MomenticFile.getFile called");let f=new Blob([h],{type:u});return new File([f],l,{type:u})},async createSyncAccessHandle(){throw console.error("[MOMENTIC] Not implemented"),new Error("Not implemented")},async createWritable(){throw console.error("[MOMENTIC] Not implemented"),new Error("Not implemented")}}]);},{fileName:o,base64Data:a,mimeType:s},"set-file-chooser-handler",5e3);}getSerializedFormFromA11yId(t){return this.stateManager.a11yIdToNodeMap[t]?.getNodeOnlySerializedForm()}retrieveAndClearDebugData(){let t={...this.debugData};return this.debugData={logsPerPage:[]},t}async copy(t){try{await this.evaluateFunctionInPage(n=>navigator.clipboard.writeText(n),t,"copying text to clipboard");}catch(n){if(n instanceof Error&&n.message.includes("Document is not focused")){await this.evaluateFunctionInPage(()=>{document.activeElement||document.body.focus();},void 0,"focusing on body element before copying to clipboard"),await this.press("Tab",{}),await this.press("Shift+Tab",{}),await this.evaluateFunctionInPage(o=>navigator.clipboard.writeText(o),t,"copying text to clipboard");return}throw n}}async paste(){await this.waitForPageLoad(),await this.press("Meta+V",{convertMeta:true});}async registerRequestListener(t){return this.page.waitForResponse(n=>{let o=n.request();return t.matches({url:o.url(),method:o.method()})})}async registerRequestRecorder(t,n){this.requestRecorders[t]=n,await this.ensureNetworkRoutesForOpenPages();}removeRequestRecorder(t){delete this.requestRecorders[t],this.scheduleRemoveUnusedNetworkRoutes();}async setHeader(t,n,o){ZSe(t),this.customHeaders.push({key:t.toLowerCase(),value:n,matcher:o}),await this.ensureNetworkRoutesForOpenPages();}async registerMock(t,n,o,r){let i=t??randomUUID();return this.mocks[i]={matcher:n,generateResponse:o,fetchOriginalResponse:r},await this.ensureNetworkRoutesForOpenPages(),i}removeMock(t){if(!t){this.mocks={},this.scheduleRemoveUnusedNetworkRoutes();return}delete this.mocks[t],this.scheduleRemoveUnusedNetworkRoutes();}async setOfflineMode(t){await this.context.setOffline(t),this.offline=t;}get smartWaitingTimeout(){return this.userControlledBrowserSettings.smartWaitingTimeoutMs??uSe}shouldIgnorePageLoadTimeout(t,n=false){if(!this.userControlledBrowserSettings.ignorePageLoadTimeouts)return false;if(n&&t.name==="AbortError")return true;let o=t.message.toLowerCase();return o.includes("domcontentloaded")&&(o.includes("timeout")||o.includes("exceeded"))}get userBrowserSettings(){return cloneDeep(this.userControlledBrowserSettings)}get pageLoadTimeout(){return this.userControlledBrowserSettings.pageLoadTimeoutMs??GA}get isInPageLoad(){return Object.values(this.pageLoadPromises).length>0}get devicePixelRatio(){return this.properties.systemDevicePixelRatio??1}get browserCrashDumpDir(){let t=TD();for(let n of t)if(!(!existsSync(n)||!statSync(n).isDirectory()||!["new","pending","completed"].some(r=>{let i=join(n,r);return existsSync(i)&&statSync(i).isDirectory()&&readdirSync(i).length>0})))return n}};var $y=class{constructor(t,n){this.pagesStream=t;this.entriesStream=n;}closed=false;inProgressEntries={};writePage(t){this.closed||this.pagesStream.write(`${JSON.stringify(t)}
|
|
@@ -7967,7 +7967,7 @@ ${e}`;default:return e}}async function Ol({frameConfig:e,action:t,browser:n}){le
|
|
|
7967
7967
|
`),c=0,u=[],d=0,m=[],p=[],h=false;for(;c<l.length;){h&&(a.push({ids:m,content:u.join(`
|
|
7968
7968
|
`),tokenLength:d}),u=[],d=0,m=p.length?[p[p.length-1].id]:[],h=false);let g=l[c],f=Rt(g);d+=f,g.length>s&&(g=g.slice(0,s));let b=Array.from(g.matchAll(CTe)).map(k=>k&&k.length>=3?{tagName:k[1],id:k[2]}:void 0).filter(k=>!!k),A=Array.from(g.matchAll(umt)).map(k=>k&&(k[2]||k[4])).filter(k=>!!k);A.reverse();let R=g.replace(/ id="[0-9]+"/g,"");u.push(R);for(let k of b)m.push(k.id),p.push(k);for(let k of A){let H=p[p.length-1];H&&H.tagName===k&&p.pop();}let w=p.some(k=>mmt.includes(k.tagName)),O=l[c+1]??"",I=Rt(O),P=Array.from(O.matchAll(CTe)).map(k=>k&&k.length>2?k[1]:void 0).filter(k=>!!k),N=P.some(k=>xTe.includes(k)),D=P.some(k=>dmt.includes(k));d+I>=i&&(h=true),d>=o&&(N&&!w||A.some(k=>pmt.includes(k)))&&(h=true),d>=r&&D&&!w&&(h=true),c++;}return u.length&&a.push({ids:m,content:u.join(`
|
|
7969
7969
|
`),tokenLength:d}),a.forEach((g,f)=>{let y=g.ids[0],S=g.ids[g.ids.length-1];e.debug({tokenLength:g.tokenLength,minId:y,maxId:S},`Chunk for page filtering (index ${f+1}/${a.length})`);}),{chunks:a}}var PTe=5e6,fmt=1e5,ymt=3e4,Smt=6e4,bmt=1e5;async function Ml(e){let{fixtures:t}=e,{logger:n}=t,o=e.tree,r=e.serializedTree,i=Rt(r);if(i>PTe)throw new oe("UserConfigurationError",`Page accessibility tree is too large for AI page filtering (${i} tokens). Maximum supported size is ${PTe} tokens.`);if(i>fmt){let s=_Te({serializedTree:r,options:ITe,logger:n}),a=randomUUID();o=await Tmt({...e,chunks:s.chunks,callId:a}),r=o.serialize();let l=Rt(r);n.info({oldTokens:i,newTokens:l,langfuseCallId:a},"Filtered page using AI chunk ranking");}return r}async function Tmt({type:e,callId:t,chunks:n,description:o,fixtures:r,tree:i}){let{generator:s,signal:a,logger:l}=r,c=await s.rankChunksWithAi({chunks:n,description:o,type:e,softTokenLimit:ymt,mediumTokenLimit:Smt,hardTokenLimit:bmt,callId:t},{abortSignal:a,logger:l,loggerTags:fn(l)}),u=[];return n.forEach((m,p)=>{c.indices.includes(p)&&(u=u.concat(m.ids));}),i.pruneUsingRelevantIds(new Set(u))}async function Nq(e,t){if(!e.description)throw new oe("UserConfigurationError","Cannot locate element with empty description");return Ol({action:async()=>MTe(e,t),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,browser:t.browser,logger:e.logger})}async function OTe(e,t){if(e.length===0)return [];if(e.some(a=>a.iframeUrl))throw new oe("UserConfigurationError","Batch element location does not support explicit iframe URLs");let n=e[0],o=e.findIndex(a=>a.allowNotActionableNodesOverride!==n.allowNotActionableNodesOverride||a.allowIneligibleTagRedirect!==n.allowIneligibleTagRedirect||a.showZeroOpacityElementsOverride!==n.showZeroOpacityElementsOverride||a.filterByViewport!==n.filterByViewport||a.skipWait!==n.skipWait);if(o!==-1)throw new oe("UserConfigurationError",`Batch element location requires identical page-capture settings, but target ${o+1} differs from target 1`);let r=await kTe(n,t),i=Promise.resolve(),s=async a=>{let l=i.then(a,a);return i=l.then(()=>{},()=>{}),l};return Promise.allSettled(e.map(a=>MTe(a,t,{...r,materialize:s})))}async function MTe(e,t,n){let{disableCache:o,testContext:r,source:i,memory:s,logger:a,skipSavingVisualAttributes:l,isAutoHeal:c,cacheBustReason:u,acceptElementMovedError:d,pastLocatorMiss:m}=e,{orgId:p,browser:h,codeEvaluator:g,generator:f,abortSignal:y}=t,S=e.description,b=jo(),v=e.useMemory&&!o;r&&(S=await Ls({orgId:p,s:S,context:r,codeEvaluator:g,signal:y,logger:a})),i&&(S=ETe(S,i));let{serializedTree:A,tree:R,screenshotBuff:w}=n??await kTe(e,t);if(m?.serializedTree===A&&m?.screenshotBuff?.equals(w))throw a.info("Skipping AI locate, the page is unchanged since the last miss"),new af("Could not find any relevant element: the page has not changed since the last attempt",void 0);let O=A,I=false,P=`data:image/jpeg;base64,${w.toString("base64")}`,N=fn(a);O=await Ml({type:"locator",description:S,screenshot:P,serializedTree:A,tree:R,fixtures:{generator:f,signal:y,logger:a,orgId:p}}),O!==A&&(I=true);let D=await b.startAsyncSpan("AI_LOCATOR_CALL",async M=>{c&&(M.attributes.isAutoHeal=true),u&&(M.attributes.cacheBustReason=u);let X=await f.getElementLocation({browserState:O,goal:S,screenshot:P,source:i,memory:v?s:void 0},{disableCache:o,effort:e.effort,onEffectiveEffort:e.onEffectiveEffort,abortSignal:y,logger:a,loggerTags:N,useMemory:v,cacheBustReason:u});if(M.result=X,v&&(M.attributes.useMemory=true,M.attributes.memoryTraces=X.rememberedTraces??[],X.updatedMemory&&(M.attributes.memorySavedNewResult=true)),b.storeTraceAsset){let $=randomUUID();b.storeTraceAsset({snapshotId:$,data:w}),M.screenshotSnapshotId=$;}return X});if(a.debug({usedRag:I,result:D},"Got locator result"),!(D.id>0))throw m&&(m.serializedTree=A,m.screenshotBuff=w),new af(`Could not find any relevant element: ${D.thoughts}`,D.updatedMemory?{type:"GCS_TRACES",traces:D.updatedMemory}:void 0);let H=()=>b.startAsyncSpan("TARGET_RESOLUTION",async M=>{let X=await h.createTargetFromA11yId({id:D.id,requirements:D.requirements,additionalElements:D.additionalElements,description:S,targetSource:"AI",logger:a,skipSavingVisualAttributes:l,acceptElementMovedError:d});return M.result={serializedElement:X.target.nodeOnlySerializedHtml??"Unknown HTML element"},X}),{resolution:J,target:W,frameConfig:V}=n?.materialize?await n.materialize(H):await H();if(J.a11yNode?.properties?.hidden&&J.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: ${J.displayString}`);return v&&(D.updatedMemory?W.memory={type:"GCS_TRACES",traces:D.updatedMemory}:s&&(W.memory=s)),{thoughts:D.thoughts,target:W,resolution:J,frameConfig:V,screenshot:P}}async function kTe(e,t){let{allowNotActionableNodesOverride:n,allowIneligibleTagRedirect:o,showZeroOpacityElementsOverride:r,filterByViewport:i,skipWait:s,logger:a}=e,{browser:l,abortSignal:c}=t,u=jo(),{serializedTree:d,tree:m}=await u.startAsyncSpan("GET_PAGE_STATE",async()=>Jd(l,{allowNotActionableNodesOverride:n,allowIneligibleTagRedirect:o,showZeroOpacityElementsOverride:r,filterByViewport:i,abortSignal:c,skipWait:s,logger:a}),{}),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 Emt=15;async function DD({command:e,logger:t,fixtures:n,useMemory:o,maxRetries:r=Emt,recoveryHint:i,effort:s,onEffectiveEffort:a}){if(!e.assertion.trim())throw new oe("ActionFailureError","Assertion command is missing the assertion content");let l=oj.optional().catch(void 0).parse(e.source);e.source&&!l&&t.warn(`Invalid source ${e.source} for AI assertion, ignoring...`);let c=jo();return c.startAsyncSpan("AI_ASSERTION_CALL",async u=>{let{browser:d}=n,m=e.timeout?e.timeout*1e3:d.smartWaitingTimeout,p=jre(m,r-1),h=0,g=Date.now(),f=g+m,y=g,S,b,v;try{await Ol({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;){n.abortSignal.throwIfAborted();let w=Date.now();if(h>0){if(w>=f)break;let _=f-w,P=y-w,N=Math.min(P,_);N>0&&await ht(N,n.abortSignal);}let O=Date.now();if(h>0&&O>=f)break;let I=false;try{if(S=await Ol({action:async()=>{let P=await NTe(d,t,n.abortSignal);return b&&b.serializedTree===P.serializedTree&&b.screenshotBuff.equals(P.screenshotBuff)?(I=!0,S):(b=P,DTe({command:e,state:P,fixtures:n,useMemory:o,useConsensus:!1,highlightElementsOnFailure:!1,attemptNumber:h,logger:t,source:l,recoveryHint:i,effort:s,onEffectiveEffort:a}))},frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,logger:t,browser:d}),S?.aiResult.result){S?.updatedMemory&&AR(e,S.updatedMemory,t);break}else throw S?.aiResult.thoughts?new oe("AssertionFailureError",S.aiResult.thoughts):new oe("InternalPlatformError","No thoughts were provided for AI assertion failure")}catch(_){n.abortSignal.throwIfAborted(),v=_ 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(!S?.aiResult.result){let w=f-Date.now();w>0&&await ht(w,n.abortSignal);}if(!S?.aiResult.result)try{S=await Ol({action:async()=>DTe({command:e,state:await NTe(d,t,n.abortSignal),fixtures:n,useMemory:o,useConsensus:!0,highlightElementsOnFailure:!0,attemptNumber:h,logger:t,recoveryHint:i,effort:s,onEffectiveEffort:a}),frameConfig:e.iframeUrl?{type:"url",url:e.iframeUrl}:void 0,logger:t,browser:d});}catch(w){n.abortSignal.throwIfAborted(),v=w instanceof Error?w:new Error(`${w}`);}finally{h++;}S?.updatedMemory&&AR(e,S.updatedMemory,t);let A=S?.afterScreenshotOverride;if(A&&c.storeTraceAsset){let w=randomUUID();c.storeTraceAsset({snapshotId:w,data:A}),u.screenshotSnapshotId=w;}let R=S?.elementScreenshotOverride;if(R&&c.storeTraceAsset){let w=randomUUID();c.storeTraceAsset({snapshotId:w,data:R}),u.elementScreenshotSnapshotId=w;}if(o&&(u.attributes.useMemory=true,u.attributes.memoryTraces=S?.aiResult.rememberedTraces??[],S?.updatedMemory&&(u.attributes.memorySavedNewResult=true)),!S?.aiResult.result){u.result=S?.aiResult??{thoughts:v?.message??"AI check failed after all attempts",result:false};let w=`AI check still failing after ${h} attempts.`;throw v&&(w+=` Latest result: ${v.message}`),new oe("AssertionFailureError",w)}return u.result=S.aiResult,{...S,thoughts:S.aiResult.thoughts,succeedImmediately:false,urlAfterCommand:d.url()}})}async function NTe(e,t,n){await e.waitForPageLoad({signal:n});let[o,r]=await Promise.all([Jd(e,{abortSignal:n,skipWait:true,skipWaitForPageLoad:true,logger:t}),e.screenshot({retries:1,respectActiveFrame:true})]);return {...o,screenshotBuff:r}}async function DTe({command:e,state:t,fixtures:n,useConsensus:o,useMemory:r,highlightElementsOnFailure:i,attemptNumber:s,source:a,logger:l,recoveryHint:c,effort:u,onEffectiveEffort:d}){let {browser:m,generator:p,abortSignal:h}=n,{serializedTree:f,tree:y}=t,S=t.screenshotBuff,b=S.toString("base64"),v=m.url(),A=e.contextChoice??"MULTIMODAL",R=f;A!=="VISION_ONLY"&&(R=await Ml({type:"assertion",serializedTree:f,tree:y,description:e.assertion,screenshot:b,fixtures:{generator:p,signal:h,logger:l,orgId:n.orgId}}),R);let w={goal:e.assertion,url:v,memory:r?e.cache?.memory:void 0,browserState:R,screenshot:b,contextChoice:A,source:a,recoveryHint:c},I=await(A==="VISION_ONLY"?(P,N)=>p.getVisualAssertionResult(P,N):(P,N)=>p.getAssertionResult(P,N))(w,{useConsensus:o,attemptNumber:s,useMemory:r,disableCache:!!e.disableCache,effort:u,onEffectiveEffort:d,abortSignal:h,logger:l,loggerTags:fn(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:N}=await m.createTargetFromA11yId({id:P,description:null,targetSource:"AI",skipSaveToCache:!0});_=await m.screenshot({locator:N.locator,clearHighlights:!0,respectActiveFrame:!0});}catch(P){l.debug({err:P},"Failed to capture element screenshot for trace, continuing...");}await vmt(I.relevantElements,m,l);}return {aiResult:I,afterScreenshotOverride:S,elementScreenshotOverride:_,updatedMemory:r?I.updatedMemory:void 0}}async function vmt(e,t,n){let o=Date.now();for(let r of e){if(Date.now()-o>2e3){n.debug("Highlighting relevant elements took over 2s, aborting...");return}try{let i=new AbortController;await ge(t.highlightA11yId(r),{milliseconds:1e3,fallback:()=>{throw i.abort(),new Error("Timed out waiting for highlighting to complete")}});}catch(i){n.debug({err:i},"Failed to highlight relevant element after assertion, continuing...");return}}}async function BTe(e){let{command:t,logger:n,fixtures:o,disableCache:r,autoExpandIframes:i}=e,{browser:s,generator:a,abortSignal:l}=o;if(!t.goal.trim())throw new oe("ActionFailureError","Cannot perform AI extraction without goal");if(t.schema){let m=hte(t.schema);if(m)throw new oe("UserConfigurationError",m)}let c;i&&!t.iframeUrl?c=(await s.evaluateFunctionInAllFrames(wmt,{bannedAttributes:s.userBrowserSettings.bannedAttributes})).join(`
|
|
7970
|
-
`):c=await s.getCondensedHtml();let u=await s.screenshot({retries:2,respectActiveFrame:true}),d=jo();try{return await d.startAsyncSpan("AI_EXTRACTION_CALL",async m=>{let p=await a.getTextExtraction({goal:t.goal,browserState:c,returnSchema:t.schema,screenshot:`data:image/jpeg;base64,${u.toString("base64")}`},{disableCache:r,abortSignal:l,loggerTags:fn(n)});if(m.result=p,Rmt({tracer:d,span:m,screenshot:u,htmlState:c,logger:n}),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:s.url()}})}catch(m){let p=z(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 wmt({bannedAttributes:e}){return window._momentic?.getCondensedHtmlTree?.({bannedAttributes:e})?.result??""}function Rmt(e){let{tracer:t,span:n,screenshot:o,htmlState:r,logger:i}=e;if(t.storeTraceAsset)try{let s=randomUUID();t.storeTraceAsset({snapshotId:s,data:o}),n.screenshotSnapshotId=s;let a=randomUUID();t.storeTraceAsset({snapshotId:a,data:Buffer.from(r),extension:"html"}),n.browserStateSnapshotId=a;}catch(s){i.debug({err:s},"Failed to store extraction trace assets");}}var UTe=500;async function HTe(e,t){let{logger:n}=e,{abortSignal:o,browser:r}=t,i=Date.now();try{await Cmt(i,e,t);}catch(s){if(mm(s)||o.aborted)return;n.warn({err:s},"Unexpected error occurred during AI smart waiting");let a=r.smartWaitingTimeout-(Date.now()-i);a>0&&await ht(a,o);}finally{n.debug({durationMs:Date.now()-i},"AI smart waiting complete");}}async function Cmt(e,t,n){let{abortSignal:o,browser:r}=n;if(r.smartWaitingTimeout<3e3){await ht(r.smartWaitingTimeout,o);return}if(!t.description)throw new oe("UserConfigurationError","Cannot locate element with empty description");await ge(Imt(e,t,n),{milliseconds:r.smartWaitingTimeout});}async function Imt(e,t,n){let{logger:o,iframeUrl:r,testContext:i}=t,{abortSignal:s,browser:a,codeEvaluator:l,orgId:c}=n,u=i?await Ls({orgId:c,s:t.description,context:i,codeEvaluator:l,signal:s,logger:o}):t.description,d;for(;Date.now()-e<a.smartWaitingTimeout;){let m=Date.now();if(await Ol({action:async()=>{let g=await xmt(u,t,n,d);return d=g.notReadyScreenshot,g.isReady},frameConfig:r?{type:"url",url:r}:void 0,browser:a,logger:o}))return;let h=Date.now()-m;h<UTe&&await ht(UTe-h,s);}}async function xmt(e,t,n,o){let{logger:r}=t,{browser:i,abortSignal:s,generator:a}=n;s.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(o?.equals(l))return r.debug("Skipping smart waiting AI call, the page is unchanged"),{isReady:false,notReadyScreenshot:o};let u=`data:image/jpeg;base64,${l.toString("base64")}`;s.throwIfAborted();let d=await a.getSmartWaitingDecision({description:e,screenshot:u},{abortSignal:s,loggerTags:fn(r)});return r.debug({result:d},"Got smart waiting result"),{isReady:d.isPageReady,notReadyScreenshot:d.isPageReady?void 0:l}}var _mt=3e4;function Pmt({command:e,originalCache:t,cacheToUse:n,keepMemory:o}){if(n){if(o){let r=qG(t,n);return n.target=r.target,n.updatedAt=r.updatedAt,n}if(!t){let r=Xu(e);r!=="NEGATED_CHECK"&&r!=="NEGATED_ELEMENT_VISIBLE_CHECK"&&(e.cache=void 0);return}return n.target=t.target,n.updatedAt=t.updatedAt,n}}async function GTe(e){return jo().startAsyncSpan("ELEMENT_ASSERTION",async n=>Omt(e,n),{name:"Element check"})}async function Omt(e,t){let{command:n,timeoutMs:o,fixtures:r,disableCache:i}=e,{abortSignal:s}=r,a=()=>c_(n.cache)?n.cache:void 0,l=a(),c=!i&&!!l?.target&&_S(l.target),u=cloneDeep(l),d=(A=false)=>{l=Pmt({command:n,originalCache:u,cacheToUse:a(),keepMemory:A});},m={},p=Date.now(),h=c?Math.max(o/10,_mt):0,g=p,f=0,y,S=500,b=false;for(;f<2||Date.now()-p<o;){f++,f>1&&await ht(S,s),s?.throwIfAborted(),l=a();let A=f===1,R=c&&Date.now()-g>=h;R&&(g=Date.now());let{result:w,elementWasFound:O}=await jTe({cacheToUse:l,skipAISmartWaiting:!A,useAIIfCacheFails:!c||R,pastLocatorMiss:m,params:e});if(y=w,b=b||O,w.success)break;d(),S=Math.min(S*1.25,1e4);}if(!y)throw new oe("InternalPlatformError",`Failed to evaluate manual element assertion in ${o}ms.`);if(s?.throwIfAborted(),!y.success){let A=a(),R=A?.target?.memory?{target:{id:-1,memory:A.target.memory}}:void 0,{result:w,elementWasFound:O}=await jTe({cacheToUse:R,skipAISmartWaiting:true,useAIIfCacheFails:true,params:e});y=w,b=b||O,y.success||d(true);}let v=a();return y.success&&v?.target&&!b&&(v.target=Lh(v.target),v.updatedAt=new Date),t.result={success:y.success,message:y.err?.message},y}async function jTe({cacheToUse:e,skipAISmartWaiting:t,useAIIfCacheFails:n,pastLocatorMiss:o,params:r}){let{command:i,disableCache:s,fixtures:a,tracer:l,targetingWrapper:c}=r,{logger:u}=a;if(i.target&&!Dc(i.target))throw new Error("Element assertion with x/y is not supported yet");let d=Ioe(i.assertion),m=Mmt(i.assertion),p,h=false,g=cloneDeep(e);try{let{elementInteractedDisplayString:f,result:y,thoughts:S}=await c({tracer:l,command:i,target:i.target,cache:g?.target,action:async b=>kmt(b.locator,r),options:{...i,allowNotActionableNodesOverride:m,allowIneligibleTagRedirect:m,showZeroOpacityElementsOverride:!0,disableCache:s,memory:g?.target?.memory,disableGlobalLocatorRedirect:!0,source:Xu(i),skipAISmartWaiting:t,targetName:"target",pastLocatorMiss:o},retriesWithAI:n?1:0});return p={success:y.success,data:y.data,err:y.err,elementInteractedDisplayString:f,thoughts:S},h=!0,y.success||(u.warn({aiThoughts:S,elementString:f,err:y.err},"Element check found an element but failed"),p={...y,thoughts:S}),{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 Mmt(e){return !(e.type==="ELEMENT_EXISTENCE"&&e.condition==="VISIBLE"&&!e.negated)}async function kmt(e,{command:t,fixtures:n}){return await n.browser.highlight(e),await Lmt(e,t.assertion)}async function Lmt(e,t){let n=true,o,r;switch(t.type){case "ELEMENT_CONTENT":{let s=await e.textContent()??"";if(r={elementTextContent:to(s,500,true)},!yR(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=tT(t);n=false,o=new oe("AssertionFailureError",`The content ${a} '${t.value}': ${s}`);}break}case "ELEMENT_ATTRIBUTE":{r={elementOuterHtml:to(await e.evaluate(a=>a.cloneNode(false).outerHTML),500,true)};let s=null;try{s=await e.getAttribute(t.attr,{timeout:3e3});}catch(a){o=new oe("AssertionFailureError",z(a)),n=false;break}if(!yR(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=tT(t);n=false,t.operation==="EXISTS"?o=new oe("AssertionFailureError",`The attribute ${t.attr} ${a}`):o=new oe("AssertionFailureError",`The attribute ${t.attr} ${a} '${t.value}': ${s}`);}break}case "ELEMENT_EXISTENCE":{switch(t.condition){case "VISIBLE":{n=await e.evaluate(async(a,l)=>{let c=Date.now();for(;Date.now()-c<l;){await new Promise(d=>setTimeout(d,250));let u=a.getBoundingClientRect();if(!(u.width===0||u.height===0)&&window.getComputedStyle(a).visibility!=="hidden"&&window.getComputedStyle(a).display!=="none")return true}return false},jl*1e3);break}case "EDITABLE":{n=await e.isEditable({timeout:jl*1e3});break}case "EXISTS":{n=true;break}case "ENABLED":{n=await e.isEnabled({timeout:jl*1e3});break}case "FOCUSED":{n=await e.evaluate(a=>a===document.activeElement);break}default:return (a=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})(t.condition)}if(n=t.negated?!n:n,!n){let s=tT(t);o=new oe("AssertionFailureError",`The element ${s}`);}break}case "ELEMENT_NAME":{let s=await e.evaluate(a=>a.tagName);if(!yR(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:true})){let a=tT(t);n=false,o=new oe("AssertionFailureError",`The element tag name ${a} '${t.value}': ${s}`);}break}case "ELEMENT_STYLE":{let s=await e.evaluate((a,l)=>window.getComputedStyle(a).getPropertyValue(l),t.property);if(!yR(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=tT(t);n=false,t.operation==="EXISTS"?o=new oe("AssertionFailureError",`The style property ${t.property} ${a}`):o=new oe("AssertionFailureError",`The style property ${t.property} ${a} '${t.value}': ${s}`);}break}default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}return {thoughts:void 0,success:n,data:r,err:o}}function zTe(e){return e.type==="ELEMENT_EXISTENCE"&&e.negated&&e.condition==="EXISTS"}async function lI(e,t){let n=await e.screenshot(t),{width:o,height:r}=wD(n);return {buffer:n,width:Math.ceil(o),height:Math.ceil(r)}}async function WTe(e){let{command:t,browser:n,logger:o}=e;if(t.target&&!Dc(t.target))throw new Error("Visual Diff with x/y is not supported yet");return await n.waitForStability({logger:o}),jo().startAsyncSpan("VISUAL_DIFF",async i=>{try{let s=await Dmt(e);return i.result={success:!s.fail,message:s.thoughts},s}catch(s){throw s instanceof oe&&(i.result={success:false,message:s.message}),s}},{name:"Compare against golden"})}async function Dmt({tracer:e,command:t,disableCache:n,browser:o,targetingWrapper:r,logger:i,screenshotStorage:s}){let a={clearHighlights:true,hideCaret:true},l=t.target&&Dc(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=>lI(o,{locator:P.locator,...a}),options:{...t,disableCache:n,disableGlobalLocatorRedirect:true,memory:t.cache?.target?.memory,targetName:"target"}})).result:c=await lI(o,a);let u=await s.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:o.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,S=Math.abs(m.height-h.height),b=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 v={data:Buffer.alloc(c.width*c.height*4),width:c.width,height:c.height},A=t.threshold??.1,w=zut(Dq.decode(u.buffer).data,Dq.decode(c.buffer).data,v.data,c.width,c.height,{threshold:A,diffColorAlt:[0,255,0]})/(c.width*c.height)*100,O=w>A*100,I=`Visual diff of ${w.toFixed(2)}% detected, which is ${O?"over":"under"} the threshold of ${A*100}%.`;if(g&&(I+=` The ${g} screenshot was cropped since it was taller by ${S} pixels and wider by ${b} pixels.`),O)throw new oe("ActionFailureError",I);return {fail:O,thoughts:I,beforeScreenshotOverride:c.buffer,afterScreenshotOverride:Dq.encode(v,75).data,succeedImmediately:false,urlAfterCommand:o.url()}}var Fmt=3e4;function Bmt(e){if(!e.body)return {};switch(e.body.type){case "json":return {content:e.body.content,contentType:"application/json"};case "form-urlencoded":{let t=new URLSearchParams;return Object.entries(e.body.content).forEach(([n,o])=>{t.append(n,o);}),{content:t.toString(),contentType:"application/x-www-form-urlencoded;charset=UTF-8"}}}}async function qTe({command:e,logger:t,baseUrl:n,fetchImplementation:o=fetch}){let r=e.timeout??Fmt/1e3,i=Object.fromEntries(Object.entries(e.headers||{}).filter(([h,g])=>h&&g)),s=new URLSearchParams;Object.entries(e.params||{}).filter(([h,g])=>h&&g).forEach(([h,g])=>{s.append(h,g);});let a=s.toString(),l;if(dT(e.url)&&(l=e.url),n&&mT(e.url,n)&&(l=new URL(e.url,n).toString()),!l)throw new oe("ActionFailureError",`Invalid URL: ${e.url}`);let c=l;t.info({url:c,searchParams:a,headers:i,body:e.body,method:e.method},"Making HTTP request");let d=await ge((async()=>{let h=a?`${c}?${a}`:c;try{let g=Bmt(e),f=new Headers(i);return g.contentType&&!f.has("Content-Type")&&f.set("Content-Type",g.contentType),await o(h,{headers:f,method:e.method,body:g.content})}catch(g){throw new oe("ActionFailureError",`Failed to make HTTP request: ${z(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 Umt=5e3;async function FD({timeout:e=jl,...t}){let n=Date.now(),o=e*1e3,r=o+1e4,i,s=0,a=500;for(;s-n<o;){if(Date.now()-n>r){t.logger.warn("Exceeded max system timeout for page assertion, exiting...");break}t.signal?.throwIfAborted();let l=Date.now();i=await KTe(t),s=Date.now();let c=s-l;if(c>1e3&&t.logger.warn({pageAssertDuration:c},"Page assertion took longer than expected"),!i.success)await ht(a,t.signal),a=Math.min(Math.floor(a*1.5),Umt);else return i}return i=await KTe(t),i}async function KTe(e){return jo().startAsyncSpan("PAGE_ASSERTION",async n=>{let o=await Hmt(e);return n.result={success:o.success,message:o.err?.message},o},{name:"Page check"})}async function Hmt({assertion:e,browser:t,autoExpandIframes:n}){switch(e.type){case "CONTENT":case "CONTENT":{let r,i=false,s;try{let a;if(n){let l=await t.evaluateFunctionInAllFrames(YTe,{value:e.value,negated:!!e.negated,returnHtml:!1});i=e.negated?l.every(c=>c.evaluation):l.some(c=>c.evaluation),a=l.find(c=>c.pageHtml)?.pageHtml;}else ({evaluation:i,pageHtml:a}=await t.evaluateFunctionInPage(YTe,{value:e.value,negated:!!e.negated,returnHtml:!0},"checking page content"));if(!i){let l=e.negated?Fm.CONTAINS:Bm.CONTAINS;s=new oe("AssertionFailureError",`The page ${l} '${e.value}'.`),r=a;}}catch(a){s=new oe("AssertionFailureError",`Failed to evaluate page content assertion: ${a instanceof Error?a.message:`${a}`}`);}return {success:i,err:s,data:i||!r?void 0:{pageContent:r}}}default:return (r=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}}function YTe({value:e,negated:t,returnHtml:n}){let o=document.body.innerHTML,r=o.includes(e)===!t;return o.length>1e4&&(o=o.slice(0,1e4)+"...TRUNCATED"),{evaluation:r,pageHtml:!r&&n?o:void 0}}var jmt=3e4;async function JTe({command:e,logger:t,baseUrl:n,fetchImplementation:o=fetch}){let r=e.timeout??jmt/1e3,i=new AbortController,s=Object.fromEntries(Object.entries(e.headers||{}).filter(([d,m])=>d&&m));s["Content-Type"]="application/json";let a;if(dT(e.url)&&(a=e.url),n&&mT(e.url,n)&&(a=new URL(e.url,n).toString()),!a)throw new oe("ActionFailureError",`Invalid URL: ${e.url}`);let c=await ge((async()=>{try{return await o(a,{headers:s,method:"POST",body:JSON.stringify({query:e.query,variables:e.variables?JSON.parse(e.variables):void 0}),signal:i.signal})}catch(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 WA=class{orgId;options;storage;codeEvaluator;uploadedFileStorage;visualDiffScreenshotStorage;browser;generator;executeAbortController=new AbortController;logger;executionOptionsStack=[];stepSequenceActive=false;recordAbortController=null;registeredListeners={};recordedRequests={};constructor({browser:t,generator:n,logger:o,storage:r,orgId:i,codeEvaluator:s,uploadedFileStorage:a,visualDiffScreenshotStorage:l,options:c}){this.orgId=i,this.options=c,this.browser=t,this.browser.registerAbortSignal(this.executeAbortController.signal),this.storage=r,this.uploadedFileStorage=a,this.visualDiffScreenshotStorage=l,this.codeEvaluator=s,this.generator=n,this.logger=o;}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 n=()=>this.setClosed();return t.addEventListener("abort",n,{once:true}),()=>t.removeEventListener("abort",n)}throwIfClosed(){this.executeAbortController.signal.throwIfAborted();}get closed(){return this.executeAbortController.signal.aborted}async withExecutionOptions(t,n){this.executionOptionsStack.push(t);try{return await n()}finally{this.executionOptionsStack.pop();}}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:n,history:o,disableCache:r,langfuseSessionId:i,lastError:s,logger:a=this.logger}){let[l,c]=await Promise.all([Jd(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:true,skipWaitForPageLoad:true,logger:a}),this.browser.screenshot({retries:1,clearHighlights:true})]),u=`data:image/jpeg;base64,${c.toString("base64")}`,d=await Ml({type:"ai-action",description:t,screenshot:u,serializedTree:l.serializedTree,tree:l.tree,fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:a,orgId:this.orgId}}),m={url:this.browser.url(),browserState:d,startingScreenshot:n,history:o,goal:t,screenshot:u,lastError:s};return await this.generator.getMultiturnAiActionEvaluation(m,{disableCache:r,abortSignal:this.executeAbortController.signal,loggerTags:{...fn(a)},langfuseSessionId:i})}async promptToCommand({goal:t,startingScreenshot:n,history:o,actionHint:r,disableCache:i,logger:s=this.logger,langfuseSessionId:a}){let l=this.browser.url(),[c,u]=await Promise.all([Jd(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:true,skipWaitForPageLoad:true,logger:s}),this.browser.screenshot({retries:1,clearHighlights:true})]),d=`data:image/jpeg;base64,${u.toString("base64")}`,m=await Ml({type:"ai-action",description:t,screenshot:d,serializedTree:c.serializedTree,tree:c.tree,fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:s,orgId:this.orgId}}),p={url:l,browserState:m,startingScreenshot:n,history:o,goal:t,actionHint:r,screenshot:d};try{return await this.generator.getMultiturnAiActionCommand(p,{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:{...fn(s)},langfuseSessionId:a})}catch(h){throw new oe("InternalWebAgentError",`Error generating command: ${h instanceof Error?h.message:h}`,{errOptions:{cause:h}})}}async getBrowserState(t){return Jd(this.browser,t)}async locateElement(t){return await Nq(t,this.getControllerFixtures())}async locateMultipleElements(t){return OTe(t,this.getControllerFixtures())}async locateElementWithSelector(t,n){return Ol({action:async()=>{let o=await this.browser.resolveHardcodedCssSelector({selector:t,timeoutMs:2e3,logger:this.logger});return {thoughts:"Located element with selector",target:{id:-1,selector:t,targetSource:"USER_CSS_SELECTOR",targetUpdateTime:new Date().toUTCString()},resolution:o}},frameConfig:n?{type:"url",url:n}:void 0,browser:this.browser,logger:this.logger})}getControllerFixtures(){return {browser:this.browser,generator:this.generator,logger:this.logger,orgId:this.orgId,storage:this.storage,codeEvaluator:this.codeEvaluator,abortSignal:this.executeAbortController.signal}}shouldUseMemory(){return this.options?.useMemory??true}async wrapMultiElementTargetingCommand({tracer:t,command:n,targetNames:o,descriptions:r,caches:i,action:s,options:a,retriesWithAI:l=1}){let c=[];for(let u=0;u<r.length;u++){let d=r[u],m=await this.wrapElementTargetingCommand({tracer:t,command:n,target:d,cache:i[u],action:async p=>p,options:{...a,targetName:o[u]}});c.push(m);}try{let u=await s(...c.map(p=>p.result)),d=p=>p==="fromTarget"?"From Target":p==="toTarget"?"To Target":"Target",m=c.map((p,h)=>p.thoughts?`${d(o[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:n,targetNames:o,descriptions:r,caches:r.map(()=>{}),action:s,options:a,retriesWithAI:l-1});throw new oe("ActionFailureError",u.message,{errOptions:{cause:u}})}}async wrapHardcodedCssTargetingCommandHelper({target:t,action:n,options:o,command:r}){let i=this.logger.child({commandId:r.id}),{targetName:s}=o;if(t.type!=="description")throw new oe("ActionFailureError","Cannot use selector with non-description target");let a,l=Date.now(),c=Date.now();for(;Date.now()-c<this.browser.smartWaitingTimeout;){l=Date.now();try{let u=await this.browser.resolveHardcodedCssSelector({selector:t.elementDescriptor,targetName:s,logger:i});return {result:await n({locator:u.locator,originalElementLocationResult:void 0,serverSideBoundingBox:null}),elementInteractedDisplayString:u.displayString}}catch(u){if(u.name==="AbortError")throw u;a=u,i.warn({err:u},"Failed to action on hardcoded css selector"),Date.now()-l<500&&await ht(500);}}throw a}async scrollIntoViewAndResolveFinalTarget(t){let{resolutionResult:n,disableGlobalLocatorRedirect:o,logger:r}=t,i=jo(),s=!o&&this.browser.userBrowserSettings.globalLocatorRedirect!==false;(this.browser.userBrowserSettings.visualActions||s)&&await i.startAsyncSpan("SCROLL_ELEMENT_INTO_VIEW",async()=>{await this.browser.scrollIntoViewIfNeeded(n.locator);});let a;return s&&(a=await i.startAsyncSpan("LOCATOR_REDIRECT",async l=>{let{targetingResult:c,metadata:u}=await this.browser.performTargetRedirection(n,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})),a||(a={locator:n.locator,serverSideBoundingBox:await n.locator.boundingBox({timeout:gt}),originalElementLocationResult:n.originalElementLocationResult}),a}async resolveCachedTargetForAction(t){let{cache:n,options:o,logger:r}=t,s=await jo().startAsyncSpan("CACHE_RESOLUTION",async l=>{l.targetSource=n.targetSource,l.attributes.smartWaitingTimeoutMs=this.browser.smartWaitingTimeout;let c={attempts:0,evaluationDurationMs:0};try{let u=await this.browser.resolveTarget(n,{allowNotActionableNodesOverride:o.allowNotActionableNodesOverride,logger:r,signal:this.executeAbortController.signal,...o.resolveTargetOptions,stats:c,acceptElementMovedError:o.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 us&&(l.cacheMissReason=u.cacheMissReason,l.attributes.decisions=u.decisions),u}finally{c.attempts>0&&(l.resolutionAttempts=c.attempts,l.evaluationDurationMs=c.evaluationDurationMs);}}),a=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:s,disableGlobalLocatorRedirect:o.disableGlobalLocatorRedirect,logger:r});return o.force||await s.revalidator?.(),{resolutionResult:s,finalTarget:a}}async wrapElementTargetingCommand(t){return await Ol({action:()=>this.wrapElementTargetingCommandHelper(t),frameConfig:t.options.iframeUrl?{type:"url",url:t.options.iframeUrl}:void 0,browser:this.browser,logger:this.logger})}async wrapElementTargetingCommandHelper(t){let{tracer:n,target:o,action:r,options:i,command:s,finalAttempt:a=false,originalCache:l=t.cache}=t,{retriesWithAI:c=1}=t,{disableCache:u,useSelector:d,targetName:m}=i,p=jo(),h=this.logger.child({commandId:s.id}),g=this.shouldUseMemory(),f=cloneDeep(t.cache);if((!f||u)&&!PJ(o))throw new oe("ActionFailureError","Cannot target element with no cached data or element descriptor");if(d)return this.wrapHardcodedCssTargetingCommandHelper(t);let y=false,S;u&&(h.info("Cache explicitly disabled for this step"),y=true,S="Cache explicitly disabled",f=void 0);let b=RTe({cache:f,description:o.elementDescriptor,disableSecondaryCacheResolution:!!this.browser.userBrowserSettings.disableSecondaryCacheResolution,logger:h});f=b.cache,y=y||b.cacheBustedBeforeAction,!S&&b.cacheBustReason&&(S=b.cacheBustReason);let v=true,A=i.memory??f?.memory;if(!wTe(f))return c--,v=false,this.executeTargetingCommandWithAI({tracer:p,stepTracer:n,target:o,options:{...i,memory:A},command:s,action:r,originalCache:l,logger:h,useMemory:g,cacheBustedBeforeAction:y,cacheBustReason:S});try{let{resolutionResult:R,finalTarget:w}=await this.resolveCachedTargetForAction({cache:f,options:i,logger:h}),O=await r(w);if(dn.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.56.1"]),uM({cmd:s,key:m,newTarget:f,logger:h,updatedWithAI:!1}),v){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;n.recordTargetAutoHeal({healType:_});}}return {result:O,elementInteractedDisplayString:R.displayString}}catch(R){this.throwIfClosed();let w=HU(R);if(w&&!a)return h.warn({err:R},"Encountered error that is retryable with cache"),this.wrapElementTargetingCommandHelper({tracer:n,command:s,target:o,action:r,cache:l,originalCache:l,retriesWithAI:c,finalAttempt:true,options:i});if(R instanceof oe&&!w)throw h.warn({err:R},"Failed to execute command with target (fatal)"),R;if(c>0&&o){h.info({err:R,cacheDecisions:R instanceof us?bTe(R.decisions):void 0},"Failed to execute action with cached target, retrying with AI"),dn.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.56.1",`missReason:${R instanceof us?R.cacheMissReason:"unknown"}`]);let O;f.memory&&a_(f.memory)&&(O=f.memory);let I=R instanceof us&&R.cacheMissReason==="failing-ldist";return this.wrapElementTargetingCommandHelper({tracer:n,command:s,target:o,cache:void 0,action:r,originalCache:l,retriesWithAI:c,finalAttempt:true,options:{...i,memory:O,targetHealingInProgress:true},skipInitialLocateWait:I})}throw new oe("ActionFailureError",`Failed to execute interactive command: ${R instanceof Error?R.message:`${R}`}`,{errOptions:{cause:R}})}}async executeTargetingCommandWithAI(t){let{tracer:n,stepTracer:o,target:r,options:i,command:s,action:a,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 n.startAsyncSpan("SMART_WAITING",async()=>await HTe({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 S=false,b=this.browser.getActiveFrameConfig(),v=i.force||y>1;try{let A;try{A=await Nq({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:v,pastLocatorMiss:i.pastLocatorMiss},this.getControllerFixtures());}catch(O){if(O instanceof af&&O.updatedLocatorMemory){let I={id:-1,...l,memory:O.updatedLocatorMemory};uM({cmd:s,key:i.targetName,newTarget:I,logger:c,updatedWithAI:!0});}throw O}A.frameConfig&&(this.browser.setActiveFrameConfig(A.frameConfig),S=!0);let R=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:A.resolution,disableGlobalLocatorRedirect:i.disableGlobalLocatorRedirect,logger:c}),w=await a(R);return uM({cmd:s,key:i.targetName,newTarget:A.target,logger:c,updatedWithAI:!0}),i.targetHealingInProgress&&(o.recordTargetAutoHeal({healType:"AI"}),A.target.targetSource="AI_HEALED",A.target.targetUpdateTime=new Date().toUTCString(),A.target.targetUpdateLoggerTags=fn(c)),{result:w,elementInteractedDisplayString:A.resolution.displayString,thoughts:A.thoughts}}catch(A){if(S&&this.browser.setActiveFrameConfig(b),this.throwIfClosed(),y<f&&HU(A)){c.warn({err:A,aiAttempt:y},"Encountered retryable AI targeting error; retrying with AI once");continue}throw A instanceof oe?A:new oe("ActionFailureError",A.message)}}throw new oe("ActionFailureError","Failed to execute AI targeting after retry")}async screenshotWithDimensions(t){return lI(this.browser,t)}async executePresetCommand(t,n,o,r,i,s,a){this.options?.slowMoMs&&await ht(this.options.slowMoMs);let l=await this.browser.getOpenPages(),c=this.browser.url(),u;try{u=await this.resolveCommandTemplateStrings(n,o);}catch(d){throw this.throwIfClosed(),new oe("ActionFailureError",`Failed to substitute template strings in command: ${d.message}`,{errOptions:{cause:d}})}try{let d=await de({name:`cli.command.${n.type}`,attributes:{"momentic.command_type":n.type,"momentic.command_id":n.id},fn:()=>this.executePresetCommandHelper(t,n,o,r,i,s,a)});return this.options?.autoFollowNewTabs&&await vTe({beforeUrl:c,command:n,beforePages:l.map(m=>m.url),browser:this.browser,logger:this.logger}),d}catch(d){throw d.name!=="AbortError"&&this.logger.error({err:d},"Error thrown in action controller"),d}finally{yTe(n,u);}}createCallbacksForBrowser(t){return {createIsolatedFolder:()=>sq(t)}}async traceBrowserInteraction(t,n,o){return jo().startAsyncSpan("BROWSER_INTERACTION",async i=>n(i),{name:t,...o})}async resolveCommandTemplateStrings(t,n){return ND({obj:t,context:n,bannedKeys:["type","a11yData","thoughts","cache","code"],orgId:this.orgId,logger:this.logger,signal:this.executeAbortController.signal,codeEvaluator:this.codeEvaluator})}async executePresetCommandHelper(t,n,o,r,i,s,a){r=r||"disableCache"in n&&!!n.disableCache;let l=this.logger.child({commandId:n.id}),c=u=>this.wrapElementTargetingCommand({...u,options:{...u.options,effort:s,onEffectiveEffort:a}});switch(n.type){case "SUCCESS":{let u=n.condition;return u?.assertion.trim()?DD({command:u,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:l,recoveryHint:i,effort:s,onEffectiveEffort:a}):{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AI_ASSERTION":{if(!n.assertion.trim())throw new oe("ActionFailureError","Missing assertion");if(n.timeout&&n.timeout>1800)throw new oe("AssertionFailureError",`AI check timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);return DD({command:n,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:l,recoveryHint:i,effort:s,onEffectiveEffort:a})}case "AI_EXTRACT":return Ol({action:()=>BTe({command:n,logger:l,fixtures:this.getControllerFixtures(),disableCache:r,autoExpandIframes:!!this.browser.userBrowserSettings.autoExpandIframes}),frameConfig:n.iframeUrl?{type:"url",url:n.iframeUrl}:void 0,browser:this.browser,logger:l});case "NAVIGATE":if(!dT(n.url)&&!mT(n.url,this.browser.baseUrl))throw new oe("ActionFailureError",`Invalid URL provided to navigate command: ${n.url}`);await this.traceBrowserInteraction("Navigate",()=>this.browser.navigate({url:n.url,loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0}));break;case "DIALOG":this.browser.registerDialogHandler(n.action);break;case "CAPTCHA":throw new 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(n.target&&Bu(n.target)){let h=ds(n.target.pixels);await this.browser.hoverUsingVisualCoordinates(h);}else if(n.target&&n.target.elementDescriptor.trim()){let{elementInteractedDisplayString:h,thoughts:g}=await c({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:f=>this.browser.hover(f),options:{...n,targetName:"target",disableGlobalLocatorRedirect:true,disableCache:r}});u=h,d=g;}let m=this.browser.getViewport()?.height??qi.height,p=this.browser.getViewport()?.width??qi.width;switch(n.type){case "SCROLL_UP":await this.traceBrowserInteraction("Scroll up",()=>this.browser.scrollVertical(-(n.deltaY??m)));break;case "SCROLL_DOWN":await this.traceBrowserInteraction("Scroll down",()=>this.browser.scrollVertical(n.deltaY??m));break;case "SCROLL_LEFT":await this.traceBrowserInteraction("Scroll left",()=>this.browser.scrollHorizontal(-(n.deltaX??p)));break;case "SCROLL_RIGHT":await this.traceBrowserInteraction("Scroll right",()=>this.browser.scrollHorizontal(n.deltaX??p));break}return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "WAIT_FOR_URL":{if(n.timeout&&n.timeout>1800)throw new oe("UserConfigurationError",`Wait for URL timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);let u=n.matcher;await this.browser.waitForUrl({beforeUrl:this.browser.url(),matcher:u},{timeout:n.timeout?n.timeout*1e3:void 0,negated:n.negated,caseInsensitive:n.caseInsensitive});break}case "WAIT":{if(n.delay>1800)throw new oe("UserConfigurationError",`Wait timeout of ${n.delay} seconds exceeds the maximum allowed value of 30 minutes`);let u=n.delay*1e3;await ht(u,this.executeAbortController.signal);break}case "REFRESH":await this.traceBrowserInteraction("Refresh",()=>this.browser.refresh({loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0}));break;case "CLICK":{if(Bu(n.target)){let g=ds(n.target.pixels),f={...n,relativePosition:n.relativePosition?ds(n.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:n.target,command:n,cache:n.cache?.target,action:g=>this.traceBrowserInteraction("Click",async f=>{let y={...n,relativePosition:n.relativePosition?ds(n.relativePosition):void 0},S=await this.browser.click(g,this.createCallbacksForBrowser(this.orgId),y);return S.coordinates&&(f.coordinates=S.coordinates),S},{selector:g.locator.toString()}),options:{...n,targetName:"target",disableCache:r}}),h={urlAfterCommand:this.browser.url(),succeedImmediately:false,elementInteracted:d,thoughts:p,data:m.downloadedFile?{downloadedFile:m.downloadedFile}:void 0};return wM(u,h.urlAfterCommand)&&(h.succeedImmediately=true,h.succeedImmediatelyReason="URL changed"),h}case "COPY":return await this.browser.copy(n.value),{succeedImmediately:false,data:n.value,urlAfterCommand:this.browser.url()};case "PASTE":{await this.browser.paste();break}case "DRAG":{if(Bu(n.fromTarget)&&Bu(n.toTarget)){let m=ds(n.fromTarget.pixels),p=ds(n.toTarget.pixels);await this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDropUsingVisualCoordinates(m,p,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0}),{coordinates:m});break}if(Bu(n.fromTarget)||Bu(n.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:n,targetNames:["fromTarget","toTarget"],descriptions:[n.fromTarget,n.toTarget],caches:[n.cache?.fromTarget,n.cache?.toTarget],action:(m,p)=>this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDrop(m,p,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0,steps:n.steps})),options:{...n,disableCache:r,effort:s,onEffectiveEffort:a}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u[0],thoughts:d}}case "MOUSE_DRAG":{let u=parseInt(n.deltaX),d=parseInt(n.deltaY),m=n.steps??5;if(isNaN(u)||isNaN(d))throw new oe("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${n.deltaX}, ${n.deltaY})`);if(n.target&&Bu(n.target)){let g=ds(n.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(n.target?.elementDescriptor){let{elementInteractedDisplayString:g,thoughts:f}=await c({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:async y=>this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDrag(u,d,m,y.locator,{force:n.force})),options:{...n,targetName:"target",disableCache:r}});p=g,h=f;}else await this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDrag(u,d,m,void 0,{force:n.force}));return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:p,thoughts:h}}case "SELECT_OPTION":{if(!Dc(n.target))throw new Error("Select with x/y is not supported yet");let u=n.target.elementDescriptor,d=n.choice,{elementInteractedDisplayString:m,thoughts:p}=await c({tracer:t,command:n,target:{type:"description",elementDescriptor:u},cache:n.cache?.target,action:h=>this.traceBrowserInteraction("Select option",()=>this.browser.selectOption(h,d,n.force),{value:d.type==="LABEL"?d.label:d.type==="VALUE"?d.value:d.index}),options:{...n,targetName:"target",disableCache:r,source:Xu(n)}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:p}}case "TAB":{let u=n.timeout===void 0?void 0:n.timeout*1e3,d=n.loadTimeout??n.timeout,m={loadTimeoutMs:d===void 0?void 0:d*1e3,timeoutMs:u,retry:true};await this.browser.switchToPage(n.action,m);break}case "NEW_TAB":await this.browser.createNewTab(n.url,{loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case "CLOSE_TAB":await this.browser.closePage(n.action,{retry:true});break;case "COOKIE":{if(!n.value)break;let u=await this.browser.setCookie(n.value);l.debug({results:u},"Set cookies");break}case "LOCAL_STORAGE":if(!n.value||!n.key)break;await this.browser.setLocalStorage(n.key,n.value);break;case "JAVASCRIPT":{let u;try{n.environment==="BROWSER"?(u=await this.browser.evaluateCodeInPage({code:n.code,fragment:n.fragment??!1,context:o.toObjectCopy(),timeoutMs:n.timeout?n.timeout*1e3:void 0}),l.info({result:u},"Executed JavaScript in browser")):u=await Dg({orgId:this.orgId,code:n.code,fragment:!!n.fragment,context:o,timeoutMs:n.timeout?n.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(n.target&&Bu(n.target)){let f=ds(n.target.pixels),y={...n,relativePosition:n.relativePosition?ds(n.relativePosition):void 0};await this.browser.clickUsingVisualCoordinates(f,y),await this.traceBrowserInteraction("Type",()=>this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay??this.browser.userBrowserSettings.typeDelayMs,pressEnter:n.pressEnter,fill:n.fill},true),{value:n.value});break}let u=this.browser.url(),d,m,p=cloneDeep(n.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:n,target:p,cache:n.cache?.target,action:S=>this.traceBrowserInteraction("Type",()=>this.browser.typeIntoTarget(n.value,S,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay??this.browser.userBrowserSettings.typeDelayMs,pressEnter:n.pressEnter,relativePosition:n.relativePosition,fill:n.fill}),{value:n.value,selector:S.locator.toString()}),options:{...n,targetName:"target",disableCache:r,disableGlobalLocatorRedirect:!h,source:Xu(n)}});d=f,m=y;}else await this.traceBrowserInteraction("Type",()=>this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay??this.browser.userBrowserSettings.typeDelayMs,pressEnter:n.pressEnter,fill:n.fill},true),{value:n.value});let g={urlAfterCommand:this.browser.url(),succeedImmediately:false,elementInteracted:d,thoughts:m};return wM(u,g.urlAfterCommand)&&(g.succeedImmediately=true,g.succeedImmediatelyReason="URL changed"),g}case "HOVER":{if(Bu(n.target)){let m=ds(n.target.pixels);await this.traceBrowserInteraction("Hover",()=>this.browser.hoverUsingVisualCoordinates(m),{coordinates:m});break}let{elementInteractedDisplayString:u,thoughts:d}=await c({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:m=>this.traceBrowserInteraction("Hover",()=>this.browser.hover(m,{relativePosition:n.relativePosition?ds(n.relativePosition):void 0}),{selector:m.locator.toString()}),options:{...n,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "FOCUS":{if(!Dc(n.target))throw new Error("Focus with x/y is not supported yet");let{elementInteractedDisplayString:u,thoughts:d}=await c({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:m=>this.browser.focus(m),options:{...n,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "BLUR":{if(n.target&&!Dc(n.target))throw new Error("Blur with x/y is not supported yet");if(!n.target||!n.target.elementDescriptor)return await this.browser.blur(null),{succeedImmediately:false,urlAfterCommand:this.browser.url()};let{elementInteractedDisplayString:u,thoughts:d}=await c({tracer:t,target:n.target,command:n,cache:n.cache?.target,action:m=>this.browser.blur(m),options:{...n,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(n.value,{repeat:n.repeat,convertMeta:n.convertMeta??true,delayMs:n.delayMs??this.browser.userBrowserSettings.pressDelayMs}),{value:n.value});let d={urlAfterCommand:this.browser.url(),succeedImmediately:false};return wM(u,d.urlAfterCommand)&&(d.succeedImmediately=true,d.succeedImmediatelyReason="URL changed"),d}case "KEY_DOWN":return await this.browser.keyDown(n.value,{convertMeta:n.convertMeta??true}),{urlAfterCommand:this.browser.url(),succeedImmediately:false};case "KEY_UP":return await this.browser.keyUp(n.value,{convertMeta:n.convertMeta??true}),{urlAfterCommand:this.browser.url(),succeedImmediately:false};case "REQUEST":{let u=new CookieJar,d=Gmt(fetch,u),m;try{m=new URL(n.url).hostname;}catch{}let p=await qTe({command:n,baseUrl:this.browser.baseUrl,logger:l,fetchImplementation:d});return {data:bv.parse({...p,cookies:oZ(u,m)}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GRAPHQL_REQUEST":return {data:await JTe({command:n,baseUrl:this.browser.baseUrl,logger:l}),succeedImmediately:false,urlAfterCommand:this.browser.url()};case "VISUAL_DIFF":return WTe({tracer:t,command:n,disableCache:r,browser:this.browser,logger:l,screenshotStorage:this.visualDiffScreenshotStorage,targetingWrapper:c});case "FILE_UPLOAD":{let u,d;if(n.fileSource.type==="URL"?(d=n.fileSource.url,u=await WSe({uri:n.fileSource.url,logger:l,orgId:this.orgId})):n.fileSource.type==="USER_FILE"&&(d=n.fileSource.name,u=await this.uploadedFileStorage?.getFileForUpload(n.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:n.filename});break}case "AUTH_SAVE":{let u=await this.browser.saveAuthState();if(n.storageState&&$h(n.storageState)){let d=mo__default.resolve(n.storageState);oo__default.mkdirSync(mo__default.dirname(d),{recursive:true}),oo__default.writeFileSync(d,`${JSON.stringify(u,null,2)}
|
|
7970
|
+
`):c=await s.getCondensedHtml();let u=await s.screenshot({retries:2,respectActiveFrame:true}),d=jo();try{return await d.startAsyncSpan("AI_EXTRACTION_CALL",async m=>{let p=await a.getTextExtraction({goal:t.goal,browserState:c,returnSchema:t.schema,screenshot:`data:image/jpeg;base64,${u.toString("base64")}`},{disableCache:r,abortSignal:l,loggerTags:fn(n)});if(m.result=p,Rmt({tracer:d,span:m,screenshot:u,htmlState:c,logger:n}),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:s.url()}})}catch(m){let p=z(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 wmt({bannedAttributes:e}){return window._momentic?.getCondensedHtmlTree?.({bannedAttributes:e})?.result??""}function Rmt(e){let{tracer:t,span:n,screenshot:o,htmlState:r,logger:i}=e;if(t.storeTraceAsset)try{let s=randomUUID();t.storeTraceAsset({snapshotId:s,data:o}),n.screenshotSnapshotId=s;let a=randomUUID();t.storeTraceAsset({snapshotId:a,data:Buffer.from(r),extension:"html"}),n.browserStateSnapshotId=a;}catch(s){i.debug({err:s},"Failed to store extraction trace assets");}}var UTe=500;async function HTe(e,t){let{logger:n}=e,{abortSignal:o,browser:r}=t,i=Date.now();try{await Cmt(i,e,t);}catch(s){if(mm(s)||o.aborted)return;n.warn({err:s},"Unexpected error occurred during AI smart waiting");let a=r.smartWaitingTimeout-(Date.now()-i);a>0&&await ht(a,o);}finally{n.debug({durationMs:Date.now()-i},"AI smart waiting complete");}}async function Cmt(e,t,n){let{abortSignal:o,browser:r}=n;if(r.smartWaitingTimeout<3e3){await ht(r.smartWaitingTimeout,o);return}if(!t.description)throw new oe("UserConfigurationError","Cannot locate element with empty description");await ge(Imt(e,t,n),{milliseconds:r.smartWaitingTimeout});}async function Imt(e,t,n){let{logger:o,iframeUrl:r,testContext:i}=t,{abortSignal:s,browser:a,codeEvaluator:l,orgId:c}=n,u=i?await Ls({orgId:c,s:t.description,context:i,codeEvaluator:l,signal:s,logger:o}):t.description,d;for(;Date.now()-e<a.smartWaitingTimeout;){let m=Date.now();if(await Ol({action:async()=>{let g=await xmt(u,t,n,d);return d=g.notReadyScreenshot,g.isReady},frameConfig:r?{type:"url",url:r}:void 0,browser:a,logger:o}))return;let h=Date.now()-m;h<UTe&&await ht(UTe-h,s);}}async function xmt(e,t,n,o){let{logger:r}=t,{browser:i,abortSignal:s,generator:a}=n;s.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(o?.equals(l))return r.debug("Skipping smart waiting AI call, the page is unchanged"),{isReady:false,notReadyScreenshot:o};let u=`data:image/jpeg;base64,${l.toString("base64")}`;s.throwIfAborted();let d=await a.getSmartWaitingDecision({description:e,screenshot:u},{abortSignal:s,loggerTags:fn(r)});return r.debug({result:d},"Got smart waiting result"),{isReady:d.isPageReady,notReadyScreenshot:d.isPageReady?void 0:l}}var _mt=3e4;function Pmt({command:e,originalCache:t,cacheToUse:n,keepMemory:o}){if(n){if(o){let r=qG(t,n);return n.target=r.target,n.updatedAt=r.updatedAt,n}if(!t){let r=Xu(e);r!=="NEGATED_CHECK"&&r!=="NEGATED_ELEMENT_VISIBLE_CHECK"&&(e.cache=void 0);return}return n.target=t.target,n.updatedAt=t.updatedAt,n}}async function GTe(e){return jo().startAsyncSpan("ELEMENT_ASSERTION",async n=>Omt(e,n),{name:"Element check"})}async function Omt(e,t){let{command:n,timeoutMs:o,fixtures:r,disableCache:i}=e,{abortSignal:s}=r,a=()=>c_(n.cache)?n.cache:void 0,l=a(),c=!i&&!!l?.target&&_S(l.target),u=cloneDeep(l),d=(A=false)=>{l=Pmt({command:n,originalCache:u,cacheToUse:a(),keepMemory:A});},m={},p=Date.now(),h=c?Math.max(o/10,_mt):0,g=p,f=0,y,S=500,b=false;for(;f<2||Date.now()-p<o;){f++,f>1&&await ht(S,s),s?.throwIfAborted(),l=a();let A=f===1,R=c&&Date.now()-g>=h;R&&(g=Date.now());let{result:w,elementWasFound:O}=await jTe({cacheToUse:l,skipAISmartWaiting:!A,useAIIfCacheFails:!c||R,pastLocatorMiss:m,params:e});if(y=w,b=b||O,w.success)break;d(),S=Math.min(S*1.25,1e4);}if(!y)throw new oe("InternalPlatformError",`Failed to evaluate manual element assertion in ${o}ms.`);if(s?.throwIfAborted(),!y.success){let A=a(),R=A?.target?.memory?{target:{id:-1,memory:A.target.memory}}:void 0,{result:w,elementWasFound:O}=await jTe({cacheToUse:R,skipAISmartWaiting:true,useAIIfCacheFails:true,params:e});y=w,b=b||O,y.success||d(true);}let v=a();return y.success&&v?.target&&!b&&(v.target=Lh(v.target),v.updatedAt=new Date),t.result={success:y.success,message:y.err?.message},y}async function jTe({cacheToUse:e,skipAISmartWaiting:t,useAIIfCacheFails:n,pastLocatorMiss:o,params:r}){let{command:i,disableCache:s,fixtures:a,tracer:l,targetingWrapper:c}=r,{logger:u}=a;if(i.target&&!Dc(i.target))throw new Error("Element assertion with x/y is not supported yet");let d=Ioe(i.assertion),m=Mmt(i.assertion),p,h=false,g=cloneDeep(e);try{let{elementInteractedDisplayString:f,result:y,thoughts:S}=await c({tracer:l,command:i,target:i.target,cache:g?.target,action:async b=>kmt(b.locator,r),options:{...i,allowNotActionableNodesOverride:m,allowIneligibleTagRedirect:m,showZeroOpacityElementsOverride:!0,disableCache:s,memory:g?.target?.memory,disableGlobalLocatorRedirect:!0,source:Xu(i),skipAISmartWaiting:t,targetName:"target",pastLocatorMiss:o},retriesWithAI:n?1:0});return p={success:y.success,data:y.data,err:y.err,elementInteractedDisplayString:f,thoughts:S},h=!0,y.success||(u.warn({aiThoughts:S,elementString:f,err:y.err},"Element check found an element but failed"),p={...y,thoughts:S}),{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 Mmt(e){return !(e.type==="ELEMENT_EXISTENCE"&&e.condition==="VISIBLE"&&!e.negated)}async function kmt(e,{command:t,fixtures:n}){return await n.browser.highlight(e),await Lmt(e,t.assertion)}async function Lmt(e,t){let n=true,o,r;switch(t.type){case "ELEMENT_CONTENT":{let s=await e.textContent()??"";if(r={elementTextContent:to(s,500,true)},!yR(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=tT(t);n=false,o=new oe("AssertionFailureError",`The content ${a} '${t.value}': ${s}`);}break}case "ELEMENT_ATTRIBUTE":{r={elementOuterHtml:to(await e.evaluate(a=>a.cloneNode(false).outerHTML),500,true)};let s=null;try{s=await e.getAttribute(t.attr,{timeout:3e3});}catch(a){o=new oe("AssertionFailureError",z(a)),n=false;break}if(!yR(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=tT(t);n=false,t.operation==="EXISTS"?o=new oe("AssertionFailureError",`The attribute ${t.attr} ${a}`):o=new oe("AssertionFailureError",`The attribute ${t.attr} ${a} '${t.value}': ${s}`);}break}case "ELEMENT_EXISTENCE":{switch(t.condition){case "VISIBLE":{n=await e.evaluate(async(a,l)=>{let c=Date.now();for(;Date.now()-c<l;){await new Promise(d=>setTimeout(d,250));let u=a.getBoundingClientRect();if(!(u.width===0||u.height===0)&&window.getComputedStyle(a).visibility!=="hidden"&&window.getComputedStyle(a).display!=="none")return true}return false},jl*1e3);break}case "EDITABLE":{n=await e.isEditable({timeout:jl*1e3});break}case "EXISTS":{n=true;break}case "ENABLED":{n=await e.isEnabled({timeout:jl*1e3});break}case "FOCUSED":{n=await e.evaluate(a=>a===document.activeElement);break}default:return (a=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})(t.condition)}if(n=t.negated?!n:n,!n){let s=tT(t);o=new oe("AssertionFailureError",`The element ${s}`);}break}case "ELEMENT_NAME":{let s=await e.evaluate(a=>a.tagName);if(!yR(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:true})){let a=tT(t);n=false,o=new oe("AssertionFailureError",`The element tag name ${a} '${t.value}': ${s}`);}break}case "ELEMENT_STYLE":{let s=await e.evaluate((a,l)=>window.getComputedStyle(a).getPropertyValue(l),t.property);if(!yR(s,t.value,t.operation,{negated:!!t.negated,ignoreCase:false})){let a=tT(t);n=false,t.operation==="EXISTS"?o=new oe("AssertionFailureError",`The style property ${t.property} ${a}`):o=new oe("AssertionFailureError",`The style property ${t.property} ${a} '${t.value}': ${s}`);}break}default:return (s=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}return {thoughts:void 0,success:n,data:r,err:o}}function zTe(e){return e.type==="ELEMENT_EXISTENCE"&&e.negated&&e.condition==="EXISTS"}async function lI(e,t){let n=await e.screenshot(t),{width:o,height:r}=wD(n);return {buffer:n,width:Math.ceil(o),height:Math.ceil(r)}}async function WTe(e){let{command:t,browser:n,logger:o}=e;if(t.target&&!Dc(t.target))throw new Error("Visual Diff with x/y is not supported yet");return await n.waitForStability({logger:o}),jo().startAsyncSpan("VISUAL_DIFF",async i=>{try{let s=await Dmt(e);return i.result={success:!s.fail,message:s.thoughts},s}catch(s){throw s instanceof oe&&(i.result={success:false,message:s.message}),s}},{name:"Compare against golden"})}async function Dmt({tracer:e,command:t,disableCache:n,browser:o,targetingWrapper:r,logger:i,screenshotStorage:s}){let a={clearHighlights:true,hideCaret:true},l=t.target&&Dc(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=>lI(o,{locator:P.locator,...a}),options:{...t,disableCache:n,disableGlobalLocatorRedirect:true,memory:t.cache?.target?.memory,targetName:"target"}})).result:c=await lI(o,a);let u=await s.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:o.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,S=Math.abs(m.height-h.height),b=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 v={data:Buffer.alloc(c.width*c.height*4),width:c.width,height:c.height},A=t.threshold??.1,w=zut(Dq.decode(u.buffer).data,Dq.decode(c.buffer).data,v.data,c.width,c.height,{threshold:A,diffColorAlt:[0,255,0]})/(c.width*c.height)*100,O=w>A*100,I=`Visual diff of ${w.toFixed(2)}% detected, which is ${O?"over":"under"} the threshold of ${A*100}%.`;if(g&&(I+=` The ${g} screenshot was cropped since it was taller by ${S} pixels and wider by ${b} pixels.`),O)throw new oe("ActionFailureError",I);return {fail:O,thoughts:I,beforeScreenshotOverride:c.buffer,afterScreenshotOverride:Dq.encode(v,75).data,succeedImmediately:false,urlAfterCommand:o.url()}}var Fmt=3e4;function Bmt(e){if(!e.body)return {};switch(e.body.type){case "json":return {content:e.body.content,contentType:"application/json"};case "form-urlencoded":{let t=new URLSearchParams;return Object.entries(e.body.content).forEach(([n,o])=>{t.append(n,o);}),{content:t.toString(),contentType:"application/x-www-form-urlencoded;charset=UTF-8"}}}}async function qTe({command:e,logger:t,baseUrl:n,fetchImplementation:o=fetch}){let r=e.timeout??Fmt/1e3,i=Object.fromEntries(Object.entries(e.headers||{}).filter(([h,g])=>h&&g)),s=new URLSearchParams;Object.entries(e.params||{}).filter(([h,g])=>h&&g).forEach(([h,g])=>{s.append(h,g);});let a=s.toString(),l;if(dT(e.url)&&(l=e.url),n&&mT(e.url,n)&&(l=new URL(e.url,n).toString()),!l)throw new oe("ActionFailureError",`Invalid URL: ${e.url}`);let c=l;t.info({url:c,searchParams:a,headers:i,body:e.body,method:e.method},"Making HTTP request");let d=await ge((async()=>{let h=a?`${c}?${a}`:c;try{let g=Bmt(e),f=new Headers(i);return g.contentType&&!f.has("Content-Type")&&f.set("Content-Type",g.contentType),await o(h,{headers:f,method:e.method,body:g.content})}catch(g){throw new oe("ActionFailureError",`Failed to make HTTP request: ${z(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 Umt=5e3;async function FD({timeout:e=jl,...t}){let n=Date.now(),o=e*1e3,r=o+1e4,i,s=0,a=500;for(;s-n<o;){if(Date.now()-n>r){t.logger.warn("Exceeded max system timeout for page assertion, exiting...");break}t.signal?.throwIfAborted();let l=Date.now();i=await KTe(t),s=Date.now();let c=s-l;if(c>1e3&&t.logger.warn({pageAssertDuration:c},"Page assertion took longer than expected"),!i.success)await ht(a,t.signal),a=Math.min(Math.floor(a*1.5),Umt);else return i}return i=await KTe(t),i}async function KTe(e){return jo().startAsyncSpan("PAGE_ASSERTION",async n=>{let o=await Hmt(e);return n.result={success:o.success,message:o.err?.message},o},{name:"Page check"})}async function Hmt({assertion:e,browser:t,autoExpandIframes:n}){switch(e.type){case "CONTENT":case "CONTENT":{let r,i=false,s;try{let a;if(n){let l=await t.evaluateFunctionInAllFrames(YTe,{value:e.value,negated:!!e.negated,returnHtml:!1});i=e.negated?l.every(c=>c.evaluation):l.some(c=>c.evaluation),a=l.find(c=>c.pageHtml)?.pageHtml;}else ({evaluation:i,pageHtml:a}=await t.evaluateFunctionInPage(YTe,{value:e.value,negated:!!e.negated,returnHtml:!0},"checking page content"));if(!i){let l=e.negated?Fm.CONTAINS:Bm.CONTAINS;s=new oe("AssertionFailureError",`The page ${l} '${e.value}'.`),r=a;}}catch(a){s=new oe("AssertionFailureError",`Failed to evaluate page content assertion: ${a instanceof Error?a.message:`${a}`}`);}return {success:i,err:s,data:i||!r?void 0:{pageContent:r}}}default:return (r=>{throw "If Typescript complains about the line below, you missed a case or break in the switch above"})()}}function YTe({value:e,negated:t,returnHtml:n}){let o=document.body.innerHTML,r=o.includes(e)===!t;return o.length>1e4&&(o=o.slice(0,1e4)+"...TRUNCATED"),{evaluation:r,pageHtml:!r&&n?o:void 0}}var jmt=3e4;async function JTe({command:e,logger:t,baseUrl:n,fetchImplementation:o=fetch}){let r=e.timeout??jmt/1e3,i=new AbortController,s=Object.fromEntries(Object.entries(e.headers||{}).filter(([d,m])=>d&&m));s["Content-Type"]="application/json";let a;if(dT(e.url)&&(a=e.url),n&&mT(e.url,n)&&(a=new URL(e.url,n).toString()),!a)throw new oe("ActionFailureError",`Invalid URL: ${e.url}`);let c=await ge((async()=>{try{return await o(a,{headers:s,method:"POST",body:JSON.stringify({query:e.query,variables:e.variables?JSON.parse(e.variables):void 0}),signal:i.signal})}catch(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 WA=class{orgId;options;storage;codeEvaluator;uploadedFileStorage;visualDiffScreenshotStorage;browser;generator;executeAbortController=new AbortController;logger;executionOptionsStack=[];stepSequenceActive=false;recordAbortController=null;registeredListeners={};recordedRequests={};constructor({browser:t,generator:n,logger:o,storage:r,orgId:i,codeEvaluator:s,uploadedFileStorage:a,visualDiffScreenshotStorage:l,options:c}){this.orgId=i,this.options=c,this.browser=t,this.browser.registerAbortSignal(this.executeAbortController.signal),this.storage=r,this.uploadedFileStorage=a,this.visualDiffScreenshotStorage=l,this.codeEvaluator=s,this.generator=n,this.logger=o;}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 n=()=>this.setClosed();return t.addEventListener("abort",n,{once:true}),()=>t.removeEventListener("abort",n)}throwIfClosed(){this.executeAbortController.signal.throwIfAborted();}get closed(){return this.executeAbortController.signal.aborted}async withExecutionOptions(t,n){this.executionOptionsStack.push(t);try{return await n()}finally{this.executionOptionsStack.pop();}}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:n,history:o,disableCache:r,langfuseSessionId:i,lastError:s,logger:a=this.logger}){let[l,c]=await Promise.all([Jd(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:true,skipWaitForPageLoad:true,logger:a}),this.browser.screenshot({retries:1,clearHighlights:true})]),u=`data:image/jpeg;base64,${c.toString("base64")}`,d=await Ml({type:"ai-action",description:t,screenshot:u,serializedTree:l.serializedTree,tree:l.tree,fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:a,orgId:this.orgId}}),m={url:this.browser.url(),browserState:d,startingScreenshot:n,history:o,goal:t,screenshot:u,lastError:s};return await this.generator.getMultiturnAiActionEvaluation(m,{disableCache:r,abortSignal:this.executeAbortController.signal,loggerTags:{...fn(a)},langfuseSessionId:i})}async promptToCommand({goal:t,startingScreenshot:n,history:o,actionHint:r,disableCache:i,logger:s=this.logger,langfuseSessionId:a}){let l=this.browser.url(),[c,u]=await Promise.all([Jd(this.browser,{abortSignal:this.executeAbortController.signal,skipWait:true,skipWaitForPageLoad:true,logger:s}),this.browser.screenshot({retries:1,clearHighlights:true})]),d=`data:image/jpeg;base64,${u.toString("base64")}`,m=await Ml({type:"ai-action",description:t,screenshot:d,serializedTree:c.serializedTree,tree:c.tree,fixtures:{generator:this.generator,signal:this.executeAbortController.signal,logger:s,orgId:this.orgId}}),p={url:l,browserState:m,startingScreenshot:n,history:o,goal:t,actionHint:r,screenshot:d};try{return await this.generator.getMultiturnAiActionCommand(p,{disableCache:i,abortSignal:this.executeAbortController.signal,loggerTags:{...fn(s)},langfuseSessionId:a})}catch(h){throw new oe("InternalWebAgentError",`Error generating command: ${h instanceof Error?h.message:h}`,{errOptions:{cause:h}})}}async getBrowserState(t){return Jd(this.browser,t)}async locateElement(t){return await Nq(t,this.getControllerFixtures())}async locateMultipleElements(t){return OTe(t,this.getControllerFixtures())}async locateElementWithSelector(t,n){return Ol({action:async()=>{let o=await this.browser.resolveHardcodedCssSelector({selector:t,timeoutMs:2e3,logger:this.logger});return {thoughts:"Located element with selector",target:{id:-1,selector:t,targetSource:"USER_CSS_SELECTOR",targetUpdateTime:new Date().toUTCString()},resolution:o}},frameConfig:n?{type:"url",url:n}:void 0,browser:this.browser,logger:this.logger})}getControllerFixtures(){return {browser:this.browser,generator:this.generator,logger:this.logger,orgId:this.orgId,storage:this.storage,codeEvaluator:this.codeEvaluator,abortSignal:this.executeAbortController.signal}}shouldUseMemory(){return this.options?.useMemory??true}async wrapMultiElementTargetingCommand({tracer:t,command:n,targetNames:o,descriptions:r,caches:i,action:s,options:a,retriesWithAI:l=1}){let c=[];for(let u=0;u<r.length;u++){let d=r[u],m=await this.wrapElementTargetingCommand({tracer:t,command:n,target:d,cache:i[u],action:async p=>p,options:{...a,targetName:o[u]}});c.push(m);}try{let u=await s(...c.map(p=>p.result)),d=p=>p==="fromTarget"?"From Target":p==="toTarget"?"To Target":"Target",m=c.map((p,h)=>p.thoughts?`${d(o[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:n,targetNames:o,descriptions:r,caches:r.map(()=>{}),action:s,options:a,retriesWithAI:l-1});throw new oe("ActionFailureError",u.message,{errOptions:{cause:u}})}}async wrapHardcodedCssTargetingCommandHelper({target:t,action:n,options:o,command:r}){let i=this.logger.child({commandId:r.id}),{targetName:s}=o;if(t.type!=="description")throw new oe("ActionFailureError","Cannot use selector with non-description target");let a,l=Date.now(),c=Date.now();for(;Date.now()-c<this.browser.smartWaitingTimeout;){l=Date.now();try{let u=await this.browser.resolveHardcodedCssSelector({selector:t.elementDescriptor,targetName:s,logger:i});return {result:await n({locator:u.locator,originalElementLocationResult:void 0,serverSideBoundingBox:null}),elementInteractedDisplayString:u.displayString}}catch(u){if(u.name==="AbortError")throw u;a=u,i.warn({err:u},"Failed to action on hardcoded css selector"),Date.now()-l<500&&await ht(500);}}throw a}async scrollIntoViewAndResolveFinalTarget(t){let{resolutionResult:n,disableGlobalLocatorRedirect:o,logger:r}=t,i=jo(),s=!o&&this.browser.userBrowserSettings.globalLocatorRedirect!==false;(this.browser.userBrowserSettings.visualActions||s)&&await i.startAsyncSpan("SCROLL_ELEMENT_INTO_VIEW",async()=>{await this.browser.scrollIntoViewIfNeeded(n.locator);});let a;return s&&(a=await i.startAsyncSpan("LOCATOR_REDIRECT",async l=>{let{targetingResult:c,metadata:u}=await this.browser.performTargetRedirection(n,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})),a||(a={locator:n.locator,serverSideBoundingBox:await n.locator.boundingBox({timeout:gt}),originalElementLocationResult:n.originalElementLocationResult}),a}async resolveCachedTargetForAction(t){let{cache:n,options:o,logger:r}=t,s=await jo().startAsyncSpan("CACHE_RESOLUTION",async l=>{l.targetSource=n.targetSource,l.attributes.smartWaitingTimeoutMs=this.browser.smartWaitingTimeout;let c={attempts:0,evaluationDurationMs:0};try{let u=await this.browser.resolveTarget(n,{allowNotActionableNodesOverride:o.allowNotActionableNodesOverride,logger:r,signal:this.executeAbortController.signal,...o.resolveTargetOptions,stats:c,acceptElementMovedError:o.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 us&&(l.cacheMissReason=u.cacheMissReason,l.attributes.decisions=u.decisions),u}finally{c.attempts>0&&(l.resolutionAttempts=c.attempts,l.evaluationDurationMs=c.evaluationDurationMs);}}),a=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:s,disableGlobalLocatorRedirect:o.disableGlobalLocatorRedirect,logger:r});return o.force||await s.revalidator?.(),{resolutionResult:s,finalTarget:a}}async wrapElementTargetingCommand(t){return await Ol({action:()=>this.wrapElementTargetingCommandHelper(t),frameConfig:t.options.iframeUrl?{type:"url",url:t.options.iframeUrl}:void 0,browser:this.browser,logger:this.logger})}async wrapElementTargetingCommandHelper(t){let{tracer:n,target:o,action:r,options:i,command:s,finalAttempt:a=false,originalCache:l=t.cache}=t,{retriesWithAI:c=1}=t,{disableCache:u,useSelector:d,targetName:m}=i,p=jo(),h=this.logger.child({commandId:s.id}),g=this.shouldUseMemory(),f=cloneDeep(t.cache);if((!f||u)&&!PJ(o))throw new oe("ActionFailureError","Cannot target element with no cached data or element descriptor");if(d)return this.wrapHardcodedCssTargetingCommandHelper(t);let y=false,S;u&&(h.info("Cache explicitly disabled for this step"),y=true,S="Cache explicitly disabled",f=void 0);let b=RTe({cache:f,description:o.elementDescriptor,disableSecondaryCacheResolution:!!this.browser.userBrowserSettings.disableSecondaryCacheResolution,logger:h});f=b.cache,y=y||b.cacheBustedBeforeAction,!S&&b.cacheBustReason&&(S=b.cacheBustReason);let v=true,A=i.memory??f?.memory;if(!wTe(f))return c--,v=false,this.executeTargetingCommandWithAI({tracer:p,stepTracer:n,target:o,options:{...i,memory:A},command:s,action:r,originalCache:l,logger:h,useMemory:g,cacheBustedBeforeAction:y,cacheBustReason:S});try{let{resolutionResult:R,finalTarget:w}=await this.resolveCachedTargetForAction({cache:f,options:i,logger:h}),O=await r(w);if(dn.increment("cache_target_resolution_v2",1,["outcome:hit","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.56.2"]),uM({cmd:s,key:m,newTarget:f,logger:h,updatedWithAI:!1}),v){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;n.recordTargetAutoHeal({healType:_});}}return {result:O,elementInteractedDisplayString:R.displayString}}catch(R){this.throwIfClosed();let w=HU(R);if(w&&!a)return h.warn({err:R},"Encountered error that is retryable with cache"),this.wrapElementTargetingCommandHelper({tracer:n,command:s,target:o,action:r,cache:l,originalCache:l,retriesWithAI:c,finalAttempt:true,options:i});if(R instanceof oe&&!w)throw h.warn({err:R},"Failed to execute command with target (fatal)"),R;if(c>0&&o){h.info({err:R,cacheDecisions:R instanceof us?bTe(R.decisions):void 0},"Failed to execute action with cached target, retrying with AI"),dn.increment("cache_target_resolution_v2",1,["outcome:miss","platform:web",`hasRequirements:${!!f.requirements}`,`hasAdditionalElements:${!!f.additionalElements}`,`orgId:${this.orgId}`,"cliVersion:3.56.2",`missReason:${R instanceof us?R.cacheMissReason:"unknown"}`]);let O;f.memory&&a_(f.memory)&&(O=f.memory);let I=R instanceof us&&R.cacheMissReason==="failing-ldist";return this.wrapElementTargetingCommandHelper({tracer:n,command:s,target:o,cache:void 0,action:r,originalCache:l,retriesWithAI:c,finalAttempt:true,options:{...i,memory:O,targetHealingInProgress:true},skipInitialLocateWait:I})}throw new oe("ActionFailureError",`Failed to execute interactive command: ${R instanceof Error?R.message:`${R}`}`,{errOptions:{cause:R}})}}async executeTargetingCommandWithAI(t){let{tracer:n,stepTracer:o,target:r,options:i,command:s,action:a,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 n.startAsyncSpan("SMART_WAITING",async()=>await HTe({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 S=false,b=this.browser.getActiveFrameConfig(),v=i.force||y>1;try{let A;try{A=await Nq({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:v,pastLocatorMiss:i.pastLocatorMiss},this.getControllerFixtures());}catch(O){if(O instanceof af&&O.updatedLocatorMemory){let I={id:-1,...l,memory:O.updatedLocatorMemory};uM({cmd:s,key:i.targetName,newTarget:I,logger:c,updatedWithAI:!0});}throw O}A.frameConfig&&(this.browser.setActiveFrameConfig(A.frameConfig),S=!0);let R=await this.scrollIntoViewAndResolveFinalTarget({resolutionResult:A.resolution,disableGlobalLocatorRedirect:i.disableGlobalLocatorRedirect,logger:c}),w=await a(R);return uM({cmd:s,key:i.targetName,newTarget:A.target,logger:c,updatedWithAI:!0}),i.targetHealingInProgress&&(o.recordTargetAutoHeal({healType:"AI"}),A.target.targetSource="AI_HEALED",A.target.targetUpdateTime=new Date().toUTCString(),A.target.targetUpdateLoggerTags=fn(c)),{result:w,elementInteractedDisplayString:A.resolution.displayString,thoughts:A.thoughts}}catch(A){if(S&&this.browser.setActiveFrameConfig(b),this.throwIfClosed(),y<f&&HU(A)){c.warn({err:A,aiAttempt:y},"Encountered retryable AI targeting error; retrying with AI once");continue}throw A instanceof oe?A:new oe("ActionFailureError",A.message)}}throw new oe("ActionFailureError","Failed to execute AI targeting after retry")}async screenshotWithDimensions(t){return lI(this.browser,t)}async executePresetCommand(t,n,o,r,i,s,a){this.options?.slowMoMs&&await ht(this.options.slowMoMs);let l=await this.browser.getOpenPages(),c=this.browser.url(),u;try{u=await this.resolveCommandTemplateStrings(n,o);}catch(d){throw this.throwIfClosed(),new oe("ActionFailureError",`Failed to substitute template strings in command: ${d.message}`,{errOptions:{cause:d}})}try{let d=await de({name:`cli.command.${n.type}`,attributes:{"momentic.command_type":n.type,"momentic.command_id":n.id},fn:()=>this.executePresetCommandHelper(t,n,o,r,i,s,a)});return this.options?.autoFollowNewTabs&&await vTe({beforeUrl:c,command:n,beforePages:l.map(m=>m.url),browser:this.browser,logger:this.logger}),d}catch(d){throw d.name!=="AbortError"&&this.logger.error({err:d},"Error thrown in action controller"),d}finally{yTe(n,u);}}createCallbacksForBrowser(t){return {createIsolatedFolder:()=>sq(t)}}async traceBrowserInteraction(t,n,o){return jo().startAsyncSpan("BROWSER_INTERACTION",async i=>n(i),{name:t,...o})}async resolveCommandTemplateStrings(t,n){return ND({obj:t,context:n,bannedKeys:["type","a11yData","thoughts","cache","code"],orgId:this.orgId,logger:this.logger,signal:this.executeAbortController.signal,codeEvaluator:this.codeEvaluator})}async executePresetCommandHelper(t,n,o,r,i,s,a){r=r||"disableCache"in n&&!!n.disableCache;let l=this.logger.child({commandId:n.id}),c=u=>this.wrapElementTargetingCommand({...u,options:{...u.options,effort:s,onEffectiveEffort:a}});switch(n.type){case "SUCCESS":{let u=n.condition;return u?.assertion.trim()?DD({command:u,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:l,recoveryHint:i,effort:s,onEffectiveEffort:a}):{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AI_ASSERTION":{if(!n.assertion.trim())throw new oe("ActionFailureError","Missing assertion");if(n.timeout&&n.timeout>1800)throw new oe("AssertionFailureError",`AI check timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);return DD({command:n,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),logger:l,recoveryHint:i,effort:s,onEffectiveEffort:a})}case "AI_EXTRACT":return Ol({action:()=>BTe({command:n,logger:l,fixtures:this.getControllerFixtures(),disableCache:r,autoExpandIframes:!!this.browser.userBrowserSettings.autoExpandIframes}),frameConfig:n.iframeUrl?{type:"url",url:n.iframeUrl}:void 0,browser:this.browser,logger:l});case "NAVIGATE":if(!dT(n.url)&&!mT(n.url,this.browser.baseUrl))throw new oe("ActionFailureError",`Invalid URL provided to navigate command: ${n.url}`);await this.traceBrowserInteraction("Navigate",()=>this.browser.navigate({url:n.url,loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0}));break;case "DIALOG":this.browser.registerDialogHandler(n.action);break;case "CAPTCHA":throw new 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(n.target&&Bu(n.target)){let h=ds(n.target.pixels);await this.browser.hoverUsingVisualCoordinates(h);}else if(n.target&&n.target.elementDescriptor.trim()){let{elementInteractedDisplayString:h,thoughts:g}=await c({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:f=>this.browser.hover(f),options:{...n,targetName:"target",disableGlobalLocatorRedirect:true,disableCache:r}});u=h,d=g;}let m=this.browser.getViewport()?.height??qi.height,p=this.browser.getViewport()?.width??qi.width;switch(n.type){case "SCROLL_UP":await this.traceBrowserInteraction("Scroll up",()=>this.browser.scrollVertical(-(n.deltaY??m)));break;case "SCROLL_DOWN":await this.traceBrowserInteraction("Scroll down",()=>this.browser.scrollVertical(n.deltaY??m));break;case "SCROLL_LEFT":await this.traceBrowserInteraction("Scroll left",()=>this.browser.scrollHorizontal(-(n.deltaX??p)));break;case "SCROLL_RIGHT":await this.traceBrowserInteraction("Scroll right",()=>this.browser.scrollHorizontal(n.deltaX??p));break}return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "WAIT_FOR_URL":{if(n.timeout&&n.timeout>1800)throw new oe("UserConfigurationError",`Wait for URL timeout of ${n.timeout} exceeds the maximum allowed value of 30 minutes.`);let u=n.matcher;await this.browser.waitForUrl({beforeUrl:this.browser.url(),matcher:u},{timeout:n.timeout?n.timeout*1e3:void 0,negated:n.negated,caseInsensitive:n.caseInsensitive});break}case "WAIT":{if(n.delay>1800)throw new oe("UserConfigurationError",`Wait timeout of ${n.delay} seconds exceeds the maximum allowed value of 30 minutes`);let u=n.delay*1e3;await ht(u,this.executeAbortController.signal);break}case "REFRESH":await this.traceBrowserInteraction("Refresh",()=>this.browser.refresh({loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0}));break;case "CLICK":{if(Bu(n.target)){let g=ds(n.target.pixels),f={...n,relativePosition:n.relativePosition?ds(n.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:n.target,command:n,cache:n.cache?.target,action:g=>this.traceBrowserInteraction("Click",async f=>{let y={...n,relativePosition:n.relativePosition?ds(n.relativePosition):void 0},S=await this.browser.click(g,this.createCallbacksForBrowser(this.orgId),y);return S.coordinates&&(f.coordinates=S.coordinates),S},{selector:g.locator.toString()}),options:{...n,targetName:"target",disableCache:r}}),h={urlAfterCommand:this.browser.url(),succeedImmediately:false,elementInteracted:d,thoughts:p,data:m.downloadedFile?{downloadedFile:m.downloadedFile}:void 0};return wM(u,h.urlAfterCommand)&&(h.succeedImmediately=true,h.succeedImmediatelyReason="URL changed"),h}case "COPY":return await this.browser.copy(n.value),{succeedImmediately:false,data:n.value,urlAfterCommand:this.browser.url()};case "PASTE":{await this.browser.paste();break}case "DRAG":{if(Bu(n.fromTarget)&&Bu(n.toTarget)){let m=ds(n.fromTarget.pixels),p=ds(n.toTarget.pixels);await this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDropUsingVisualCoordinates(m,p,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0}),{coordinates:m});break}if(Bu(n.fromTarget)||Bu(n.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:n,targetNames:["fromTarget","toTarget"],descriptions:[n.fromTarget,n.toTarget],caches:[n.cache?.fromTarget,n.cache?.toTarget],action:(m,p)=>this.traceBrowserInteraction("Drag",()=>this.browser.dragAndDrop(m,p,{hoverDurationMs:n.hoverSeconds?n.hoverSeconds*1e3:void 0,steps:n.steps})),options:{...n,disableCache:r,effort:s,onEffectiveEffort:a}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u[0],thoughts:d}}case "MOUSE_DRAG":{let u=parseInt(n.deltaX),d=parseInt(n.deltaY),m=n.steps??5;if(isNaN(u)||isNaN(d))throw new oe("ActionFailureError",`Invalid pixel values passed to mouse drag command: (${n.deltaX}, ${n.deltaY})`);if(n.target&&Bu(n.target)){let g=ds(n.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(n.target?.elementDescriptor){let{elementInteractedDisplayString:g,thoughts:f}=await c({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:async y=>this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDrag(u,d,m,y.locator,{force:n.force})),options:{...n,targetName:"target",disableCache:r}});p=g,h=f;}else await this.traceBrowserInteraction("Mouse drag",()=>this.browser.mouseDrag(u,d,m,void 0,{force:n.force}));return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:p,thoughts:h}}case "SELECT_OPTION":{if(!Dc(n.target))throw new Error("Select with x/y is not supported yet");let u=n.target.elementDescriptor,d=n.choice,{elementInteractedDisplayString:m,thoughts:p}=await c({tracer:t,command:n,target:{type:"description",elementDescriptor:u},cache:n.cache?.target,action:h=>this.traceBrowserInteraction("Select option",()=>this.browser.selectOption(h,d,n.force),{value:d.type==="LABEL"?d.label:d.type==="VALUE"?d.value:d.index}),options:{...n,targetName:"target",disableCache:r,source:Xu(n)}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:m,thoughts:p}}case "TAB":{let u=n.timeout===void 0?void 0:n.timeout*1e3,d=n.loadTimeout??n.timeout,m={loadTimeoutMs:d===void 0?void 0:d*1e3,timeoutMs:u,retry:true};await this.browser.switchToPage(n.action,m);break}case "NEW_TAB":await this.browser.createNewTab(n.url,{loadTimeoutMs:n.loadTimeout?n.loadTimeout*1e3:void 0});break;case "CLOSE_TAB":await this.browser.closePage(n.action,{retry:true});break;case "COOKIE":{if(!n.value)break;let u=await this.browser.setCookie(n.value);l.debug({results:u},"Set cookies");break}case "LOCAL_STORAGE":if(!n.value||!n.key)break;await this.browser.setLocalStorage(n.key,n.value);break;case "JAVASCRIPT":{let u;try{n.environment==="BROWSER"?(u=await this.browser.evaluateCodeInPage({code:n.code,fragment:n.fragment??!1,context:o.toObjectCopy(),timeoutMs:n.timeout?n.timeout*1e3:void 0}),l.info({result:u},"Executed JavaScript in browser")):u=await Dg({orgId:this.orgId,code:n.code,fragment:!!n.fragment,context:o,timeoutMs:n.timeout?n.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(n.target&&Bu(n.target)){let f=ds(n.target.pixels),y={...n,relativePosition:n.relativePosition?ds(n.relativePosition):void 0};await this.browser.clickUsingVisualCoordinates(f,y),await this.traceBrowserInteraction("Type",()=>this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay??this.browser.userBrowserSettings.typeDelayMs,pressEnter:n.pressEnter,fill:n.fill},true),{value:n.value});break}let u=this.browser.url(),d,m,p=cloneDeep(n.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:n,target:p,cache:n.cache?.target,action:S=>this.traceBrowserInteraction("Type",()=>this.browser.typeIntoTarget(n.value,S,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay??this.browser.userBrowserSettings.typeDelayMs,pressEnter:n.pressEnter,relativePosition:n.relativePosition,fill:n.fill}),{value:n.value,selector:S.locator.toString()}),options:{...n,targetName:"target",disableCache:r,disableGlobalLocatorRedirect:!h,source:Xu(n)}});d=f,m=y;}else await this.traceBrowserInteraction("Type",()=>this.browser.type(n.value,{force:n.force,clearContent:n.clearContent,forceClearContent:n.forceClearContent,delay:n.delay??this.browser.userBrowserSettings.typeDelayMs,pressEnter:n.pressEnter,fill:n.fill},true),{value:n.value});let g={urlAfterCommand:this.browser.url(),succeedImmediately:false,elementInteracted:d,thoughts:m};return wM(u,g.urlAfterCommand)&&(g.succeedImmediately=true,g.succeedImmediatelyReason="URL changed"),g}case "HOVER":{if(Bu(n.target)){let m=ds(n.target.pixels);await this.traceBrowserInteraction("Hover",()=>this.browser.hoverUsingVisualCoordinates(m),{coordinates:m});break}let{elementInteractedDisplayString:u,thoughts:d}=await c({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:m=>this.traceBrowserInteraction("Hover",()=>this.browser.hover(m,{relativePosition:n.relativePosition?ds(n.relativePosition):void 0}),{selector:m.locator.toString()}),options:{...n,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "FOCUS":{if(!Dc(n.target))throw new Error("Focus with x/y is not supported yet");let{elementInteractedDisplayString:u,thoughts:d}=await c({tracer:t,command:n,target:n.target,cache:n.cache?.target,action:m=>this.browser.focus(m),options:{...n,targetName:"target",disableCache:r}});return {succeedImmediately:false,urlAfterCommand:this.browser.url(),elementInteracted:u,thoughts:d}}case "BLUR":{if(n.target&&!Dc(n.target))throw new Error("Blur with x/y is not supported yet");if(!n.target||!n.target.elementDescriptor)return await this.browser.blur(null),{succeedImmediately:false,urlAfterCommand:this.browser.url()};let{elementInteractedDisplayString:u,thoughts:d}=await c({tracer:t,target:n.target,command:n,cache:n.cache?.target,action:m=>this.browser.blur(m),options:{...n,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(n.value,{repeat:n.repeat,convertMeta:n.convertMeta??true,delayMs:n.delayMs??this.browser.userBrowserSettings.pressDelayMs}),{value:n.value});let d={urlAfterCommand:this.browser.url(),succeedImmediately:false};return wM(u,d.urlAfterCommand)&&(d.succeedImmediately=true,d.succeedImmediatelyReason="URL changed"),d}case "KEY_DOWN":return await this.browser.keyDown(n.value,{convertMeta:n.convertMeta??true}),{urlAfterCommand:this.browser.url(),succeedImmediately:false};case "KEY_UP":return await this.browser.keyUp(n.value,{convertMeta:n.convertMeta??true}),{urlAfterCommand:this.browser.url(),succeedImmediately:false};case "REQUEST":{let u=new CookieJar,d=Gmt(fetch,u),m;try{m=new URL(n.url).hostname;}catch{}let p=await qTe({command:n,baseUrl:this.browser.baseUrl,logger:l,fetchImplementation:d});return {data:bv.parse({...p,cookies:oZ(u,m)}),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GRAPHQL_REQUEST":return {data:await JTe({command:n,baseUrl:this.browser.baseUrl,logger:l}),succeedImmediately:false,urlAfterCommand:this.browser.url()};case "VISUAL_DIFF":return WTe({tracer:t,command:n,disableCache:r,browser:this.browser,logger:l,screenshotStorage:this.visualDiffScreenshotStorage,targetingWrapper:c});case "FILE_UPLOAD":{let u,d;if(n.fileSource.type==="URL"?(d=n.fileSource.url,u=await WSe({uri:n.fileSource.url,logger:l,orgId:this.orgId})):n.fileSource.type==="USER_FILE"&&(d=n.fileSource.name,u=await this.uploadedFileStorage?.getFileForUpload(n.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:n.filename});break}case "AUTH_SAVE":{let u=await this.browser.saveAuthState();if(n.storageState&&$h(n.storageState)){let d=mo__default.resolve(n.storageState);oo__default.mkdirSync(mo__default.dirname(d),{recursive:true}),oo__default.writeFileSync(d,`${JSON.stringify(u,null,2)}
|
|
7971
7971
|
`,"utf8");}return {data:u,succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "AUTH_LOAD":{let u;if($h(n.storageState))try{u=JSON.parse(oo__default.readFileSync(mo__default.resolve(n.storageState),"utf8"));}catch(m){throw new oe("UserConfigurationError",`Failed to read auth state from '${n.storageState}': ${z(m)}`,{errOptions:{cause:m}})}else if(!n.storageState.trim())u=void 0;else if(u=await Dg({orgId:this.orgId,code:n.storageState,fragment:false,context:o,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=AP.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=(n.timeout??this.browser.userBrowserSettings.elementCheckTimeoutSeconds??jl)*1e3,d=this.generator.getAgentConfig()?.assertion;if(zTe(n.assertion)&&!n.useSelector&&n.target.type==="description"&&d&&d!=="v1"){let p={id:n.id,type:"AI_ASSERTION",assertion:`There is no element on the page closely matches the following description. If the description has single quotes, remember that requires an exact text substring match. Description: ${n.target.elementDescriptor}`,iframeUrl:n.iframeUrl,timeout:n.timeout??this.browser.userBrowserSettings.elementCheckTimeoutSeconds,source:"NEGATED_CHECK",cache:n.cache&&"memory"in n.cache?{memory:n.cache?.memory}:void 0};try{let h=await DD({command:p,logger:l,fixtures:this.getControllerFixtures(),useMemory:this.shouldUseMemory(),effort:s,onEffectiveEffort:a});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&&AR(n,p.cache?.memory.traces,l);}}let m=await GTe({command:n,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 Ol({action:async()=>FD({assertion:n.assertion,browser:this.browser,logger:l,timeout:n.timeout,signal:this.executeAbortController.signal,autoExpandIframes:!!this.browser.userBrowserSettings.autoExpandIframes}),frameConfig:n.iframeUrl?{type:"url",url:n.iframeUrl}:void 0,browser:this.browser,logger:l});return {fail:!u.success,data:u.data,thoughts:u.success?"Page assertion passed.":u.err?.message??`Page assertion still failing after ${n.timeout} seconds.`,urlAfterCommand:this.browser.url(),succeedImmediately:false}}case "REGISTER_REQUEST_LISTENER":{let u=new Og(n.requestMatcher),d=this.browser.registerRequestListener(u);return this.registeredListeners[n.key]=d.then(async m=>await mq(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[n.key];if(!u)throw new oe("ActionFailureError",`No listener registered with key: ${n.key}`);let d=n.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 Og(n.requestMatcher);return this.recordedRequests[n.key]={},await this.browser.registerRequestRecorder(n.key,{matches:d=>u.matches({url:d.request.url,method:d.request.method}),onRequestStart:(d,m)=>{this.recordedRequests[n.key][d]=bD(m);},onRequestComplete:(d,m)=>{this.recordedRequests[n.key]?.[d]&&(this.recordedRequests[n.key][d]=bD(m));}}),{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "GET_RECORDED_REQUESTS":{let u=this.recordedRequests[n.key];if(!u)throw new oe("ActionFailureError",`No recorder registered with key: ${n.key}`);return this.browser.removeRequestRecorder(n.key),delete this.recordedRequests[n.key],{data:Object.values(u),succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "SET_HEADER":{let u;return n.requestMatcher&&(u=new Og(n.requestMatcher)),await this.browser.setHeader(n.name,n.value,u),{succeedImmediately:false,urlAfterCommand:this.browser.url()}}case "MOCK_ROUTE":return {data:{key:await this.browser.registerMock(n.key,new Og(n.requestMatcher),async(d,m)=>{let p=await Dg({orgId:this.orgId,code:n.responseGenerator,fragment:false,context:o,timeoutMs:void 0,logger:l,codeEvaluator:this.codeEvaluator,mock:{request:d,response:m},disallowVariableUpdates:true,responseSerialization:"RESPONSE"}),h=_Z.parse(p);return new Response(h.body,{status:h.status,headers:h.headers})},n.fetchOriginalResponse??false)},succeedImmediately:false,urlAfterCommand:this.browser.url()};case "REMOVE_ROUTE_MOCK":return this.browser.removeMock(n.key),{succeedImmediately:false,urlAfterCommand:this.browser.url()};case "OFFLINE_MODE":return await this.browser.setOfflineMode(n.enable),{succeedImmediately:false,urlAfterCommand:this.browser.url()};default:return (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:n,disableCache:o,screenshot:r}){return (await this.generator.getReverseMappedDescription({browserState:t,target:n,screenshot:r},{disableCache:o,abortSignal:this.executeAbortController.signal,loggerTags:fn(this.logger)})).phrase}async stopRecordMode(){this.recordAbortController?.abort(),await this.browser.clearAllCdpHighlights();}async startRecordMode({params:t,abortController:n,isClickToRecord:o}){this.recordAbortController=n;let r=new ID({signal:n.signal,...t});return await this.browser.startRecording(this.recordAbortController.signal,r,o),r}async runSectionAutohealing(t){return this.generator.getAutohealingProposal(t,{disableCache:true,abortSignal:this.executeAbortController.signal,loggerTags:fn(this.logger)})}async getFailureRecoveryPlan(t,n){return this.generator.getFailureRecoveryPlan(t,{disableCache:true,abortSignal:this.executeAbortController.signal,loggerTags:fn(n??this.logger)})}};var UD=class{constructor(t){this.logger=t;this.directory=oo__default.mkdtempSync(mo__default.join(Nm.tmpdir(),"momentic-explore-network-")),this.entriesFilePath=mo__default.join(this.directory,"har-entries.log"),this.pagesStream=oo__default.createWriteStream(mo__default.join(this.directory,"har-pages.log")),this.entriesStream=oo__default.createWriteStream(this.entriesFilePath);for(let n of [this.pagesStream,this.entriesStream])n.on("error",o=>{this.logger.warn({err:o,directory:this.directory},"Explore network log stream failed");});this.writer=new $y(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([QTe(this.entriesStream),QTe(this.pagesStream)]);this.writer.close(),await t;}remove(){try{oo__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 QTe(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.",ZTe=30,Hq=40,eAe=4e3,qmt=2e4,Kmt=`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 ${zs} 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.`,Ymt=`Inspect a single network request in full (headers and, optionally, request/response bodies) by the index returned from ${ys}. Bodies are already size-limited by the recorder and are further truncated here; raise maxBodyChars to see more.`,Jmt=z$1.object({...eI,sinceSecondsAgo:z$1.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$1.int().min(1).max(ZC).optional().default(ZTe).describe(`Maximum number of requests to return (newest first). Defaults to ${ZTe}.`),beforeIndex:z$1.int().min(0).optional().describe("Optional: only include requests with an index below this value, to page further back in time.")}),Xmt=z$1.object({index:z$1.int().min(0).describe(`The index of a request as returned by ${ys}.`),includeRequestBody:z$1.boolean().optional().default(false).describe("Include the request body (if any). Defaults to false."),includeResponseBody:z$1.boolean().optional().default(true).describe("Include the response body (if any). Defaults to true."),maxBodyChars:z$1.int().min(1).max(qmt).optional().default(eAe).describe(`Maximum characters of each included body to return. Defaults to ${eAe}.`)}),iAe=e=>{if(!aAe(e))return;let t=tool({description:Kmt,inputSchema:Jmt,toModelOutput:({output:n})=>n,execute:async n=>{let o;try{o={...iD({input:n}),sinceMs:n.sinceSecondsAgo!==void 0?Date.now()-n.sinceSecondsAgo*1e3:void 0};}catch(s){return Y(L({text:`Invalid urlRegex "${n.urlRegex}": ${z(s)}. Provide a valid JavaScript regular expression and try again.`,section:"Network requests"}))}let r=await lAe(e);if(!r)return Y(L({text:rAe,section:"Network requests"}));let i=await Vye({...r,filter:o,limit:n.limit,beforeIndex:n.beforeIndex});return Y(L({text:Qmt(i.summaries,{totalEntries:i.totalEntries,totalMatched:i.totalMatched,hasMoreOlder:i.hasMoreOlder}),section:"Network requests"}))}});return {name:ys,tool:t}},sAe=e=>{if(!aAe(e))return;let t=tool({description:Ymt,inputSchema:Xmt,toModelOutput:({output:n})=>n,execute:async n=>{let o=await lAe(e);if(!o)return Y(L({text:rAe,section:"Network request detail"}));let r=await Wye({...o,index:n.index}),i=r?Zmt(r,n):`No network request found at index ${n.index}. It may not have completed yet, or the index is out of range \u2014 search again to get current indices.`;return Y(L({text:i,section:"Network request detail"}))}});return {name:zs,tool:t}};function aAe(e){return !!(e.networkLogEntriesPath||e.openNetworkLogEntries)}async function lAe(e){if(e.openNetworkLogEntries){let n=await e.openNetworkLogEntries();return n?{stream:n}:void 0}let t=e.networkLogEntriesPath?.();return t?{filePath:t}:void 0}function Qmt(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 n=e.map(s=>{let a=s.status!==void 0?String(s.status):"(pending)",l=s.durationMs!==void 0?`${Math.round(s.durationMs)}ms`:"-",c=s.resourceType??"-",u=s.mocked?" [mocked]":"";return `#${s.index} ${a} ${s.method} ${s.url} \xB7 ${c} \xB7 ${l} \xB7 ${s.startedDateTime}${u}`}),o=e[e.length-1],r=`
|
|
7972
7972
|
|
|
7973
7973
|
Showing ${e.length} of ${t.totalMatched} matching requests (${t.totalEntries} recorded in total).`,i=t.hasMoreOlder&&o?`${r} Page older with beforeIndex=${o.index}.`:r;return `${n.join(`
|
|
@@ -9026,7 +9026,7 @@ to pick which of these modules are relevant:
|
|
|
9026
9026
|
|
|
9027
9027
|
`;let m=Ibt(c);d+=m;let p=streamObject({schema:BK,model:u("claude-sonnet-4-5-20250929"),system:Cbt,messages:[{role:"user",content:d}],providerOptions:{anthropic:Qa}}),h=[];for await(let b of p.textStream)h.push(b);let g=h.join(""),f;try{let b=JSON.parse(g);f=BK.parse(b);}catch(b){r.error({rawResponse:g,parseError:b},"Failed to parse AI response as JSON"),n.addError(`Failed to parse AI response: ${z(b)}. Raw response: ${g}`);return}let y=new Set(c.map(b=>b.moduleId)),S=f.recommendations.filter(b=>y.has(b.moduleId)?!0:(r.warn({moduleId:b.moduleId,moduleName:b.moduleName},"AI recommended a module that doesn't exist"),!1));n.addPartFromText(JSON.stringify({recommendations:S,totalModulesAnalyzed:c.length},null,2));}catch(c){r.error({err:c},"Error in module recommendation"),n.addError(`Failed to recommend modules: ${z(c)}`);}}}),qF=[_bt,wbt];var Pbt=1e4,UK=new WeakSet;async function rS({response:e,extra:t,sessionId:n,toolName:o,attributes:r,operation:i}){let s=Au({response:e,sessionId:n,toolName:o});if(s)try{await HK({session:s,signal:t?.signal,operation:()=>Obt({extra:t,session:s,toolName:o,attributes:r,operation:i})});}catch(a){e.addError(z(a));}}async function Obt({extra:e,session:t,toolName:n,attributes:o,operation:r}){if(ei.getSession(t.sessionId)!==t||t.cleanupInProgress)throw new Error(`Session '${t.sessionId}' is no longer active.`);t.controller.setOpen();let i=e?.signal?t.controller.bindCancellation(e.signal):void 0,s;try{e?.signal?.throwIfAborted(),s=de({name:n,root:t.shareDiagnostics,attributes:{"momentic.org_id":t.orgId,"momentic.session_id":t.sessionId,"momentic.test_id":t.testId,...o},fn:()=>r(t)}),await jK({signal:e?.signal,operation:async()=>await s});}catch(a){if(e?.signal?.aborted&&s){let l,c=await Promise.race([s.then(()=>true,()=>true),new Promise(u=>{l=setTimeout(()=>u(false),Pbt);})]);l&&clearTimeout(l),c||ei.killSession(t.sessionId,"cancelled MCP operation did not stop");}throw a}finally{i?.();}}async function HK({session:e,signal:t,operation:n}){if(t?.throwIfAborted(),UK.has(e))throw new Error("Another browser operation is already active for this session. Wait for it to finish or cancel it before retrying.");UK.add(e);try{return await n()}finally{UK.delete(e);}}async function jK({signal:e,operation:t}){return e?.throwIfAborted(),e?await new Promise((n,o)=>{let r=()=>o(e.reason??new Error("MCP tool call cancelled."));e.addEventListener("abort",r,{once:true}),t().then(n,o).finally(()=>{e.removeEventListener("abort",r);});}):await t()}function KF({signal:e,onCancellation:t}){if(!(!e||!t)){if(e.aborted){t();return}return e.addEventListener("abort",t,{once:true}),()=>e.removeEventListener("abort",t)}}var Mbt=Object.getPrototypeOf(async function(){}).constructor;async function rRe({code:e,page:t,signal:n}){return await new Mbt("page","signal",`"use strict"; return await (${e})(page, signal);
|
|
9028
9028
|
//# sourceURL=momentic-mcp/run-playwright-unsafe.js`)(t,n)}var kbt=1e5,iRe=rr({schema:{name:_v,description:`Get the current browser state for a granular session. Defaults: screenshot on, browser snapshot off. The browser snapshot includes the URL, accessibility tree, and other context. Ask for it (returnBrowserState: true) when you need it for locator resolution or richer page structure\u2014e.g. when screenshot-only output is insufficient. For large pages, pass \`hint\` to AI-filter the snapshot down to the relevant sections. ${Pr}`,inputSchema:{sessionId:z$1.string().describe("The session id to query."),returnBrowserState:z$1.boolean().default(false).describe("Include the serialized browser snapshot. Default false. Set to true when you need the browser snapshot for element targeting or page structure."),returnScreenshot:z$1.boolean().default(true).describe("Include a screenshot. Default true. Set to false if you already have a screenshot of the present state and don't need a new one. EX: you just previewed a step and see that the page is too complicated and need the browser snapshot."),hint:z$1.string().optional().describe("Short natural-language description of what you need from the page (e.g. the action you are about to take or the element you are looking for). Required when returnBrowserState=true and the page is large: the hint is fed into an AI page-filtering step that returns only the most relevant sections of the accessibility tree, keeping the snapshot under the per-tool token budget.")}},handle:async(e,t,n,o)=>{await rS({response:n,extra:o,sessionId:t.sessionId,toolName:_v,operation:async r=>{let i=await LK({browser:r.controller.browser,isRemoteBrowser:r.isRemoteBrowser,supportsFileOutput:e.supportsFileOutput,returnBrowserState:t.returnBrowserState,returnScreenshot:t.returnScreenshot,tokenLimit:kbt,hint:t.hint,filtering:{generator:e.generator,orgId:e.orgId,logger:e.logger,signal:r.controller.executeAbortController.signal}});n.addContentParts(i);}});}}),sRe=rr({schema:{name:Pv,description:`${WS} ${Pr}`,inputSchema:{sessionId:z$1.string(),filters:z$1.array(z$1.string().trim().min(1)).min(1).optional().describe(qS)}},handle:async(e,t,n)=>{let o=Au({response:n,sessionId:t.sessionId,toolName:Pv});if(!o)return;let r=await Tu({testContext:o.context,supportsFileOutput:e.supportsFileOutput,filters:t.filters});n.addContentParts(r);}}),aRe=rr({schema:{name:lH,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$1.string().describe("The active Momentic session id."),code:z$1.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,n,o)=>{await rS({response:n,extra:o,sessionId:t.sessionId,toolName:lH,operation:async r=>{let i=KF({signal:o?.signal,onCancellation:()=>{ei.killSession(t.sessionId,"unsafe MCP tool cancelled");}});try{let s=await rRe({code:t.code,page:r.controller.browser.getActivePage(),signal:o?.signal}),a=JSON.stringify({result:s??null},null,2);n.addPartFromText(a);}finally{i?.();}}});}});var lRe=rr({schema:{name:eh,description:`Start a granular browser session for a specific test. Requires a testId. Returns session metadata (sessionId, testId, testFileAbsolutePath, projectConfigAbsolutePath, cwd, viewport, etc.), a Step Authoring Guide artifact that includes projectRootAbsolutePath, projectConfigAbsolutePath, and cwd, and a Test Content section that lists every step in the bound test with its stable stepId context. ${qC} Read the Step Authoring Guide artifact before creating, previewing, running, or splicing CLI-style steps. Use the Test Content section for the step ids required by tools that operate on existing steps in this session's test. After editing with splice, prefer the splice response or request returnTest for the updated active-session step ids. Use ${bi} to inspect persisted test state by id or path, especially for a different test.`,inputSchema:{testId:z$1.string().describe("The test id to target when starting a session."),envName:z$1.string().optional().describe("Optional environment override (matches CLI --env behavior). Defaults to the test's default env when omitted."),projectConfigPath:z$1.string().optional().describe("Optional path to a momentic.config.yaml file (matches CLI --config)."),projectNameFilter:z$1.string().optional().describe("Optional project name filter for workspace configs (matches CLI --filter)."),headfulBrowser:z$1.boolean().optional().describe("Whether to launch a headful browser for the session. When omitted, uses the MCP server default if configured."),video:z$1.boolean().optional().describe("Whether to record a video of the browser session. When omitted, uses the MCP server default if configured. When the session is terminated, the response will include the path to the video output directory."),shareDiagnostics:z$1.boolean().optional().describe("Share local session diagnostics using the configured OpenTelemetry exporter."),turbo:z$1.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,n,o)=>{let{logger:r}=e,i=t.shareDiagnostics??e.shareDiagnostics??false;await ac({serviceName:"mcp",enabled:i});let s=t.video??e.videoDefault??false,a;s&&(nr(e.project.rootDir),a=or({rootDir:e.project.rootDir,entity:"video",ext:"d"}),mkdirSync(a,{recursive:true}));let l;try{let m=No();if(!m){n.addError("API client is not initialized; cannot start MCP session.");return}let p=await ha({project:await Rn({configFilePath:t.projectConfigPath??e.project.configFilePath,nameFilter:t.projectNameFilter,skipExitOnError:!0}),apiClient:m}),h=new Nl(m,e.orgId,p),g;t.turbo===!0?g="turbo":t.turbo===!1&&(g="standard"),l=await ei.startSession({logger:r,storage:h,testId:t.testId,idleTimeoutMs:e.sessionIdleTimeoutMs,runner:"mcp",envName:t.envName,headfulOverride:t.headfulBrowser??e.headfulDefault??!0,customHeaders:e.customHeaders,devicePixelRatio:e.devicePixelRatio,videoOutputDir:a,browserExecutionMode:g,shareDiagnostics:i,abortSignal:o?.signal});}catch(m){n.addError(z(m));return}let c=o?.signal?l.controller.bindCancellation(o.signal):void 0;c&&n.addCleanupCallback(c);let u=KF({signal:o?.signal,onCancellation:()=>{ei.killSession(l.sessionId,"MCP session start cancelled");}});u&&n.addCleanupCallback(u),o?.signal.throwIfAborted(),Ll({type:"mcp:session_started",test_platform:"web"});let d=l.controller.browser.getViewport();n.addPartFromText(JSON.stringify({sessionId:l.sessionId,testId:l.testId,testFileAbsolutePath:l.testFileAbsolutePath,projectRootAbsolutePath:e.project.rootDir,projectConfigAbsolutePath:e.project.configFilePath,cwd:kA(),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)),n.addContentParts(await Gfe({projectRootAbsolutePath:e.project.rootDir,projectConfigAbsolutePath:e.project.configFilePath,cwd:kA(),stepSchema:Os(),stepSchemaTitle:"Step schema",supportsFileOutput:e.supportsFileOutput}));try{let m=await jg({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});n.addContentParts(m);}catch(m){r.warn({sessionId:l.sessionId,err:m},"Session started but resolved test content could not be loaded");}try{n.addContentParts(await ba({browser:l.controller.browser,supportsFileOutput:e.supportsFileOutput}));}catch(m){r.warn({sessionId:l.sessionId,err:m},"Session started but initial screenshot capture failed"),n.addPartFromText(JSON.stringify({warning:"Session started successfully, but initial screenshot capture failed.",screenshotError:z(m)},null,2));}a&&n.addContentParts(L({text:Do({filePath:a,title:"Video output directory"}),section:"Video Output"}));}}),cRe=rr({schema:{name:aH,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$1.string().describe("The session id to update."),settings:z$1.object({browserExecutionMode:z$1.enum(["standard","turbo"]).describe("Turbo skips selected browser readiness and stability waits; standard restores the full waiting behavior.")})}},handle:async(e,t,n,o)=>{await rS({response:n,extra:o,sessionId:t.sessionId,toolName:aH,attributes:{"momentic.browser_execution_mode":t.settings.browserExecutionMode},operation:async r=>{let i=r.controller.browser.updateRuntimeSettings({executionMode:t.settings.browserExecutionMode});n.addPartFromText(JSON.stringify({sessionId:r.sessionId,settings:{browserExecutionMode:i.executionMode}},null,2));}});}}),uRe=rr({schema:{name:A_,description:`Kill a granular browser session by sessionId. Returns available session ids if the target is missing. ${Pr}`,inputSchema:{sessionId:z$1.string().describe("The session id to terminate.")}},handle:async(e,t,n)=>{let{sessionId:o}=t;try{let r=ei.getSession(o),i=r?.videoOutputDir,s=await ei.killSession(t.sessionId,"explicit kill");if(s.killed&&Ll({type:"mcp:session_killed",test_platform:"web",reason:"explicit kill"}),!s.killed){r?n.addError(`Failed to terminate session '${t.sessionId}'.`):n.addError(JSON.stringify({message:`No active session found for id '${t.sessionId}'.`,availableSessionIds:ei.listSessionIds()},null,2));return}n.addPartFromText(JSON.stringify({sessionId:t.sessionId,killed:!0},null,2));let a=await zfe({killResult:s,rootDir:e.project.rootDir});a&&n.addContentParts(L({text:Do({filePath:a.filePath,title:"Session span report"}),section:"Session Spans"})),i&&n.addContentParts(L({text:Do({filePath:i,title:"Video output directory"}),section:"Video Output"}));}catch(r){n.addError(z(r));}}});var $K=async({steps:e,fromStep:t,toStep:n,tracer:o,collectStepScreenshots:r,controller:i,executionOptions:s,storage:a,codeEvaluator:l,logger:c,socket:u,testContext:d,orgId:m,sessionId:p,usageTracker:h,apiClient:g})=>{let f={controller:i,storage:a,codeEvaluator:l,logger:c,context:d,usageTracker:h},y=o??(u?new _p({orgId:m,parentStep:null,parentTracer:null,socket:u}):new Zw),S={results:[],asyncTasks:[],state:{autoHealingDisabled:true,failureRecoveryDisabled:true,failureRecoveryAttempts:0},...t&&{fastForwardingToStep:true}},b=()=>(i.setOpen(),kl({listParams:{containerName:"agent-step-list",steps:e,tracer:y},fixtures:f,options:{collectDebugData:false,collectStepScreenshots:r,reinitializeBrowser:false,disableHealing:true},inputs:{orgId:m,userId:Dpe(),runId:randomUUID(),sessionId:p,steps:e,testMetadata:null,orgSettings:{},fromStep:t,toStep:n},callbacks:{test:{},step:{}},runParams:g?{apiClient:g}:null,work:S}));return i.withExclusiveStepSequence(()=>s?i.withExecutionOptions(s,b):b())},aE=async({step:e,controller:t,executionOptions:n,storage:o,codeEvaluator:r,logger:i,socket:s,testContext:a,orgId:l,sessionId:c,usageTracker:u,apiClient:d})=>{let m;try{m=await $K({steps:[e],controller:t,executionOptions:n,storage:o,codeEvaluator:r,logger:i,socket:s,testContext:a,orgId:l,sessionId:c,usageTracker:u,apiClient:d});}finally{u.flushEvents(i);}return m.results[0]};async function FI({step:e,project:t,logger:n,storage:o,controller:r,codeEvaluator:i,socket:s,orgId:a,sessionId:l,testContext:c,supportsFileOutput:u,tempCaches:d,usageTracker:m,apiClient:p,onStepResult:h,includeBrowserState:g,skipAISmartWaiting:f}){let y=await UC(e,{project:t,logger:n,tempCaches:d});switch(y.type){case "PRESET_ACTION":return Dbt({step:y,logger:n,storage:o,controller:r,codeEvaluator:i,socket:s,orgId:a,sessionId:l,testContext:c,supportsFileOutput:u,tempCaches:d,usageTracker:m,apiClient:p,onStepResult:h,includeBrowserState:g,skipAISmartWaiting:f});case "AI_ACTION_DYNAMIC":return Fbt({step:y,logger:n,storage:o,controller:r,codeEvaluator:i,socket:s,orgId:a,sessionId:l,testContext:c,supportsFileOutput:u,usageTracker:m,apiClient:p,onStepResult:h,includeBrowserState:g,skipAISmartWaiting:f});case "RESOLVED_MODULE":return Bbt({step:y,logger:n,storage:o,controller:r,codeEvaluator:i,socket:s,orgId:a,sessionId:l,testContext:c,supportsFileOutput:u,usageTracker:m,apiClient:p,onStepResult:h,includeBrowserState:g,skipAISmartWaiting:f});default:{let[S,b]=await Promise.all([ba({browser:r.browser,supportsFileOutput:u}),Tu({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"}),...S,...b]}}}async function dRe({steps:e,project:t,logger:n,storage:o,controller:r,codeEvaluator:i,socket:s,orgId:a,sessionId:l,testContext:c,supportsFileOutput:u,tempCaches:d,usageTracker:m,apiClient:p,onStepResult:h}){let g=[],f=0,y;for(let S=0;S<e.length;S++){g.push(...QEe({index:S,rawStep:e[S]}));let b;try{let v=await FI({step:e[S],project:t,logger:n,storage:o,controller:r,codeEvaluator:i,socket:s,orgId:a,sessionId:l,testContext:c,supportsFileOutput:u,usageTracker:m,apiClient:p,tempCaches:d,includeBrowserState:!1,skipAISmartWaiting:S===0,onStepResult:A=>{b=A,h?.(A);}});g.push(...v);}catch(v){r.executeAbortController.signal.throwIfAborted(),n.error({err:v,stepIndex:S+1},"Batch preview step execution errored"),g.push(...L({text:`Step Execution errored: ${z(v)}`,section:"Error"})),y=S+1;break}if(!b||b.status!=="SUCCESS"){y=S+1;break}f++;}g.push(...eve({completedSteps:f,failedStep:y})),r.executeAbortController.signal.throwIfAborted();try{g.push(...await YF({controller:r,supportsFileOutput:u,testContext:c}));}catch(S){n.warn({err:S},"Batch preview completed but final browser state capture failed"),g.push(...L({text:`Final browser state capture failed: ${z(S)}`,section:"Error"}));}return {parts:g,successful:y===void 0}}async function mRe({steps:e,project:t,logger:n,controller:o,testContext:r,tempCaches:i}){let s=await Promise.all(e.map(l=>UC(l,{project:t,logger:n,tempCaches:i}))),a=s.findIndex(l=>l.type!=="PRESET_ACTION");if(a>=0)throw new Error(`Step ${a+1} must be a supported single-target CLICK, TYPE, HOVER, BLUR, or SELECT_OPTION step with a description`);return tve({steps:s.map(l=>{if(l.type!=="PRESET_ACTION")throw new Error(`Unsupported step type ${l.type}`);return l}),rawSteps:e,logger:n,controller:o,testContext:r,tempCaches:i})}async function Dbt({step:e,logger:t,storage:n,controller:o,codeEvaluator:r,socket:i,orgId:s,sessionId:a,testContext:l,supportsFileOutput:c,tempCaches:u,usageTracker:d,apiClient:m,onStepResult:p,includeBrowserState:h=true,skipAISmartWaiting:g=true}){let f=await aE({step:e,logger:t,storage:n,controller:o,executionOptions:{skipAISmartWaiting:g},codeEvaluator:r,socket:i,orgId:s,sessionId:a,testContext:l,usageTracker:d,apiClient:m});f&&p?.(f);let y=[];return f?.status==="SUCCESS"&&oK({logger:t,tempCaches:u,command:e.command,parts:y}),y.push(...ZEe({result:f})),h&&y.push(...await YF({controller:o,supportsFileOutput:c,testContext:l})),y}async function YF({controller:e,supportsFileOutput:t,testContext:n}){await e.browser.waitForStability();let[o,r]=await Promise.all([ba({browser:e.browser,supportsFileOutput:t}),Tu({testContext:n,supportsFileOutput:t})]);return [...o,...r]}async function Fbt({step:e,logger:t,storage:n,controller:o,codeEvaluator:r,socket:i,orgId:s,sessionId:a,testContext:l,supportsFileOutput:c,usageTracker:u,apiClient:d,onStepResult:m,includeBrowserState:p=true,skipAISmartWaiting:h=true}){let g=await aE({step:e,logger:t,storage:n,controller:o,executionOptions:{skipAISmartWaiting:h},codeEvaluator:r,socket:i,orgId:s,sessionId:a,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 YF({controller:o,supportsFileOutput:c,testContext:l})),f}async function Bbt({step:e,logger:t,storage:n,controller:o,codeEvaluator:r,socket:i,orgId:s,sessionId:a,testContext:l,supportsFileOutput:c,usageTracker:u,apiClient:d,onStepResult:m,includeBrowserState:p=true,skipAISmartWaiting:h=true}){let g=await aE({step:e,logger:t,storage:n,controller:o,executionOptions:{skipAISmartWaiting:h},codeEvaluator:r,socket:i,orgId:s,sessionId:a,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 YF({controller:o,supportsFileOutput:c,testContext:l})),f}var pRe=({steps:e,fromStep:t,toStep:n})=>{let o={total:0,fastForwardingToStep:true},r=(i,s)=>{if(i.skipped)return false;let a=s.map(c=>c.id),l=TI(i.id,a,t.fromStepId,t.parentStepIdChain);if(o.fastForwardingToStep){if(!l)return false;o.fastForwardingToStep=false;}return o.total+=1,!!(n&&TI(i.id,a,n.toStepId,n.parentStepIdChain))};return ra({steps:e,earlyStop:true,onPresetAction:(i,s)=>r(i,s.parentChain),onConditional:(i,s)=>{if(i.skipped)return false;let a=s.parentChain.map(c=>c.id),l=TI(i.id,a,t.fromStepId,t.parentStepIdChain);if(o.fastForwardingToStep){if(!l)return false;o.fastForwardingToStep=false;}return !!(n&&TI(i.id,a,n.toStepId,n.parentStepIdChain))},onSimpleStepContainer:(i,s)=>r(i,s.parentChain)}),o.total};var Hbt="Cannot add a module step inside another module. Modules cannot be nested.";function GK(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 jbt(e,t,n){let o=GK(e,t);if(!n?.length)return o;let r=_oe(o,n);if(!r)throw new Error(`No step found with parent chain [${n.join(", ")}] in ${t} section, or parent does not support nested steps`);return r}function hRe(e,t){let n=t.moduleId,o=r=>{r.type!=="RESOLVED_MODULE"||r.moduleId!==n||(t.parameters!==void 0&&(r.parameters=t.parameters),t.parameterEnums!==void 0&&(r.parameterEnums=t.parameterEnums),t.defaultParameters!==void 0&&(r.defaultParameters=t.defaultParameters),t.name!==void 0&&(r.name=t.name),t.description!==void 0&&(r.description=t.description),t.enabled!==void 0&&(r.enabled=t.enabled),t.steps!==void 0&&(r.steps=t.steps));};for(let r of [e.steps,e.beforeSteps,e.afterSteps])ra({steps:r,onPresetAction:o,onConditional:o,onSimpleStepContainer:o});}async function JF({project:e,storage:t,orgId:n,logger:o,testPath:r,saveChangesToDisk:i,supportsFileOutput:s,tempCaches:a,mutableStepState:l,onStepSplice:c,params:u,envName:d}){let m=mo__default.join(e.rootDir,r),p=await t.getTestByPath({relativeTestPath:r,logger:o}),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(_=>UC(_,{project:e,logger:o,tempCaches:a})));}catch(_){return Y(L({text:`Error parsing steps: ${z(_)}`,section:"Error"}))}let S=cloneDeep(y),b=u.parentStepIdChain,v;try{v=jbt(f,u.targetSection,b);}catch(_){return Y(L({text:`Error: ${z(_)}`,section:"Error"}))}if(u.startIndex<0||u.startIndex>v.length)return Y(L({text:`Error: Invalid startIndex ${u.startIndex} for splicing ${u.targetSection} section with ${v.length} steps (must be 0-${v.length})`,section:"Error"}));let A=y.length,R=u.deleteCount,w=cloneDeep(v.slice(u.startIndex,u.startIndex+R)),O=[];if(b?.length){let _=Poe(GK(f,u.targetSection),b,u.targetSection);if(O.push(..._),_.some(N=>N.type==="RESOLVED_MODULE")&&y.some(N=>N.type==="RESOLVED_MODULE"))return Y(L({text:`Error: ${Hbt}`,section:"Error"}))}v.splice(u.startIndex,u.deleteCount,...y);for(let _ of y)_.type==="RESOLVED_MODULE"&&hRe(f,_);for(let _ of O)_.type==="RESOLVED_MODULE"&&hRe(f,_);if(l&&(l.stepLists=f),c?.({targetSection:u.targetSection,parentStepIdChain:b??[],startIndex:u.startIndex,deletedSteps:w,insertedSteps:S}),i){let _=await t.updateTestByPath({logger:o,relativeTestPath:r,stepLists:f,schemaVersion:Ct});o.info({testPath:r,testFilePath:m,projectFileFormat:e.config.fileFormat,moduleUpdateCount:_.moduleUpdates.length,snapshotCacheCount:_.snapshotCachesToSave.length},"MCP splice persisted test changes to disk");}else o.info({testPath:r,testFilePath:m,projectFileFormat:e.config.fileFormat},"MCP splice skipped disk persistence");let I=[...L({text:`Successfully spliced ${A} step(s) at index ${u.startIndex} in the ${u.targetSection} section, removing ${R} step(s).`,section:"Result"})];return I.push(...await zbt({logger:o,project:e,orgId:n,testId:p.id,environment:d,originalSteps:g,updatedSteps:f})),I.push(...await XEe({rootDir:e.rootDir,supportsFileOutput:s,deletedStepRefs:w.map((_,P)=>({id:_.id,index:u.startIndex+P})),insertedStepRefs:S.map((_,P)=>({id:_.id,index:u.startIndex+P})),deletedSteps:Fh(w,{includeCache:false}),insertedSteps:Fh(S,{includeCache:false}),metadata:{section:u.targetSection,parentStepIdChain:b??[],startIndex:u.startIndex,deleteCount:R,insertedCount:A},artifactEntity:"splice-restoration-payload"})),u.returnTest&&I.push(...L({text:JSON.stringify(await $F({project:e,storage:t,selector:{path:r},envName:d,logger:o,mutableStepState:l,supportsFileOutput:s,hydrateStepIdentity:false}),null,2),section:"Test Content"})),Y(I)}async function XF({project:e,logger:t,testPath:n,storage:o,controller:r,codeEvaluator:i,socket:s,orgId:a,sessionId:l,envName:c,testContext:u,tracer:d,params:m,tokenLimit:p,supportsFileOutput:h,usageTracker:g,mutableStepState:f,apiClient:y,disableCache:S,collectStepScreenshots:b,abortSignal:v}){let{fromStep:A,toStep:R,targetSection:w}=m,O=await o.getTestByPath({relativeTestPath:n,logger:t}),{alwaysSaveCache:I,noCache:_}=pu(),P=await Ns({logger:t,orgId:a,project:e,alwaysSaveCache:I,noCache:_||S===true}),N=f?.stepLists??{beforeSteps:O.beforeSteps??[],afterSteps:O.afterSteps??[],steps:O.steps};await P.resolveStepCacheEntries({logger:t,schemaVersion:O.schemaVersion,stepLists:N,testId:O.id,environment:c,useSnapshotIdentityCache:!f&&e.config.fileFormat==="v2"}),f&&(f.stepLists=N);let D=S?cloneDeep(N):N;S&&$bt(D);let k=GK(D,w),H=cloneDeep({steps:D.steps,beforeSteps:D.beforeSteps,afterSteps:D.afterSteps}),{result:J}=Qc(k,A.fromStepId,A.parentStepIdChain);if(!J)return Y(L({text:`Error: No step found with id "${A.fromStepId}" and parent chain [${A.parentStepIdChain.join(", ")}] in ${w} section.`,section:"Error"}));if(R){let{result:ee}=Qc(k,R.toStepId,R.parentStepIdChain);if(!ee)return Y(L({text:`Error: No step found with id "${R.toStepId}" and parent chain [${R.parentStepIdChain.join(", ")}] in ${w} section.`,section:"Error"}))}if(d?.setProgressTotal){let ee=pRe({steps:k,fromStep:A,toStep:R});d.setProgressTotal(ee);}gRe({controller:r,abortSignal:v});let W;try{W=await $K({steps:k,controller:r,storage:o,codeEvaluator:i,logger:t,socket:s,orgId:a,sessionId:l,testContext:u,fromStep:A,toStep:R,tracer:d,collectStepScreenshots:b,usageTracker:g,apiClient:y});}finally{g.flushEvents(t);}let{results:V}=W;if(!V||V.length===0)return Y(L({text:"Error: No steps were executed.",section:"Error"}));let M=V.at(-1);if(!M)return Y(L({text:"Error: No steps were executed.",section:"Error"}));let X={logger:t,cacheStorage:P,orgId:a,testId:O.id,environment:c,originalStepsWithCaches:H,updatedStepsWithCaches:{steps:D.steps,beforeSteps:D.beforeSteps??[],afterSteps:D.afterSteps??[]}},$=M.status!=="SUCCESS";await zf({logger:t,cacheStorage:P,orgId:a,testId:O.id,environment:c,stepLists:X.updatedStepsWithCaches,useSnapshotIdentityCache:e.config.fileFormat==="v2"}),$?M.status==="FAILED"&&await sT(X):await Vf(X);let G=w==="main"?"":` in ${w}`,ne=ee=>{let Z="fromStepId"in ee?ee.fromStepId:ee.toStepId;return ee.parentStepIdChain.length>0?`id "${Z}" (parent chain [${ee.parentStepIdChain.join(", ")}])`:`id "${Z}"`},ie=A?ne(A):"beginning",Pe=R?`Steps from ${ie} through ${ne(R)}${G}`:`Steps from ${ie} to end${G}`,Ne=[];if($)Ne.push(...L({text:`Error: step with id ${M.id} failed: ${M.message}`,section:"Error"}));else {gRe({controller:r,abortSignal:v});let ee=`${Pe} executed successfully.`;Ne.push(...L({text:ee,section:"Result"})),M.data&&Ne.push(...L({text:`Data: ${JSON.stringify(M.data,null,2)}`,section:"Result Data"}));}let[Fe,it]=await Promise.all([ba({browser:r.browser,supportsFileOutput:h}),Tu({testContext:u,supportsFileOutput:h,limits:{tokenLimit:p}})]);return Y([...Ne,...Fe,...it])}function gRe({controller:e,abortSignal:t}){t?.throwIfAborted(),e.setOpen();}function $bt(e){for(let t of [e.steps,e.beforeSteps,e.afterSteps])t&&Gbt(t);}function Gbt(e){ra({steps:e,earlyStop:false,onPresetAction:t=>(Gr(t.command)&&delete t.command.cache,false),onSimpleStepContainer:()=>false,onConditional:()=>false});}async function zbt({logger:e,project:t,orgId:n,testId:o,environment:r,originalSteps:i,updatedSteps:s}){let a=[];try{let{alwaysSaveCache:l,noCache:c}=pu(),u=await Ns({logger:e,orgId:n,project:t,alwaysSaveCache:l,noCache:c});await zf({logger:e,cacheStorage:u,orgId:n,testId:o,environment:r,stepLists:s,useSnapshotIdentityCache:t.config.fileFormat==="v2"}),await Vf({logger:e,cacheStorage:u,orgId:n,testId:o,environment:r,originalStepsWithCaches:i,updatedStepsWithCaches:s});}catch(l){e.warn({err:l},"Failed to save step caches after execution, future runs may be slower"),a.push(...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 a}var zK=class{constructor(t,n,o,r){this.reporter=t;this.step=n;this.parentStepIdChain=o;this.setTotal=r;}loggerBindings;attachBeforeScreenshot(t){}attachAfterScreenshot(t){}attachBeforeHtmlSnapshot(t){}attachAfterHtmlSnapshot(t){}recordTargetAutoHeal(t){}storeTraceAsset(){}async finish(t){this.reporter.onStepComplete(this.step);}async startSubSteps(){return new QF(this.reporter,this.parentStepIdChain.concat(this.step.id),this.setTotal)}},QF=class{constructor(t,n=[],o){this.reporter=t;this.parentStepIdChain=n;this.setTotal=o;}loggerBindings;setProgressTotal(t){this.setTotal(t);}async getScreenshot(t,n){}async getHtmlSnapshot(t,n){}flushResults(t){}async startStep(t,n){return this.reporter.onStepStart(t.step),new zK(this.reporter,t.step,this.parentStepIdChain,this.setTotal)}};function fRe(e,t,n,o,r){let i=bI(e),s={completed:0,total:0},a=new AbortController,l=false,c=p=>{i&&OEe(e,s,p,t,a,n);},u=()=>{i&&(l||(l=true,c("Starting step execution...")));},d=p=>{!Number.isFinite(p)||p<0||(s.total=p);},m={onStepStart:p=>{u(),s.total===s.completed&&(s.total+=1);let h=no(p);r&&(r.currentStep=h),c(`Starting: ${h}`);},onStepComplete:p=>{o(),u(),s.completed+=1,s.total<s.completed&&(s.total=s.completed);let h=no(p);r&&(r.currentStep=void 0,r.lastCompletedStep=h),c(`Completed: ${h}`);}};return new QF(m,[],d)}var ZF=`CLI-style step definition. Use the Step Authoring Guide artifact returned from ${eh} when you start your session to get the full step schema.`,Vbt=rr({schema:{name:CX,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:o$},handle:async(e,t,n,o)=>{try{let r=await e.storage.createTest(t);Ll({type:"mcp:test_create",test_platform:"web"}),n.addPartFromText(JSON.stringify(r,null,2));}catch(r){n.addError(z(r));return}}}),Wbt=rr({schema:{name:bi,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 ${JS}, prefer the splice response or request returnTest on the splice call for updated step ids. Step ids from another test are inspection-only for the active session. Start a session for that test before running or editing it. ${Pr}`,inputSchema:{testId:z$1.string().optional().describe(`Id of the test to fetch. If you do not already know it, list project tests with ${sH}. Either testId or testPath is required.`),testPath:z$1.string().optional().describe("Path to the test file, relative to the project root or absolute. When provided, skips the entity-registry lookup. Either testId or testPath is required.")}},handle:async(e,t,n,o)=>{try{let r=t.testId?{id:t.testId}:t.testPath?{path:t.testPath}:void 0;if(!r){n.addError("Either testId or testPath is required.");return}let i=await jg({project:e.project,storage:e.storage,selector:r,envName:void 0,logger:e.logger,includeCache:!1,hydrateStepIdentity:!0,supportsFileOutput:e.supportsFileOutput});n.addContentParts(i);}catch(r){n.addError(z(r));return}}}),yRe=rr({schema:{name:T_,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 ${Zp}. Returns updated Test Content with step ids for the active session. ${Pr}`,inputSchema:{sessionId:z$1.string().describe("The active session whose bound test should be reloaded.")}},handle:async(e,t,n,o)=>{let r=Au({response:n,sessionId:t.sessionId,toolName:T_});if(!r)return;let i=r.storage.getProject();if(i.config.fileFormat!=="v2"){n.addError(`${T_} is only available for v2 file-format projects.`);return}let s=await r.storage.getTestByPath({relativeTestPath:r.relativeTestPath,logger:e.logger}),a={beforeSteps:s.beforeSteps,steps:s.steps,afterSteps:s.afterSteps},{alwaysSaveCache:l,noCache:c}=pu(),u=await Ns({logger:e.logger,orgId:r.orgId,project:i,alwaysSaveCache:l,noCache:c});r.mutableStepState.testId=s.id;let{stepListsWithCaches:d}=await uc({cacheStorage:u,logger:e.logger,schemaVersion:s.schemaVersion,stepLists:a,testId:s.id,environment:r.envName,useSnapshotIdentityCache:true});r.mutableStepState.stepLists=d,n.addContentParts(L({text:`Reloaded test ${s.id} from disk into session ${r.sessionId}.`,section:"Result"})),n.addContentParts(await jg({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}));}}),qbt={...yRe,addToolToMcpServer:(e,t)=>{e.project.config.fileFormat==="v2"&&yRe.addToolToMcpServer(e,t);}},Kbt=rr({schema:{name:sH,description:`List local test artifacts. Returns a Project Context section with projectRootAbsolutePath, projectConfigAbsolutePath, and cwd, plus separate segments for each relevant artifact type: tests, modules, and environments. ${qC} When file output is enabled, the artifact links are relative to cwd. Read or grep only the specific artifact files you need instead of loading everything at once. Assume nothing changed since your last successful call to this tool unless the user indicates updates (e.g. new/changed tests, modules, environments, or project config change); avoid redundant calls just to refresh.`,inputSchema:{}},handle:async(e,t,n,o)=>{let{project:r,logger:i}=e,s=[],a=[];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||[]}));s.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}));s.push({title:"Modules",entity:"module-list",payload:{modules:m}});}catch(c){a.push(`Tests and modules discovery failed: ${z(c)}`);}try{let c=e.storage.listEnvironments(i);s.push({title:"Environments",entity:"environment-list",payload:{environments:c}});}catch(c){a.push(`Environments discovery failed: ${z(c)}`);}let l=await Vfe({artifacts:s,rootDir:r.rootDir,supportsFileOutput:e.supportsFileOutput,projectRootAbsolutePath:r.rootDir,projectConfigAbsolutePath:r.configFilePath,cwd:kA()});n.addContentParts(l),a.length>0&&n.addContentParts(L({section:"Discovery Errors",text:a.map(c=>`- ${c}`).join(`
|
|
9029
|
-
`)}));}}),SRe=rr({schema:{name:th,description:`Execute one preset, AI Action, or module step without adding it to the test. Cache IDs are optional and only returned by successful cache-capable steps. Only one preview or run may execute per session. ${Pr}`,inputSchema:{sessionId:z$1.string(),step:z$1.string().describe(ZF),timeoutSeconds:sF}},handle:async(e,t,n,o)=>{let r=Au({response:n,sessionId:t.sessionId,toolName:th});if(!r)return;let i=aF({runs:r.runStepRuns,toolName:th,run:()=>VK({session:r,response:n,extra:o,operation:async()=>{let s=!1;return {parts:await FI({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:No(),onStepResult:l=>{s=l.status==="SUCCESS";}}),isError:!s}}})});await WK({session:r,response:n,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}}),bRe=rr({schema:{name:cH,description:`Locate targets for multiple future preset steps against one captured browser state. Locator requests run concurrently and successful results return CacheIds that can be supplied to matching steps with --cache-id. Steps using --disable-cache are located without saving or returning a CacheId. This tool does not execute any interaction. Use it only when the planned interactions before each target are not expected to remove, replace, or materially change those future targets. If an interaction may change the relevant UI, locate that target after the interaction instead. ${Pr}`,inputSchema:{sessionId:z$1.string(),steps:z$1.array(z$1.string().describe(ZF)).min(1).max(20)}},handle:async(e,t,n,o)=>{await rS({response:n,extra:o,sessionId:t.sessionId,toolName:cH,attributes:{"momentic.element_count":t.steps.length},operation:async r=>{let i=await mRe({project:r.storage.getProject(),steps:t.steps,logger:e.logger,controller:r.controller,testContext:r.context,tempCaches:r.tempCaches});n.addContentParts(i);}});}}),TRe=rr({schema:{name:Ov,description:`Execute multiple steps sequentially without adding them to the test. Supports the same preset, AI Action, and module steps as ${th}, stopping at the first failure. Cache IDs are optional and only returned by successful cache-capable steps. Only one preview or run may execute per session. ${Pr}`,inputSchema:{sessionId:z$1.string(),steps:z$1.array(z$1.string().describe(ZF)).min(1).max(20),timeoutSeconds:sF}},handle:async(e,t,n,o)=>{let r=Au({response:n,sessionId:t.sessionId,toolName:Ov});if(!r)return;let i=aF({runs:r.runStepRuns,toolName:Ov,run:()=>VK({session:r,response:n,extra:o,operation:async()=>{let s=await dRe({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:No()});return {parts:s.parts,isError:!s.successful}}})});await WK({session:r,response:n,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}});async function VK({session:e,response:t,extra:n,operation:o}){return HK({session:e,signal:n?.signal,operation:async()=>{if(ei.getSession(e.sessionId)!==e||e.cleanupInProgress)throw new Error(`Session '${e.sessionId}' is no longer active.`);e.controller.setOpen();let r=n?.signal?e.controller.bindCancellation(n.signal):void 0;r&&t.addCleanupCallback(r),n?.signal.throwIfAborted();try{return await o()}finally{r?.();}}})}async function WK({session:e,response:t,stepRunnerId:n,timeoutSeconds:o}){let r=await tK({runs:e.runStepRuns,stepRunnerId:n,timeoutMs:o*1e3});nK({result:r,response:t,statusToolName:xv});}var ARe=rr({schema:{name:JS,description:`Insert, delete, or replace steps in the active session's test by index. Cache IDs are optional and must only be included when a preview or locate tool returned one for that exact step. Many steps do not support caches and successful previews will not return a CacheId; splice those CLI steps unchanged without --cache-id. Use parentStepIdChain to splice into nested steps (e.g. inside a conditional or module). The response includes inserted/deleted step refs with the updated active-session ids; use those ids for later run_step calls. The response always includes a recovery artifact with the full deleted and inserted payloads; only inspect it when you need to undo or inspect a mistaken splice. ${Pr}`,inputSchema:{sessionId:z$1.string(),startIndex:z$1.number(),deleteCount:z$1.number().describe("Number of steps to remove. Use 0 to insert without deleting, 1 to replace a single step, or N to delete N steps."),steps:z$1.array(z$1.string()).describe(ZF),targetSection:Em.default("main"),parentStepIdChain:z$1.array(z$1.string()).optional().describe("When splicing into a nested step (e.g. conditional or module), the chain of parent step ids from root to the container. Empty or omit for top-level."),returnTest:z$1.boolean().default(false).describe("Return the full post-splice test snapshot. Avoid this by default. Use true only when you truly need the full updated test; the normal response already includes inserted/deleted step references plus a recovery artifact for mistaken-splice recovery.")}},handle:async(e,t,n,o)=>{let r=Au({response:n,sessionId:t.sessionId,toolName:JS});if(!r)return;let i=await JF({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&&Ll({type:"mcp:step_added",test_platform:"web",step_count:t.steps.length});let s=i.value.map(a=>a.type==="media"?{type:"media",data:a.data,mediaType:"image/jpeg"}:a);n.addContentParts(s);}}),ERe=rr({schema:{name:Zp,description:`${b_} Use step ids from active Test Content or splice responses, never raw v2 YAML. Only one preview or run may execute per session. ${Pr}`,inputSchema:{sessionId:z$1.string(),fromStep:G_,toStep:z_.optional(),targetSection:Em.default("main"),resetSession:z$1.boolean().default(false).describe("Whether to reset the browser session before running the steps."),disableCache:z$1.boolean().default(false).describe("Run this invocation without reading or writing step caches."),timeoutSeconds:sF}},handle:async(e,t,n,o)=>{let r=Au({response:n,sessionId:t.sessionId,toolName:Zp});if(!r)return;let i=aF({runs:r.runStepRuns,toolName:Zp,run:s=>VK({session:r,response:n,extra:o,operation:()=>Ybt({context:e,params:t,response:n,extra:o,session:r,stepRunnerId:s})}).then(a=>({parts:a}))});await WK({session:r,response:n,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}});async function Ybt({context:e,params:t,response:n,extra:o,session:r,stepRunnerId:i}){t.resetSession&&await GF({project:r.storage.getProject(),logger:e.logger,relativeTestPath:r.relativeTestPath,orgId:r.orgId,storage:r.storage,controller:r.controller,testContext:r.context,codeEvaluator:r.codeEvaluator,envName:r.envName,urlOverride:r.urlOverride,testInputs:r.testInputs,supportsFileOutput:e.supportsFileOutput,isRemoteBrowser:r.isRemoteBrowser});let s=fRe(o,e.logger,n,()=>ei.touchSession(r.sessionId),VEe({runs:r.runStepRuns,stepRunnerId:i})),a=await XF({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:s,params:{fromStep:t.fromStep,toStep:t.toStep,targetSection:t.targetSection},supportsFileOutput:e.supportsFileOutput,envName:r.envName,usageTracker:r.usageTracker,mutableStepState:r.mutableStepState,apiClient:No(),disableCache:t.disableCache});return Ll({type:"mcp:run_step_completed",test_platform:"web",status:"completed"}),a.value.map(l=>l.type==="media"?{type:"media",data:l.data,mediaType:"image/jpeg"}:l)}var vRe=rr({schema:{name:xv,description:`Check active or finished ${th}, ${Ov}, and ${Zp} executions. Pass the returned stepRunnerId to collect that operation's result. Optionally wait up to ${eK} seconds per poll. ${Pr}`,inputSchema:{sessionId:z$1.string(),stepRunnerId:z$1.string().optional().describe("Scope the poll to one preview or run. Recommended for most polls."),timeoutSeconds:z$1.number().min(0).max(eK).default(0).describe("How long to wait for the identified preview or run. 0 responds immediately. Ignored without stepRunnerId.")}},handle:async(e,t,n,o)=>{let r=Au({response:n,sessionId:t.sessionId,toolName:xv});if(!r)return;let i=await jK({signal:o?.signal,operation:()=>tK({runs:r.runStepRuns,stepRunnerId:t.stepRunnerId,timeoutMs:t.timeoutSeconds*1e3})});nK({result:i,response:n,statusToolName:xv});}}),wRe=[Kbt,Vbt,Wbt,qbt];var RRe=[iRe,sRe,lRe,cRe,uRe,bRe,SRe,TRe,ERe,vRe,ARe];async function Qbt({testPath:e,logger:t,project:n,storage:o,orgId:r,mutableStepState:i}){let s=await o.getTestByPath({relativeTestPath:e,logger:t}),a=s.envs?.find(d=>d.default)?.name;if(i&&i.testId!==s.id)throw new Error(`Cannot extract a module from test ${s.id} with mutable state for ${i.testId}.`);let l=i?.stepLists??{steps:s.steps,beforeSteps:s.beforeSteps??void 0,afterSteps:s.afterSteps??void 0},c=await Ns({logger:t,orgId:r,project:n}),{stepListsWithCaches:u}=await uc({cacheStorage:c,logger:t,schemaVersion:s.schemaVersion,stepLists:l,testId:s.id,environment:a,useSnapshotIdentityCache:n.config.fileFormat==="v2"});return {availableSteps:u.steps,baseState:{steps:u.steps,beforeSteps:u.beforeSteps??[],afterSteps:u.afterSteps??[]},cacheSaveContext:{testId:s.id,environment:a,stepCacheStorage:c}}}async function e0({project:e,storage:t,logger:n,relativeTestPath:o,saveChangesToDisk:r,mutableStepState:i,params:s}){let a=xr();zu(s.name);let l=await t.scanEntities(),c;s.startIndex!==void 0&&o!==void 0&&(c=await Qbt({testPath:o,logger:n,project:e,storage:t,orgId:a,mutableStepState:i}));let{stepsToExtract:u,startIndex:d,endIndex:m}=nve({moduleName:s.name,existingModuleNames:Object.values(l.modules).map(I=>I.name),...s,parameterNames:s.parameters,testPath:o,availableSteps:c?.availableSteps,containsNestedModuleStep:xoe}),{module:p}=await t.createModule({name:s.name,description:s.description??"",enabled:s.enabled??true,parameters:s.parameters,defaultParameters:s.defaultParameters,parameterEnums:s.parameterEnums,steps:u,subDir:s.subDir,momenticFiles:l});if(s.startIndex===void 0)return {module:p};if(!o||!c)throw new Error("Failed to initialize extraction state for module create");let h=Object.keys(s.moduleInputs??{}).length>0,g=(p.parameters?.length??0)>0,f;h?f=s.moduleInputs:g?f={}:f=void 0;let y={...p,type:"RESOLVED_MODULE",id:randomUUID(),steps:p.steps,inputs:f},S=cloneDeep(c.baseState);S.steps.splice(d,m-d,y),i&&(i.stepLists=S);let{environment:b,stepCacheStorage:v,testId:A}=c.cacheSaveContext,R=e.config.fileFormat==="v2",{cachesToSave:w,snapshotCachesToSave:O}=await Co({stepLists:S,useSnapshotIdentityCache:R,cacheCreationParams:{orgId:a,testId:A,environment:b}});return R&&await v.saveSnapshotCacheEntries({logger:n,entries:O}),await v.saveStepCacheEntries({logger:n,entries:w}),r&&await t.updateTestByPath({logger:n,relativeTestPath:o,stepLists:S,schemaVersion:Ct}),{module:p}}var CRe=rr({schema:{name:wX,description:"Create a module. The name must satisfy Momentic entity naming rules or the tool will fail. If startIndex is provided, testPath is required and the specified test range is extracted into the module, then replaced with a module invocation in that test. endIndex may only be provided when startIndex is set.",inputSchema:{name:z$1.string().describe(Mf),description:z$1.string(),enabled:z$1.boolean().default(true),parameters:z$1.string().array().optional().describe("Array of parameter names for the module, e.g., ['apiKey', 'userId']."),defaultParameters:z$1.record(z$1.string(),z$1.string()).optional().describe("Default values for parameters, e.g., { 'apiKey': 'default123' }. Keys must match parameters."),parameterEnums:z$1.record(z$1.string(),z$1.string().array()).optional().describe("Enum options for parameters, e.g., { 'role': ['admin', 'user'] }. Keys must match parameters."),moduleInputs:z$1.record(z$1.string(),z$1.string()).optional().describe("Input parameters to pass to the new module when it's inserted into the test. Keys must match the module's defined parameters. Only relevant when extracting from a test."),subDir:z$1.string().optional().describe("Subdirectory to create the module in. If not provided, the module is created in the project root."),testPath:z$1.string().optional().describe("Relative path to the test to extract steps from. Required when startIndex is provided."),startIndex:z$1.number().optional().describe("Start index of steps to extract from the target test (0-based)."),endIndex:z$1.number().optional().describe("End index of steps to extract from the target test (exclusive). Only valid when startIndex is provided. If not provided, extracts just startIndex.")}},handle:async(e,t,n,o)=>{let{testPath:r,...i}=t;try{let s=Kpe({projectRoot:e.project.rootDir,filePath:r,pathLabel:"testPath"}),a=await e0({project:e.project,storage:e.storage,logger:e.logger,relativeTestPath:s,saveChangesToDisk:e.saveChangesToDisk,params:i});n.addPartFromText(JSON.stringify(a.module,null,2));}catch(s){n.addError(z(s));}}});var t0=[...wRe,...qF,...RRe,CRe,bye,JAe,fEe,eEe,xye,pEe,BAe,WAe,Mye];function n0({enableUnsafeFullAccess:e=false}={}){return e?[...t0,aRe]:t0}async function IRe(e){let{project:t,applicationName:n,daemonPort:o,daemonToken:r,daemonSessionId:i,logger:s,cliVersion:a}=e,l=t.configFilePath,c=PRe(e);await zF(e);let{context:u}=VF({...e,logger:s.child({daemonSessionId:i}),applicationName:`${n}-daemon`,serverId:i});await UEe({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 DEe({context:u,tool:m,input:p,extra:h})}}},sessionManager:ei,daemonPort:o,daemonToken:r,daemonId:i,cliVersion:a,workerType:"momentic-web-mcp",configPath:l,inactivityTimeoutMsOverride:FK(e)*2,onShutdown:()=>{dp();}});}async function qK(e){let{project:t,logger:n,apiKey:o,serverUrl:r,cliVersion:i,alwaysSaveCache:s,noCache:a,videoDefault:l,headfulDefault:c,devicePixelRatio:u,sessionIdleTimeoutMinutes:d,shareDiagnostics:m,enableUnsafeFullAccess:p}=e,h=t.configFilePath;return PEe({workerType:"momentic-web-mcp",configPath:h,apiKey:o,serverUrl:r,cliVersion:i,shareDiagnostics:!!m,enableUnsafeFullAccess:!!p,logger:n,buildDaemonArgs:({entryScript:g})=>tTt({entryScript:g,serverUrl:r,configPath:h,alwaysSaveCache:s,noCache:a,videoDefault:l,headfulDefault:c,devicePixelRatio:u,sessionIdleTimeoutMinutes:d,shareDiagnostics:m,enableUnsafeFullAccess:p})})}async function xRe(e){let{logger:t,applicationName:n,cliVersion:o,serverUrl:r}=e,i=_Re(e);cp(r),await qK(e);let{info:s,mcpLogger:a}=DK({logger:t,applicationName:`${n}-daemon-proxy`,cliVersion:o});return iF({context:{logger:a},info:s,tools:FEe({tools:i,resolveDaemonStateForCall:()=>qK(e),logger:a})})}var eTt=30*6e4;async function KK({options:e,toolName:t,input:n,timeoutMs:o=eTt}){cp(e.serverUrl);let r=PRe(e),i=r.get(t);if(!i)throw new Error(`Unknown web MCP tool '${t}'. Known tools: ${Array.from(r.keys()).join(", ")}`);let s=i.schema.inputSchema.parse(n),a=typeof s.sessionId=="string"?s.sessionId:void 0,l;if(a?l=await yI({workerType:"momentic-web-mcp",configPath:e.project.configFilePath,cliVersion:e.cliVersion,sessionId:a,logger:e.logger}):l=await qK(e),!l)throw new Error(`No active session found for id '${a}'.`);return Qq({state:l,toolName:t,input:s,timeoutMs:o})}function tTt({entryScript:e,serverUrl:t,configPath:n,alwaysSaveCache:o,noCache:r,videoDefault:i,headfulDefault:s,devicePixelRatio:a,sessionIdleTimeoutMinutes:l,shareDiagnostics:c,enableUnsafeFullAccess:u}){let d=[e,"mcp","--server",t,"--daemon","--config",n,"--headful-browser",s?"true":"false","--video",i?"true":"false"];return o&&d.push("--save-cache"),r&&d.push("--disable-cache"),d.push("--pixel-ratio",String(a)),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 _Re(e){return n0(e).map(t=>t.tool)}function PRe(e){return new Map(_Re(e).map(t=>[t.schema.name,t]))}var YK=async(e,t)=>{try{let{killed:n,failed:o}=await ei.killAllSessions(e);o.length>0?t.warn({failed:o,reason:e},"Some browser sessions failed to terminate on shutdown"):n.length>0&&t.info({killedCount:n.length,reason:e},"Terminated browser sessions on shutdown");}catch(n){t.warn({err:n,reason:e},"Failed to terminate browser sessions on shutdown");}};async function JK(e){let{daemon:t,logger:n}=e,o=_Ee.safeParse(process.env);if(t&&o.success&&o.data[oF]==="momentic-web-mcp")return IRe({...e,daemonPort:o.data[tF],daemonToken:o.data[nF],daemonSessionId:o.data[rF]});if(Ih(n,true),t)return await xRe(e);await zF(e);let{context:r,info:i}=VF(e);return iF({context:r,info:i,tools:n0(e),shutdownHandlers:[YK,dp,async()=>{await HF();}]})}var BI="3.56.1",po=$b({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:BI});(async()=>{try{let e=await Ec(po);e.gitBranchName&&po.addBinding("branch",e.gitBranchName);}catch{}})();var zg=Router();async function r0(e,t){let n=Object.values(e.modules).filter(i=>t===void 0||t.has(i.id));return (await Fz({momenticFiles:e,moduleHandles:n,logger:po})).filter(i=>t===void 0||t.has(i.moduleId)).map(i=>{let s=e.modules[i.moduleId];if(!s){C.warn(`Found a dangling module with ID ${i.moduleId} that could not be found on disk.`);return}return {...s,content:i}}).filter(i=>i!==void 0)}zg.get("/",zt(async(e,t)=>{let n=xt(),o=await El(n),r=await r0(o);t.status(200).json(r);}));zg.post("/",zt(async(e,t)=>{let n;try{n=f8.parse(e.body);}catch(l){t.status(400).json({error:`Invalid request body: ${l}`});return}try{zu(n.name);}catch(l){t.status(400).json({error:`Invalid module name: ${l}`});return}let o=xt(),r=await tt(o),i=r.modules;if(Object.values(i).find(l=>l.name===n.name)){t.status(400).send(`A module with the name "${n.name}" already exists. Please choose a different name.`);return}let s=mo__default.join(o.rootDir,n.folderPath??mo__default.dirname(n.testFilePath));if(!oo__default.existsSync(s)||!oo__default.statSync(s).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${s}' does not exist.`});return}let a=await XM({...n,folder:s,project:o,momenticFiles:r});t.status(201).json(a);}));zg.get("/:moduleId/tests",zt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n=xt(),o=await tt(n),r=e.params.moduleId;if(!o.modules[r]){t.status(404).json({error:"Module not found."});return}let i=[];for(let a of Object.values(o.tests))Uz(a.fullFilePath,o).has(r)&&i.push({id:a.id,name:a.name,relativePath:a.relativePath});let s={tests:i};t.status(200).json(s);}));zg.get("/:moduleId",zt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n=await El(xt()),o=n.modules[e.params.moduleId];if(!o){t.status(404).json({error:"Module not found."});return}try{let r=await Td({modHandle:o,momenticFiles:n,logger:C});t.json(r);}catch(r){t.status(400).json({err:r});}}));zg.post("/:moduleId/duplicate",zt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n;try{n=g8.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{zu(n.name);}catch(h){t.status(400).json({error:h.message});return}let o=xt(),r=await tt(o),i=r.modules[e.params.moduleId];if(!i){t.status(404).json({error:"Module not found."});return}if(Object.values(r.modules).find(h=>h.name===n.name)){t.status(400).send(`A module with the name "${n.name}" already exists. Please choose a different name.`);return}let s=n.sourceModuleContent;if(s.moduleId!==e.params.moduleId){t.status(400).json({error:"Duplicate source module content does not match moduleId."});return}let a=mo__default.join(o.rootDir,mo__default.dirname(i.relativePath));if(!oo__default.existsSync(a)||!oo__default.statSync(a).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${a}' does not exist.`});return}let l=Ao(n.name),c=mo__default.join(a,`${l}.module.yaml`),u=Sd({projectConfig:o.config,momenticFiles:r,entityType:"module"}),{stepsToSave:d}=await Co({stepLists:{steps:s.steps},createNewCacheIds:true}),m={fileType:De.MODULE,schemaVersion:Ct,moduleId:u,name:n.name,description:"",enabled:true,steps:d.steps,parameters:s.parameters,defaultParameters:s.defaultParameters,parameterEnums:s.parameterEnums,defaultCacheKey:s.defaultCacheKey,defaultCacheTtl:s.defaultCacheTtl,defaultCacheAllInvocations:s.defaultCacheAllInvocations,autoAuth:s.autoAuth,advanced:s.advanced,defaultRetries:s.defaultRetries};pc({module:m,filePath:c,projectConfig:o.config,momenticFiles:r});let p={relativeFilePath:mo__default.relative(o.rootDir,c)};t.status(201).json(p);}));zg.patch("/:moduleId/move",zt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n;try{n=S8.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${z(i)}`});return}let o=xt();if(!(await El(o)).modules[e.params.moduleId]){t.status(404).json({error:"Module not found."});return}await _se({moduleId:e.params.moduleId,targetFolderRelativePath:n.folderPath,project:o}),t.status(200).json({message:"ok"});}));zg.patch("/:moduleId/metadata",zt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n;try{n=y8.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let o=xt(),r=await El(o);await Pse({moduleId:e.params.moduleId,content:n,momenticFiles:r,logger:C,project:o}),t.status(201).json({message:"ok"});}));var ORe=zg;var uE=Router();uE.get("/",zt(async(e,t)=>{let n=xt(),o=await tt(n),r=new Set;o?.tests&&Object.values(o.tests).forEach(c=>{c.labels?.forEach(u=>r.add(u));});let i=Array.from(r).sort(),s=Object.values(o.tests),a=await r0(o),l={labels:i,tests:s,modules:a};t.status(200).json(l);}));uE.get("/folders",zt(async(e,t)=>{let n=xt(),o=await gse(n);t.status(200).json(o);}));uE.get("/summary",zt(async(e,t)=>{let n=xt(),r={hasEntities:await hse(n,[De.TEST,De.TEST_V2,De.MODULE,De.MODULE_V2])};t.status(200).json(r);}));uE.get("/labels",zt(async(e,t)=>{let n=xt(),o=await tt(n),r=new Set;for(let s of Object.values(o.tests))s.labels?.forEach(a=>r.add(a));let i=Array.from(r).sort();t.status(200).json(i);}));uE.post("/in-folder",zt(async(e,t)=>{let n=u8.safeParse(e.body);if(!n.success){t.status(400).json({error:`Failed to parse entities-in-folder body: ${n.error.message}`});return}let{pathSegments:o}=n.data,r=xt(),i=await pse(r,o),s=Object.values(i.tests),a=new Set(Object.keys(i.modules)),l=[];if(a.size>0){let u=await El(r);l=await r0(u,a);}let c={tests:s,modules:l};t.status(200).json(c);}));var MRe=uE;var XK=Router();XK.get("/",zt((e,t)=>{let n=rk(xt(),po);t.status(200).json(n);}));XK.get("/names",zt((e,t)=>{let o=xt().config.environments?.map(r=>r.name)??[];t.status(200).json(o);}));var kRe=XK;var LRe=Router();LRe.get("/",zt((e,t)=>{let n={userId:kd(),orgId:xr(),email:mA(),name:Fpe(),pylonEmailHash:Bpe(),cliVersion:BI};t.status(200).json(n);}));var NRe=LRe;var QK="mcp-session-id",DRe="MOMENTIC_SESSION_IDLE_TIMEOUT_MINUTES",i0=Router();function uTt(){let e=process.env[DRe];if(!e)return oS*60*1e3;let t=Number.parseInt(e,10);return Number.isNaN(t)||t<1?(po.warn({envVar:DRe,rawValue:e,fallback:oS},"Invalid MCP session idle timeout env var; falling back to default"),oS*60*1e3):t*60*1e3}function dTt(e){let{headfulDefault:t,supportsFileOutput:n}={},o={serverId:randomUUID(),applicationName:"momentic-mcp-desktop-server",cliVersion:BI},r=xt(),i=up(),s=_l(),a=po.child({orgId:xr(),userId:kd(),...o}),l=new Nt({baseUrl:s,apiKey:i,logger:a,mode:"interactive",runner:"mcp"}),c=Nw(process.env.MOMENTIC_HEADFUL_BROWSER),u=new Cr(r.config.ai?.agentConfig,{baseUrl:s,apiKey:i,logger:a,mode:"interactive",runner:"mcp"}),d=xr(),m=new Nl(l,d,r);return {context:{project:r,orgId:d,logger:a,generator:u,apiClient:l,storage:m,serverId:o.serverId,extractBaseDir:yu(r.rootDir),saveChangesToDisk:true,supportsFileOutput:n??true,knowledgeRetrievalResults:wn,knowledgeCitations:[],sessionIdleTimeoutMs:uTt(),headfulDefault:t??c??true,categoryDefinitions:r.config.ai?.classification?.categories??Ca},info:o}}var Op={};i0.post("/",async(e,t)=>{let n=String(e.headers[QK]??"");try{if(n&&Op[n]){await Op[n].handleRequest(e,t,e.body);return}if(!n&&isInitializeRequest(e.body)){let{context:o,info:r}=dTt(),i=Zq(o,r,t0),s=new StreamableHTTPServerTransport({sessionIdGenerator:()=>randomUUID(),enableDnsRebindingProtection:!1,onsessioninitialized:a=>{Op[a]=s;}});s.onclose=()=>{let a=s.sessionId;a&&Op[a]&&delete Op[a],i.close().catch(()=>{});},await i.connect(s),await s.handleRequest(e,t,e.body);return}t.status(400).json({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: No valid session ID provided"},id:null});}catch{t.headersSent||t.status(500).json({jsonrpc:"2.0",error:{code:-32603,message:"Internal server error"},id:null});}});i0.get("/",async(e,t)=>{let n=String(e.headers[QK]??"");if(!n||!Op[n]){t.status(400).send("Invalid or missing session ID");return}await Op[n].handleRequest(e,t);});i0.delete("/",async(e,t)=>{let n=String(e.headers[QK]??"");if(!n||!Op[n]){t.status(400).send("Invalid or missing session ID");return}let o=Op[n];try{await o.handleRequest(e,t);}catch{t.headersSent||t.status(500).send("Error processing session termination");}});var BRe=i0;var URe=Router();URe.get("/:id",zt(async(e,t)=>{let{id:n}=e.params;if(!n){t.status(400).json({error:"Missing ID"});return}let o=No();if(!o){t.status(500).json({error:"API client not initialized"});return}try{let{data:r,contentType:i}=await o.fetchOnDemandScreenshot(n);t.setHeader("Content-Type",i),t.status(200).send(r);}catch(r){po.error({err:r,screenshotId:n},"Failed to proxy on-demand screenshot"),t.status(404).json({error:"Screenshot not found"});}}));var HRe=URe;var ZK=Router(),jRe=e=>({name:e.config.name,configFilePath:e.configFilePath,fileFormat:e.config.fileFormat});ZK.get("/",zt(async(e,t)=>{let n=xt(),o=new Map;for(let i of await $z())o.set(i.configFilePath,i);o.set(n.configFilePath,n);let r={projects:[...o.values()].map(jRe),current:jRe(n)};t.status(200).json(r);}));ZK.post("/set",zt(async(e,t)=>{let n;try{n=A8.parse(e.body);}catch(o){t.status(400).json({error:`Invalid request body: ${o}`});return}po.info("Setting local project");try{let o=await Rn({configFilePath:n.configFilePath}),r=No();if(!r)throw new Error("API client is not initialized.");await pA({project:o,apiClient:r});}catch(o){t.status(400).json({error:`Error setting project: ${o}`});return}t.sendStatus(204);}));var $Re=ZK;var GRe=Router();GRe.get("/",zt((e,t)=>{let n=xt(),o={ai:n.config.ai,browser:n.config.browser,displayRoot:n.config.displayRoot};t.status(200).json(o);}));var zRe=GRe;var Xd=Router();Xd.post("/",zt(async(e,t)=>{let n;try{n=p8.parse(e.body);}catch(o){t.status(400).json({error:`Invalid request body: ${o}`});return}try{let o=xt(),r=await DI({project:o,input:n});Ll({type:"test_editor:test_create",test_platform:"web"}),t.status(201).json(r);}catch(o){if(o instanceof Gt){t.status(400).json({error:o.message});return}throw o}}));Xd.get("/:testPath",zt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o=xt(),r=await El(o),i;try{i=await $a(mo__default.join(o.rootDir,n),po,r),await(await Ns({logger:po,orgId:xr(),project:o})).resolveStepCacheEntries({schemaVersion:i.schemaVersion,testId:i.id,environment:i.envs?.find(a=>a.default)?.name,stepLists:{beforeSteps:i.beforeSteps,steps:i.steps,afterSteps:i.afterSteps},logger:po,useSnapshotIdentityCache:o.config.fileFormat==="v2"}),t.status(200).json(i);}catch(s){t.status(400).send({error:s.message});return}(async()=>{try{await nk({relativeTestPath:n,stepLists:{steps:i.steps,beforeSteps:i.beforeSteps,afterSteps:i.afterSteps},schemaVersion:Ct,momenticFiles:r,project:o});}catch(s){po.error({err:s},"Failed to save migrated test to disk after initial fetch");}})();}));Xd.get("/:testPath/metadata",zt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o=xt(),r=mo__default.join(o.rootDir,n);if(!oo__default.existsSync(r)){t.status(404).json({error:"Test file not found."});return}let i=oo__default.statSync(r),s=await Ec(po),a={gitBranch:s.gitBranchName??"unknown",fileMtime:i.mtime,gitCommitSha:s.gitCommitSha??"unknown"};t.status(200).json(a);}));Xd.patch("/:testPath/metadata",zt(async(e,t)=>{if(!e.params.testPath){t.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=m8.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let r={message:"ok",newRelativeTestPath:HR(e.params.testPath,n,xt()).newRelativeTestPath};t.status(200).json(r);}));Xd.patch("/:testPath",zt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=d8.parse(e.body);}catch(p){po.warn({err:p},"Invalid save request"),t.status(400).json({error:`Invalid request body: ${p}`});return}po.info({testPath:n},"Save received");let r=xt(),i=await El(r),s;try{s=nu(n,r);}catch(p){t.status(400).json({error:`Existing test file on disk is invalid: ${p}`});return}let a=r.config.fileFormat==="v2",{stepsToSave:l,moduleUpdates:c,cachesToSave:u,snapshotCachesToSave:d}=await Co({stepLists:o.stepLists,useSnapshotIdentityCache:a,cacheCreationParams:{orgId:xr(),testId:s.id,environment:s.envs?.find(p=>p.default)?.name}}),m=await Ns({logger:po,orgId:xr(),project:r});a&&await m.saveSnapshotCacheEntries({logger:po,entries:d}),await m.saveStepCacheEntries({logger:po,entries:u}),await Bz({relativeTestPath:n,stepsToSave:l,moduleUpdates:c,schemaVersion:o.schemaVersion,momenticFiles:i,project:r}),t.status(201).json({message:"ok"});}));Xd.patch("/:testPath/environments",zt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=T8.parse(e.body);}catch(r){t.status(400).json({error:`Invalid request body: ${r}`});return}HR(n,{envs:o.defaultEnv?[{name:o.defaultEnv,default:true}]:[]},xt()),t.status(201).json({message:"ok"});}));Xd.patch("/:testPath/move",zt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=b8.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${z(i)}`});return}let r=xt();if(!oo__default.existsSync(mo__default.join(r.rootDir,n))){t.status(404).json({error:"Test not found."});return}await Ose({relativeTestPath:n,targetFolderRelativePath:o.folderPath,project:r}),t.status(200).json({message:"ok"});}));Xd.delete("/:testPath",zt((e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o=xt(),r=mo__default.join(o.rootDir,n);if(!oo__default.existsSync(r)){t.status(404).json({error:"Test not found."});return}oo__default.unlinkSync(r),t.status(200).json({message:"ok"});}));Xd.post("/:testPath/duplicate",zt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=h8.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{zu(o.name);}catch(h){t.status(400).json({error:h.message});return}let r=xt(),i=mo__default.join(r.rootDir,n);if(!oo__default.existsSync(i)){t.status(404).json({error:"Test not found."});return}let s=await tt(r),a;try{a=await $a(i,po,s);}catch(h){t.status(400).send({error:h.message});return}let l=Sd({projectConfig:r.config,momenticFiles:s,entityType:"test"}),c=Wo.parse({...a,name:o.name,id:l}),{stepsToSave:u}=await Co({stepLists:{steps:a.steps,beforeSteps:a.beforeSteps,afterSteps:a.afterSteps},createNewCacheIds:true}),d=mo__default.dirname(i),m=mo__default.join(d,`${o.name}.test.yaml`);hc({test:{fileType:De.TEST,...c,...u},filePath:m,projectConfig:r.config,momenticFiles:s});let p={relativeFilePath:mo__default.relative(r.rootDir,m)};Ll({type:"test_editor:test_duplicated"}),t.status(201).json(p);}));var VRe=Xd;var WRe=15e4,Ta={numScreenshots:10,numBrowserStates:2,tokensThreshold:25e4,targetTokens:2e5};function Qd(){return {openai:{reasoningEffort:IH,reasoningSummary:"auto",textVerbosity:"low",store:false,include:["reasoning.encrypted_content"]},azure:{reasoningEffort:IH,reasoningSummary:"auto",textVerbosity:"low",store:false,include:["reasoning.encrypted_content"]}}}var yTt="about:blank",STt=[".webm",".mp4"];function nY(e){return e?oo__default.mkdtempSync(mo__default.join(Nm.tmpdir(),"momentic-explore-video-")):void 0}async function Eu(e){let{sessionManager:t,storage:n,logger:o,owner:r,signal:i,timelineLane:s}=e,a=nY(s),l=new UD(o),c=await t.startTestlessSession({logger:o,storage:n,baseUrl:yTt,runner:"explore",disableConsoleLogs:true,callbacks:{onNetworkPage:l.onNetworkPage,onNetworkLogs:l.onNetworkLogs},videoOutputDir:a}).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 oY({logger:m,timelineLane:s,videoOutputDir:a,videoStartTimes:c.videoStartTimes,videoActivations:c.videoActivations,finishedAt:Date.now()}),await bTt({logger:m,timelineLane:s,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:WRe,networkLogEntriesPath:()=>l.entriesFilePath,cleanupBrowserSession:d},isAlive:()=>t.getSession(c.sessionId)!==void 0}}async function oY({logger:e,timelineLane:t,videoOutputDir:n,videoStartTimes:o,videoActivations:r,finishedAt:i}){if(!(!t||!n))try{for(let s of await oo__default.promises.readdir(n)){if(!STt.includes(mo__default.extname(s)))continue;let a=r?.filter(l=>l.videoName===s).map(l=>l.timestamp).sort((l,c)=>l-c);await t.attachVideo({sourcePath:mo__default.join(n,s),startedAt:o?.get(s),finishedAt:i,activations:a?.length?a:void 0});}}catch(s){e.warn({err:s,videoOutputDir:n},"Failed to attach explore browser videos to timeline");}}async function bTt({logger:e,timelineLane:t,entriesFilePath:n}){if(t)try{if((await oo__default.promises.stat(n)).size===0)return;await t.attachNetworkLog({sourcePath:n});}catch(o){e.warn({err:o,entriesFilePath:n},"Failed to attach explore network log to timeline");}}var ATt=2/3;function qRe(e,t){return t===void 0?{signal:e}:{signal:AbortSignal.any([e,AbortSignal.timeout(t)]),buildTimeoutMs:Math.floor(t*ATt)}}function mE(e,t){if(!e?.aborted)return z(t);let n=e.reason;return n instanceof Error&&n.name==="TimeoutError"?"AI explore exceeded its --timeout budget before completing":"AI explore was cancelled before completing"}function KRe(e){let t=e.filter(n=>n!==void 0);return t.length===0?void 0:AbortSignal.any(t)}async function Mp(e,t){try{await mV.rm(e,{recursive:!0,force:!0});}catch(n){t.warn({err:n,spoolDir:e},"Failed to clean up explorer spool dir");}}async function iY(e){return await ETt(e),await vTt(e),await wTt(e)}async function ETt(e){try{await c2(e).version();}catch(t){throw new Error(`git is not available on PATH. Install git to use 'momentic ai explore' (${z(t)}).`,{cause:t})}}async function vTt(e){let t;try{t=await c2(e).checkIsRepo();}catch(n){throw new Error(`Failed to determine whether ${e} is a git repository: ${z(n)}`,{cause:n})}if(!t)throw new Error(`${e} is not inside a git repository. Run 'momentic ai explore' from inside a git repository.`)}async function wTt(e){let t=c2(e);try{let n=(await t.revparse(["--show-toplevel"])).trim();if(n.length===0)throw new Error("git rev-parse --show-toplevel returned an empty path.");return n}catch(n){throw new Error(`Failed to resolve git repository toplevel from ${e}: ${z(n)}`,{cause:n})}}z$1.object({testIds:z$1.array(z$1.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$1.array(z$1.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 kp=class extends Nl{overlay;diskProject;writtenFilePaths=new Set;constructor(t,n,o){let r=new VM(mt);super(t,n,o,r),this.overlay=r,this.diskProject=o;}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,n){let o=s0(await this.collectDraftTests(t),n.testIds,u=>u.test.id,"test"),r=s0(await this.collectDraftModules(t),n.moduleIds,u=>u.module.moduleId,"module");if(o.length===0&&r.length===0)return {acceptedTests:[],acceptedModules:[]};let i=await tt(this.diskProject,true);this.assertModuleRefsSatisfied(o,r,i);let s=[];try{for(let u of [...r,...o])this.overlay.materialize(u.entity.fullFilePath),u.kind==="create"&&s.push(u.entity.fullFilePath);}catch(u){for(let d of s)RTt(d);throw new Error("Failed to persist pending changes to disk",{cause:u})}let a=[];for(let u of [...r,...o])this.overlay.discard(u.entity.fullFilePath),u.kind!=="delete"&&(this.writtenFilePaths.add(u.entity.fullFilePath),a.push(u.entity.fullFilePath));OT(a,this.diskProject.config);let l=r.map(u=>({moduleId:u.module.moduleId,relativeFilePath:u.entity.relativePath}));return {acceptedTests:o.map(u=>({testId:u.test.id,relativeFilePath:u.entity.relativePath})),acceptedModules:l}}async rejectDrafts(t,n){let o=await this.collectDraftTests(t),r=s0(o,n.testIds,u=>u.test.id,"test"),i=s0(await this.collectDraftModules(t),n.moduleIds,u=>u.module.moduleId,"module"),s=new Set(r.map(u=>u.test.id)),a=[];for(let u of i){let d=u.module.moduleId,m=[];for(let p of o)s.has(p.test.id)||p.kind!=="delete"&&YRe(p.test).has(d)&&m.push(p.test.name);m.length!==0&&a.push(`Cannot reject module "${d}" because it is still referenced by pending test(s) ${m.map(p=>`"${p}"`).join(", ")}.`);}if(a.length>0)throw new Gt(a.join(`
|
|
9029
|
+
`)}));}}),SRe=rr({schema:{name:th,description:`Execute one preset, AI Action, or module step without adding it to the test. Cache IDs are optional and only returned by successful cache-capable steps. Only one preview or run may execute per session. ${Pr}`,inputSchema:{sessionId:z$1.string(),step:z$1.string().describe(ZF),timeoutSeconds:sF}},handle:async(e,t,n,o)=>{let r=Au({response:n,sessionId:t.sessionId,toolName:th});if(!r)return;let i=aF({runs:r.runStepRuns,toolName:th,run:()=>VK({session:r,response:n,extra:o,operation:async()=>{let s=!1;return {parts:await FI({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:No(),onStepResult:l=>{s=l.status==="SUCCESS";}}),isError:!s}}})});await WK({session:r,response:n,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}}),bRe=rr({schema:{name:cH,description:`Locate targets for multiple future preset steps against one captured browser state. Locator requests run concurrently and successful results return CacheIds that can be supplied to matching steps with --cache-id. Steps using --disable-cache are located without saving or returning a CacheId. This tool does not execute any interaction. Use it only when the planned interactions before each target are not expected to remove, replace, or materially change those future targets. If an interaction may change the relevant UI, locate that target after the interaction instead. ${Pr}`,inputSchema:{sessionId:z$1.string(),steps:z$1.array(z$1.string().describe(ZF)).min(1).max(20)}},handle:async(e,t,n,o)=>{await rS({response:n,extra:o,sessionId:t.sessionId,toolName:cH,attributes:{"momentic.element_count":t.steps.length},operation:async r=>{let i=await mRe({project:r.storage.getProject(),steps:t.steps,logger:e.logger,controller:r.controller,testContext:r.context,tempCaches:r.tempCaches});n.addContentParts(i);}});}}),TRe=rr({schema:{name:Ov,description:`Execute multiple steps sequentially without adding them to the test. Supports the same preset, AI Action, and module steps as ${th}, stopping at the first failure. Cache IDs are optional and only returned by successful cache-capable steps. Only one preview or run may execute per session. ${Pr}`,inputSchema:{sessionId:z$1.string(),steps:z$1.array(z$1.string().describe(ZF)).min(1).max(20),timeoutSeconds:sF}},handle:async(e,t,n,o)=>{let r=Au({response:n,sessionId:t.sessionId,toolName:Ov});if(!r)return;let i=aF({runs:r.runStepRuns,toolName:Ov,run:()=>VK({session:r,response:n,extra:o,operation:async()=>{let s=await dRe({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:No()});return {parts:s.parts,isError:!s.successful}}})});await WK({session:r,response:n,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}});async function VK({session:e,response:t,extra:n,operation:o}){return HK({session:e,signal:n?.signal,operation:async()=>{if(ei.getSession(e.sessionId)!==e||e.cleanupInProgress)throw new Error(`Session '${e.sessionId}' is no longer active.`);e.controller.setOpen();let r=n?.signal?e.controller.bindCancellation(n.signal):void 0;r&&t.addCleanupCallback(r),n?.signal.throwIfAborted();try{return await o()}finally{r?.();}}})}async function WK({session:e,response:t,stepRunnerId:n,timeoutSeconds:o}){let r=await tK({runs:e.runStepRuns,stepRunnerId:n,timeoutMs:o*1e3});nK({result:r,response:t,statusToolName:xv});}var ARe=rr({schema:{name:JS,description:`Insert, delete, or replace steps in the active session's test by index. Cache IDs are optional and must only be included when a preview or locate tool returned one for that exact step. Many steps do not support caches and successful previews will not return a CacheId; splice those CLI steps unchanged without --cache-id. Use parentStepIdChain to splice into nested steps (e.g. inside a conditional or module). The response includes inserted/deleted step refs with the updated active-session ids; use those ids for later run_step calls. The response always includes a recovery artifact with the full deleted and inserted payloads; only inspect it when you need to undo or inspect a mistaken splice. ${Pr}`,inputSchema:{sessionId:z$1.string(),startIndex:z$1.number(),deleteCount:z$1.number().describe("Number of steps to remove. Use 0 to insert without deleting, 1 to replace a single step, or N to delete N steps."),steps:z$1.array(z$1.string()).describe(ZF),targetSection:Em.default("main"),parentStepIdChain:z$1.array(z$1.string()).optional().describe("When splicing into a nested step (e.g. conditional or module), the chain of parent step ids from root to the container. Empty or omit for top-level."),returnTest:z$1.boolean().default(false).describe("Return the full post-splice test snapshot. Avoid this by default. Use true only when you truly need the full updated test; the normal response already includes inserted/deleted step references plus a recovery artifact for mistaken-splice recovery.")}},handle:async(e,t,n,o)=>{let r=Au({response:n,sessionId:t.sessionId,toolName:JS});if(!r)return;let i=await JF({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&&Ll({type:"mcp:step_added",test_platform:"web",step_count:t.steps.length});let s=i.value.map(a=>a.type==="media"?{type:"media",data:a.data,mediaType:"image/jpeg"}:a);n.addContentParts(s);}}),ERe=rr({schema:{name:Zp,description:`${b_} Use step ids from active Test Content or splice responses, never raw v2 YAML. Only one preview or run may execute per session. ${Pr}`,inputSchema:{sessionId:z$1.string(),fromStep:G_,toStep:z_.optional(),targetSection:Em.default("main"),resetSession:z$1.boolean().default(false).describe("Whether to reset the browser session before running the steps."),disableCache:z$1.boolean().default(false).describe("Run this invocation without reading or writing step caches."),timeoutSeconds:sF}},handle:async(e,t,n,o)=>{let r=Au({response:n,sessionId:t.sessionId,toolName:Zp});if(!r)return;let i=aF({runs:r.runStepRuns,toolName:Zp,run:s=>VK({session:r,response:n,extra:o,operation:()=>Ybt({context:e,params:t,response:n,extra:o,session:r,stepRunnerId:s})}).then(a=>({parts:a}))});await WK({session:r,response:n,stepRunnerId:i.stepRunnerId,timeoutSeconds:t.timeoutSeconds});}});async function Ybt({context:e,params:t,response:n,extra:o,session:r,stepRunnerId:i}){t.resetSession&&await GF({project:r.storage.getProject(),logger:e.logger,relativeTestPath:r.relativeTestPath,orgId:r.orgId,storage:r.storage,controller:r.controller,testContext:r.context,codeEvaluator:r.codeEvaluator,envName:r.envName,urlOverride:r.urlOverride,testInputs:r.testInputs,supportsFileOutput:e.supportsFileOutput,isRemoteBrowser:r.isRemoteBrowser});let s=fRe(o,e.logger,n,()=>ei.touchSession(r.sessionId),VEe({runs:r.runStepRuns,stepRunnerId:i})),a=await XF({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:s,params:{fromStep:t.fromStep,toStep:t.toStep,targetSection:t.targetSection},supportsFileOutput:e.supportsFileOutput,envName:r.envName,usageTracker:r.usageTracker,mutableStepState:r.mutableStepState,apiClient:No(),disableCache:t.disableCache});return Ll({type:"mcp:run_step_completed",test_platform:"web",status:"completed"}),a.value.map(l=>l.type==="media"?{type:"media",data:l.data,mediaType:"image/jpeg"}:l)}var vRe=rr({schema:{name:xv,description:`Check active or finished ${th}, ${Ov}, and ${Zp} executions. Pass the returned stepRunnerId to collect that operation's result. Optionally wait up to ${eK} seconds per poll. ${Pr}`,inputSchema:{sessionId:z$1.string(),stepRunnerId:z$1.string().optional().describe("Scope the poll to one preview or run. Recommended for most polls."),timeoutSeconds:z$1.number().min(0).max(eK).default(0).describe("How long to wait for the identified preview or run. 0 responds immediately. Ignored without stepRunnerId.")}},handle:async(e,t,n,o)=>{let r=Au({response:n,sessionId:t.sessionId,toolName:xv});if(!r)return;let i=await jK({signal:o?.signal,operation:()=>tK({runs:r.runStepRuns,stepRunnerId:t.stepRunnerId,timeoutMs:t.timeoutSeconds*1e3})});nK({result:i,response:n,statusToolName:xv});}}),wRe=[Kbt,Vbt,Wbt,qbt];var RRe=[iRe,sRe,lRe,cRe,uRe,bRe,SRe,TRe,ERe,vRe,ARe];async function Qbt({testPath:e,logger:t,project:n,storage:o,orgId:r,mutableStepState:i}){let s=await o.getTestByPath({relativeTestPath:e,logger:t}),a=s.envs?.find(d=>d.default)?.name;if(i&&i.testId!==s.id)throw new Error(`Cannot extract a module from test ${s.id} with mutable state for ${i.testId}.`);let l=i?.stepLists??{steps:s.steps,beforeSteps:s.beforeSteps??void 0,afterSteps:s.afterSteps??void 0},c=await Ns({logger:t,orgId:r,project:n}),{stepListsWithCaches:u}=await uc({cacheStorage:c,logger:t,schemaVersion:s.schemaVersion,stepLists:l,testId:s.id,environment:a,useSnapshotIdentityCache:n.config.fileFormat==="v2"});return {availableSteps:u.steps,baseState:{steps:u.steps,beforeSteps:u.beforeSteps??[],afterSteps:u.afterSteps??[]},cacheSaveContext:{testId:s.id,environment:a,stepCacheStorage:c}}}async function e0({project:e,storage:t,logger:n,relativeTestPath:o,saveChangesToDisk:r,mutableStepState:i,params:s}){let a=xr();zu(s.name);let l=await t.scanEntities(),c;s.startIndex!==void 0&&o!==void 0&&(c=await Qbt({testPath:o,logger:n,project:e,storage:t,orgId:a,mutableStepState:i}));let{stepsToExtract:u,startIndex:d,endIndex:m}=nve({moduleName:s.name,existingModuleNames:Object.values(l.modules).map(I=>I.name),...s,parameterNames:s.parameters,testPath:o,availableSteps:c?.availableSteps,containsNestedModuleStep:xoe}),{module:p}=await t.createModule({name:s.name,description:s.description??"",enabled:s.enabled??true,parameters:s.parameters,defaultParameters:s.defaultParameters,parameterEnums:s.parameterEnums,steps:u,subDir:s.subDir,momenticFiles:l});if(s.startIndex===void 0)return {module:p};if(!o||!c)throw new Error("Failed to initialize extraction state for module create");let h=Object.keys(s.moduleInputs??{}).length>0,g=(p.parameters?.length??0)>0,f;h?f=s.moduleInputs:g?f={}:f=void 0;let y={...p,type:"RESOLVED_MODULE",id:randomUUID(),steps:p.steps,inputs:f},S=cloneDeep(c.baseState);S.steps.splice(d,m-d,y),i&&(i.stepLists=S);let{environment:b,stepCacheStorage:v,testId:A}=c.cacheSaveContext,R=e.config.fileFormat==="v2",{cachesToSave:w,snapshotCachesToSave:O}=await Co({stepLists:S,useSnapshotIdentityCache:R,cacheCreationParams:{orgId:a,testId:A,environment:b}});return R&&await v.saveSnapshotCacheEntries({logger:n,entries:O}),await v.saveStepCacheEntries({logger:n,entries:w}),r&&await t.updateTestByPath({logger:n,relativeTestPath:o,stepLists:S,schemaVersion:Ct}),{module:p}}var CRe=rr({schema:{name:wX,description:"Create a module. The name must satisfy Momentic entity naming rules or the tool will fail. If startIndex is provided, testPath is required and the specified test range is extracted into the module, then replaced with a module invocation in that test. endIndex may only be provided when startIndex is set.",inputSchema:{name:z$1.string().describe(Mf),description:z$1.string(),enabled:z$1.boolean().default(true),parameters:z$1.string().array().optional().describe("Array of parameter names for the module, e.g., ['apiKey', 'userId']."),defaultParameters:z$1.record(z$1.string(),z$1.string()).optional().describe("Default values for parameters, e.g., { 'apiKey': 'default123' }. Keys must match parameters."),parameterEnums:z$1.record(z$1.string(),z$1.string().array()).optional().describe("Enum options for parameters, e.g., { 'role': ['admin', 'user'] }. Keys must match parameters."),moduleInputs:z$1.record(z$1.string(),z$1.string()).optional().describe("Input parameters to pass to the new module when it's inserted into the test. Keys must match the module's defined parameters. Only relevant when extracting from a test."),subDir:z$1.string().optional().describe("Subdirectory to create the module in. If not provided, the module is created in the project root."),testPath:z$1.string().optional().describe("Relative path to the test to extract steps from. Required when startIndex is provided."),startIndex:z$1.number().optional().describe("Start index of steps to extract from the target test (0-based)."),endIndex:z$1.number().optional().describe("End index of steps to extract from the target test (exclusive). Only valid when startIndex is provided. If not provided, extracts just startIndex.")}},handle:async(e,t,n,o)=>{let{testPath:r,...i}=t;try{let s=Kpe({projectRoot:e.project.rootDir,filePath:r,pathLabel:"testPath"}),a=await e0({project:e.project,storage:e.storage,logger:e.logger,relativeTestPath:s,saveChangesToDisk:e.saveChangesToDisk,params:i});n.addPartFromText(JSON.stringify(a.module,null,2));}catch(s){n.addError(z(s));}}});var t0=[...wRe,...qF,...RRe,CRe,bye,JAe,fEe,eEe,xye,pEe,BAe,WAe,Mye];function n0({enableUnsafeFullAccess:e=false}={}){return e?[...t0,aRe]:t0}async function IRe(e){let{project:t,applicationName:n,daemonPort:o,daemonToken:r,daemonSessionId:i,logger:s,cliVersion:a}=e,l=t.configFilePath,c=PRe(e);await zF(e);let{context:u}=VF({...e,logger:s.child({daemonSessionId:i}),applicationName:`${n}-daemon`,serverId:i});await UEe({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 DEe({context:u,tool:m,input:p,extra:h})}}},sessionManager:ei,daemonPort:o,daemonToken:r,daemonId:i,cliVersion:a,workerType:"momentic-web-mcp",configPath:l,inactivityTimeoutMsOverride:FK(e)*2,onShutdown:()=>{dp();}});}async function qK(e){let{project:t,logger:n,apiKey:o,serverUrl:r,cliVersion:i,alwaysSaveCache:s,noCache:a,videoDefault:l,headfulDefault:c,devicePixelRatio:u,sessionIdleTimeoutMinutes:d,shareDiagnostics:m,enableUnsafeFullAccess:p}=e,h=t.configFilePath;return PEe({workerType:"momentic-web-mcp",configPath:h,apiKey:o,serverUrl:r,cliVersion:i,shareDiagnostics:!!m,enableUnsafeFullAccess:!!p,logger:n,buildDaemonArgs:({entryScript:g})=>tTt({entryScript:g,serverUrl:r,configPath:h,alwaysSaveCache:s,noCache:a,videoDefault:l,headfulDefault:c,devicePixelRatio:u,sessionIdleTimeoutMinutes:d,shareDiagnostics:m,enableUnsafeFullAccess:p})})}async function xRe(e){let{logger:t,applicationName:n,cliVersion:o,serverUrl:r}=e,i=_Re(e);cp(r),await qK(e);let{info:s,mcpLogger:a}=DK({logger:t,applicationName:`${n}-daemon-proxy`,cliVersion:o});return iF({context:{logger:a},info:s,tools:FEe({tools:i,resolveDaemonStateForCall:()=>qK(e),logger:a})})}var eTt=30*6e4;async function KK({options:e,toolName:t,input:n,timeoutMs:o=eTt}){cp(e.serverUrl);let r=PRe(e),i=r.get(t);if(!i)throw new Error(`Unknown web MCP tool '${t}'. Known tools: ${Array.from(r.keys()).join(", ")}`);let s=i.schema.inputSchema.parse(n),a=typeof s.sessionId=="string"?s.sessionId:void 0,l;if(a?l=await yI({workerType:"momentic-web-mcp",configPath:e.project.configFilePath,cliVersion:e.cliVersion,sessionId:a,logger:e.logger}):l=await qK(e),!l)throw new Error(`No active session found for id '${a}'.`);return Qq({state:l,toolName:t,input:s,timeoutMs:o})}function tTt({entryScript:e,serverUrl:t,configPath:n,alwaysSaveCache:o,noCache:r,videoDefault:i,headfulDefault:s,devicePixelRatio:a,sessionIdleTimeoutMinutes:l,shareDiagnostics:c,enableUnsafeFullAccess:u}){let d=[e,"mcp","--server",t,"--daemon","--config",n,"--headful-browser",s?"true":"false","--video",i?"true":"false"];return o&&d.push("--save-cache"),r&&d.push("--disable-cache"),d.push("--pixel-ratio",String(a)),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 _Re(e){return n0(e).map(t=>t.tool)}function PRe(e){return new Map(_Re(e).map(t=>[t.schema.name,t]))}var YK=async(e,t)=>{try{let{killed:n,failed:o}=await ei.killAllSessions(e);o.length>0?t.warn({failed:o,reason:e},"Some browser sessions failed to terminate on shutdown"):n.length>0&&t.info({killedCount:n.length,reason:e},"Terminated browser sessions on shutdown");}catch(n){t.warn({err:n,reason:e},"Failed to terminate browser sessions on shutdown");}};async function JK(e){let{daemon:t,logger:n}=e,o=_Ee.safeParse(process.env);if(t&&o.success&&o.data[oF]==="momentic-web-mcp")return IRe({...e,daemonPort:o.data[tF],daemonToken:o.data[nF],daemonSessionId:o.data[rF]});if(Ih(n,true),t)return await xRe(e);await zF(e);let{context:r,info:i}=VF(e);return iF({context:r,info:i,tools:n0(e),shutdownHandlers:[YK,dp,async()=>{await HF();}]})}var BI="3.56.2",po=$b({app:"desktop-server",hostname:hostname(),disableConsoleLogs:true}).child({cliVersion:BI});(async()=>{try{let e=await Ec(po);e.gitBranchName&&po.addBinding("branch",e.gitBranchName);}catch{}})();var zg=Router();async function r0(e,t){let n=Object.values(e.modules).filter(i=>t===void 0||t.has(i.id));return (await Fz({momenticFiles:e,moduleHandles:n,logger:po})).filter(i=>t===void 0||t.has(i.moduleId)).map(i=>{let s=e.modules[i.moduleId];if(!s){C.warn(`Found a dangling module with ID ${i.moduleId} that could not be found on disk.`);return}return {...s,content:i}}).filter(i=>i!==void 0)}zg.get("/",zt(async(e,t)=>{let n=xt(),o=await El(n),r=await r0(o);t.status(200).json(r);}));zg.post("/",zt(async(e,t)=>{let n;try{n=f8.parse(e.body);}catch(l){t.status(400).json({error:`Invalid request body: ${l}`});return}try{zu(n.name);}catch(l){t.status(400).json({error:`Invalid module name: ${l}`});return}let o=xt(),r=await tt(o),i=r.modules;if(Object.values(i).find(l=>l.name===n.name)){t.status(400).send(`A module with the name "${n.name}" already exists. Please choose a different name.`);return}let s=mo__default.join(o.rootDir,n.folderPath??mo__default.dirname(n.testFilePath));if(!oo__default.existsSync(s)||!oo__default.statSync(s).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${s}' does not exist.`});return}let a=await XM({...n,folder:s,project:o,momenticFiles:r});t.status(201).json(a);}));zg.get("/:moduleId/tests",zt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n=xt(),o=await tt(n),r=e.params.moduleId;if(!o.modules[r]){t.status(404).json({error:"Module not found."});return}let i=[];for(let a of Object.values(o.tests))Uz(a.fullFilePath,o).has(r)&&i.push({id:a.id,name:a.name,relativePath:a.relativePath});let s={tests:i};t.status(200).json(s);}));zg.get("/:moduleId",zt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n=await El(xt()),o=n.modules[e.params.moduleId];if(!o){t.status(404).json({error:"Module not found."});return}try{let r=await Td({modHandle:o,momenticFiles:n,logger:C});t.json(r);}catch(r){t.status(400).json({err:r});}}));zg.post("/:moduleId/duplicate",zt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n;try{n=g8.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{zu(n.name);}catch(h){t.status(400).json({error:h.message});return}let o=xt(),r=await tt(o),i=r.modules[e.params.moduleId];if(!i){t.status(404).json({error:"Module not found."});return}if(Object.values(r.modules).find(h=>h.name===n.name)){t.status(400).send(`A module with the name "${n.name}" already exists. Please choose a different name.`);return}let s=n.sourceModuleContent;if(s.moduleId!==e.params.moduleId){t.status(400).json({error:"Duplicate source module content does not match moduleId."});return}let a=mo__default.join(o.rootDir,mo__default.dirname(i.relativePath));if(!oo__default.existsSync(a)||!oo__default.statSync(a).isDirectory()){t.status(400).json({error:`The folder configured for module creation '${a}' does not exist.`});return}let l=Ao(n.name),c=mo__default.join(a,`${l}.module.yaml`),u=Sd({projectConfig:o.config,momenticFiles:r,entityType:"module"}),{stepsToSave:d}=await Co({stepLists:{steps:s.steps},createNewCacheIds:true}),m={fileType:De.MODULE,schemaVersion:Ct,moduleId:u,name:n.name,description:"",enabled:true,steps:d.steps,parameters:s.parameters,defaultParameters:s.defaultParameters,parameterEnums:s.parameterEnums,defaultCacheKey:s.defaultCacheKey,defaultCacheTtl:s.defaultCacheTtl,defaultCacheAllInvocations:s.defaultCacheAllInvocations,autoAuth:s.autoAuth,advanced:s.advanced,defaultRetries:s.defaultRetries};pc({module:m,filePath:c,projectConfig:o.config,momenticFiles:r});let p={relativeFilePath:mo__default.relative(o.rootDir,c)};t.status(201).json(p);}));zg.patch("/:moduleId/move",zt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n;try{n=S8.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${z(i)}`});return}let o=xt();if(!(await El(o)).modules[e.params.moduleId]){t.status(404).json({error:"Module not found."});return}await _se({moduleId:e.params.moduleId,targetFolderRelativePath:n.folderPath,project:o}),t.status(200).json({message:"ok"});}));zg.patch("/:moduleId/metadata",zt(async(e,t)=>{if(!e.params.moduleId){t.status(400).json({error:"Missing moduleId in url path."});return}let n;try{n=y8.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let o=xt(),r=await El(o);await Pse({moduleId:e.params.moduleId,content:n,momenticFiles:r,logger:C,project:o}),t.status(201).json({message:"ok"});}));var ORe=zg;var uE=Router();uE.get("/",zt(async(e,t)=>{let n=xt(),o=await tt(n),r=new Set;o?.tests&&Object.values(o.tests).forEach(c=>{c.labels?.forEach(u=>r.add(u));});let i=Array.from(r).sort(),s=Object.values(o.tests),a=await r0(o),l={labels:i,tests:s,modules:a};t.status(200).json(l);}));uE.get("/folders",zt(async(e,t)=>{let n=xt(),o=await gse(n);t.status(200).json(o);}));uE.get("/summary",zt(async(e,t)=>{let n=xt(),r={hasEntities:await hse(n,[De.TEST,De.TEST_V2,De.MODULE,De.MODULE_V2])};t.status(200).json(r);}));uE.get("/labels",zt(async(e,t)=>{let n=xt(),o=await tt(n),r=new Set;for(let s of Object.values(o.tests))s.labels?.forEach(a=>r.add(a));let i=Array.from(r).sort();t.status(200).json(i);}));uE.post("/in-folder",zt(async(e,t)=>{let n=u8.safeParse(e.body);if(!n.success){t.status(400).json({error:`Failed to parse entities-in-folder body: ${n.error.message}`});return}let{pathSegments:o}=n.data,r=xt(),i=await pse(r,o),s=Object.values(i.tests),a=new Set(Object.keys(i.modules)),l=[];if(a.size>0){let u=await El(r);l=await r0(u,a);}let c={tests:s,modules:l};t.status(200).json(c);}));var MRe=uE;var XK=Router();XK.get("/",zt((e,t)=>{let n=rk(xt(),po);t.status(200).json(n);}));XK.get("/names",zt((e,t)=>{let o=xt().config.environments?.map(r=>r.name)??[];t.status(200).json(o);}));var kRe=XK;var LRe=Router();LRe.get("/",zt((e,t)=>{let n={userId:kd(),orgId:xr(),email:mA(),name:Fpe(),pylonEmailHash:Bpe(),cliVersion:BI};t.status(200).json(n);}));var NRe=LRe;var QK="mcp-session-id",DRe="MOMENTIC_SESSION_IDLE_TIMEOUT_MINUTES",i0=Router();function uTt(){let e=process.env[DRe];if(!e)return oS*60*1e3;let t=Number.parseInt(e,10);return Number.isNaN(t)||t<1?(po.warn({envVar:DRe,rawValue:e,fallback:oS},"Invalid MCP session idle timeout env var; falling back to default"),oS*60*1e3):t*60*1e3}function dTt(e){let{headfulDefault:t,supportsFileOutput:n}={},o={serverId:randomUUID(),applicationName:"momentic-mcp-desktop-server",cliVersion:BI},r=xt(),i=up(),s=_l(),a=po.child({orgId:xr(),userId:kd(),...o}),l=new Nt({baseUrl:s,apiKey:i,logger:a,mode:"interactive",runner:"mcp"}),c=Nw(process.env.MOMENTIC_HEADFUL_BROWSER),u=new Cr(r.config.ai?.agentConfig,{baseUrl:s,apiKey:i,logger:a,mode:"interactive",runner:"mcp"}),d=xr(),m=new Nl(l,d,r);return {context:{project:r,orgId:d,logger:a,generator:u,apiClient:l,storage:m,serverId:o.serverId,extractBaseDir:yu(r.rootDir),saveChangesToDisk:true,supportsFileOutput:n??true,knowledgeRetrievalResults:wn,knowledgeCitations:[],sessionIdleTimeoutMs:uTt(),headfulDefault:t??c??true,categoryDefinitions:r.config.ai?.classification?.categories??Ca},info:o}}var Op={};i0.post("/",async(e,t)=>{let n=String(e.headers[QK]??"");try{if(n&&Op[n]){await Op[n].handleRequest(e,t,e.body);return}if(!n&&isInitializeRequest(e.body)){let{context:o,info:r}=dTt(),i=Zq(o,r,t0),s=new StreamableHTTPServerTransport({sessionIdGenerator:()=>randomUUID(),enableDnsRebindingProtection:!1,onsessioninitialized:a=>{Op[a]=s;}});s.onclose=()=>{let a=s.sessionId;a&&Op[a]&&delete Op[a],i.close().catch(()=>{});},await i.connect(s),await s.handleRequest(e,t,e.body);return}t.status(400).json({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: No valid session ID provided"},id:null});}catch{t.headersSent||t.status(500).json({jsonrpc:"2.0",error:{code:-32603,message:"Internal server error"},id:null});}});i0.get("/",async(e,t)=>{let n=String(e.headers[QK]??"");if(!n||!Op[n]){t.status(400).send("Invalid or missing session ID");return}await Op[n].handleRequest(e,t);});i0.delete("/",async(e,t)=>{let n=String(e.headers[QK]??"");if(!n||!Op[n]){t.status(400).send("Invalid or missing session ID");return}let o=Op[n];try{await o.handleRequest(e,t);}catch{t.headersSent||t.status(500).send("Error processing session termination");}});var BRe=i0;var URe=Router();URe.get("/:id",zt(async(e,t)=>{let{id:n}=e.params;if(!n){t.status(400).json({error:"Missing ID"});return}let o=No();if(!o){t.status(500).json({error:"API client not initialized"});return}try{let{data:r,contentType:i}=await o.fetchOnDemandScreenshot(n);t.setHeader("Content-Type",i),t.status(200).send(r);}catch(r){po.error({err:r,screenshotId:n},"Failed to proxy on-demand screenshot"),t.status(404).json({error:"Screenshot not found"});}}));var HRe=URe;var ZK=Router(),jRe=e=>({name:e.config.name,configFilePath:e.configFilePath,fileFormat:e.config.fileFormat});ZK.get("/",zt(async(e,t)=>{let n=xt(),o=new Map;for(let i of await $z())o.set(i.configFilePath,i);o.set(n.configFilePath,n);let r={projects:[...o.values()].map(jRe),current:jRe(n)};t.status(200).json(r);}));ZK.post("/set",zt(async(e,t)=>{let n;try{n=A8.parse(e.body);}catch(o){t.status(400).json({error:`Invalid request body: ${o}`});return}po.info("Setting local project");try{let o=await Rn({configFilePath:n.configFilePath}),r=No();if(!r)throw new Error("API client is not initialized.");await pA({project:o,apiClient:r});}catch(o){t.status(400).json({error:`Error setting project: ${o}`});return}t.sendStatus(204);}));var $Re=ZK;var GRe=Router();GRe.get("/",zt((e,t)=>{let n=xt(),o={ai:n.config.ai,browser:n.config.browser,displayRoot:n.config.displayRoot};t.status(200).json(o);}));var zRe=GRe;var Xd=Router();Xd.post("/",zt(async(e,t)=>{let n;try{n=p8.parse(e.body);}catch(o){t.status(400).json({error:`Invalid request body: ${o}`});return}try{let o=xt(),r=await DI({project:o,input:n});Ll({type:"test_editor:test_create",test_platform:"web"}),t.status(201).json(r);}catch(o){if(o instanceof Gt){t.status(400).json({error:o.message});return}throw o}}));Xd.get("/:testPath",zt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o=xt(),r=await El(o),i;try{i=await $a(mo__default.join(o.rootDir,n),po,r),await(await Ns({logger:po,orgId:xr(),project:o})).resolveStepCacheEntries({schemaVersion:i.schemaVersion,testId:i.id,environment:i.envs?.find(a=>a.default)?.name,stepLists:{beforeSteps:i.beforeSteps,steps:i.steps,afterSteps:i.afterSteps},logger:po,useSnapshotIdentityCache:o.config.fileFormat==="v2"}),t.status(200).json(i);}catch(s){t.status(400).send({error:s.message});return}(async()=>{try{await nk({relativeTestPath:n,stepLists:{steps:i.steps,beforeSteps:i.beforeSteps,afterSteps:i.afterSteps},schemaVersion:Ct,momenticFiles:r,project:o});}catch(s){po.error({err:s},"Failed to save migrated test to disk after initial fetch");}})();}));Xd.get("/:testPath/metadata",zt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o=xt(),r=mo__default.join(o.rootDir,n);if(!oo__default.existsSync(r)){t.status(404).json({error:"Test file not found."});return}let i=oo__default.statSync(r),s=await Ec(po),a={gitBranch:s.gitBranchName??"unknown",fileMtime:i.mtime,gitCommitSha:s.gitCommitSha??"unknown"};t.status(200).json(a);}));Xd.patch("/:testPath/metadata",zt(async(e,t)=>{if(!e.params.testPath){t.status(400).json({error:"Missing testPath in url path."});return}let n;try{n=m8.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${i}`});return}let r={message:"ok",newRelativeTestPath:HR(e.params.testPath,n,xt()).newRelativeTestPath};t.status(200).json(r);}));Xd.patch("/:testPath",zt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=d8.parse(e.body);}catch(p){po.warn({err:p},"Invalid save request"),t.status(400).json({error:`Invalid request body: ${p}`});return}po.info({testPath:n},"Save received");let r=xt(),i=await El(r),s;try{s=nu(n,r);}catch(p){t.status(400).json({error:`Existing test file on disk is invalid: ${p}`});return}let a=r.config.fileFormat==="v2",{stepsToSave:l,moduleUpdates:c,cachesToSave:u,snapshotCachesToSave:d}=await Co({stepLists:o.stepLists,useSnapshotIdentityCache:a,cacheCreationParams:{orgId:xr(),testId:s.id,environment:s.envs?.find(p=>p.default)?.name}}),m=await Ns({logger:po,orgId:xr(),project:r});a&&await m.saveSnapshotCacheEntries({logger:po,entries:d}),await m.saveStepCacheEntries({logger:po,entries:u}),await Bz({relativeTestPath:n,stepsToSave:l,moduleUpdates:c,schemaVersion:o.schemaVersion,momenticFiles:i,project:r}),t.status(201).json({message:"ok"});}));Xd.patch("/:testPath/environments",zt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=T8.parse(e.body);}catch(r){t.status(400).json({error:`Invalid request body: ${r}`});return}HR(n,{envs:o.defaultEnv?[{name:o.defaultEnv,default:true}]:[]},xt()),t.status(201).json({message:"ok"});}));Xd.patch("/:testPath/move",zt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=b8.parse(e.body);}catch(i){t.status(400).json({error:`Invalid request body: ${z(i)}`});return}let r=xt();if(!oo__default.existsSync(mo__default.join(r.rootDir,n))){t.status(404).json({error:"Test not found."});return}await Ose({relativeTestPath:n,targetFolderRelativePath:o.folderPath,project:r}),t.status(200).json({message:"ok"});}));Xd.delete("/:testPath",zt((e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o=xt(),r=mo__default.join(o.rootDir,n);if(!oo__default.existsSync(r)){t.status(404).json({error:"Test not found."});return}oo__default.unlinkSync(r),t.status(200).json({message:"ok"});}));Xd.post("/:testPath/duplicate",zt(async(e,t)=>{let{testPath:n}=e.params;if(!n){t.status(400).json({error:"Missing testPath in url path."});return}let o;try{o=h8.parse(e.body);}catch(h){t.status(400).json({error:`Invalid request body: ${h}`});return}try{zu(o.name);}catch(h){t.status(400).json({error:h.message});return}let r=xt(),i=mo__default.join(r.rootDir,n);if(!oo__default.existsSync(i)){t.status(404).json({error:"Test not found."});return}let s=await tt(r),a;try{a=await $a(i,po,s);}catch(h){t.status(400).send({error:h.message});return}let l=Sd({projectConfig:r.config,momenticFiles:s,entityType:"test"}),c=Wo.parse({...a,name:o.name,id:l}),{stepsToSave:u}=await Co({stepLists:{steps:a.steps,beforeSteps:a.beforeSteps,afterSteps:a.afterSteps},createNewCacheIds:true}),d=mo__default.dirname(i),m=mo__default.join(d,`${o.name}.test.yaml`);hc({test:{fileType:De.TEST,...c,...u},filePath:m,projectConfig:r.config,momenticFiles:s});let p={relativeFilePath:mo__default.relative(r.rootDir,m)};Ll({type:"test_editor:test_duplicated"}),t.status(201).json(p);}));var VRe=Xd;var WRe=15e4,Ta={numScreenshots:10,numBrowserStates:2,tokensThreshold:25e4,targetTokens:2e5};function Qd(){return {openai:{reasoningEffort:IH,reasoningSummary:"auto",textVerbosity:"low",store:false,include:["reasoning.encrypted_content"]},azure:{reasoningEffort:IH,reasoningSummary:"auto",textVerbosity:"low",store:false,include:["reasoning.encrypted_content"]}}}var yTt="about:blank",STt=[".webm",".mp4"];function nY(e){return e?oo__default.mkdtempSync(mo__default.join(Nm.tmpdir(),"momentic-explore-video-")):void 0}async function Eu(e){let{sessionManager:t,storage:n,logger:o,owner:r,signal:i,timelineLane:s}=e,a=nY(s),l=new UD(o),c=await t.startTestlessSession({logger:o,storage:n,baseUrl:yTt,runner:"explore",disableConsoleLogs:true,callbacks:{onNetworkPage:l.onNetworkPage,onNetworkLogs:l.onNetworkLogs},videoOutputDir:a}).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 oY({logger:m,timelineLane:s,videoOutputDir:a,videoStartTimes:c.videoStartTimes,videoActivations:c.videoActivations,finishedAt:Date.now()}),await bTt({logger:m,timelineLane:s,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:WRe,networkLogEntriesPath:()=>l.entriesFilePath,cleanupBrowserSession:d},isAlive:()=>t.getSession(c.sessionId)!==void 0}}async function oY({logger:e,timelineLane:t,videoOutputDir:n,videoStartTimes:o,videoActivations:r,finishedAt:i}){if(!(!t||!n))try{for(let s of await oo__default.promises.readdir(n)){if(!STt.includes(mo__default.extname(s)))continue;let a=r?.filter(l=>l.videoName===s).map(l=>l.timestamp).sort((l,c)=>l-c);await t.attachVideo({sourcePath:mo__default.join(n,s),startedAt:o?.get(s),finishedAt:i,activations:a?.length?a:void 0});}}catch(s){e.warn({err:s,videoOutputDir:n},"Failed to attach explore browser videos to timeline");}}async function bTt({logger:e,timelineLane:t,entriesFilePath:n}){if(t)try{if((await oo__default.promises.stat(n)).size===0)return;await t.attachNetworkLog({sourcePath:n});}catch(o){e.warn({err:o,entriesFilePath:n},"Failed to attach explore network log to timeline");}}var ATt=2/3;function qRe(e,t){return t===void 0?{signal:e}:{signal:AbortSignal.any([e,AbortSignal.timeout(t)]),buildTimeoutMs:Math.floor(t*ATt)}}function mE(e,t){if(!e?.aborted)return z(t);let n=e.reason;return n instanceof Error&&n.name==="TimeoutError"?"AI explore exceeded its --timeout budget before completing":"AI explore was cancelled before completing"}function KRe(e){let t=e.filter(n=>n!==void 0);return t.length===0?void 0:AbortSignal.any(t)}async function Mp(e,t){try{await mV.rm(e,{recursive:!0,force:!0});}catch(n){t.warn({err:n,spoolDir:e},"Failed to clean up explorer spool dir");}}async function iY(e){return await ETt(e),await vTt(e),await wTt(e)}async function ETt(e){try{await c2(e).version();}catch(t){throw new Error(`git is not available on PATH. Install git to use 'momentic ai explore' (${z(t)}).`,{cause:t})}}async function vTt(e){let t;try{t=await c2(e).checkIsRepo();}catch(n){throw new Error(`Failed to determine whether ${e} is a git repository: ${z(n)}`,{cause:n})}if(!t)throw new Error(`${e} is not inside a git repository. Run 'momentic ai explore' from inside a git repository.`)}async function wTt(e){let t=c2(e);try{let n=(await t.revparse(["--show-toplevel"])).trim();if(n.length===0)throw new Error("git rev-parse --show-toplevel returned an empty path.");return n}catch(n){throw new Error(`Failed to resolve git repository toplevel from ${e}: ${z(n)}`,{cause:n})}}z$1.object({testIds:z$1.array(z$1.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$1.array(z$1.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 kp=class extends Nl{overlay;diskProject;writtenFilePaths=new Set;constructor(t,n,o){let r=new VM(mt);super(t,n,o,r),this.overlay=r,this.diskProject=o;}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,n){let o=s0(await this.collectDraftTests(t),n.testIds,u=>u.test.id,"test"),r=s0(await this.collectDraftModules(t),n.moduleIds,u=>u.module.moduleId,"module");if(o.length===0&&r.length===0)return {acceptedTests:[],acceptedModules:[]};let i=await tt(this.diskProject,true);this.assertModuleRefsSatisfied(o,r,i);let s=[];try{for(let u of [...r,...o])this.overlay.materialize(u.entity.fullFilePath),u.kind==="create"&&s.push(u.entity.fullFilePath);}catch(u){for(let d of s)RTt(d);throw new Error("Failed to persist pending changes to disk",{cause:u})}let a=[];for(let u of [...r,...o])this.overlay.discard(u.entity.fullFilePath),u.kind!=="delete"&&(this.writtenFilePaths.add(u.entity.fullFilePath),a.push(u.entity.fullFilePath));OT(a,this.diskProject.config);let l=r.map(u=>({moduleId:u.module.moduleId,relativeFilePath:u.entity.relativePath}));return {acceptedTests:o.map(u=>({testId:u.test.id,relativeFilePath:u.entity.relativePath})),acceptedModules:l}}async rejectDrafts(t,n){let o=await this.collectDraftTests(t),r=s0(o,n.testIds,u=>u.test.id,"test"),i=s0(await this.collectDraftModules(t),n.moduleIds,u=>u.module.moduleId,"module"),s=new Set(r.map(u=>u.test.id)),a=[];for(let u of i){let d=u.module.moduleId,m=[];for(let p of o)s.has(p.test.id)||p.kind!=="delete"&&YRe(p.test).has(d)&&m.push(p.test.name);m.length!==0&&a.push(`Cannot reject module "${d}" because it is still referenced by pending test(s) ${m.map(p=>`"${p}"`).join(", ")}.`);}if(a.length>0)throw new Gt(a.join(`
|
|
9030
9030
|
`));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 n=await this.scanEntities({disableLogging:true}),o=[];for(let r of Object.values(n.tests)){if(!this.overlay.hasPendingWrite(r.fullFilePath))continue;let i=await $a(r.fullFilePath,t,n,this.overlay);o.push({entity:r,test:i,kind:this.overlay.isCreate(r.fullFilePath)?"create":"update"});}return o.push(...(await this.collectDeletedEntities(t)).tests),o}async collectDraftModules(t){let n=await this.scanEntities({disableLogging:true}),o=[];for(let r of Object.values(n.modules)){if(!this.overlay.hasPendingWrite(r.fullFilePath))continue;let i=await Td({modHandle:r,momenticFiles:n,logger:t,fileSystem:this.overlay});o.push({entity:r,module:i,kind:this.overlay.isCreate(r.fullFilePath)?"create":"update"});}return o.push(...(await this.collectDeletedEntities(t)).modules),o}async collectDeletedEntities(t){let n=this.overlay.tombstonePaths();if(n.length===0)return {tests:[],modules:[]};let o=new Set(n.map(a=>mo__default.resolve(a))),r=await tt(this.diskProject,true),i=[];for(let a of Object.values(r.tests)){if(!o.has(mo__default.resolve(a.fullFilePath)))continue;let l=await $a(a.fullFilePath,t,r,mt);i.push({entity:a,test:l,kind:"delete"});}let s=[];for(let a of Object.values(r.modules)){if(!o.has(mo__default.resolve(a.fullFilePath)))continue;let l=await Td({modHandle:a,momenticFiles:r,logger:t,fileSystem:mt});s.push({entity:a,module:l,kind:"delete"});}return {tests:i,modules:s}}assertModuleRefsSatisfied(t,n,o){let r=new Set(Object.keys(o.modules)),i=new Set(n.filter(l=>l.kind==="delete").map(l=>l.module.moduleId)),s=new Set(n.filter(l=>l.kind!=="delete").map(l=>l.module.moduleId)),a=[];for(let l of t)if(l.kind!=="delete")for(let c of YRe(l.test)){if(i.has(c)){a.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)||s.has(c)||a.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(a.length>0)throw new Gt(a.join(`
|
|
9031
9031
|
`))}};function s0(e,t,n,o){return !t||t.length===0?e:t.flatMap(r=>{let i=e.filter(s=>n(s)===r);if(i.length===0)throw new Gt(`No pending draft ${o} with id "${r}".`);return i})}function YRe(e){let t=new Set;return ra({steps:[...e.beforeSteps??[],...e.steps??[],...e.afterSteps??[]],onPresetAction:()=>{},onConditional:()=>{},onSimpleStepContainer:n=>{n.type==="RESOLVED_MODULE"&&t.add(n.moduleId);}}),t}function RTt(e){try{mt.unlinkSync(e);}catch{}}var ITt=["**/pnpm-lock.yaml","**/yarn.lock","**/package-lock.json","**/Cargo.lock","**/Gemfile.lock","**/poetry.lock","**/uv.lock","**/go.sum","**/composer.lock"],xTt=["**/__generated__/**","**/dist/**","**/build/**","**/.next/**","**/.nuxt/**","**/out/**","**/coverage/**","**/*.snap"],_Tt=["**/*.{test,spec}.{ts,tsx,js,jsx,mjs,cjs,py,go,rs,rb,java,kt}","**/__tests__/**","**/test/**","**/tests/**","**/e2e/**","**/cypress/**","**/playwright/**"],PTt=["**/*.md","**/*.mdx","**/*.rst","**/docs/**","**/README*","**/CHANGELOG*","**/LICENSE*"],OTt=["**/*.json","**/*.yaml","**/*.yml","**/*.toml","**/*.ini","**/*.env*","**/*.config.{ts,js,mjs,cjs}","**/.eslintrc*","**/.prettierrc*","**/.editorconfig","**/tsconfig*.json","**/Dockerfile*","**/Makefile","**/.gitignore","**/.dockerignore"],MTt=[".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 HI(e){return Hxe([...e],{dot:true})}var kTt=HI(ITt),LTt=HI(xTt),NTt=HI(_Tt),DTt=HI(PTt),FTt=HI(OTt);function JRe(e,t){if(kTt(e))return "lockfile";if(LTt(e))return "generated";if(t===true)return "binary";if(NTt(e))return "test";if(DTt(e))return "docs";if(FTt(e))return "config";let n=e.toLowerCase();for(let o of MTt)if(n.endsWith(o))return "code";return "other"}var UTt={minCombinedScore:.05,maxResults:8,maxTokens:2e3},XRe={minCombinedScore:.05,maxResults:5,maxTokens:1500},HTt=5,jTt=12;async function QRe({client:e,manifest:t,customPrompt:n,logger:o,abortSignal:r}){let i=$Tt({manifest:t,customPrompt:n});if(!i)return wn;try{return await ge(cc({client:e,query:i,config:UTt,logger:o,clientName:"explorer",agentSubtype:"explorer",abortSignal:r}),{milliseconds:Ha})}catch(s){if(r.aborted)throw s;return o.warn({err:s},"Knowledge retrieval failed during explorer setup"),wn}}function $Tt({manifest:e,customPrompt:t}){let n=[],o=t?.trim();o&&n.push(`User guidance: ${o}`);let r=e.commits.map(s=>s.subject.trim()).filter(s=>s.length>0).slice(0,HTt);if(r.length>0){n.push("Commit subjects:");for(let s of r)n.push(`- ${s}`);}let i=GTt(e.files);if(i.length>0){n.push("Changed UI-relevant files:");for(let s of i)n.push(`- ${s.path}`);}if(n.length!==0)return n.join(`
|
|
9032
9032
|
`)}function GTt(e){return e.filter(n=>zTt(n.category)).sort((n,o)=>o.insertions+o.deletions-(n.insertions+n.deletions)||n.path.localeCompare(o.path)).slice(0,jTt)}function zTt(e){switch(e){case "code":case "config":case "docs":return true;case "test":case "lockfile":case "generated":case "binary":case "other":return false}}var VTt=ZS.filter(e=>e!=="CONDITIONAL"),ZRe=_t`
|
|
@@ -10462,7 +10462,7 @@ ${s.length===0?"(none)":m}
|
|
|
10462
10462
|
`);}var Ru="/v1/app-graph",Jg=class{constructor(t,n){this.apiClient=t;this.logger=n;}async reportBillableEvents(t,n){await this.apiClient.reportBillableEvents(t,n);}async claim(t){let n=await this.apiClient.sendRequest(`${Ru}/ai-select/claim`,{method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return B5.parse(n)}async getPlan(t){let n=new URLSearchParams({repository:t.repository,headSha:t.headSha}),o=await this.apiClient.sendRequest(`${Ru}/ai-select/plan?${n.toString()}`,{method:"GET",retries:1,requestTimeoutMs:1e4});return H5.parse(o)}async finalize(t){let n=await this.apiClient.sendRequest(`${Ru}/ai-select/finalize`,{method:"POST",body:t,retries:2,requestTimeoutMs:3e4});return U5.parse(n)}async release(t){await this.apiClient.sendRequest(`${Ru}/ai-select/release`,{method:"POST",body:{selectionPlanKey:t},retries:1,requestTimeoutMs:5e3}).catch(n=>{this.logger.warn({err:n,selectionPlanKey:t},"Failed to release ai-select lock");});}async searchObservedTests(t,n){let o=await this.apiClient.sendRequest(`${Ru}/ai-select/search/observed-tests`,{signal:n,method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return VH.parse(o)}async searchSegments(t,n){let o=await this.apiClient.sendRequest(`${Ru}/ai-select/search/segments`,{signal:n,method:"POST",body:t,retries:2,requestTimeoutMs:15e3});return VH.parse(o)}async getObservedTest(t,n){let o=await this.apiClient.sendRequest(`${Ru}/ai-select/observed-tests/${encodeURIComponent(t)}`,{signal:n,method:"GET",retries:2,requestTimeoutMs:1e4});return j5.parse(o)}async getSegment(t,n){let o=await this.apiClient.sendRequest(`${Ru}/ai-select/segments/${encodeURIComponent(t)}`,{signal:n,method:"GET",retries:2,requestTimeoutMs:1e4});return $5.parse(o)}async listObservedTestsForSegment(t,n){let o=await this.apiClient.sendRequest(`${Ru}/ai-select/segments/${encodeURIComponent(t)}/observed-tests`,{signal:n,method:"GET",retries:2,requestTimeoutMs:1e4});return G5.parse(o)}async getCodeInsights(t,n){let o=await this.apiClient.sendRequest(`${Ru}/ai-select/code-insights`,{signal:n,method:"POST",body:{repository:t.repository,folderPaths:t.folderPaths},retries:1,requestTimeoutMs:1e4});return z5.parse(o).insights}async createCodeInsight(t,n){let o=await this.apiClient.sendRequest(`${Ru}/ai-select/code-insight`,{signal:n,method:"POST",body:t,retries:1,requestTimeoutMs:15e3});return V5.parse(o)}},sx=class extends Jg{billingReporter;constructor({billingReporter:t,logger:n}){let o={sendRequest:async()=>({})};super(o,n),this.billingReporter=t;}async reportBillableEvents(t,n){await this.billingReporter.reportBillableEvents(t,n);}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"}}},UIt=2e3,M_e=12e4;async function k_e(e){let t=Date.now()+(e.timeoutMs??M_e),n=0;for(;;){n+=1;let o=await e.client.claim(e.claim);if(o.status==="claimed")return {kind:"claimed",selectionPlanKey:o.selectionPlanKey,trackId:o.trackId};if(o.status==="ready")return {kind:"ready",plan:o.plan,planId:o.planId};if(Date.now()>=t)throw new Error(`ai-select: timed out waiting for plan after ${e.timeoutMs??M_e}ms`);e.logger.info({attempt:n,claimedBy:o.claimedBy},"ai-select plan computing on another shard; polling"),await ht(o.retryAfterMs??UIt);}}async function jIt(e){try{return await Yg({repoRoot:e.repoRoot,explicitBase:"HEAD~1",logger:e.logger})}catch{return zY({repoRoot:e.repoRoot,client:e.apiClient,repository:e.repository,base:null,logger:e.logger})}}async function L_e({params:e,reason:t}){let n=e.config?.onBaseUnavailable??"use-head";switch(n){case "fail":throw new Fp(`AI selection base unavailable and ai.select.onBaseUnavailable is "fail": ${t}`);case "run-all":return {diff:null,reason:t};case "use-head":{let o=await jIt(e);return o?{diff:o,reason:t}:{diff:null,reason:`Could not assemble diff against the HEAD commit's parent: ${t}`}}default:return Xe(n)}}async function g3(e){return de({name:"ai_select.resolve_plan",root:true,attributes:{"momentic.repository":e.repository},fn:()=>$It(e)})}async function $It(e){let t=new Jg(e.apiClient,e.logger),n=e.agentOutputStream?qe(e.agentOutputStream):qe();e.agentOutputStream&&e.agentOutputStream.write(`
|
|
10463
10463
|
`);let o;try{o=await de({name:"ai_select.assemble_diff",attributes:{"momentic.explicit_base":e.explicitBase??"auto"},fn:()=>mn({text:"Analyzing code changes...",screen:n},()=>Yg({repoRoot:e.repoRoot,explicitBase:e.explicitBase,configBase:e.config?.baseRef,mainBranch:e.mainBranch,logger:e.logger}))});}catch(m){let p=m instanceof Fp?m.message:`Could not assemble diff against base ref: ${z(m)}.`,h=Rxe({explicitBase:e.explicitBase,configBase:e.config?.baseRef,mainBranch:e.mainBranch}),g=h?await zY({repoRoot:e.repoRoot,client:e.apiClient,repository:e.repository,base:h,logger:e.logger}):null;if(g)o=g;else {let f=await L_e({params:e,reason:p});if(f.diff===null)return {kind:"run-all",reason:f.reason,diff:null};o=f.diff;}}if(o.baseSha===o.headSha){let m=`Base ref "${o.baseRef}" resolves to HEAD (${o.headSha}); applying ai.select.onBaseUnavailable fallback behavior.`,p=await L_e({params:e,reason:m});if(p.diff===null)return {kind:"run-all",reason:p.reason,diff:null};o=p.diff;}if(e.logger.info({changedFiles:o.changedFiles.length},"Diff assembled"),o.changedFiles.length===0)return {kind:"run-none",reason:"No source-code changes detected between base and head.",diff:o};let r=createHash("sha256").update(e.candidateTests.map(m=>m.testPath).sort().join(`
|
|
10464
10464
|
`)).digest("hex").slice(0,12),i=await z0({client:e.apiClient,query:G0({...e,diff:o}),environmentName:e.environmentName,logger:e.logger}),s=GIt({headSha:o.headSha,suiteHash:r,customPrompt:e.customPrompt,changeRequestDescription:e.changeRequestDescription,budgetCap:e.budgetCap,knowledgeBaseRules:i}),a=o.repoRoot,l=mo__default.relative(a,e.repoRoot),c=l?e.candidateTests.map(m=>({...m,testPath:mo__default.posix.join(l.split(mo__default.sep).join("/"),m.testPath)})):e.candidateTests;if(e.dryRun){let m=await OE({apiClient:t,remoteGitClient:e.apiClient,knowledgeBaseRules:i,generator:e.generator,logger:e.logger,orgId:e.orgId,repository:e.repository,repoRoot:a,projectRoot:e.repoRoot,diff:o,candidateTests:c,allTestDefinitions:e.allTestDefinitions,importIndexCachePath:uS(a),agentOutputStream:e.agentOutputStream,budgetCap:e.budgetCap,customPrompt:e.customPrompt,changeRequestDescription:e.changeRequestDescription});return m.fallbackToRunAll?{kind:"run-all",reason:m.userSummary,diff:o}:{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-${s}`,mode:"SELECTED",diff:o}}let u=await k_e({client:t,claim:{repository:e.repository,headSha:s,baseRef:o.baseRef,changedFiles:o.changedFiles.map(m=>m.path),diffSummary:null,budgetCap:e.budgetCap,dryRun:e.dryRun},logger:e.logger});if(u.kind==="ready"){e.logger.info({planId:u.planId,planSize:u.plan.selectedTests.length,suiteHash:r},"ai-select: reusing cached plan from server");let m=e.logger.bindings().sessionId??randomUUID();return await Zm({reporter:e.apiClient,logger:e.logger,feature:"select",cached:true,result:"success",sessionId:m,agentInvocationId:m,transactionId:`ai-agent-invocation:select:${m}`}),{kind:"ready",plan:u.plan,planId:u.planId,mode:"SELECTED",diff:o}}let d=await OE({apiClient:t,remoteGitClient:e.apiClient,knowledgeBaseRules:i,generator:e.generator,logger:e.logger,orgId:e.orgId,repository:e.repository,repoRoot:a,projectRoot:e.repoRoot,diff:o,candidateTests:c,allTestDefinitions:e.allTestDefinitions,importIndexCachePath:uS(a),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:o};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:s,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:o}}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: ${z(m)}.`,diff:o}}}function GIt({headSha:e,suiteHash:t,customPrompt:n,changeRequestDescription:o,budgetCap:r,knowledgeBaseRules:i}){let s=[`${e}:${t}`];if(n!==void 0){let a=createHash("sha256").update(n).digest("hex").slice(0,12);s.push(`prompt-${a}`);}if(o!==void 0&&o.trim().length>0){let a=createHash("sha256").update(o).digest("hex").slice(0,12);s.push(`description-${a}`);}return r!==null&&s.push(`budget-${r}`),i&&s.push(`kb-${createHash("sha256").update(i).digest("hex").slice(0,12)}`),s.join(":")}async function D_e({test:e,fragment:t,entities:n,client:o,logger:r,yes:i}){gt$1(t.schemaVersion,Ct)&&(C.error(`Patch schema version (${t.schemaVersion}) is newer than this CLI supports. Update to the latest CLI and retry.`),process.exit(1)),Moe(t.steps).forEach(f=>{n.modules[f]||(C.error(`Patch references module ${f} which is not in this project. The patch or your local files may be out of date.`),process.exit(1));}),t.createdAt.getTime()<Date.now()-7*Ib&&!i&&!await Kr("The test patch you are applying is more than 7 days old. Are you sure you want to continue?")&&process.exit(1);let a=e.lastModified.getTime();t.createdAt.getTime()+60*60*1e3<a&&!i&&!await Kr("The test patch you are applying was created before the test was last updated. Are you sure you want to continue?")&&process.exit(1);let l=qm(e.fullFilePath),c=l.steps;if(!Array.isArray(c))throw new Error(`Test ${e.fullFilePath} is missing steps array`);let u,d;if(t.schemaVersion!==Ct){let{steps:f,newVersion:y}=await Sl({metadata:{id:t.id,schemaVersion:t.schemaVersion},steps:t.steps,logger:C});u=y,d=cn.array().parse(f);}else d=cn.array().parse(t.steps);let{stepsToSave:m}=await Co({stepLists:{steps:d}});m.beforeSteps=l.beforeSteps??void 0,m.afterSteps=l.afterSteps??void 0;let p=jf(ca.stringify(c),ca.stringify(m),{n_surrounding:5}),h=qe(),g=Je(h);C.info(""),C.info(g.bold("Patch preview")),C.info(""),C.info(g.code(e.relativePath));for(let f of _L(p,g))C.info(` ${f}`);C.info(""),u&&C.warn(`If this patch is applied, your test will also be automatically upgraded to the latest schema version (${u}). Schema upgrades have no impact on functionality, although you may notice minor differences in the test YAML.`),!i&&!await Kr("Do you want to apply this patch?")&&(C.dimmed("Cancelled."),process.exit(1)),Zf({relativeTestPath:e.relativePath,steps:m,schemaVersion:u??t.schemaVersion,project:n.project,momenticFiles:n}),C.success("Patch applied."),await o.patchTestFragment(t.id,{applied:true,appliedAt:new Date});}function WIt(e){switch(e){case "SUCCESS":return "passed";case "CANCELLED":return "skipped";case "FAILED":case "IDLE":case "RUNNING":return "failed";default:return Xe(e)}}function qIt(e){switch(e){case "PASSED":return "passed";case "CANCELLED":return "skipped";case "FAILED":case "PENDING":case "RETRYING":case "RUNNING":case "WAITING_FOR_USER":return "failed";default:return Xe(e)}}async function KIt(e){let{step:t,logger:n,debugDataStorage:o,folder:r,beforeSnapshot:i,afterSnapshot:s}=e,a=await J0({logger:n,debugDataStorage:o,folder:r,label:"before",snapshotId:i});a&&t.attachments.push({name:"Screenshot before step",source:a,type:"image/jpeg"});let l=await J0({logger:n,debugDataStorage:o,folder:r,label:"after",snapshotId:s});l&&t.attachments.push({name:"Screenshot after step",source:l,type:"image/jpeg"});}function YIt(e,t,n){let o=z$1.union([z$1.looseObject({}),z$1.array(z$1.unknown().optional())]).safeParse(n).success,r=`output-attachment-${randomUUID()}.json`;oo__default.writeFileSync(mo__default.join(t,r),JSON.stringify(n,null,2)),e.attachments.push({name:"Step output data",source:r,type:o?"application/json":"text/plain"});}function JIt(e){let{step:t,folder:n,beforeTestContext:o,afterTestContext:r}=e;if(o){let i=`before-context-${randomUUID()}.json`;writeFileSync(mo__default.join(n,i),B_e(o.env)),t.attachments.push({name:"Test context before step",source:i,type:"application/json"});}if(r){let i=`after-context-${randomUUID()}.json`;writeFileSync(mo__default.join(n,i),B_e(r.env)),t.attachments.push({name:"Test context after step",source:i,type:"application/json"});}}function XIt(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 J0(e){let{logger:t,debugDataStorage:n,folder:o,label:r,snapshotId:i}=e;if(!i)return;let s=await n.getScreenshot(t,i);if(!s)return;let a=`screenshot-${r}-${i}.jpeg`;return oo__default.writeFileSync(mo__default.join(o,a),s),a}async function QIt(e,t,n,o){let r=n.folder,i={uuid:o.runAttemptId??randomUUID(),historyId:o.runId??randomUUID(),testCaseId:o.test.id,fullName:o.test.name,name:Ao(o.test.name),status:qIt(o.status),start:o.lastAttemptStartedAt.getTime(),stop:o.finishedAt.getTime(),parameters:[],labels:XIt({suiteName:n.suiteName,attempts:o.attempts,runId:o.runId,quarantined:o.quarantined,quarantinedReason:o.quarantinedMetadata?.quarantinedReason,quarantinedAt:o.quarantinedMetadata?.quarantinedAt}),steps:[]};for(let[l,c]of Object.entries(o.parameters))c!=null&&i.parameters.push({name:l,value:JSON.stringify(c)});o.results&&await f3(e,t,n.folder,i.steps,o.results);let s=ZIt(t,r,o.runAttemptId);s.length>0&&(i.attachments=s);let a=`${o.runAttemptId}-result.json`;oo__default.writeFileSync(mo__default.join(r,a),JSON.stringify(i,void 0,2));}async function Y0(e,t,n,o){let r={name:no(o),start:o.startedAt.getTime(),stop:o.finishedAt.getTime(),status:WIt(o.status),labels:[],steps:[],attachments:[]};if(o.beforeUrl&&r.labels.push({name:"URL before step",value:o.beforeUrl}),o.afterUrl&&r.labels.push({name:"URL after step",value:o.afterUrl}),await KIt({step:r,logger:e,debugDataStorage:t,folder:n,beforeSnapshot:o.beforeSnapshot,afterSnapshot:o.afterSnapshot}),o.message&&(r.statusDetails={message:o.message}),o.data)if(bv.safeParse(o.data).success){let i=bv.parse(o.data),s=i.request,a={...i,request:void 0},l=`output-attachment-api-request-${randomUUID()}.json`,c=`output-attachment-api-response-${randomUUID()}.json`;oo__default.writeFileSync(mo__default.join(n,l),JSON.stringify(s,null,2)),oo__default.writeFileSync(mo__default.join(n,c),JSON.stringify(a,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 YIt(r,n,o.data);return r}async function f3(e,t,n,o,r){for(let i of r){let s;switch(i.type){case "PRESET_ACTION":{s=await Y0(e,t,n,i);break}case "CONDITIONAL":{s=await Y0(e,t,n,i),s.steps=[],i.assertionResult&&s.steps.push(await Y0(e,t,n,i.assertionResult)),await f3(e,t,n,s.steps,i.results);break}case "AI_ACTION_DYNAMIC":case "AI_ACTION":case "SECTION":case "WHILE_LOOP":case "MODULE":{if(s=await Y0(e,t,n,i),await f3(e,t,n,s.steps,i.results),i.type==="MODULE"&&i.inputs){s.parameters=[];for(let[a,l]of Object.entries(i.inputs))s.parameters.push({name:a,value:l});}break}}if(!s){e.warn({result:i},"Failed to convert Momentic result to Allure step");continue}s.attachments||(s.attachments=[]),JIt({step:s,folder:n,beforeTestContext:i.beforeTestContext,afterTestContext:i.afterTestContext}),o.push(s);}}async function U_e(e,t,n,o,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 s=t.createDebugDataReaderForRunAttempt(i.runId,i.runAttemptId);try{await QIt(e,s,{folder:n,suiteName:o.suiteName},i);}finally{s.close();}}}function B_e(e){try{return JSON.stringify(e,void 0,2)??JSON.stringify({value:null},void 0,2)}catch(t){let n=t instanceof Error?t.message:"unknown error";return JSON.stringify({error:n},void 0,2)}}function ZIt(e,t,n){let o=e.listVideoAssetPaths();if(o.length===0)return [];let r=[];for(let i of o){let s=mo__default.basename(i),a=n?`${n}-${s}`:s;try{oo__default.copyFileSync(i,mo__default.join(t,a));}catch{continue}let l,c=mo__default.extname(i).toLowerCase();c===".webm"?l="video/webm":c===".mp4"?l="video/mp4":l="application/octet-stream",r.push({name:s,source:a,type:l});}return r}function X0(e){if(e.status!=="FAILED")return "none";switch(e.failureReason){case "SetupFailureError":return "setup";case "TeardownFailureError":return "teardown";default:return "main"}}function txt(e){switch(e){case "PASSED":return "passed";case "FAILED":return "failed";case "CANCELLED":return "skipped";case "RETRYING":case "WAITING_FOR_USER":case "PENDING":case "RUNNING":return "unknown";default:return Xe(e)}}function G_e(e){let t=mo__default.relative(".",e);return t===""?e:t}function H_e(e,t){return Math.max(0,(e.getTime()-t.getTime())/1e3)}function nxt(e,t,n){let o=H_e(t,e),r=H_e(n,e);return {start_at:o,end_at:r,duration:Math.max(0,r-o)}}function z_e(e){let t=e.reduce((n,[o,r])=>(!r||Object.keys(n).length>=10||(n[o]=r),n),{});return Object.keys(t).length>0?t:void 0}function oxt(e){if(e.status!=="FAILED"||!e.failureReason)return;let t=Mu({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 rxt(e){if(e.status!=="FAILED")return;let t=[e.failureDetails?.classification?.summary,e.failureDetails?.classification?.rootCause,e.failureDetails?.errorMessage].filter(o=>!!o),n=e.failureDetails?.errorStack?.split(`
|
|
10465
|
-
`).map(o=>o.trim()).filter(Boolean)||[];if(!(t.length===0&&n.length===0))return [{expanded:t,backtrace:n}]}function ixt(e){let t=e.status==="FAILED"?X0(e):void 0;return z_e([["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 sxt(e,t,n){let o=G_e(n.filePath);return {id:n.runId||randomUUID(),scope:e,name:n.testName,location:o,file_name:mo__default.basename(o),result:txt(n.status),failure_reason:oxt(n),failure_expanded:rxt(n),history:nxt(t,n.lastAttemptStartedAt,n.finishedAt),tags:ixt(n)}}function j_e(e,t,n,o,r){let i=G_e(t);return {id:randomUUID(),scope:e,name:n,location:i,file_name:mo__default.basename(i),result:"skipped",history:{start_at:0,end_at:0,duration:0},tags:z_e([["quarantined",r?.quarantined||"false"],["failure_recovery","false"]])}}function axt(e,t){let n=t.map(i=>sxt(e.suiteName,e.startedAt,i)),o=e.testsToSkip.map(i=>j_e(e.suiteName,i.relativeFilePath,i.name,i.id,void 0)),r=e.quarantinedTestsToSkip.map(i=>j_e(e.suiteName,i.relativeFilePath,i.name,i.id,{quarantined:"true"}));return [...n,...o,...r]}function V_e(e,t,n){let o=axt(t,n);oo__default.writeFileSync(mo__default.join(e,`${t.suiteName}.buildkite.json`),JSON.stringify(o,null,2));}function kE(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 q_e(e,t,n){let o=S3(t,n);oo__default.writeFileSync(mo__default.join(e,`${t.suiteName}.momentic.json`),JSON.stringify(o,null,2));}function S3(e,t){let n=t.map(cxt),o=[...e.testsToSkip.map(r=>W_e(r,false)),...e.quarantinedTestsToSkip.map(r=>W_e(r,true))];return aQ.parse({version:1,runGroup:{startedAt:e.startedAt.toISOString(),finishedAt:e.finishedAt.toISOString(),durationMs:e.finishedAt.getTime()-e.startedAt.getTime()},summary:uxt(n,o),runs:n,skipped:o})}function cxt(e){let t=e.status==="PASSED"&&(e.failureRecoveryDetails?.attempts??0)>0,n=e.failureDetails?.manualClassification??e.failureDetails?.classification,o=e.status==="FAILED"?{reason:e.failureReason,message:e.failureDetails?.errorMessage}:null;return {runId:e.runId,testId:e.testId,testName:e.testName,filePath:mo__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:o,classification:n?{reasoning:n.summary,category:n.reason,citations:n.citations}:null}}function W_e(e,t){return {testId:e.id,testName:e.name,filePath:mo__default.relative(".",e.relativeFilePath),labels:e.labels,quarantined:t}}function uxt(e,t){return {total:e.length+t.length,executed:e.length,skipped:t.length,passed:e.filter(n=>n.status==="PASSED").length,failed:e.filter(n=>n.status==="FAILED").length,cancelled:e.filter(n=>n.status==="CANCELLED").length,quarantined:e.filter(n=>n.quarantined).length+t.filter(n=>n.quarantined).length,recovered:e.filter(n=>n.recovered).length}}function K_e(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 mxt(e,t){let n=X0(e);if(t.name(e.testName).className(e.testName).file(mo__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(o=>{t.property("dd_tags[label]",o);})),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&&K_e(t,e.quarantinedMetadata),n==="setup"&&(t.property("setup_failed","true"),t.property("dd_tags[setup_failed]","true")),n==="main"&&(t.property("main_failed","true"),t.property("dd_tags[main_failed]","true")),n==="teardown"&&(t.property("teardown_failed","true"),t.property("dd_tags[teardown_failed]","true")),e.status==="FAILED"){let o=Mu({failureReason:e.failureReason,classification:e.failureDetails?.classification,manualClassification:e.failureDetails?.manualClassification});if(o.title){let{description:r}=o;e.runId&&(r+=` Visit https://app.momentic.ai/runs/${e.runId} for more details.`),t.failure(r,o.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 pxt(e,t,n){let{suiteId:o,suiteName:r,startedAt:i,finishedAt:s,testsToSkip:a,quarantinedTestsToSkip:l,quarantinedTestsMetadata:c}=t,u=e.testSuite().name(r);o&&u.property("id",o),u.timestamp(i).property("startedAt",i.toISOString()).property("finishedAt",s.toISOString()).time((s.getTime()-i.getTime())/1e3);for(let d of n){let m=u.testCase();mxt(d,m);}for(let d of a){let m=u.testCase();m.name(d.name).className(d.name).file(mo__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(mo__default.relative(".",d.relativeFilePath)).property("id",d.id);let p=c[d.id];p&&K_e(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 Y_e(e,t,n){let o=dxt.newBuilder();pxt(o,t,n),o.writeTo(mo__default.join(e,`${t.suiteName}.xml`));}var hxt="insights-collector.newrelic.com",gxt="insights-collector.eu01.nr-data.net",fxt=4e3;async function b3({logger:e,config:t,params:n,runs:o,runGroupId:r,envName:i,appUrl:s,gitMetadata:a}){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=o.map(kE),u=S3(n,c),d=J_e({...t.attributes,runGroupId:r,environment:i,suiteName:n.suiteName,gitBranch:a.gitBranchName,gitCommit:a.gitCommitSha,gitRepository:a.githubRepository??a.gitOriginUrl,ciRunUrl:yxt()}),m=u.runs.map((g,f)=>({...d,eventType:"MomenticRun",timestamp:new Date(g.finishedAt).getTime(),...J_e({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?`${s}/runs/${g.runId}`:void 0})}));m.push({...d,eventType:"MomenticRunGroup",timestamp:new Date(n.finishedAt).getTime(),startedAt:n.startedAt.toISOString(),finishedAt:n.finishedAt.toISOString(),durationMs:u.runGroup.durationMs,runGroupUrl:`${s}/run-groups/${r}`,...u.summary,passRate:u.summary.executed>0?u.summary.passed/u.summary.executed:0});let h=`https://${t.region==="EU"?gxt:hxt}/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: ${z(g)}`);}}function J_e(e){let t={};for(let[n,o]of Object.entries(e))o==null||o===""||(t[n]=typeof o=="string"?o.slice(0,fxt):o);return t}function yxt(){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 X_e(e){return {title:no(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(X_e):[]}}async function Txt(e,t,n,o){if(o.results?.length){let r=await J0({logger:e,debugDataStorage:t,folder:n,label:"final-state",snapshotId:o.results[o.results.length-1].afterSnapshot});return r?[{name:"Final state screenshot",path:r,contentType:"image/jpeg"}]:[]}return []}async function Axt(e,t,n,o){let r;if(o.status==="FAILED"&&o.failureReason){let i=Mu({failureReason:o.failureReason,classification:o.failureDetails?.classification,manualClassification:o.failureDetails?.manualClassification});r={value:o.failureDetails?.classification?.reason??o.failureReason,message:i.description};}return {status:o.status==="PASSED"?"passed":o.status==="CANCELLED"?"interrupted":"failed",duration:o.finishedAt.getTime()-o.lastAttemptStartedAt.getTime(),error:r,retry:o.attempts-1,steps:o.results?.map(X_e)||[],startTime:o.lastAttemptStartedAt.toISOString(),attachments:await Txt(e,t,n,o)}}async function Ext(e,t,n,o){return {expectedStatus:"passed",status:o.status==="PASSED"?"expected":"unexpected",results:[await Axt(e,t,n,o)]}}async function vxt(e,t,n,o){return {tags:[],title:o.test.name,ok:o.status==="PASSED",tests:[await Ext(e,t,n,o)],id:o.runId,file:o.filePath}}function T3(e,t){return e.reduce((n,o)=>t(o)?n+1:n,0)}async function wxt(e,t,n,o,r){return {suites:[{title:o.suiteName,file:o.projectConfigPath,specs:await Promise.all(r.map(async i=>{let s=i.runId&&i.runAttemptId?t.createDebugDataReaderForRunAttempt(i.runId,i.runAttemptId):new Bw;try{return await vxt(e,s,n,i)}finally{s.close();}}))}],errors:[],stats:{startTime:o.startedAt.toISOString(),duration:o.finishedAt.getTime()-o.startedAt.getTime(),expected:T3(r,i=>i.status==="PASSED"),unexpected:T3(r,i=>i.status!=="PASSED"),flaky:T3(r,i=>!!i.isFlake),skipped:0}}}async function Q_e(e,t,n,o,r){let i=await wxt(e,t,n,o,r);oo__default.writeFileSync(mo__default.join(n,`${o.suiteName}.json`),JSON.stringify(i,null,2));}async function Z_e({logger:e,callbacks:t,format:n,params:o,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}),n){case "json":{let s=r.map(kE);q_e(i,o,s);return}case "junit":{let s=r.map(kE);Y_e(i,o,s);return}case "buildkite-json":{let s=r.map(kE);V_e(i,o,s);return}case "allure":case "allure-json":await U_e(e,t,i,o,r);return;case "playwright-json":await Q_e(e,t,i,o,r);return;default:throw new Error(`Unknown reporter format requested: '${n}'`)}}function gS(e){let t=e??Mxt();return ePe()&&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 Mxt(){let e=ePe(),t=e?2:1;return C.debug(`Auto-detected device pixel ratio ${t} (Mac OS Retina: ${e}).`),t}var ePe=once(()=>{if(platform()!=="darwin")return false;try{return execSync("system_profiler SPDisplaysDataType").toString().includes("Retina")}catch{return false}});async function eB(e,t=true,n=false){let o=Dxt(e),r=await Lxt.which(o[0],true),i=o.slice(1),s=kxt.exec(Nxt(r),i,{delay:100,silent:n});if(t)return s;s.catch(a=>{C.warn({err:a},`Background command exited with an error: ${e}`);});}var tPe="the Momentic GitHub app is missing permission to create pull requests or write branches for this repository";function Fxt(e,{context:t}){return e instanceof Hn?e.rawError.includes("Resource not accessible by integration")?`Cannot create ${t} because ${tPe}.`:e.status>=400&&e.status<500?e.rawError:`Could not create ${t} due to a GitHub error.`:`Could not create ${t}: ${z(e)}`}function nPe(e){return e instanceof Hn?e.rawError.includes("Resource not accessible by integration")?tPe:e.status>=400&&e.status<500?e.rawError:"a GitHub error occurred":z(e)}function oPe(e,t){C.error(Fxt(e,t));}function tB(e){return rPe(e,"runs","run")}function A3(e){return rPe(e,"run-groups","run group")}function rPe(e,t,n){let o=e.trim(),r=/^https?:\/\//i.test(o)?Uxt(o,t,n):o;if(!z$1.guid().safeParse(r).success)throw new Error(`Invalid ${n} ID: ${e}. Expected a UUID or a URL like https://app.momentic.ai/${t}/<id>.`);return r}function Uxt(e,t,n){let o;try{o=new URL(e);}catch{throw new Error(`Invalid ${n} URL: ${e}`)}let r=o.pathname.split("/").filter(i=>i.length>0);if(r.length!==2||r[0]!==t)throw new Error(`Could not extract ${n} ID from URL: ${e}. Expected a URL like https://app.momentic.ai/${t}/<id>.`);return r[1]}function nB(e){return new Promise((t,n)=>{let o=[];createReadStream(e).pipe(Hxt()).on("data",r=>o.push(r)).on("end",()=>t(o)).on("error",r=>n(r));})}var Vt="3.56.1",{checkCLIVersion:ti,getLatestCLIVersion:iPe}=Ume({packageName:"momentic",currentVersion:Vt,changelogUrl:"https://github.com/momentic-ai/cli/releases",updateCommand:"npx momentic@latest upgrade"});Hdt("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI","POSTHOG_WEB_WRITE_KEY is not set");var{captureEvent:rm,setAnalyticsIdentity:oB,shutdownAnalytics:sPe}=cO({writeKey:"phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",host:"https://p.momentic.ai",platform:"cli",identity:"stashed",flushImmediately:true,onIdentify:Ipe});var Gxt=3e3,rB=new Set;function aPe(e){rB.add(e),e.finally(()=>rB.delete(e));}async function lPe(){if(rB.size!==0)try{await ge(Promise.allSettled([...rB]),{milliseconds:Gxt});}catch{}}async function rt(){try{await ge(Promise.all([lPe(),aO(),dn.flush(),sPe(),EO(),qV()]),{milliseconds:5e3});}catch{}}async function uPe({momenticFiles:e,project:t,logger:n}){let o;try{o=await Yg({repoRoot:t.rootDir??process.cwd(),mainBranch:t.config.gitMainBranch,logger:n});}catch(i){let s="Make sure the checkout has enough git history to reach the base ref (CI checkouts are often shallow by default).";throw i instanceof Fp?new ue(`Could not determine the base ref to diff against for --changed. ${s}`):new ue(`--changed could not compute the git diff: ${z(i)}. ${s}`)}let r=zxt({changedFiles:o.changedFiles,repoRoot:o.repoRoot,momenticFiles:e});return C.log(r.length===0?`No changed tests or modules vs ${o.baseRef}.`:`${r.length} changed test(s) vs ${o.baseRef}.`),r.map(i=>i.fullFilePath)}function zxt({changedFiles:e,repoRoot:t,momenticFiles:n}){let o=e.filter(u=>u.status!=="D"),r=o.filter(u=>u.path.endsWith(".test.yaml")),i=o.filter(u=>u.path.endsWith(".module.yaml")),s=Object.values(n.tests),a=new Map(s.map(u=>[u.fullFilePath,u])),l=new Map;for(let u of r){let d=a.get(rp.resolve(t,u.path));d&&!l.has(d.id)&&l.set(d.id,{fullFilePath:d.fullFilePath,relativePath:d.relativePath,reason:"test-changed"});}let c=Vxt({momenticFiles:n,changedModuleFullPaths:i.map(u=>rp.resolve(t,u.path))});if(c.size>0)for(let u of s){if(l.has(u.id))continue;let d=jR(u.fullFilePath,n);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 Vxt({momenticFiles:e,changedModuleFullPaths:t}){let n=new Set(t),o=new Set;for(let[s,a]of Object.entries(e.modules))n.has(a.fullFilePath)&&o.add(s);if(o.size===0)return o;let r=new Map;for(let[s,a]of Object.entries(e.modules))r.set(s,jR(a.fullFilePath,e));let i=true;for(;i;){i=false;for(let[s,a]of r)if(!o.has(s)){for(let l of a)if(o.has(l)){o.add(s),i=true;break}}}return o}async function Xg({tests:e,changed:t,momenticFiles:n,project:o,yes:r,include:i,exclude:s,labels:a,logger:l}){let c=new Set;if(t)(await uPe({momenticFiles:n,project:o,logger:fe})).forEach(m=>c.add(m));else if(e&&e.length>0){let d=e.some(p=>oo__default.existsSync(p)),m=cwd();d?(m!==o.rootDir&&l.warn(`Test paths resolve against the current directory ('${m}'), not the project root ('${o.rootDir}'). Run from the project root or use substring filters to avoid surprises.`),e.forEach(p=>{if(!oo__default.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let h;try{h=oo__default.statSync(p).isDirectory();}catch(f){l.warn({err:f},`Skipping path ${p} because it cannot be read`);return}let g=mo__default.resolve(p);Object.values(n.tests).filter(f=>h?Rte(f.fullFilePath,g):f.fullFilePath===g).forEach(f=>{c.add(f.fullFilePath);});})):Object.values(n.tests).forEach(p=>{e.some(h=>p.relativePath.includes(h))&&c.add(p.fullFilePath);});}else !r&&!await Kr("No test paths or substrings were provided. Do you want to run all tests?")&&(l.error("Cancelled by user."),process.exit(1)),Object.values(n.tests).forEach(m=>{c.add(m.fullFilePath);});for(let d of c){let m=mo__default.relative(o.rootDir,d);i&&!i.some(p=>new RegExp(p).test(m))&&c.delete(d),s&&s.some(p=>new RegExp(p).test(m))&&c.delete(d);}let u=Array.from(c).map(async d=>{try{let m=await $a(d,fe,n);if(lp.gt(m.schemaVersion,Ct)&&mne(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"),a&&a.length>0){let p=m.labels||[];if(!a.some(g=>p.includes(g)))return null}return {...m,fullFilePath:d,relativeFilePath:mo__default.relative(o.rootDir,d),testBundleHash:ok({absoluteTestFilePath:d,momenticFiles:n,logger:fe})}}catch(m){l.error(`Failed to read and resolve test at '${d}': ${z(m)}`),process.exit(1);}});return compact(await Promise.all(u))}function mPe({testDefinitions:e,quarantinedTestsMetadata:t,onlyQuarantined:n=false,skipQuarantined:o=false}){let[r,i]=partition(e,l=>l.disabled),[s,a]=partition(i,l=>l.id in t);return {testsToSkip:r,quarantinedTestsToSkip:o?s:[],testsToRun:n?[]:a,quarantinedTestsToRun:o?[]:s}}function pPe({testsToRun:e,quarantinedTestsToRun:t,quarantinedTestsMetadata:n,testInputMatrix:o}){let r=[],i=(s,a,l)=>{o?o.forEach((c,u)=>{r.push({inputs:c,inputIndex:u,testDefinition:s,quarantined:a,quarantinedMetadata:l});}):r.push({inputs:void 0,testDefinition:s,quarantined:a,quarantinedMetadata:l});};return e.forEach(s=>i(s,false)),t.forEach(s=>i(s,true,n[s.id])),r}var hPe=()=>process.exit(130),gPe=()=>process.exit(143);process.on("SIGINT",hPe);process.on("SIGTERM",gPe);function LE(){process.off("SIGINT",hPe),process.off("SIGTERM",gPe);}async function fPe({orgId:e,codeEvaluator:t,logger:n,outputDefinitions:o,testContext:r}){let i={};for(let s of o){let{name:a,value:l}=s;i[a]=await Ls({orgId:e,s:l,codeEvaluator:t,logger:n,context:r});}return i}var SPe=["QUEUED","PROVISIONING","READY","CONNECTED","TERMINATING","TERMINATED","FAILED","EXPIRED"];var w3=z$1.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/),R3=z$1.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/),Yxt=R3.array().min(1).max(32).refine(e=>new Set(e).size===e.length,{message:"service IDs must be unique"}).refine(e=>e.every((t,n)=>n===0||e[n-1]<t),{message:"service IDs must be sorted"}),ax=z$1.discriminatedUnion("mode",[z$1.object({mode:z$1.literal("playwright")}).strict(),z$1.object({mode:z$1.literal("private-service"),connectorId:w3,serviceIds:Yxt.optional()}).strict()]),C3=z$1.record(z$1.string().regex(/^[a-z0-9]([-.a-z0-9_]{0,61}[a-z0-9])?$/),z$1.string()),I3=z$1.union([z$1.guid(),z$1.string().regex(/^[a-f0-9]{64}$/)]),Jxt=z$1.object({allocationRequestId:z$1.guid(),apiKeyId:z$1.string().min(1),maxSessionTtlSeconds:z$1.number().int().min(1).max(3600),network:ax,organizationId:z$1.string().min(1),runAttemptId:z$1.guid(),runId:z$1.guid(),testId:z$1.string().min(1).max(128)}).strict(),bPe="X-Browser-Fleet-Max-Concurrent-Sessions",x3=z$1.object({allocationRequestId:z$1.guid(),maxConcurrentSessions:z$1.number().int().positive().optional(),maxSessionTtlSeconds:z$1.number().int().min(1).max(3600),metadata:C3.optional(),network:ax,principalId:I3,tokenVersion:z$1.literal(2)}).strict();z$1.union([x3,Jxt]);z$1.object({records:z$1.object({endedAt:z$1.iso.datetime(),metadata:C3,sessionId:z$1.string().min(1),usageSeconds:z$1.number().int().nonnegative()}).strict().array().min(1).max(500)}).strict();var TPe=z$1.object({accessToken:z$1.string().min(1),expiresAt:z$1.iso.datetime(),tokenType:z$1.literal("Bearer")}).strict();var yPe=z$1.object({host:z$1.string().trim().min(1).max(253),port:z$1.number().int().min(1).max(65535)}).strict(),Xxt=z$1.object({browserAddress:yPe,id:R3,target:yPe}).strict(),Qxt=z$1.object({id:R3,mode:z$1.literal("localhost")}).strict(),Zxt=z$1.union([Xxt,Qxt]),APe=z$1.object({services:Zxt.array().min(1).max(32)}).strict().superRefine(({services:e},t)=>{let n=e.filter(o=>"mode"in o);new Set(e.map(({id:o})=>o)).size!==e.length&&t.addIssue({code:"custom",message:"service IDs must be unique"}),n.length>1&&t.addIssue({code:"custom",message:"only one localhost namespace service is allowed"}),n.length===1&&e.length>1&&t.addIssue({code:"custom",message:"localhost cannot be combined with explicit services"});}),EPe=z$1.object({algorithm:z$1.literal("RSA-OAEP-256"),chunks:z$1.string().min(1).array().min(1).max(128)}).strict();z$1.object({metadata:C3.optional(),browser:z$1.literal("chromium"),network:ax.default({mode:"playwright"}),playwrightVersion:z$1.string(),ttlSeconds:z$1.number().int().min(1).max(3600),waitTimeoutMs:z$1.number().int().min(0).max(1e4).default(5e3)}).strict();var IPe=z$1.object({connectToken:z$1.string().optional(),failureCode:z$1.string().nullable().optional(),id:z$1.string(),network:ax.default({mode:"playwright"}),status:z$1.enum(SPe),wsEndpoint:z$1.string().optional()}),e_t=IPe.extend({connectToken:z$1.string(),status:z$1.literal("READY"),wsEndpoint:z$1.string()}),P3=500,t_t=250,n_t=1e4,o_t=2e4,r_t=z$1.object({id:z$1.string()}),wPe=z$1.object({connectorId:z$1.string(),state:z$1.enum(["PROVISIONING","ACTIVE","DELETING","DELETED","FAILED"])}).strict(),i_t=z$1.object({encryptedEnrollmentCredential:EPe}).strict(),RPe=64*1024,iB=class{authorization;baseUrl;controlAuthorization;requestTimeoutMs;constructor({accessToken:t,apiKey:n=process.env.BROWSER_FLEET_API_KEY,baseUrl:o=process.env.BROWSER_FLEET_BASE_URL,controlApiKey:r,requestTimeoutMs:i}){if(!o)throw new Error("Browser Fleet base URL is not configured");let s;t?s=`Bearer ${t}`:n&&(s=`Bearer ${n}`),this.authorization=s,this.baseUrl=o.replace(/\/$/,""),this.controlAuthorization=r?`Bearer ${r}`:void 0,this.requestTimeoutMs=i;}async createSession(t){return (await this.createSessionResponse(t)).session}createSessionResponse({idempotencyKey:t,network:n,signal:o,ttlSeconds:r,waitTimeoutMs:i}){return this.requestSession("","session creation",{body:JSON.stringify({browser:"chromium",playwrightVersion:"1.60",...n?{network:n}:{},ttlSeconds:r,waitTimeoutMs:i}),headers:{"Content-Type":"application/json","Idempotency-Key":t},method:"POST",signal:o})}async createSessionAccessToken(t,n){if(!this.authorization)throw new Error("Browser Fleet session API key is not configured");let o=this.authorization,{maxConcurrentSessions:r,...i}=x3.parse(t),s=l=>fetch(`${this.baseUrl}/v1/token`,{body:JSON.stringify(l),headers:{Authorization:o,...r===void 0?{}:{[bPe]:String(r)},"Content-Type":"application/json"},method:"POST",signal:this.requestSignal(n)}),a=await s(i);if(a.status===400&&i.metadata&&(a=await s({...i,metadata:void 0})),!a.ok)throw new Error(`Browser Fleet token request failed with status ${a.status}`);return TPe.parse(await _3(a))}async createReadySession({allocationTimeoutMs:t,idempotencyKey:n,network:o,signal:r,ttlSeconds:i,waitTimeoutMs:s}){r?.throwIfAborted();let a,l=Date.now()+t;try{let c=await this.retrySessionRequest(()=>this.createSessionResponse({idempotencyKey:n,network:o,signal:r,ttlSeconds:i,waitTimeoutMs:s}),l,r);if(a=c.session,a=await this.waitForReady(c,l,r),r?.throwIfAborted(),a.status==="READY"&&a.wsEndpoint&&a.connectToken)return e_t.parse(a);throw new Error(`Browser fleet session ${a.id} did not become ready (${a.failureCode??a.status})`)}catch(c){let u=a?.id??(c instanceof lx?c.sessionId:void 0);if(!u&&r?.aborted)try{u=(await this.createSessionResponse({idempotencyKey:n,network:o,signal:AbortSignal.timeout(o_t),ttlSeconds:i,waitTimeoutMs:s})).session.id;}catch(d){d instanceof lx&&(u=d.sessionId);}throw u&&await this.deleteSession(u,AbortSignal.timeout(n_t)).catch(()=>{}),c}}async getSession(t,n){return (await this.requestSession(`/${t}`,"session status",{signal:n})).session}async waitForReady(t,n,o){let r=t;for(;(r.session.status==="QUEUED"||r.session.status==="PROVISIONING")&&Date.now()<n&&(await setTimeout$1(Math.min(CPe(r.retryAfterMs),n-Date.now()),void 0,{signal:o}),!(Date.now()>=n));)r=await this.retrySessionRequest(()=>this.requestSession(`/${r.session.id}`,"session status",{signal:o}),n,o);return r.session}async retrySessionRequest(t,n,o){for(;;)try{return await t()}catch(r){if(o?.throwIfAborted(),!s_t(r)||Date.now()>=n)throw r;let i=r instanceof cx?r.retryAfterMs:P3;await setTimeout$1(Math.min(CPe(i),n-Date.now()),void 0,{signal:o});}}async deleteSession(t,n){if(!this.authorization)throw new Error("Browser Fleet session API key is not configured");let o=await fetch(`${this.baseUrl}/v1/sessions/${t}`,{headers:{Authorization:this.authorization},method:"DELETE",signal:this.requestSignal(n)});if(!o.ok)throw new Error(`Browser fleet session deletion failed with status ${o.status}`)}async reconcilePrivateConnector({connectorId:t,desiredState:n,principalId:o,signal:r}){return wPe.parse(await this.requestControl(t,"",{body:JSON.stringify(APe.parse(n)),headers:{"Content-Type":"application/json",...o?{"X-Browser-Fleet-Principal-Id":I3.parse(o)}:{}},method:"PUT",signal:r}))}async getPrivateConnector(t,n){return wPe.parse(await this.requestControl(t,"",{signal:n}))}async createPrivateConnectorEnrollment({connectorId:t,publicKey:n,signal:o}){return i_t.parse(await this.requestControl(t,"/enrollment-credentials",{body:JSON.stringify({publicKey:n}),headers:{"Content-Type":"application/json"},method:"POST",signal:o})).encryptedEnrollmentCredential}async deletePrivateConnector(t,n){await this.requestControl(t,"",{method:"DELETE",signal:n},true);}async requestSession(t,n,o={}){if(!this.authorization)throw new Error("Browser Fleet session API key is not configured");let r;try{r=await fetch(`${this.baseUrl}/v1/sessions${t}`,{...o,headers:{Authorization:this.authorization,...o.headers},signal:this.requestSignal(o.signal)});}catch(l){throw o.signal?.aborted?l:new ux(n,{cause:l})}let i=a_t(r.headers.get("Retry-After"));if(!r.ok)throw new cx(n,r.status,i);let s;try{s=await r.json();}catch(l){throw o.signal?.aborted?l:new ux(n,{cause:l})}let a=IPe.safeParse(s);if(a.success)return {retryAfterMs:i,session:a.data};throw new lx(r_t.safeParse(s).data?.id)}async requestControl(t,n,o,r=false){if(!this.controlAuthorization)throw new Error("Browser Fleet control API key is not configured");let i=w3.parse(t),s=await fetch(`${this.baseUrl}/v1/private-connectors/${encodeURIComponent(i)}${n}`,{...o,headers:{Authorization:this.controlAuthorization,...o.headers},signal:this.requestSignal(o.signal)});if(!s.ok){let a=await _3(s).catch(()=>{}),l=typeof a=="object"&&a!==null&&"code"in a&&typeof a.code=="string"?a.code:"FLEET_CONTROL_ERROR";throw new O3(l,s.status)}return r?void 0:_3(s)}requestSignal(t){if(!this.requestTimeoutMs)return t??void 0;let n=AbortSignal.timeout(this.requestTimeoutMs);return t?AbortSignal.any([t,n]):n}},cx=class extends Error{constructor(n,o,r){super(`Browser fleet ${n} failed with status ${o}`);this.status=o;this.retryAfterMs=r;}},ux=class extends Error{constructor(t,n){super(`Browser fleet ${t} request failed`,n);}};function s_t(e){return e instanceof ux||e instanceof cx&&(e.status===408||e.status===429||e.status>=500)}function a_t(e){if(!e)return P3;let t=Number(e);if(Number.isFinite(t)&&t>=0)return t*1e3;let n=Date.parse(e);return Number.isNaN(n)?P3:Math.max(0,n-Date.now())}function CPe(e){return e+Math.random()*Math.min(t_t,e/4)}var O3=class extends Error{constructor(n,o){super(`Browser Fleet control request failed (${n}, ${o})`);this.code=n;this.status=o;}};async function _3(e){let t=Number(e.headers.get("Content-Length"));if(Number.isFinite(t)&&t>RPe)throw new Error("Browser Fleet response is too large");if(!e.body)return;let n=e.body.getReader(),o=[],r=0;for(let a=await n.read();!a.done;a=await n.read()){let{value:l}=a;if(r+=l.byteLength,r>RPe)throw await n.cancel(),new Error("Browser Fleet response is too large");o.push(l);}let i=new Uint8Array(r),s=0;for(let a of o)i.set(a,s),s+=a.byteLength;return JSON.parse(new TextDecoder().decode(i))}var lx=class extends Error{constructor(n){super("Browser fleet returned a malformed session response");this.sessionId=n;}};var xPe=new Set;function _Pe(e){return de({name:"cli.setup_browser_and_controller",attributes:{"momentic.remote_browser":e.localBrowserConfig.remoteBrowser===true},fn:async t=>{let n=await l_t(e);return t?.setAttribute("momentic.browser_execution_mode",n.controller.browser.executionMode),n}})}async function l_t({baseUrl:e,envName:t,devicePixelRatio:n,apiClient:o,test:r,storageClient:i,codeEvaluator:s,generator:a,orgId:l,variables:c,logger:u,customHeaders:d,testInputs:m,localBrowserConfig:p,aiSettings:h,visualDiffScreenshotStorage:g,tracer:f,runId:y,runAttemptId:S,runGroupId:b,browserTypeOverride:v,attemptedRemoteBrowserProviders:A,abortSignal:R}){let w={baseUrl:o.baseUrl,apiKey:o.apiKey,logger:fe,mode:o.mode,runner:o.runner},{controller:O,context:I}=await OI({baseUrl:e,envName:t,test:r,variables:c,logger:u,orgId:l,localBrowserConfig:p,aiSettings:h,customHeaders:d,codeEvaluator:s,storage:i,enricher:new ep(w,a),generator:a,visualDiffScreenshotStorage:g,devicePixelRatio:n,browserTypeOverride:v,callbacks:{onNetworkPage:_=>f.onNetworkPage(_),onNetworkLogs:_=>f.onNetworkLogs(_)},videoOptions:f.videoOutputPath?{videoOutputPath:f.videoOutputPath,onVideoPageChange:({videoName:_,timestamp:P})=>{f.setActiveVideo(_,P);}}:void 0,validateBrowserType:_=>{Ch(_)||(fe.warn({browserType:_,testName:r.name},"Browser required by test does not appear to be installed"),!xPe.has(_)&&(xPe.add(_),C.warn(`Browser ${_} does not appear to be installed. Run '${rh(_)}' if you hit launch errors.`)));},createRemoteBrowserConnection:p.remoteBrowser?async()=>{let _=Date.now(),P,N=A?.slice(-1),D=crypto.randomUUID(),k=async()=>{let H=await o.createRemoteBrowserConnection({attemptedProviders:N,envName:t,runAttemptId:S,runGroupId:b,runId:y,testId:r.id,testName:r.name});return P=H.provider,H.provider&&A?.push(H.provider),H};try{if(N?.includes("SELF_HOSTED"))return await k();let H=await o.tryCreateBrowserFleetAccessToken({allocationRequestId:D,envName:t,runAttemptId:S,runGroupId:b,runId:y,testId:r.id,testName:r.name},R);if(!H)return await k();P=H.provider,A?.push(H.provider);let J=await new iB({accessToken:H.accessToken,baseUrl:H.fleetApiUrl,requestTimeoutMs:15e3}).createReadySession({allocationTimeoutMs:9e4,idempotencyKey:D,network:H.network,signal:R,ttlSeconds:3600,waitTimeoutMs:1e4});return {accessToken:J.connectToken,endpointType:"PLAYWRIGHT",operatingSystem:"linux",provider:H.provider,wsEndpoint:J.wsEndpoint}}catch(H){throw R?.aborted?H:new Lc("Browser Fleet session allocation failed",{cause:H})}finally{dn.distribution("test_event_duration",Date.now()-_,["name:remote-browser-allocation",`provider:${P??"unknown"}`]);}}:void 0});try{await kI({orgId:l,test:r,testInputs:m,codeEvaluator:s,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 MI&&(C.error(_.message),process.exit(1)),_}return {controller:O,context:I}}function PPe({testAdvancedSettings:e,orgSettings:t,logger:n}){if(e.failureRecovery===false||e.failureRecovery===void 0&&!t?.failureRecovery)return false;if(!fl){let o="This test is ineligible for failure recovery since this does not appear to be a CI environment";return n.warn(o),C.debug(o),false}return true}async function OPe({attemptInputs:e,attemptFixtures:t,attemptMetadata:n,runFixtures:o,recordVideo:r,stepCallbacks:i}){let{orgId:s,userId:a,runId:l}=n,{runTracer:c,runGroupTracer:u,project:d,apiClient:m}=o,{controller:p,context:h,codeEvaluator:g,storageClient:f,cacheStorage:y,logger:S,usageTracker:b,tracer:v}=t,{test:A,orgSettings:R}=e;S.info(`Running test '${A.name}' locally (run link: https://app.momentic.ai/runs/${l})`);let w={controller:p,storage:f,cacheStorage:y,usageTracker:b,context:h,logger:S,codeEvaluator:g},O={orgId:s,userId:a,runId:l,testMetadata:A,steps:A.steps,beforeSteps:A.beforeSteps,afterSteps:A.afterSteps,orgSettings:R},I={collectDebugData:true,reinitializeBrowser:true,disableHealing:!await PPe({testAdvancedSettings:A.advanced,orgSettings:R.ai,logger:S})};return Rwe({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();}}},testParams:{attemptTracer:v},runParams:{runTracer:c,runGroupTracer:u,project:d,apiClient:m,captureEvent:rm,abortSignal:o.abortSignal}})}async function MPe(e){let{testDefinition:t,traceMetadata:n}=e;return de({name:"cli.test_run",newTrace:true,serviceName:"cli",attributes:{"momentic.org_id":e.orgId,"momentic.run_group_id":n.runGroupId,"momentic.run_id":e.runId,"momentic.test_id":t.id,"momentic.parallel":n.parallel,"momentic.worker_count":n.workerCount,"momentic.worker_index":n.workerIndex,"momentic.remote_browser_run":n.remoteBrowser},fn:async o=>{let r=await d_t(e);return o?.setAttributes({"momentic.test_status":r.status,"momentic.test_attempts":r.attempts}),r}})}async function d_t(e){let{testDefinition:t,logger:n}=e,o=new Date;try{return await m_t(e)}catch(r){wh(r);let{customHeaders:i,envName:s,testInputs:a,urlOverride:l}=e,c={customHeaders:i,envName:s,testInputs:a,urlOverride:l},u="Fatal error running test";return n.error({err:r},u),C.error({err:r},u),kPe({err:oi(r),parameters:c,test:t,failureReason:oe.reasonFor(r,"UnknownError"),startedAt:o,lastAttemptStartedAt:o,attempts:0,quarantined:e.quarantined,quarantinedMetadata:e.quarantinedMetadata})}}async function m_t(e){let{testDefinition:t,snapshot:n,project:o,apiClient:r,orgId:i,userId:s,urlOverride:a,runGroupTracer:l,logger:c,gitMetadata:u,cacheOptions:d,runId:m,testInputs:p,quarantined:h,quarantinedMetadata:g,usageTracker:f}=e,y=n?{...o.config,...n.metadata.config}:o.config,S=new VT(r,i),b=op({logger:c,orgId:i,client:r,gitMetadata:u,regenerateCache:d.regenerateCache,alwaysSaveCache:d.alwaysSaveCache,noCache:n?true:d.noCache,isolateCachesByEnvironment:o.config?.advanced?.isolateCachesByEnvironment,bustOldestCachePercentage:d.bustOldestCachePercentage}),v,A,R;n?(v={envName:n.metadata.environment.envName,resolvedEnv:n.metadata.environment.resolvedEnv,environmentVariables:{...n.metadata.environment.variables},baseUrl:n.metadata.environment.baseUrl},A={steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps}):(v=yy({test:t,envNameOverride:e.envName,urlOverride:a,resolveEnv:M=>gc(M,o,c)}),{stepListsWithCaches:A,restoredStepLists:R}=await uc({cacheStorage:b,logger:c,schemaVersion:t.schemaVersion,stepLists:{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,environment:v.envName,useSnapshotIdentityCache:o.config.fileFormat==="v2"}));let{envName:w,resolvedEnv:O,environmentVariables:I,baseUrl:_}=v,P=A.steps,N=A.beforeSteps??void 0,D=A.afterSteps??void 0,k=ow(t),H=k||(e.recordVideo??false);k&&e.recordVideo!==true&&c.info("Enabling video recording because the test defines run assertions");let J=await l.startRun({logger:c,runId:m,originalSteps:R??{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,testName:t.name,directory:dirname(t.relativeFilePath),testDescription:t.description??void 0,testLabels:t.labels,baseUrl:_,environmentName:w,schemaVersion:t.schemaVersion,testBundleHash:t.testBundleHash,resolvedInputs:p,quarantined:h,quarantinedReason:g?.quarantinedReason,aiSettings:y.ai,recordVideoOverride:k?true:void 0}),W=c.child(J.loggerBindings||{});Object.entries(J.envVarBindings||{}).forEach(([M,X])=>{I[M]=X;});let V=await h_t({...e,recordVideo:H,effectiveConfig:y,variables:I,envName:w,resolvedEnv:O,baseUrl:_,storageClient:S,tracer:J,runGroupTracer:l,logger:W,cacheStorage:b,stepsWithCaches:P,beforeStepsWithCaches:N,afterStepsWithCaches:D,usageTracker:f});return await J.finish({logger:c,status:V.status,finishedAt:V.finishedAt,failureDetails:V.failureDetails,failureReason:V.failureReason,isFlake:V.isFlake,failureRecoveryDetails:V.failureRecoveryDetails,runAssertionResults:V.runAssertionResults}),p_t({apiClient:r,classificationEnabled:y.ai?.classification?.enabled===true,runId:m,environment:w,status:V.status,logger:W}),{runId:J.runId,...V}}function p_t({apiClient:e,classificationEnabled:t,runId:n,environment:o,status:r,logger:i}){if(!t||r!=="PASSED"&&r!=="FAILED")return;let s=e.recordRunOutcomeForFailureRate({runId:n,environment:o,status:r==="PASSED"?"PASSED":"FAILED"}).catch(a=>{i.debug({err:a,runId:n},"Failed to report run outcome for failure rate");});aPe(s);}async function h_t(e){let{testDefinition:t,effectiveConfig:n,stepsWithCaches:o,beforeStepsWithCaches:r,afterStepsWithCaches:i,project:s,regenerateGoldenFiles:a,apiClient:l,generator:c,baseUrl:u,storageClient:d,orgId:m,userId:p,envName:h,urlOverride:g,customHeaders:f,testInputs:y,variables:S,resolvedEnv:b,retriesOverride:v,devicePixelRatio:A,logUpdate:R,tracer:w,runGroupTracer:O,logger:I,cacheStorage:_,gitMetadata:P,quarantined:N,quarantinedMetadata:D,usageTracker:k}=e,H=n,J=H.ai?.aiFailureAnalysis??false,W=new Date,V=new KT(s,l,a),M={envName:h,urlOverride:g,customHeaders:f,testInputs:y},X={...H.browser||{},...b?.browser||{},...t.advanced||{},...e.remoteBrowserOverride?{remoteBrowser:true}:{}},$=X.remoteBrowser===true,G=[],ne,ie=Math.abs(v??t.retries??n.retries??1),Pe=[],Ne=[];I.info({...P,labels:t.labels,name:t.name,cwd:process.cwd()},"Starting test run using CLI");for(let Fe=0;Fe<=ie;Fe++){let it=randomUUID(),ee=await w.startAttempt(it),Z=I.child(ee.loggerBindings||{}),be={...t,steps:cloneDeep(o),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)};Fe!==0&&R("RETRY",`attempt ${Fe+1}/${ie+1}`);let bt=new Date,Ke=Gy({tools:new np({httpClient:new ua({baseUrl:l.baseUrl,apiKey:l.apiKey,logger:Z,mode:l.mode,runner:l.runner}),fakerSeed:H.advanced?.fakerConstantSeed?Dw:void 0})}),we;try{let{controller:ct,context:kt}=await _Pe({tracer:ee,runId:w.runId,runAttemptId:it,runGroupId:e.traceMetadata.runGroupId,baseUrl:u,envName:h,apiClient:l,devicePixelRatio:A,logger:Z,storageClient:d,codeEvaluator:Ke,test:be,generator:c,orgId:m,variables:S,customHeaders:f,testInputs:y,localBrowserConfig:X,browserTypeOverride:e.browserTypeOverride,attemptedRemoteBrowserProviders:G,abortSignal:e.abortSignal,aiSettings:{...H.ai||{},...be.advanced||{}},visualDiffScreenshotStorage:V});e.abortSignal&&(e.abortSignal.aborted?ct.executeAbortController.abort():(we=()=>{ct.executeAbortController.abort();},e.abortSignal.addEventListener("abort",we,{once:!0}))),ne=await OPe({attemptMetadata:{attemptNumber:Fe+1,orgId:m,userId:p,runId:w.runId},attemptFixtures:{logger:Z,storageClient:d,cacheStorage:_,usageTracker:k,codeEvaluator:Ke,context:kt,controller:ct,tracer:ee},attemptInputs:{test:be,orgSettings:H},runFixtures:{runTracer:w,runGroupTracer:O,project:s,apiClient:l,abortSignal:e.abortSignal},recordVideo:e.recordVideo??!1,stepCallbacks:{onStepStart:e.onStepStart,onStepEnd:e.onStepEnd,onSectionStart:e.onSectionStart}});let An=new Date,et={logger:I,cacheStorage:_,orgId:m,testId:t.id,environment:h,originalStepsWithCaches:{steps:cloneDeep(o),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)},updatedStepsWithCaches:{steps:be.steps,beforeSteps:be.beforeSteps,afterSteps:be.afterSteps}};await zf({logger:I,cacheStorage:_,orgId:m,testId:t.id,environment:h,stepLists:et.updatedStepsWithCaches,useSnapshotIdentityCache:s.config.fileFormat==="v2"}),ne?.status==="PASSED"||ne?.status==="CANCELLED"&&n.advanced?.saveCacheOnCancel?await Vf(et):ne?.status==="FAILED"&&Fe===ie&&await sT(et),await ee.finish({logger:Z,result:ne});let Qe;if(ne.status==="PASSED"&&ow(t)){e.onStepStart?.(eQ);let It=await ove({runAssertions:t.runAssertions??[],orgId:m,project:s,generator:c,apiClient:l,runTracer:w,runGroupTracer:O,logger:Z,testPlatform:"web",captureEvent:rm,abortSignal:e.abortSignal});An=new Date,It&&(Ne.push(It),Qe=tQ(It.evaluations));}let Wt=Ne.length>0?{attempts:Ne}:void 0;Pe.unshift(Qe!==void 0?"FAILED":ne.status);let Qn=await fPe({orgId:m,codeEvaluator:Ke,logger:Z,outputDefinitions:t.outputs??[],testContext:kt}),ro=iQ(Pe),rl=Fe+1;if(ne.status!=="FAILED"&&Qe===void 0)return {...ne,runAttemptId:it,parameters:M,test:be,filePath:be.relativeFilePath,startedAt:W,lastAttemptStartedAt:bt,finishedAt:An,attempts:rl,baseUrl:u,outputs:Qn,isFlake:ro,runAssertionResults:Wt,quarantined:N,quarantinedMetadata:D,usedRemoteBrowser:$};let Bl=ne.failedStepResult,Hi=Qe??(Bl?.message||"Unknown failure"),ls=Qe?"AssertionFailureError":Bl?.failureReason??e_(Hi)??"UnknownError",ir=Z.child({failureReason:ls,errorMessage:Hi,numAttempts:(ie+1).toString(),name:be.name});if(Fe<ie){ir.warn(`Retrying failed execution attempt for run: ${Hi}`);continue}ir.error({usedRemoteBrowser:$},`Test failed after all exhausting attempts: ${Hi}`);let U=new Error(Hi),ve={errorMessage:Hi,errorStack:U.stack},ft;if(H.ai?.classification?.enabled===!0){let It=Bl?.failureClassification;It||(e.onStepStart?.(dm),It=await cF({runTracer:w,runGroupTracer:O,outputDir:e.outputDir,orgId:m,project:s,generator:c,apiClient:l,logger:I,testPlatform:"web",aiSettings:H.ai,captureEvent:rm,abortSignal:e.abortSignal,failedStepMessage:Qe??Bl?.message,runAssertionResults:Wt})),It&&(ft=It.classification.category,ls=It.classification.category,ve.classification={reason:It.classification.category,secondaryCategories:It.classification.secondaryCategories,summary:It.classification.reasoning,recoverable:It.classification.recoverable,confidence:It.classification.confidence,action:It.action,citations:It.classification.citations,cache:It.classification.cache,source:"v2"});}else if(J){let It;try{if(ne.results&&ne.results.length>0){e.onStepStart?.(dm);let{classification:en,aiFailureReason:lm}=await Gre({logger:Z,browserStateStorage:ee,generator:c,fullResults:ne,failureReason:ls,error:U,maxItemsFromEnd:void 0,numStepsWithScreenshots:void 0,disableCache:!1});It=en,ft=lm;}}catch(en){Z.warn({err:en},"Failed to classify test results");}It&&(ve.classification=It,ls=ft??ls,ve.classification.source="v1");}return {...ne,status:"FAILED",runAttemptId:it,parameters:M,failureDetails:ve,failureReason:ls,test:be,filePath:be.relativeFilePath,startedAt:W,lastAttemptStartedAt:bt,finishedAt:An,attempts:Fe+1,baseUrl:u,outputs:Qn,runAssertionResults:Wt,quarantined:N,quarantinedMetadata:D,usedRemoteBrowser:$}}catch(ct){let kt=`Encountered fatal platform error while running test '${be.name}'`;return Z.error({err:ct},kt),C.error({err:ct},kt),await ee.finish({logger:Z,result:{status:"FAILED"}}),kPe({err:oi(ct),parameters:M,test:be,failureReason:oe.reasonFor(ct,"InternalPlatformError"),startedAt:W,lastAttemptStartedAt:bt,attempts:Fe+1,quarantined:N,quarantinedMetadata:D,runAttemptId:it,baseUrl:u,usedRemoteBrowser:$})}finally{we&&e.abortSignal?.removeEventListener("abort",we);}}throw new Error("This code should not be reachable")}function kPe({err:e,parameters:t,test:n,failureReason:o,startedAt:r,lastAttemptStartedAt:i,attempts:s,quarantined:a,quarantinedMetadata:l,runAttemptId:c,baseUrl:u,usedRemoteBrowser:d}){return {status:"FAILED",results:[],parameters:t,test:n,filePath:n.relativeFilePath,failureReason:o,failureDetails:{errorMessage:e.message,errorStack:e.stack},startedAt:r,lastAttemptStartedAt:i,finishedAt:new Date,attempts:s,outputs:{},quarantined:a,quarantinedMetadata:l,runAttemptId:c,baseUrl:u,usedRemoteBrowser:d}}var LPe=3e4;async function FE({timeoutMinutes:e,cancel:t,run:n}){let o=()=>void t("SIGINT received"),r=()=>void t("SIGTERM received");LE(),process.once("SIGINT",o),process.once("SIGTERM",r);let i;e!==void 0&&e>0&&(i=setTimeout(()=>void t(`Timeout of ${e} minute(s) reached`),e*60*1e3));try{return await n()}finally{process.off("SIGINT",o),process.off("SIGTERM",r),clearTimeout(i);}}var DE=class{constructor(t){this.params=t;}runQueue={};runResults=[];cancelledRunsById=new Map;cancelled=false;cancellationReason;async cancel(t,n=true){if(this.cancelled)return;this.cancelled=true,this.cancellationReason=t;for(let r of Object.values(this.runQueue))r.done||r.abortController.abort();n&&await ge(Promise.allSettled(Object.values(this.runQueue).map(r=>r.promise)),{milliseconds:LPe}).catch(()=>{this.params.runGroupLogger.warn(`Graceful shutdown timeout of ${LPe}ms reached while waiting for running tests to settle.`);});let o=new Set(this.runResults.map(r=>r.runId).filter(r=>!!r));for(let r of Object.values(this.runQueue)){if(r.done||o.has(r.activeRun.runId))continue;let{activeRun:i}=r,s={results:[],beforeResults:[],afterResults:[],test:i.testDefinition,filePath:i.testDefinition.relativeFilePath,startedAt:i.startedAt,lastAttemptStartedAt:i.startedAt,finishedAt:new Date,status:"CANCELLED",attempts:0,runId:i.runId,cancellationReason:t,quarantined:i.quarantined,quarantinedMetadata:i.quarantinedMetadata,parameters:{testInputs:i.inputs,envName:this.params.envName,urlOverride:this.params.urlOverride,customHeaders:this.params.customHeaders},outputs:{}};this.cancelledRunsById.set(i.runId,s);}}resolveNext(){if(this.params.next)return this.params.next;let t=[...this.params.testsToRun??[]];return ()=>Promise.resolve(t.shift())}async run(){let t=this.resolveNext(),{parallel:n,reporter:o,runGroupTracer:r,runGroupLogger:i,logger:s,project:a,client:l,generator:c,orgId:u,userId:d,devicePixelRatio:m,outputDir:p,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:S,gitMetadata:b,cacheOptions:v,browserTypeOverride:A,remoteBrowserOverride:R,onResult:w,onFatal:O}=this.params,I=0,_=true;for(;_;){let P=Object.values(this.runQueue);if(P.length===n&&await Promise.race(P.map(J=>J.promise)),this.cancelled){_=false;continue}let N=await t();if(N===void 0){_=false;continue}let D=`test-${I++}`,k={...N,startedAt:new Date},H=new AbortController;this.runQueue[D]={done:false,activeRun:k,abortController:H,promise:(async({inputs:J,quarantined:W,quarantinedMetadata:V,testDefinition:M,snapshot:X,runId:$})=>{let G=M.relativeFilePath.includes("..")?M.fullFilePath:M.relativeFilePath;o.onTestBegin(G);let ne=i.child({testId:M.id,runId:$}),ie=new Gm({logger:ne,reporter:new Qm(l),runType:"test-run",platform:"WEB",runId:$,runGroupId:r.runGroupMetadata.id,envName:f,testMetadata:M,suiteMetadata:void 0,runner:"test-runner"});try{let Pe=await MPe({testDefinition:M,snapshot:X,project:a,testInputs:J,quarantined:W,quarantinedMetadata:V,orgId:u,userId:d,runId:$,devicePixelRatio:m,apiClient:l,runGroupTracer:r,outputDir:p,generator:c,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:S,logUpdate:(Ne,Fe)=>o.onTestStatus(G,Ne,Fe),...upe(o,G),logger:ne,gitMetadata:b,cacheOptions:v,usageTracker:ie,browserTypeOverride:A,remoteBrowserOverride:R,recordVideo:this.params.recordVideo,abortSignal:H.signal,traceMetadata:this.params.traceMetadata});o.onTestEnd(G,Pe.status,{recovered:Pe.status==="PASSED"&&!!Pe.failureRecoveryDetails?.attempts}),this.runResults.push(Pe),w?.(Pe);}catch(Pe){let Ne=`Encountered unexpected fatal error when running test '${M.name}'`;ne.error({err:Pe},Ne),C.error({err:Pe},Ne),wh(Pe),O?.(Pe),await this.cancel("Fatal error occurred",false);}finally{let Pe=this.runQueue[D];Pe&&(Pe.done=true),await ie.flush(s),delete this.runQueue[D];}})(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 sB(e){return createHash("sha1").update(e).digest("hex")}var f_t=["tab","view","mode","step"],y_t=[/^[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 S_t(e){return y_t.some(t=>t.test(e))}function NPe(e,t={}){let n;try{n=new URL(e);}catch{return e}let o=new Set(t.queryAllowlist??f_t),i=n.pathname.split("/").map(c=>c.length>0&&S_t(c)?"{id}":c).join("/"),s=[],a=Array.from(n.searchParams.keys()).sort();for(let c of a){if(!o.has(c))continue;let u=n.searchParams.getAll(c).sort();for(let d of u)s.push(`${encodeURIComponent(c)}=${encodeURIComponent(d)}`);}let l=s.length>0?`?${s.join("&")}`:"";return `${n.protocol}//${n.host}${i}${l}`}var M3=new Set(["id","name","role","type","href","for","placeholder","aria-label","data-testid"]),b_t=/^[A-Za-z0-9_-]{16,256}$|^:r[0-9a-z]{1,32}:$/,T_t=[/\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],DPe=new Set(["h1","h2","h3","h4","h5","h6"]),A_t=new Set(["input","select","textarea"]);function E_t(e){let t=e;for(let n of T_t)t=t.replace(n,"{id}");return t}function FPe(e){return E_t(e).toLowerCase().replace(/\s+/g," ").trim().replace(/[.,:;!?]+$/u,"").replace(/\s*\d+\s*$/u,"").trim()}function v_t(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 w_t(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":b_t.test(t)?"@gen":FPe(t)}function BPe(e,t,n){let o=e.tag.toLowerCase(),r=(e.role??e.attributes?.role)?.toLowerCase(),i=Math.min(Math.floor(t/4),6),s=`<${o}@${i}`;if(r!==void 0&&(s+=` role=${r}`),e.attributes!==void 0){let l=Object.keys(e.attributes).filter(c=>M3.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=w_t(u,d);s+=` ${u}=${m}`;}}n.tokens.push(s);let a=e.text?.trim();a!==void 0&&a.length>0&&(r==="button"||r==="link"||r==="heading"||o==="button"||o==="a"||o==="label"||DPe.has(o)?n.tokens.push(`label=${FPe(a)}`):n.tokens.push(v_t(a))),(o==="button"||r==="button")&&(n.counts.buttons+=1),(o==="a"||r==="link")&&(n.counts.links+=1),(A_t.has(o)||r==="textbox"||r==="combobox")&&(n.counts.formFields+=1),(DPe.has(o)||r==="heading")&&(n.counts.headings+=1);for(let l of e.children??[])BPe(l,t+1,n);}function UPe(e){let t={tokens:[],counts:{buttons:0,links:0,formFields:0,headings:0}};return BPe(e,0,t),{tokens:t.tokens,counts:t.counts}}function HPe(e,t){let n=new TextEncoder().encode(e),o=n.length,r=Math.floor(o/4),i=t>>>0,s=3432918353,a=461845907;for(let d=0;d<r;d++){let m=d*4,p=n[m]|n[m+1]<<8|n[m+2]<<16|n[m+3]<<24;p=Math.imul(p,s),p=p<<15|p>>>17,p=Math.imul(p,a),i^=p,i=i<<13|i>>>19,i=Math.imul(i,5)+3864292196;}let l=0,c=o&3,u=r*4;return c===3&&(l^=n[u+2]<<16),c>=2&&(l^=n[u+1]<<8),c>=1&&(l^=n[u],l=Math.imul(l,s),l=l<<15|l>>>17,l=Math.imul(l,a),i^=l),i^=o,i^=i>>>16,i=Math.imul(i,2246822507),i^=i>>>13,i=Math.imul(i,3266489909),i^=i>>>16,i>>>0}var aB=128,R_t=4294967295,C_t=(()=>{let e=[];for(let t=0;t<aB;t++)e.push(HPe(`perm:${t}`,0));return e})();function jPe(e){let t=new Uint32Array(aB);for(let o=0;o<aB;o++)t[o]=R_t;let n=new Set(e);for(let o of n)for(let r=0;r<aB;r++){let i=HPe(o,C_t[r]);i<t[r]&&(t[r]=i);}return t}var x_t=32;function lB(e){let t=NPe(e.url,{queryAllowlist:e.queryAllowlist}),{tokens:n,counts:o}=UPe(e.dom),r=[`url:${t}`,`counts:buttons=${o.buttons}`,`counts:links=${o.links}`,`counts:formFields=${o.formFields}`,`counts:headings=${o.headings}`,...n],i=jPe(r),s=Buffer.from(i.buffer,i.byteOffset,i.byteLength);return {fingerprintHash:createHash$1("sha256").update(s).digest("hex").slice(0,x_t),minhash:Array.from(i),canonicalUrl:t}}var __t=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]),Go="\uFFFD",F;(function(e){e[e.EOF=-1]="EOF",e[e.NULL=0]="NULL",e[e.TABULATION=9]="TABULATION",e[e.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",e[e.LINE_FEED=10]="LINE_FEED",e[e.FORM_FEED=12]="FORM_FEED",e[e.SPACE=32]="SPACE",e[e.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",e[e.QUOTATION_MARK=34]="QUOTATION_MARK",e[e.AMPERSAND=38]="AMPERSAND",e[e.APOSTROPHE=39]="APOSTROPHE",e[e.HYPHEN_MINUS=45]="HYPHEN_MINUS",e[e.SOLIDUS=47]="SOLIDUS",e[e.DIGIT_0=48]="DIGIT_0",e[e.DIGIT_9=57]="DIGIT_9",e[e.SEMICOLON=59]="SEMICOLON",e[e.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",e[e.EQUALS_SIGN=61]="EQUALS_SIGN",e[e.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",e[e.QUESTION_MARK=63]="QUESTION_MARK",e[e.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",e[e.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",e[e.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",e[e.GRAVE_ACCENT=96]="GRAVE_ACCENT",e[e.LATIN_SMALL_A=97]="LATIN_SMALL_A",e[e.LATIN_SMALL_Z=122]="LATIN_SMALL_Z";})(F||(F={}));var va={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function cB(e){return e>=55296&&e<=57343}function $Pe(e){return e>=56320&&e<=57343}function GPe(e,t){return (e-55296)*1024+9216+t}function uB(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function dB(e){return e>=64976&&e<=65007||__t.has(e)}var he;(function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text";})(he||(he={}));var O_t=65536,mB=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=O_t,this.isEol=false,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1;}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(t,n){let{line:o,col:r,offset:i}=this,s=r+n,a=i+n;return {code:t,startLine:o,endLine:o,startCol:s,endCol:s,startOffset:a,endOffset:a}}_err(t){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(t,0)));}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos;}_processSurrogate(t){if(this.pos!==this.html.length-1){let n=this.html.charCodeAt(this.pos+1);if($Pe(n))return this.pos++,this._addGap(),GPe(t,n)}else if(!this.lastChunkWritten)return this.endOfChunkHit=true,F.EOF;return this._err(he.surrogateInInputStream),t}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0);}write(t,n){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=false,this.lastChunkWritten=n;}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=false;}startsWith(t,n){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,false;if(n)return this.html.startsWith(t,this.pos);for(let o=0;o<t.length;o++)if((this.html.charCodeAt(this.pos+o)|32)!==t.charCodeAt(o))return false;return true}peek(t){let n=this.pos+t;if(n>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,F.EOF;let o=this.html.charCodeAt(n);return o===F.CARRIAGE_RETURN?F.LINE_FEED:o}advance(){if(this.pos++,this.isEol&&(this.isEol=false,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,F.EOF;let t=this.html.charCodeAt(this.pos);return t===F.CARRIAGE_RETURN?(this.isEol=true,this.skipNextNewLine=true,F.LINE_FEED):t===F.LINE_FEED&&(this.isEol=true,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=false,this._addGap(),this.advance()):(this.skipNextNewLine=false,cB(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===F.LINE_FEED||t===F.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){uB(t)?this._err(he.controlCharacterInInputStream):dB(t)&&this._err(he.noncharacterInInputStream);}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=false;}};var kn;(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";})(kn||(kn={}));function pB(e,t){for(let n=e.attrs.length-1;n>=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null}var k_t=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 zPe(e){return e>=55296&&e<=57343||e>1114111?65533:k_t.get(e)??e}function VPe(e){let t=atob(e),n=t.length&-2,o=new Uint16Array(n/2);for(let r=0,i=0;r<n;r+=2){let s=t.charCodeAt(r),a=t.charCodeAt(r+1);o[i++]=s|a<<8;}return o}var k3=VPe("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 Ds;(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";})(Ds||(Ds={}));var pr;(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";})(pr||(pr={}));var WPe=32;function L3(e){return e>=pr.ZERO&&e<=pr.NINE}function L_t(e){return e>=pr.UPPER_A&&e<=pr.UPPER_F||e>=pr.LOWER_A&&e<=pr.LOWER_F}function N_t(e){return e>=pr.UPPER_A&&e<=pr.UPPER_Z||e>=pr.LOWER_A&&e<=pr.LOWER_Z||L3(e)}function D_t(e){return e===pr.EQUALS||N_t(e)}var Ui;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity";})(Ui||(Ui={}));var im;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute";})(im||(im={}));var hB=class{decodeTree;emitCodePoint;errors;constructor(t,n,o){this.decodeTree=t,this.emitCodePoint=n,this.errors=o;}state=Ui.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=im.Strict;runConsumed=0;startEntity(t){this.decodeMode=t,this.state=Ui.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0;}write(t,n){switch(this.state){case Ui.EntityStart:return t.charCodeAt(n)===pr.NUM?(this.state=Ui.NumericStart,this.consumed+=1,this.stateNumericStart(t,n+1)):(this.state=Ui.NamedEntity,this.stateNamedEntity(t,n));case Ui.NumericStart:return this.stateNumericStart(t,n);case Ui.NumericDecimal:return this.stateNumericDecimal(t,n);case Ui.NumericHex:return this.stateNumericHex(t,n);case Ui.NamedEntity:return this.stateNamedEntity(t,n)}}stateNumericStart(t,n){return n>=t.length?-1:(t.charCodeAt(n)|WPe)===pr.LOWER_X?(this.state=Ui.NumericHex,this.consumed+=1,this.stateNumericHex(t,n+1)):(this.state=Ui.NumericDecimal,this.stateNumericDecimal(t,n))}stateNumericHex(t,n){for(;n<t.length;){let o=t.charCodeAt(n);if(L3(o)||L_t(o)){let r=o<=pr.NINE?o-pr.ZERO:(o|WPe)-pr.LOWER_A+10;this.result=this.result*16+r,this.consumed++,n++;}else return this.emitNumericEntity(o,3)}return -1}stateNumericDecimal(t,n){for(;n<t.length;){let o=t.charCodeAt(n);if(L3(o))this.result=this.result*10+(o-pr.ZERO),this.consumed++,n++;else return this.emitNumericEntity(o,2)}return -1}emitNumericEntity(t,n){if(this.consumed<=n)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===pr.SEMI)this.consumed+=1;else if(this.decodeMode===im.Strict)return 0;return this.emitCodePoint(zPe(this.result),this.consumed),this.errors&&(t!==pr.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,n){let{decodeTree:o}=this,r=o[this.treeIndex],i=(r&Ds.VALUE_LENGTH)>>14;for(;n<t.length;){if(i===0&&r&Ds.FLAG13){let a=(r&Ds.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let l=r&Ds.JUMP_TABLE;if(t.charCodeAt(n)!==l)return this.result===0?0:this.emitNotTerminatedNamedEntity();n++,this.excess++,this.runConsumed++;}for(;this.runConsumed<a;){if(n>=t.length)return -1;let l=this.runConsumed-1,c=o[this.treeIndex+1+(l>>1)],u=l%2===0?c&255:c>>8&255;if(t.charCodeAt(n)!==u)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();n++,this.excess++,this.runConsumed++;}this.runConsumed=0,this.treeIndex+=1+(a>>1),r=o[this.treeIndex],i=(r&Ds.VALUE_LENGTH)>>14;}if(n>=t.length)break;let s=t.charCodeAt(n);if(s===pr.SEMI&&i!==0&&r&Ds.FLAG13)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);if(this.treeIndex=F_t(o,r,this.treeIndex+Math.max(1,i),s),this.treeIndex<0)return this.result===0||this.decodeMode===im.Attribute&&(i===0||D_t(s))?0:this.emitNotTerminatedNamedEntity();if(r=o[this.treeIndex],i=(r&Ds.VALUE_LENGTH)>>14,i!==0){if(s===pr.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==im.Strict&&!(r&Ds.FLAG13)&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0);}n++,this.excess++;}return -1}emitNotTerminatedNamedEntity(){let{result:t,decodeTree:n}=this,o=(n[t]&Ds.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,o,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,n,o){let{decodeTree:r}=this;return this.emitCodePoint(n===1?r[t]&~(Ds.VALUE_LENGTH|Ds.FLAG13):r[t+1],o),n===3&&this.emitCodePoint(r[t+2],o),o}end(){switch(this.state){case Ui.NamedEntity:return this.result!==0&&(this.decodeMode!==im.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Ui.NumericDecimal:return this.emitNumericEntity(0,2);case Ui.NumericHex:return this.emitNumericEntity(0,3);case Ui.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Ui.EntityStart:return 0}}};function F_t(e,t,n,o){let r=(t&Ds.BRANCH_LENGTH)>>7,i=t&Ds.JUMP_TABLE;if(r===0)return i!==0&&o===i?n:-1;if(i){let c=o-i;return c<0||c>=r?-1:e[n+c]-1}let s=r+1>>1,a=0,l=r-1;for(;a<=l;){let c=a+l>>>1,u=c>>1,m=e[n+u]>>(c&1)*8&255;if(m<o)a=c+1;else if(m>o)l=c-1;else return e[n+s+c]}return -1}var Ie;(function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/";})(Ie||(Ie={}));var Up;(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";})(Up||(Up={}));var wa;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks";})(wa||(wa={}));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 B_t=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 fS(e){var t;return (t=B_t.get(e))!==null&&t!==void 0?t:T.UNKNOWN}var Be=T,qPe={[Ie.HTML]:new Set([Be.ADDRESS,Be.APPLET,Be.AREA,Be.ARTICLE,Be.ASIDE,Be.BASE,Be.BASEFONT,Be.BGSOUND,Be.BLOCKQUOTE,Be.BODY,Be.BR,Be.BUTTON,Be.CAPTION,Be.CENTER,Be.COL,Be.COLGROUP,Be.DD,Be.DETAILS,Be.DIR,Be.DIV,Be.DL,Be.DT,Be.EMBED,Be.FIELDSET,Be.FIGCAPTION,Be.FIGURE,Be.FOOTER,Be.FORM,Be.FRAME,Be.FRAMESET,Be.H1,Be.H2,Be.H3,Be.H4,Be.H5,Be.H6,Be.HEAD,Be.HEADER,Be.HGROUP,Be.HR,Be.HTML,Be.IFRAME,Be.IMG,Be.INPUT,Be.LI,Be.LINK,Be.LISTING,Be.MAIN,Be.MARQUEE,Be.MENU,Be.META,Be.NAV,Be.NOEMBED,Be.NOFRAMES,Be.NOSCRIPT,Be.OBJECT,Be.OL,Be.P,Be.PARAM,Be.PLAINTEXT,Be.PRE,Be.SCRIPT,Be.SECTION,Be.SELECT,Be.SOURCE,Be.STYLE,Be.SUMMARY,Be.TABLE,Be.TBODY,Be.TD,Be.TEMPLATE,Be.TEXTAREA,Be.TFOOT,Be.TH,Be.THEAD,Be.TITLE,Be.TR,Be.TRACK,Be.UL,Be.WBR,Be.XMP]),[Ie.MATHML]:new Set([Be.MI,Be.MO,Be.MN,Be.MS,Be.MTEXT,Be.ANNOTATION_XML]),[Ie.SVG]:new Set([Be.TITLE,Be.FOREIGN_OBJECT,Be.DESC]),[Ie.XLINK]:new Set,[Ie.XML]:new Set,[Ie.XMLNS]:new Set},dx=new Set([Be.H1,Be.H2,Be.H3,Be.H4,Be.H5,Be.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 Fs={DATA:j.DATA,RCDATA:j.RCDATA,RAWTEXT:j.RAWTEXT,SCRIPT_DATA:j.SCRIPT_DATA,PLAINTEXT:j.PLAINTEXT,CDATA_SECTION:j.CDATA_SECTION};function H_t(e){return e>=F.DIGIT_0&&e<=F.DIGIT_9}function mx(e){return e>=F.LATIN_CAPITAL_A&&e<=F.LATIN_CAPITAL_Z}function j_t(e){return e>=F.LATIN_SMALL_A&&e<=F.LATIN_SMALL_Z}function Qg(e){return j_t(e)||mx(e)}function KPe(e){return Qg(e)||H_t(e)}function gB(e){return e+32}function JPe(e){return e===F.SPACE||e===F.LINE_FEED||e===F.TABULATION||e===F.FORM_FEED}function YPe(e){return JPe(e)||e===F.SOLIDUS||e===F.GREATER_THAN_SIGN}function $_t(e){return e===F.NULL?he.nullCharacterReference:e>1114111?he.characterReferenceOutsideUnicodeRange:cB(e)?he.surrogateCharacterReference:dB(e)?he.noncharacterCharacterReference:uB(e)||e===F.CARRIAGE_RETURN?he.controlCharacterReference:null}var px=class{constructor(t,n){this.options=t,this.handler=n,this.paused=false,this.inLoop=false,this.inForeignNode=false,this.lastStartTagName="",this.active=false,this.state=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 mB(n),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new hB(k3,(o,r)=>{this.preprocessor.pos=this.entityStartPos+r-1,this._flushCodePointConsumedAsCharacterReference(o);},n.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(he.missingSemicolonAfterCharacterReference,1);},absenceOfDigitsInNumericCharacterReference:o=>{this._err(he.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+o);},validateNumericCharacterReference:o=>{let r=$_t(o);r&&this._err(r,1);}}:void 0);}_err(t,n=0){var o,r;(r=(o=this.handler).onParseError)===null||r===void 0||r.call(o,this.preprocessor.getError(t,n));}getCurrentLocation(t){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-t,startOffset:this.preprocessor.offset-t,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=true;this.active&&!this.paused;){this.consumedAfterSnapshot=0;let t=this._consume();this._ensureHibernation()||this._callState(t);}this.inLoop=false;}}pause(){this.paused=true;}resume(t){if(!this.paused)throw new Error("Parser was already resumed");this.paused=false,!this.inLoop&&(this._runParsingLoop(),this.paused||t?.());}write(t,n,o){this.active=true,this.preprocessor.write(t,n),this._runParsingLoop(),this.paused||o?.();}insertHtmlAtCurrentPos(t){this.active=true,this.preprocessor.insertHtmlAtCurrentPos(t),this._runParsingLoop();}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=false,true):false}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(t){this.consumedAfterSnapshot+=t;for(let n=0;n<t;n++)this.preprocessor.advance();}_consumeSequenceIfMatch(t,n){return this.preprocessor.startsWith(t,n)?(this._advanceBy(t.length-1),true):false}_createStartTagToken(){this.currentToken={type:kn.START_TAG,tagName:"",tagID:T.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(1)};}_createEndTagToken(){this.currentToken={type:kn.END_TAG,tagName:"",tagID:T.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(2)};}_createCommentToken(t){this.currentToken={type:kn.COMMENT,data:"",location:this.getCurrentLocation(t)};}_createDoctypeToken(t){this.currentToken={type:kn.DOCTYPE,name:t,forceQuirks:false,publicId:null,systemId:null,location:this.currentLocation};}_createCharacterToken(t,n){this.currentCharacterToken={type:t,chars:n,location:this.currentLocation};}_createAttr(t){this.currentAttr={name:t,value:""},this.currentLocation=this.getCurrentLocation(0);}_leaveAttrName(){var t,n;let o=this.currentToken;if(pB(o,this.currentAttr.name)===null){if(o.attrs.push(this.currentAttr),o.location&&this.currentLocation){let r=(t=(n=o.location).attrs)!==null&&t!==void 0?t:n.attrs=Object.create(null);r[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue();}}else this._err(he.duplicateAttribute);}_leaveAttrValue(){this.currentLocation&&(this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset);}prepareToken(t){this._emitCurrentCharacterToken(t.location),this.currentToken=null,t.location&&(t.location.endLine=this.preprocessor.line,t.location.endCol=this.preprocessor.col+1,t.location.endOffset=this.preprocessor.offset+1),this.currentLocation=this.getCurrentLocation(-1);}emitCurrentTagToken(){let t=this.currentToken;this.prepareToken(t),t.tagID=fS(t.tagName),t.type===kn.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(he.endTagWithAttributes),t.selfClosing&&this._err(he.endTagWithTrailingSolidus),this.handler.onEndTag(t)),this.preprocessor.dropParsedChunk();}emitCurrentComment(t){this.prepareToken(t),this.handler.onComment(t),this.preprocessor.dropParsedChunk();}emitCurrentDoctype(t){this.prepareToken(t),this.handler.onDoctype(t),this.preprocessor.dropParsedChunk();}_emitCurrentCharacterToken(t){if(this.currentCharacterToken){switch(t&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=t.startLine,this.currentCharacterToken.location.endCol=t.startCol,this.currentCharacterToken.location.endOffset=t.startOffset),this.currentCharacterToken.type){case kn.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case kn.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case kn.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:kn.EOF,location:t}),this.active=false;}_appendCharToCurrentCharacterToken(t,n){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=n;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,n);}_emitCodePoint(t){let n=JPe(t)?kn.WHITESPACE_CHARACTER:t===F.NULL?kn.NULL_CHARACTER:kn.CHARACTER;this._appendCharToCurrentCharacterToken(n,t<65536?String.fromCharCode(t):String.fromCodePoint(t));}_emitChars(t){this._appendCharToCurrentCharacterToken(kn.CHARACTER,t);}_startCharacterReference(){this.returnState=this.state,this.state=j.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?im.Attribute:im.Legacy);}_isCharacterReferenceInAttribute(){return this.returnState===j.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t);}_callState(t){switch(this.state){case j.DATA:{this._stateData(t);break}case j.RCDATA:{this._stateRcdata(t);break}case j.RAWTEXT:{this._stateRawtext(t);break}case j.SCRIPT_DATA:{this._stateScriptData(t);break}case j.PLAINTEXT:{this._statePlaintext(t);break}case j.TAG_OPEN:{this._stateTagOpen(t);break}case j.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case j.TAG_NAME:{this._stateTagName(t);break}case j.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case j.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case j.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case j.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case j.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case j.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case j.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case j.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case j.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case j.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case j.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case j.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case j.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case j.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case j.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case j.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case j.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case j.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case j.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case j.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case j.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case j.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case j.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case j.BOGUS_COMMENT:{this._stateBogusComment(t);break}case j.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case j.COMMENT_START:{this._stateCommentStart(t);break}case j.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case j.COMMENT:{this._stateComment(t);break}case j.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case j.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case j.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case j.COMMENT_END:{this._stateCommentEnd(t);break}case j.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case j.DOCTYPE:{this._stateDoctype(t);break}case j.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case j.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case j.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case j.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case j.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case j.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case j.CDATA_SECTION:{this._stateCdataSection(t);break}case j.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case j.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case j.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case j.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case F.LESS_THAN_SIGN:{this.state=j.TAG_OPEN;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitCodePoint(t);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRcdata(t){switch(t){case F.AMPERSAND:{this._startCharacterReference();break}case F.LESS_THAN_SIGN:{this.state=j.RCDATA_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars(Go);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRawtext(t){switch(t){case F.LESS_THAN_SIGN:{this.state=j.RAWTEXT_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars(Go);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptData(t){switch(t){case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars(Go);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_statePlaintext(t){switch(t){case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars(Go);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateTagOpen(t){if(Qg(t))this._createStartTagToken(),this.state=j.TAG_NAME,this._stateTagName(t);else switch(t){case F.EXCLAMATION_MARK:{this.state=j.MARKUP_DECLARATION_OPEN;break}case F.SOLIDUS:{this.state=j.END_TAG_OPEN;break}case F.QUESTION_MARK:{this._err(he.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t);break}case F.EOF:{this._err(he.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(he.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=j.DATA,this._stateData(t);}}_stateEndTagOpen(t){if(Qg(t))this._createEndTagToken(),this.state=j.TAG_NAME,this._stateTagName(t);else switch(t){case F.GREATER_THAN_SIGN:{this._err(he.missingEndTagName),this.state=j.DATA;break}case F.EOF:{this._err(he.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(he.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t);}}_stateTagName(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_ATTRIBUTE_NAME;break}case F.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.tagName+=Go;break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:n.tagName+=String.fromCodePoint(mx(t)?gB(t):t);}}_stateRcdataLessThanSign(t){t===F.SOLIDUS?this.state=j.RCDATA_END_TAG_OPEN:(this._emitChars("<"),this.state=j.RCDATA,this._stateRcdata(t));}_stateRcdataEndTagOpen(t){Qg(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 n=this.currentToken;switch(n.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=j.BEFORE_ATTRIBUTE_NAME,false;case F.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=j.SELF_CLOSING_START_TAG,false;case F.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=j.DATA,false;default:return !this._ensureHibernation()}}_stateRcdataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.RCDATA,this._stateRcdata(t));}_stateRawtextLessThanSign(t){t===F.SOLIDUS?this.state=j.RAWTEXT_END_TAG_OPEN:(this._emitChars("<"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagOpen(t){Qg(t)?(this.state=j.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(t)):(this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateScriptDataLessThanSign(t){switch(t){case F.SOLIDUS:{this.state=j.SCRIPT_DATA_END_TAG_OPEN;break}case F.EXCLAMATION_MARK:{this.state=j.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=j.SCRIPT_DATA,this._stateScriptData(t);}}_stateScriptDataEndTagOpen(t){Qg(t)?(this.state=j.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(t)):(this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStart(t){t===F.HYPHEN_MINUS?(this.state=j.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-")):(this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStartDash(t){t===F.HYPHEN_MINUS?(this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-")):(this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscaped(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars(Go);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataEscapedDash(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(Go);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedDashDash(t){switch(t){case F.HYPHEN_MINUS:{this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case F.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(Go);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedLessThanSign(t){t===F.SOLIDUS?this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Qg(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){Qg(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(va.SCRIPT,false)&&YPe(this.preprocessor.peek(va.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<va.SCRIPT.length;n++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED;}else this._ensureHibernation()||(this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataDoubleEscaped(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars(Go);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDash(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Go);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDashDash(t){switch(t){case F.HYPHEN_MINUS:{this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case F.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Go);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedLessThanSign(t){t===F.SOLIDUS?(this.state=j.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t));}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(va.SCRIPT,false)&&YPe(this.preprocessor.peek(va.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<va.SCRIPT.length;n++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_ESCAPED;}else this._ensureHibernation()||(this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t));}_stateBeforeAttributeName(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.SOLIDUS:case F.GREATER_THAN_SIGN:case F.EOF:{this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case F.EQUALS_SIGN:{this._err(he.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=j.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateAttributeName(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:case F.SOLIDUS:case F.GREATER_THAN_SIGN:case F.EOF:{this._leaveAttrName(),this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case F.EQUALS_SIGN:{this._leaveAttrName(),this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case F.QUOTATION_MARK:case F.APOSTROPHE:case F.LESS_THAN_SIGN:{this._err(he.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.name+=Go;break}default:this.currentAttr.name+=String.fromCodePoint(mx(t)?gB(t):t);}}_stateAfterAttributeName(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case F.EQUALS_SIGN:{this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateBeforeAttributeValue(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.QUOTATION_MARK:{this.state=j.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this.state=j.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingAttributeValue),this.state=j.DATA,this.emitCurrentTagToken();break}default:this.state=j.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(t);}}_stateAttributeValueDoubleQuoted(t){switch(t){case F.QUOTATION_MARK:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.value+=Go;break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueSingleQuoted(t){switch(t){case F.APOSTROPHE:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.value+=Go;break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueUnquoted(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.value+=Go;break}case F.QUOTATION_MARK:case F.APOSTROPHE:case F.LESS_THAN_SIGN:case F.EQUALS_SIGN:case F.GRAVE_ACCENT:{this._err(he.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAfterAttributeValueQuoted(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case F.SOLIDUS:{this._leaveAttrValue(),this.state=j.SELF_CLOSING_START_TAG;break}case F.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this._err(he.missingWhitespaceBetweenAttributes),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateSelfClosingStartTag(t){switch(t){case F.GREATER_THAN_SIGN:{let n=this.currentToken;n.selfClosing=true,this.state=j.DATA,this.emitCurrentTagToken();break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this._err(he.unexpectedSolidusInTag),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateBogusComment(t){let n=this.currentToken;switch(t){case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(n);break}case F.EOF:{this.emitCurrentComment(n),this._emitEOFToken();break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.data+=Go;break}default:n.data+=String.fromCodePoint(t);}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(va.DASH_DASH,true)?(this._createCommentToken(va.DASH_DASH.length+1),this.state=j.COMMENT_START):this._consumeSequenceIfMatch(va.DOCTYPE,false)?(this.currentLocation=this.getCurrentLocation(va.DOCTYPE.length+1),this.state=j.DOCTYPE):this._consumeSequenceIfMatch(va.CDATA_START,true)?this.inForeignNode?this.state=j.CDATA_SECTION:(this._err(he.cdataInHtmlContent),this._createCommentToken(va.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=j.BOGUS_COMMENT):this._ensureHibernation()||(this._err(he.incorrectlyOpenedComment),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t));}_stateCommentStart(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_START_DASH;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptClosingOfEmptyComment),this.state=j.DATA;let n=this.currentToken;this.emitCurrentComment(n);break}default:this.state=j.COMMENT,this._stateComment(t);}}_stateCommentStartDash(t){let n=this.currentToken;switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptClosingOfEmptyComment),this.state=j.DATA,this.emitCurrentComment(n);break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="-",this.state=j.COMMENT,this._stateComment(t);}}_stateComment(t){let n=this.currentToken;switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_END_DASH;break}case F.LESS_THAN_SIGN:{n.data+="<",this.state=j.COMMENT_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.data+=Go;break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+=String.fromCodePoint(t);}}_stateCommentLessThanSign(t){let n=this.currentToken;switch(t){case F.EXCLAMATION_MARK:{n.data+="!",this.state=j.COMMENT_LESS_THAN_SIGN_BANG;break}case F.LESS_THAN_SIGN:{n.data+="<";break}default:this.state=j.COMMENT,this._stateComment(t);}}_stateCommentLessThanSignBang(t){t===F.HYPHEN_MINUS?this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=j.COMMENT,this._stateComment(t));}_stateCommentLessThanSignBangDash(t){t===F.HYPHEN_MINUS?this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=j.COMMENT_END_DASH,this._stateCommentEndDash(t));}_stateCommentLessThanSignBangDashDash(t){t!==F.GREATER_THAN_SIGN&&t!==F.EOF&&this._err(he.nestedComment),this.state=j.COMMENT_END,this._stateCommentEnd(t);}_stateCommentEndDash(t){let n=this.currentToken;switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="-",this.state=j.COMMENT,this._stateComment(t);}}_stateCommentEnd(t){let n=this.currentToken;switch(t){case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(n);break}case F.EXCLAMATION_MARK:{this.state=j.COMMENT_END_BANG;break}case F.HYPHEN_MINUS:{n.data+="-";break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="--",this.state=j.COMMENT,this._stateComment(t);}}_stateCommentEndBang(t){let n=this.currentToken;switch(t){case F.HYPHEN_MINUS:{n.data+="--!",this.state=j.COMMENT_END_DASH;break}case F.GREATER_THAN_SIGN:{this._err(he.incorrectlyClosedComment),this.state=j.DATA,this.emitCurrentComment(n);break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="--!",this.state=j.COMMENT,this._stateComment(t);}}_stateDoctype(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_NAME;break}case F.GREATER_THAN_SIGN:{this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);break}case F.EOF:{this._err(he.eofInDoctype),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingWhitespaceBeforeDoctypeName),this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);}}_stateBeforeDoctypeName(t){if(mx(t))this._createDoctypeToken(String.fromCharCode(gB(t))),this.state=j.DOCTYPE_NAME;else switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.NULL:{this._err(he.unexpectedNullCharacter),this._createDoctypeToken(Go),this.state=j.DOCTYPE_NAME;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypeName),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(t)),this.state=j.DOCTYPE_NAME;}}_stateDoctypeName(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.AFTER_DOCTYPE_NAME;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.name+=Go;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.name+=String.fromCodePoint(mx(t)?gB(t):t);}}_stateAfterDoctypeName(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(va.PUBLIC,false)?this.state=j.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(va.SYSTEM,false)?this.state=j.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(he.invalidCharacterSequenceAfterDoctypeName),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t));}}_stateAfterDoctypePublicKeyword(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case F.QUOTATION_MARK:{this._err(he.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this._err(he.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypePublicIdentifier),n.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypePublicIdentifier),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypePublicIdentifier(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.QUOTATION_MARK:{n.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{n.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypePublicIdentifier),n.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypePublicIdentifier),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypePublicIdentifierDoubleQuoted(t){let n=this.currentToken;switch(t){case F.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.publicId+=Go;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypePublicIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.publicId+=String.fromCodePoint(t);}}_stateDoctypePublicIdentifierSingleQuoted(t){let n=this.currentToken;switch(t){case F.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.publicId+=Go;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypePublicIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.publicId+=String.fromCodePoint(t);}}_stateAfterDoctypePublicIdentifier(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.QUOTATION_MARK:{this._err(he.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this._err(he.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBetweenDoctypePublicAndSystemIdentifiers(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.QUOTATION_MARK:{n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateAfterDoctypeSystemKeyword(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case F.QUOTATION_MARK:{this._err(he.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this._err(he.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypeSystemIdentifier),n.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypeSystemIdentifier(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.QUOTATION_MARK:{n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypeSystemIdentifier),n.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypeSystemIdentifierDoubleQuoted(t){let n=this.currentToken;switch(t){case F.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.systemId+=Go;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypeSystemIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.systemId+=String.fromCodePoint(t);}}_stateDoctypeSystemIdentifierSingleQuoted(t){let n=this.currentToken;switch(t){case F.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.systemId+=Go;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypeSystemIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.systemId+=String.fromCodePoint(t);}}_stateAfterDoctypeSystemIdentifier(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBogusDoctype(t){let n=this.currentToken;switch(t){case F.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.NULL:{this._err(he.unexpectedNullCharacter);break}case F.EOF:{this.emitCurrentDoctype(n),this._emitEOFToken();break}}}_stateCdataSection(t){switch(t){case F.RIGHT_SQUARE_BRACKET:{this.state=j.CDATA_SECTION_BRACKET;break}case F.EOF:{this._err(he.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateCdataSectionBracket(t){t===F.RIGHT_SQUARE_BRACKET?this.state=j.CDATA_SECTION_END:(this._emitChars("]"),this.state=j.CDATA_SECTION,this._stateCdataSection(t));}_stateCdataSectionEnd(t){switch(t){case F.GREATER_THAN_SIGN:{this.state=j.DATA;break}case F.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=j.CDATA_SECTION,this._stateCdataSection(t);}}_stateCharacterReference(){let t=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(t<0)if(this.preprocessor.lastChunkWritten)t=this.entityDecoder.end();else {this.active=false,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=true;return}t===0?(this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(F.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&KPe(this.preprocessor.peek(1))?j.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState;}_stateAmbiguousAmpersand(t){KPe(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===F.SEMICOLON&&this._err(he.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t));}};var eOe=new Set([T.DD,T.DT,T.LI,T.OPTGROUP,T.OPTION,T.P,T.RB,T.RP,T.RT,T.RTC]),XPe=new Set([...eOe,T.CAPTION,T.COLGROUP,T.TBODY,T.TD,T.TFOOT,T.TH,T.THEAD,T.TR]),fB=new Set([T.APPLET,T.CAPTION,T.HTML,T.MARQUEE,T.OBJECT,T.TABLE,T.TD,T.TEMPLATE,T.TH]),G_t=new Set([...fB,T.OL,T.UL]),z_t=new Set([...fB,T.BUTTON]),QPe=new Set([T.ANNOTATION_XML,T.MI,T.MN,T.MO,T.MS,T.MTEXT]),ZPe=new Set([T.DESC,T.FOREIGN_OBJECT,T.TITLE]),V_t=new Set([T.TR,T.TEMPLATE,T.HTML]),W_t=new Set([T.TBODY,T.TFOOT,T.THEAD,T.TEMPLATE,T.HTML]),q_t=new Set([T.TABLE,T.TEMPLATE,T.HTML]),K_t=new Set([T.TD,T.TH]),yB=class{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(t,n,o){this.treeAdapter=n,this.handler=o,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=T.UNKNOWN,this.current=t;}_indexOf(t){return this.items.lastIndexOf(t,this.stackTop)}_isInTemplate(){return this.currentTagId===T.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===Ie.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop];}push(t,n){this.stackTop++,this.items[this.stackTop]=t,this.current=t,this.tagIDs[this.stackTop]=n,this.currentTagId=n,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(t,n,true);}pop(){let t=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,true);}replace(t,n){let o=this._indexOf(t);this.items[o]=n,o===this.stackTop&&(this.current=n);}insertAfter(t,n,o){let r=this._indexOf(t)+1;this.items.splice(r,0,n),this.tagIDs.splice(r,0,o),this.stackTop++,r===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,r===this.stackTop);}popUntilTagNamePopped(t){let n=this.stackTop+1;do n=this.tagIDs.lastIndexOf(t,n-1);while(n>0&&this.treeAdapter.getNamespaceURI(this.items[n])!==Ie.HTML);this.shortenToLength(Math.max(n,0));}shortenToLength(t){for(;this.stackTop>=t;){let n=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(n,this.stackTop<t);}}popUntilElementPopped(t){let n=this._indexOf(t);this.shortenToLength(Math.max(n,0));}popUntilPopped(t,n){let o=this._indexOfTagNames(t,n);this.shortenToLength(Math.max(o,0));}popUntilNumberedHeaderPopped(){this.popUntilPopped(dx,Ie.HTML);}popUntilTableCellPopped(){this.popUntilPopped(K_t,Ie.HTML);}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1);}_indexOfTagNames(t,n){for(let o=this.stackTop;o>=0;o--)if(t.has(this.tagIDs[o])&&this.treeAdapter.getNamespaceURI(this.items[o])===n)return o;return -1}clearBackTo(t,n){let o=this._indexOfTagNames(t,n);this.shortenToLength(o+1);}clearBackToTableContext(){this.clearBackTo(q_t,Ie.HTML);}clearBackToTableBodyContext(){this.clearBackTo(W_t,Ie.HTML);}clearBackToTableRowContext(){this.clearBackTo(V_t,Ie.HTML);}remove(t){let n=this._indexOf(t);n>=0&&(n===this.stackTop?this.pop():(this.items.splice(n,1),this.tagIDs.splice(n,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,false)));}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===T.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){let n=this._indexOf(t)-1;return n>=0?this.items[n]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===T.HTML}hasInDynamicScope(t,n){for(let o=this.stackTop;o>=0;o--){let r=this.tagIDs[o];switch(this.treeAdapter.getNamespaceURI(this.items[o])){case Ie.HTML:{if(r===t)return true;if(n.has(r))return false;break}case Ie.SVG:{if(ZPe.has(r))return false;break}case Ie.MATHML:{if(QPe.has(r))return false;break}}}return true}hasInScope(t){return this.hasInDynamicScope(t,fB)}hasInListItemScope(t){return this.hasInDynamicScope(t,G_t)}hasInButtonScope(t){return this.hasInDynamicScope(t,z_t)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){let n=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case Ie.HTML:{if(dx.has(n))return true;if(fB.has(n))return false;break}case Ie.SVG:{if(ZPe.has(n))return false;break}case Ie.MATHML:{if(QPe.has(n))return false;break}}}return true}hasInTableScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===Ie.HTML)switch(this.tagIDs[n]){case t:return true;case T.TABLE:case T.HTML:return false}return true}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===Ie.HTML)switch(this.tagIDs[t]){case T.TBODY:case T.THEAD:case T.TFOOT:return true;case T.TABLE:case T.HTML:return false}return true}hasInSelectScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===Ie.HTML)switch(this.tagIDs[n]){case t:return true;case T.OPTION:case T.OPTGROUP:break;default:return false}return true}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&eOe.has(this.currentTagId);)this.pop();}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&XPe.has(this.currentTagId);)this.pop();}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&XPe.has(this.currentTagId);)this.pop();}};var Cu;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element";})(Cu||(Cu={}));var tOe={type:Cu.Marker},SB=class{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null;}_getNoahArkConditionCandidates(t,n){let o=[],r=n.length,i=this.treeAdapter.getTagName(t),s=this.treeAdapter.getNamespaceURI(t);for(let a=0;a<this.entries.length;a++){let l=this.entries[a];if(l.type===Cu.Marker)break;let{element:c}=l;if(this.treeAdapter.getTagName(c)===i&&this.treeAdapter.getNamespaceURI(c)===s){let u=this.treeAdapter.getAttrList(c);u.length===r&&o.push({idx:a,attrs:u});}}return o}_ensureNoahArkCondition(t){if(this.entries.length<3)return;let n=this.treeAdapter.getAttrList(t),o=this._getNoahArkConditionCandidates(t,n);if(o.length<3)return;let r=new Map(n.map(s=>[s.name,s.value])),i=0;for(let s=0;s<o.length;s++){let a=o[s];a.attrs.every(l=>r.get(l.name)===l.value)&&(i+=1,i>=3&&this.entries.splice(a.idx,1));}}insertMarker(){this.entries.unshift(tOe);}pushElement(t,n){this._ensureNoahArkCondition(t),this.entries.unshift({type:Cu.Element,element:t,token:n});}insertElementAfterBookmark(t,n){let o=this.entries.indexOf(this.bookmark);this.entries.splice(o,0,{type:Cu.Element,element:t,token:n});}removeEntry(t){let n=this.entries.indexOf(t);n!==-1&&this.entries.splice(n,1);}clearToLastMarker(){let t=this.entries.indexOf(tOe);t===-1?this.entries.length=0:this.entries.splice(0,t+1);}getElementEntryInScopeWithTagName(t){let n=this.entries.find(o=>o.type===Cu.Marker||this.treeAdapter.getTagName(o.element)===t);return n&&n.type===Cu.Element?n:null}getElementEntry(t){return this.entries.find(n=>n.type===Cu.Element&&n.element===t)}};var Iu={createDocument(){return {nodeName:"#document",mode:wa.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return {nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,n){return {nodeName:e,tagName:e,attrs:n,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return {nodeName:"#comment",data:e,parentNode:null}},createTextNode(e){return {nodeName:"#text",value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e;},insertBefore(e,t,n){let o=e.childNodes.indexOf(n);e.childNodes.splice(o,0,t),t.parentNode=e;},setTemplateContent(e,t){e.content=t;},getTemplateContent(e){return e.content},setDocumentType(e,t,n,o){let r=e.childNodes.find(i=>i.nodeName==="#documentType");if(r)r.name=t,r.publicId=n,r.systemId=o;else {let i={nodeName:"#documentType",name:t,publicId:n,systemId:o,parentNode:null};Iu.appendChild(e,i);}},setDocumentMode(e,t){e.mode=t;},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){let t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null;}},insertText(e,t){if(e.childNodes.length>0){let n=e.childNodes[e.childNodes.length-1];if(Iu.isTextNode(n)){n.value+=t;return}}Iu.appendChild(e,Iu.createTextNode(t));},insertTextBefore(e,t,n){let o=e.childNodes[e.childNodes.indexOf(n)-1];o&&Iu.isTextNode(o)?o.value+=t:Iu.insertBefore(e,Iu.createTextNode(t),n);},adoptAttributes(e,t){let n=new Set(e.attrs.map(o=>o.name));for(let o=0;o<t.length;o++)n.has(t[o].name)||e.attrs.push(t[o]);},getFirstChild(e){return e.childNodes[0]},getChildNodes(e){return e.childNodes},getParentNode(e){return e.parentNode},getAttrList(e){return e.attrs},getTagName(e){return e.tagName},getNamespaceURI(e){return e.namespaceURI},getTextNodeContent(e){return e.value},getCommentNodeContent(e){return e.data},getDocumentTypeNodeName(e){return e.name},getDocumentTypeNodePublicId(e){return e.publicId},getDocumentTypeNodeSystemId(e){return e.systemId},isTextNode(e){return e.nodeName==="#text"},isCommentNode(e){return e.nodeName==="#comment"},isDocumentTypeNode(e){return e.nodeName==="#documentType"},isElementNode(e){return Object.prototype.hasOwnProperty.call(e,"tagName")},setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t;},getNodeSourceCodeLocation(e){return e.sourceCodeLocation},updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation,...t};}};var oOe="html",Y_t="about:legacy-compat",J_t="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",rOe=["+//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//"],X_t=[...rOe,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],Q_t=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),iOe=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],Z_t=[...iOe,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function nOe(e,t){return t.some(n=>e.startsWith(n))}function sOe(e){return e.name===oOe&&e.publicId===null&&(e.systemId===null||e.systemId===Y_t)}function aOe(e){if(e.name!==oOe)return wa.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===J_t)return wa.QUIRKS;let{publicId:n}=e;if(n!==null){if(n=n.toLowerCase(),Q_t.has(n))return wa.QUIRKS;let o=t===null?X_t:rOe;if(nOe(n,o))return wa.QUIRKS;if(o=t===null?iOe:Z_t,nOe(n,o))return wa.LIMITED_QUIRKS}return wa.NO_QUIRKS}var lOe={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},tPt="definitionurl",nPt="definitionURL",oPt=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])),rPt=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:Ie.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:Ie.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:Ie.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:Ie.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:Ie.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:Ie.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:Ie.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:Ie.XML}],["xml:space",{prefix:"xml",name:"space",namespace:Ie.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:Ie.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:Ie.XMLNS}]]),iPt=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])),sPt=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 cOe(e){let t=e.tagID;return t===T.FONT&&e.attrs.some(({name:o})=>o===Up.COLOR||o===Up.SIZE||o===Up.FACE)||sPt.has(t)}function N3(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===tPt){e.attrs[t].name=nPt;break}}function D3(e){for(let t=0;t<e.attrs.length;t++){let n=oPt.get(e.attrs[t].name);n!=null&&(e.attrs[t].name=n);}}function bB(e){for(let t=0;t<e.attrs.length;t++){let n=rPt.get(e.attrs[t].name);n&&(e.attrs[t].prefix=n.prefix,e.attrs[t].name=n.name,e.attrs[t].namespace=n.namespace);}}function uOe(e){let t=iPt.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=fS(e.tagName));}function aPt(e,t){return t===Ie.MATHML&&(e===T.MI||e===T.MO||e===T.MN||e===T.MS||e===T.MTEXT)}function lPt(e,t,n){if(t===Ie.MATHML&&e===T.ANNOTATION_XML){for(let o=0;o<n.length;o++)if(n[o].name===Up.ENCODING){let r=n[o].value.toLowerCase();return r===lOe.TEXT_HTML||r===lOe.APPLICATION_XML}}return t===Ie.SVG&&(e===T.FOREIGN_OBJECT||e===T.DESC||e===T.TITLE)}function dOe(e,t,n,o){return (!o||o===Ie.HTML)&&lPt(e,t,n)||(!o||o===Ie.MATHML)&&aPt(e,t)}var cPt="hidden",uPt=8,dPt=3,K;(function(e){e[e.INITIAL=0]="INITIAL",e[e.BEFORE_HTML=1]="BEFORE_HTML",e[e.BEFORE_HEAD=2]="BEFORE_HEAD",e[e.IN_HEAD=3]="IN_HEAD",e[e.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",e[e.AFTER_HEAD=5]="AFTER_HEAD",e[e.IN_BODY=6]="IN_BODY",e[e.TEXT=7]="TEXT",e[e.IN_TABLE=8]="IN_TABLE",e[e.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",e[e.IN_CAPTION=10]="IN_CAPTION",e[e.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",e[e.IN_TABLE_BODY=12]="IN_TABLE_BODY",e[e.IN_ROW=13]="IN_ROW",e[e.IN_CELL=14]="IN_CELL",e[e.IN_SELECT=15]="IN_SELECT",e[e.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",e[e.IN_TEMPLATE=17]="IN_TEMPLATE",e[e.AFTER_BODY=18]="AFTER_BODY",e[e.IN_FRAMESET=19]="IN_FRAMESET",e[e.AFTER_FRAMESET=20]="AFTER_FRAMESET",e[e.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",e[e.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET";})(K||(K={}));var mPt={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},fOe=new Set([T.TABLE,T.TBODY,T.TFOOT,T.THEAD,T.TR]),pOe={scriptingEnabled:true,sourceCodeLocationInfo:false,treeAdapter:Iu,onParseError:null},Ax=class{constructor(t,n,o=null,r=null){this.fragmentContext=o,this.scriptHandler=r,this.currentToken=null,this.stopped=false,this.insertionMode=K.INITIAL,this.originalInsertionMode=K.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=false,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=false,this.framesetOk=true,this.skipNextNewLine=false,this.fosterParentingEnabled=false,this.options={...pOe,...t},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError&&(this.options.sourceCodeLocationInfo=true),this.document=n??this.treeAdapter.createDocument(),this.tokenizer=new px(this.options,this),this.activeFormattingElements=new SB(this.treeAdapter),this.fragmentContextID=o?fS(this.treeAdapter.getTagName(o)):T.UNKNOWN,this._setContextModes(o??this.document,this.fragmentContextID),this.openElements=new yB(this.document,this.treeAdapter,this);}static parse(t,n){let o=new this(n);return o.tokenizer.write(t,true),o.document}static getFragmentParser(t,n){let o={...pOe,...n};t??(t=o.treeAdapter.createElement(se.TEMPLATE,Ie.HTML,[]));let r=o.treeAdapter.createElement("documentmock",Ie.HTML,[]),i=new this(o,r,t);return i.fragmentContextID===T.TEMPLATE&&i.tmplInsertionModeStack.unshift(K.IN_TEMPLATE),i._initTokenizerForFragmentParsing(),i._insertFakeRootElement(),i._resetInsertionMode(),i._findFormInFragmentContext(),i}getFragment(){let t=this.treeAdapter.getFirstChild(this.document),n=this.treeAdapter.createDocumentFragment();return this._adoptNodes(t,n),n}_err(t,n,o){var r;if(!this.onParseError)return;let i=(r=t.location)!==null&&r!==void 0?r:mPt,s={code:n,startLine:i.startLine,startCol:i.startCol,startOffset:i.startOffset,endLine:o?i.startLine:i.endLine,endCol:o?i.startCol:i.endCol,endOffset:o?i.startOffset:i.endOffset};this.onParseError(s);}onItemPush(t,n,o){var r,i;(i=(r=this.treeAdapter).onItemPush)===null||i===void 0||i.call(r,t),o&&this.openElements.stackTop>0&&this._setContextModes(t,n);}onItemPop(t,n){var o,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(r=(o=this.treeAdapter).onItemPop)===null||r===void 0||r.call(o,t,this.openElements.current),n){let i,s;this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,s=this.fragmentContextID):{current:i,currentTagId:s}=this.openElements,this._setContextModes(i,s);}}_setContextModes(t,n){let o=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===Ie.HTML;this.currentNotInHTML=!o,this.tokenizer.inForeignNode=!o&&t!==void 0&&n!==void 0&&!this._isIntegrationPoint(n,t);}_switchToTextParsing(t,n){this._insertElement(t,Ie.HTML),this.tokenizer.state=n,this.originalInsertionMode=this.insertionMode,this.insertionMode=K.TEXT;}switchToPlaintextParsing(){this.insertionMode=K.TEXT,this.originalInsertionMode=K.IN_BODY,this.tokenizer.state=Fs.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)!==Ie.HTML))switch(this.fragmentContextID){case T.TITLE:case T.TEXTAREA:{this.tokenizer.state=Fs.RCDATA;break}case T.STYLE:case T.XMP:case T.IFRAME:case T.NOEMBED:case T.NOFRAMES:case T.NOSCRIPT:{this.tokenizer.state=Fs.RAWTEXT;break}case T.SCRIPT:{this.tokenizer.state=Fs.SCRIPT_DATA;break}case T.PLAINTEXT:{this.tokenizer.state=Fs.PLAINTEXT;break}}}_setDocumentType(t){let n=t.name||"",o=t.publicId||"",r=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,n,o,r),t.location){let s=this.treeAdapter.getChildNodes(this.document).find(a=>this.treeAdapter.isDocumentTypeNode(a));s&&this.treeAdapter.setNodeSourceCodeLocation(s,t.location);}}_attachElementToTree(t,n){if(this.options.sourceCodeLocationInfo){let o=n&&{...n,startTag:n};this.treeAdapter.setNodeSourceCodeLocation(t,o);}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else {let o=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(o??this.document,t);}}_appendElement(t,n){let o=this.treeAdapter.createElement(t.tagName,n,t.attrs);this._attachElementToTree(o,t.location);}_insertElement(t,n){let o=this.treeAdapter.createElement(t.tagName,n,t.attrs);this._attachElementToTree(o,t.location),this.openElements.push(o,t.tagID);}_insertFakeElement(t,n){let o=this.treeAdapter.createElement(t,Ie.HTML,[]);this._attachElementToTree(o,null),this.openElements.push(o,n);}_insertTemplate(t){let n=this.treeAdapter.createElement(t.tagName,Ie.HTML,t.attrs),o=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(n,o),this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,null);}_insertFakeRootElement(){let t=this.treeAdapter.createElement(se.HTML,Ie.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,T.HTML);}_appendCommentNode(t,n){let o=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(n,o),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,t.location);}_insertCharacters(t){let n,o;if(this._shouldFosterParentOnInsertion()?({parent:n,beforeElement:o}=this._findFosterParentingLocation(),o?this.treeAdapter.insertTextBefore(n,t.chars,o):this.treeAdapter.insertText(n,t.chars)):(n=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(n,t.chars)),!t.location)return;let r=this.treeAdapter.getChildNodes(n),i=o?r.lastIndexOf(o):r.length,s=r[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(s)){let{endLine:l,endCol:c,endOffset:u}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(s,{endLine:l,endCol:c,endOffset:u});}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(s,t.location);}_adoptNodes(t,n){for(let o=this.treeAdapter.getFirstChild(t);o;o=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(o),this.treeAdapter.appendChild(n,o);}_setEndLocation(t,n){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&n.location){let o=n.location,r=this.treeAdapter.getTagName(t),i=n.type===kn.END_TAG&&r===n.tagName?{endTag:{...o},endLine:o.endLine,endCol:o.endCol,endOffset:o.endOffset}:{endLine:o.startLine,endCol:o.startCol,endOffset:o.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,i);}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return false;let n,o;return this.openElements.stackTop===0&&this.fragmentContext?(n=this.fragmentContext,o=this.fragmentContextID):{current:n,currentTagId:o}=this.openElements,t.tagID===T.SVG&&this.treeAdapter.getTagName(n)===se.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(n)===Ie.MATHML?false:this.tokenizer.inForeignNode||(t.tagID===T.MGLYPH||t.tagID===T.MALIGNMARK)&&o!==void 0&&!this._isIntegrationPoint(o,n,Ie.HTML)}_processToken(t){switch(t.type){case kn.CHARACTER:{this.onCharacter(t);break}case kn.NULL_CHARACTER:{this.onNullCharacter(t);break}case kn.COMMENT:{this.onComment(t);break}case kn.DOCTYPE:{this.onDoctype(t);break}case kn.START_TAG:{this._processStartTag(t);break}case kn.END_TAG:{this.onEndTag(t);break}case kn.EOF:{this.onEof(t);break}case kn.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,n,o){let r=this.treeAdapter.getNamespaceURI(n),i=this.treeAdapter.getAttrList(n);return dOe(t,r,i,o)}_reconstructActiveFormattingElements(){let t=this.activeFormattingElements.entries.length;if(t){let n=this.activeFormattingElements.entries.findIndex(r=>r.type===Cu.Marker||this.openElements.contains(r.element)),o=n===-1?t-1:n-1;for(let r=o;r>=0;r--){let i=this.activeFormattingElements.entries[r];this._insertElement(i.token,this.treeAdapter.getNamespaceURI(i.element)),i.element=this.openElements.current;}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=K.IN_ROW;}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(T.P),this.openElements.popUntilTagNamePopped(T.P);}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case T.TR:{this.insertionMode=K.IN_ROW;return}case T.TBODY:case T.THEAD:case T.TFOOT:{this.insertionMode=K.IN_TABLE_BODY;return}case T.CAPTION:{this.insertionMode=K.IN_CAPTION;return}case T.COLGROUP:{this.insertionMode=K.IN_COLUMN_GROUP;return}case T.TABLE:{this.insertionMode=K.IN_TABLE;return}case T.BODY:{this.insertionMode=K.IN_BODY;return}case T.FRAMESET:{this.insertionMode=K.IN_FRAMESET;return}case T.SELECT:{this._resetInsertionModeForSelect(t);return}case T.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case T.HTML:{this.insertionMode=this.headElement?K.AFTER_HEAD:K.BEFORE_HEAD;return}case T.TD:case T.TH:{if(t>0){this.insertionMode=K.IN_CELL;return}break}case T.HEAD:{if(t>0){this.insertionMode=K.IN_HEAD;return}break}}this.insertionMode=K.IN_BODY;}_resetInsertionModeForSelect(t){if(t>0)for(let n=t-1;n>0;n--){let o=this.openElements.tagIDs[n];if(o===T.TEMPLATE)break;if(o===T.TABLE){this.insertionMode=K.IN_SELECT_IN_TABLE;return}}this.insertionMode=K.IN_SELECT;}_isElementCausesFosterParenting(t){return fOe.has(t)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let t=this.openElements.stackTop;t>=0;t--){let n=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case T.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(n)===Ie.HTML)return {parent:this.treeAdapter.getTemplateContent(n),beforeElement:null};break}case T.TABLE:{let o=this.treeAdapter.getParentNode(n);return o?{parent:o,beforeElement:n}:{parent:this.openElements.items[t-1],beforeElement:null}}}}return {parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){let n=this._findFosterParentingLocation();n.beforeElement?this.treeAdapter.insertBefore(n.parent,t,n.beforeElement):this.treeAdapter.appendChild(n.parent,t);}_isSpecialElement(t,n){let o=this.treeAdapter.getNamespaceURI(t);return qPe[o].has(n)}onCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){$Ot(this,t);return}switch(this.insertionMode){case K.INITIAL:{hx(this,t);break}case K.BEFORE_HTML:{fx(this,t);break}case K.BEFORE_HEAD:{yx(this,t);break}case K.IN_HEAD:{Sx(this,t);break}case K.IN_HEAD_NO_SCRIPT:{bx(this,t);break}case K.AFTER_HEAD:{Tx(this,t);break}case K.IN_BODY:case K.IN_CAPTION:case K.IN_CELL:case K.IN_TEMPLATE:{SOe(this,t);break}case K.TEXT:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case K.IN_TABLE:case K.IN_TABLE_BODY:case K.IN_ROW:{F3(this,t);break}case K.IN_TABLE_TEXT:{wOe(this,t);break}case K.IN_COLUMN_GROUP:{AB(this,t);break}case K.AFTER_BODY:{EB(this,t);break}case K.AFTER_AFTER_BODY:{TB(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){jOt(this,t);return}switch(this.insertionMode){case K.INITIAL:{hx(this,t);break}case K.BEFORE_HTML:{fx(this,t);break}case K.BEFORE_HEAD:{yx(this,t);break}case K.IN_HEAD:{Sx(this,t);break}case K.IN_HEAD_NO_SCRIPT:{bx(this,t);break}case K.AFTER_HEAD:{Tx(this,t);break}case K.TEXT:{this._insertCharacters(t);break}case K.IN_TABLE:case K.IN_TABLE_BODY:case K.IN_ROW:{F3(this,t);break}case K.IN_COLUMN_GROUP:{AB(this,t);break}case K.AFTER_BODY:{EB(this,t);break}case K.AFTER_AFTER_BODY:{TB(this,t);break}}}onComment(t){if(this.skipNextNewLine=false,this.currentNotInHTML){B3(this,t);return}switch(this.insertionMode){case K.INITIAL:case K.BEFORE_HTML:case K.BEFORE_HEAD:case K.IN_HEAD:case K.IN_HEAD_NO_SCRIPT:case K.AFTER_HEAD:case K.IN_BODY:case K.IN_TABLE:case K.IN_CAPTION:case K.IN_COLUMN_GROUP:case K.IN_TABLE_BODY:case K.IN_ROW:case K.IN_CELL:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:case K.IN_TEMPLATE:case K.IN_FRAMESET:case K.AFTER_FRAMESET:{B3(this,t);break}case K.IN_TABLE_TEXT:{gx(this,t);break}case K.AFTER_BODY:{bPt(this,t);break}case K.AFTER_AFTER_BODY:case K.AFTER_AFTER_FRAMESET:{TPt(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=false,this.insertionMode){case K.INITIAL:{APt(this,t);break}case K.BEFORE_HEAD:case K.IN_HEAD:case K.IN_HEAD_NO_SCRIPT:case K.AFTER_HEAD:{this._err(t,he.misplacedDoctype);break}case K.IN_TABLE_TEXT:{gx(this,t);break}}}onStartTag(t){this.skipNextNewLine=false,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,he.nonVoidHtmlElementStartTagWithTrailingSolidus);}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?GOt(this,t):this._startTagOutsideForeignContent(t);}_startTagOutsideForeignContent(t){switch(this.insertionMode){case K.INITIAL:{hx(this,t);break}case K.BEFORE_HTML:{EPt(this,t);break}case K.BEFORE_HEAD:{wPt(this,t);break}case K.IN_HEAD:{xu(this,t);break}case K.IN_HEAD_NO_SCRIPT:{IPt(this,t);break}case K.AFTER_HEAD:{_Pt(this,t);break}case K.IN_BODY:{Bs(this,t);break}case K.IN_TABLE:{BE(this,t);break}case K.IN_TABLE_TEXT:{gx(this,t);break}case K.IN_CAPTION:{ROt(this,t);break}case K.IN_COLUMN_GROUP:{$3(this,t);break}case K.IN_TABLE_BODY:{RB(this,t);break}case K.IN_ROW:{CB(this,t);break}case K.IN_CELL:{xOt(this,t);break}case K.IN_SELECT:{IOe(this,t);break}case K.IN_SELECT_IN_TABLE:{POt(this,t);break}case K.IN_TEMPLATE:{MOt(this,t);break}case K.AFTER_BODY:{LOt(this,t);break}case K.IN_FRAMESET:{NOt(this,t);break}case K.AFTER_FRAMESET:{FOt(this,t);break}case K.AFTER_AFTER_BODY:{UOt(this,t);break}case K.AFTER_AFTER_FRAMESET:{HOt(this,t);break}}}onEndTag(t){this.skipNextNewLine=false,this.currentToken=t,this.currentNotInHTML?zOt(this,t):this._endTagOutsideForeignContent(t);}_endTagOutsideForeignContent(t){switch(this.insertionMode){case K.INITIAL:{hx(this,t);break}case K.BEFORE_HTML:{vPt(this,t);break}case K.BEFORE_HEAD:{RPt(this,t);break}case K.IN_HEAD:{CPt(this,t);break}case K.IN_HEAD_NO_SCRIPT:{xPt(this,t);break}case K.AFTER_HEAD:{PPt(this,t);break}case K.IN_BODY:{wB(this,t);break}case K.TEXT:{gOt(this,t);break}case K.IN_TABLE:{Ex(this,t);break}case K.IN_TABLE_TEXT:{gx(this,t);break}case K.IN_CAPTION:{COt(this,t);break}case K.IN_COLUMN_GROUP:{IOt(this,t);break}case K.IN_TABLE_BODY:{U3(this,t);break}case K.IN_ROW:{COe(this,t);break}case K.IN_CELL:{_Ot(this,t);break}case K.IN_SELECT:{xOe(this,t);break}case K.IN_SELECT_IN_TABLE:{OOt(this,t);break}case K.IN_TEMPLATE:{kOt(this,t);break}case K.AFTER_BODY:{POe(this,t);break}case K.IN_FRAMESET:{DOt(this,t);break}case K.AFTER_FRAMESET:{BOt(this,t);break}case K.AFTER_AFTER_BODY:{TB(this,t);break}}}onEof(t){switch(this.insertionMode){case K.INITIAL:{hx(this,t);break}case K.BEFORE_HTML:{fx(this,t);break}case K.BEFORE_HEAD:{yx(this,t);break}case K.IN_HEAD:{Sx(this,t);break}case K.IN_HEAD_NO_SCRIPT:{bx(this,t);break}case K.AFTER_HEAD:{Tx(this,t);break}case K.IN_BODY:case K.IN_TABLE:case K.IN_CAPTION:case K.IN_COLUMN_GROUP:case K.IN_TABLE_BODY:case K.IN_ROW:case K.IN_CELL:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:{EOe(this,t);break}case K.TEXT:{fOt(this,t);break}case K.IN_TABLE_TEXT:{gx(this,t);break}case K.IN_TEMPLATE:{_Oe(this,t);break}case K.AFTER_BODY:case K.IN_FRAMESET:case K.AFTER_FRAMESET:case K.AFTER_AFTER_BODY:case K.AFTER_AFTER_FRAMESET:{j3(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=false,t.chars.charCodeAt(0)===F.LINE_FEED)){if(t.chars.length===1)return;t.chars=t.chars.substr(1);}if(this.tokenizer.inForeignNode){this._insertCharacters(t);return}switch(this.insertionMode){case K.IN_HEAD:case K.IN_HEAD_NO_SCRIPT:case K.AFTER_HEAD:case K.TEXT:case K.IN_COLUMN_GROUP:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:case K.IN_FRAMESET:case K.AFTER_FRAMESET:{this._insertCharacters(t);break}case K.IN_BODY:case K.IN_CAPTION:case K.IN_CELL:case K.IN_TEMPLATE:case K.AFTER_BODY:case K.AFTER_AFTER_BODY:case K.AFTER_AFTER_FRAMESET:{yOe(this,t);break}case K.IN_TABLE:case K.IN_TABLE_BODY:case K.IN_ROW:{F3(this,t);break}case K.IN_TABLE_TEXT:{vOe(this,t);break}}}};function pPt(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return n?e.openElements.contains(n.element)?e.openElements.hasInScope(t.tagID)||(n=null):(e.activeFormattingElements.removeEntry(n),n=null):AOe(e,t),n}function hPt(e,t){let n=null,o=e.openElements.stackTop;for(;o>=0;o--){let r=e.openElements.items[o];if(r===t.element)break;e._isSpecialElement(r,e.openElements.tagIDs[o])&&(n=r);}return n||(e.openElements.shortenToLength(Math.max(o,0)),e.activeFormattingElements.removeEntry(t)),n}function gPt(e,t,n){let o=t,r=e.openElements.getCommonAncestor(t);for(let i=0,s=r;s!==n;i++,s=r){r=e.openElements.getCommonAncestor(s);let a=e.activeFormattingElements.getElementEntry(s),l=a&&i>=dPt;!a||l?(l&&e.activeFormattingElements.removeEntry(a),e.openElements.remove(s)):(s=fPt(e,a),o===t&&(e.activeFormattingElements.bookmark=a),e.treeAdapter.detachNode(o),e.treeAdapter.appendChild(s,o),o=s);}return o}function fPt(e,t){let n=e.treeAdapter.getNamespaceURI(t.element),o=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,o),t.element=o,o}function yPt(e,t,n){let o=e.treeAdapter.getTagName(t),r=fS(o);if(e._isElementCausesFosterParenting(r))e._fosterParentElement(n);else {let i=e.treeAdapter.getNamespaceURI(t);r===T.TEMPLATE&&i===Ie.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n);}}function SPt(e,t,n){let o=e.treeAdapter.getNamespaceURI(n.element),{token:r}=n,i=e.treeAdapter.createElement(r.tagName,o,r.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,r),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,i,r.tagID);}function H3(e,t){for(let n=0;n<uPt;n++){let o=pPt(e,t);if(!o)break;let r=hPt(e,o);if(!r)break;e.activeFormattingElements.bookmark=o;let i=gPt(e,r,o.element),s=e.openElements.getCommonAncestor(o.element);e.treeAdapter.detachNode(i),s&&yPt(e,s,i),SPt(e,r,o);}}function B3(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode);}function bPt(e,t){e._appendCommentNode(t,e.openElements.items[0]);}function TPt(e,t){e._appendCommentNode(t,e.document);}function j3(e,t){if(e.stopped=true,t.location){let n=e.fragmentContext?0:2;for(let o=e.openElements.stackTop;o>=n;o--)e._setEndLocation(e.openElements.items[o],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){let o=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(o);if(r&&!r.endTag&&(e._setEndLocation(o,t),e.openElements.stackTop>=1)){let i=e.openElements.items[1],s=e.treeAdapter.getNodeSourceCodeLocation(i);s&&!s.endTag&&e._setEndLocation(i,t);}}}}function APt(e,t){e._setDocumentType(t);let n=t.forceQuirks?wa.QUIRKS:aOe(t);sOe(t)||e._err(t,he.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=K.BEFORE_HTML;}function hx(e,t){e._err(t,he.missingDoctype,true),e.treeAdapter.setDocumentMode(e.document,wa.QUIRKS),e.insertionMode=K.BEFORE_HTML,e._processToken(t);}function EPt(e,t){t.tagID===T.HTML?(e._insertElement(t,Ie.HTML),e.insertionMode=K.BEFORE_HEAD):fx(e,t);}function vPt(e,t){let n=t.tagID;(n===T.HTML||n===T.HEAD||n===T.BODY||n===T.BR)&&fx(e,t);}function fx(e,t){e._insertFakeRootElement(),e.insertionMode=K.BEFORE_HEAD,e._processToken(t);}function wPt(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.HEAD:{e._insertElement(t,Ie.HTML),e.headElement=e.openElements.current,e.insertionMode=K.IN_HEAD;break}default:yx(e,t);}}function RPt(e,t){let n=t.tagID;n===T.HEAD||n===T.BODY||n===T.HTML||n===T.BR?yx(e,t):e._err(t,he.endTagWithoutMatchingOpenElement);}function yx(e,t){e._insertFakeElement(se.HEAD,T.HEAD),e.headElement=e.openElements.current,e.insertionMode=K.IN_HEAD,e._processToken(t);}function xu(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:{e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.TITLE:{e._switchToTextParsing(t,Fs.RCDATA);break}case T.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,Fs.RAWTEXT):(e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_HEAD_NO_SCRIPT);break}case T.NOFRAMES:case T.STYLE:{e._switchToTextParsing(t,Fs.RAWTEXT);break}case T.SCRIPT:{e._switchToTextParsing(t,Fs.SCRIPT_DATA);break}case T.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=false,e.insertionMode=K.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(K.IN_TEMPLATE);break}case T.HEAD:{e._err(t,he.misplacedStartTagForHeadElement);break}default:Sx(e,t);}}function CPt(e,t){switch(t.tagID){case T.HEAD:{e.openElements.pop(),e.insertionMode=K.AFTER_HEAD;break}case T.BODY:case T.BR:case T.HTML:{Sx(e,t);break}case T.TEMPLATE:{yS(e,t);break}default:e._err(t,he.endTagWithoutMatchingOpenElement);}}function yS(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==T.TEMPLATE&&e._err(t,he.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,he.endTagWithoutMatchingOpenElement);}function Sx(e,t){e.openElements.pop(),e.insertionMode=K.AFTER_HEAD,e._processToken(t);}function IPt(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.BASEFONT:case T.BGSOUND:case T.HEAD:case T.LINK:case T.META:case T.NOFRAMES:case T.STYLE:{xu(e,t);break}case T.NOSCRIPT:{e._err(t,he.nestedNoscriptInHead);break}default:bx(e,t);}}function xPt(e,t){switch(t.tagID){case T.NOSCRIPT:{e.openElements.pop(),e.insertionMode=K.IN_HEAD;break}case T.BR:{bx(e,t);break}default:e._err(t,he.endTagWithoutMatchingOpenElement);}}function bx(e,t){let n=t.type===kn.EOF?he.openElementsLeftAfterEof:he.disallowedContentInNoscriptInHead;e._err(t,n),e.openElements.pop(),e.insertionMode=K.IN_HEAD,e._processToken(t);}function _Pt(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.BODY:{e._insertElement(t,Ie.HTML),e.framesetOk=false,e.insertionMode=K.IN_BODY;break}case T.FRAMESET:{e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_FRAMESET;break}case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:case T.NOFRAMES:case T.SCRIPT:case T.STYLE:case T.TEMPLATE:case T.TITLE:{e._err(t,he.abandonedHeadElementChild),e.openElements.push(e.headElement,T.HEAD),xu(e,t),e.openElements.remove(e.headElement);break}case T.HEAD:{e._err(t,he.misplacedStartTagForHeadElement);break}default:Tx(e,t);}}function PPt(e,t){switch(t.tagID){case T.BODY:case T.HTML:case T.BR:{Tx(e,t);break}case T.TEMPLATE:{yS(e,t);break}default:e._err(t,he.endTagWithoutMatchingOpenElement);}}function Tx(e,t){e._insertFakeElement(se.BODY,T.BODY),e.insertionMode=K.IN_BODY,vB(e,t);}function vB(e,t){switch(t.type){case kn.CHARACTER:{SOe(e,t);break}case kn.WHITESPACE_CHARACTER:{yOe(e,t);break}case kn.COMMENT:{B3(e,t);break}case kn.START_TAG:{Bs(e,t);break}case kn.END_TAG:{wB(e,t);break}case kn.EOF:{EOe(e,t);break}}}function yOe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t);}function SOe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=false;}function OPt(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs);}function MPt(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e.openElements.tmplCount===0&&(e.framesetOk=false,e.treeAdapter.adoptAttributes(n,t.attrs));}function kPt(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_FRAMESET);}function LPt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML);}function NPt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&dx.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,Ie.HTML);}function DPt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),e.skipNextNewLine=true,e.framesetOk=false;}function FPt(e,t){let n=e.openElements.tmplCount>0;(!e.formElement||n)&&(e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),n||(e.formElement=e.openElements.current));}function BPt(e,t){e.framesetOk=false;let n=t.tagID;for(let o=e.openElements.stackTop;o>=0;o--){let r=e.openElements.tagIDs[o];if(n===T.LI&&r===T.LI||(n===T.DD||n===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[o],r))break}e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML);}function UPt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),e.tokenizer.state=Fs.PLAINTEXT;}function HPt(e,t){e.openElements.hasInScope(T.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.framesetOk=false;}function jPt(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(se.A);n&&(H3(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function $Pt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function GPt(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(T.NOBR)&&(H3(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,Ie.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function zPt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=false;}function VPt(e,t){e.treeAdapter.getDocumentMode(e.document)!==wa.QUIRKS&&e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),e.framesetOk=false,e.insertionMode=K.IN_TABLE;}function bOe(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Ie.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function TOe(e){let t=pB(e,Up.TYPE);return t!=null&&t.toLowerCase()===cPt}function WPt(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Ie.HTML),TOe(t)||(e.framesetOk=false),t.ackSelfClosing=true;}function qPt(e,t){e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;}function KPt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._appendElement(t,Ie.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function YPt(e,t){t.tagName=se.IMG,t.tagID=T.IMG,bOe(e,t);}function JPt(e,t){e._insertElement(t,Ie.HTML),e.skipNextNewLine=true,e.tokenizer.state=Fs.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=false,e.insertionMode=K.TEXT;}function XPt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=false,e._switchToTextParsing(t,Fs.RAWTEXT);}function QPt(e,t){e.framesetOk=false,e._switchToTextParsing(t,Fs.RAWTEXT);}function hOe(e,t){e._switchToTextParsing(t,Fs.RAWTEXT);}function ZPt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.framesetOk=false,e.insertionMode=e.insertionMode===K.IN_TABLE||e.insertionMode===K.IN_CAPTION||e.insertionMode===K.IN_TABLE_BODY||e.insertionMode===K.IN_ROW||e.insertionMode===K.IN_CELL?K.IN_SELECT_IN_TABLE:K.IN_SELECT;}function eOt(e,t){e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML);}function tOt(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,Ie.HTML);}function nOt(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(T.RTC),e._insertElement(t,Ie.HTML);}function oOt(e,t){e._reconstructActiveFormattingElements(),N3(t),bB(t),t.selfClosing?e._appendElement(t,Ie.MATHML):e._insertElement(t,Ie.MATHML),t.ackSelfClosing=true;}function rOt(e,t){e._reconstructActiveFormattingElements(),D3(t),bB(t),t.selfClosing?e._appendElement(t,Ie.SVG):e._insertElement(t,Ie.SVG),t.ackSelfClosing=true;}function gOe(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML);}function Bs(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:{$Pt(e,t);break}case T.A:{jPt(e,t);break}case T.H1:case T.H2:case T.H3:case T.H4:case T.H5:case T.H6:{NPt(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:{LPt(e,t);break}case T.LI:case T.DD:case T.DT:{BPt(e,t);break}case T.BR:case T.IMG:case T.WBR:case T.AREA:case T.EMBED:case T.KEYGEN:{bOe(e,t);break}case T.HR:{KPt(e,t);break}case T.RB:case T.RTC:{tOt(e,t);break}case T.RT:case T.RP:{nOt(e,t);break}case T.PRE:case T.LISTING:{DPt(e,t);break}case T.XMP:{XPt(e,t);break}case T.SVG:{rOt(e,t);break}case T.HTML:{OPt(e,t);break}case T.BASE:case T.LINK:case T.META:case T.STYLE:case T.TITLE:case T.SCRIPT:case T.BGSOUND:case T.BASEFONT:case T.TEMPLATE:{xu(e,t);break}case T.BODY:{MPt(e,t);break}case T.FORM:{FPt(e,t);break}case T.NOBR:{GPt(e,t);break}case T.MATH:{oOt(e,t);break}case T.TABLE:{VPt(e,t);break}case T.INPUT:{WPt(e,t);break}case T.PARAM:case T.TRACK:case T.SOURCE:{qPt(e,t);break}case T.IMAGE:{YPt(e,t);break}case T.BUTTON:{HPt(e,t);break}case T.APPLET:case T.OBJECT:case T.MARQUEE:{zPt(e,t);break}case T.IFRAME:{QPt(e,t);break}case T.SELECT:{ZPt(e,t);break}case T.OPTION:case T.OPTGROUP:{eOt(e,t);break}case T.NOEMBED:case T.NOFRAMES:{hOe(e,t);break}case T.FRAMESET:{kPt(e,t);break}case T.TEXTAREA:{JPt(e,t);break}case T.NOSCRIPT:{e.options.scriptingEnabled?hOe(e,t):gOe(e,t);break}case T.PLAINTEXT:{UPt(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:gOe(e,t);}}function iOt(e,t){if(e.openElements.hasInScope(T.BODY)&&(e.insertionMode=K.AFTER_BODY,e.options.sourceCodeLocationInfo)){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e._setEndLocation(n,t);}}function sOt(e,t){e.openElements.hasInScope(T.BODY)&&(e.insertionMode=K.AFTER_BODY,POe(e,t));}function aOt(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n));}function lOt(e){let t=e.openElements.tmplCount>0,{formElement:n}=e;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(T.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(T.FORM):n&&e.openElements.remove(n));}function cOt(e){e.openElements.hasInButtonScope(T.P)||e._insertFakeElement(se.P,T.P),e._closePElement();}function uOt(e){e.openElements.hasInListItemScope(T.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(T.LI),e.openElements.popUntilTagNamePopped(T.LI));}function dOt(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n));}function mOt(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped());}function pOt(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker());}function hOt(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(se.BR,T.BR),e.openElements.pop(),e.framesetOk=false;}function AOe(e,t){let n=t.tagName,o=t.tagID;for(let r=e.openElements.stackTop;r>0;r--){let i=e.openElements.items[r],s=e.openElements.tagIDs[r];if(o===s&&(o!==T.UNKNOWN||e.treeAdapter.getTagName(i)===n)){e.openElements.generateImpliedEndTagsWithExclusion(o),e.openElements.stackTop>=r&&e.openElements.shortenToLength(r);break}if(e._isSpecialElement(i,s))break}}function wB(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:{H3(e,t);break}case T.P:{cOt(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:{aOt(e,t);break}case T.LI:{uOt(e);break}case T.DD:case T.DT:{dOt(e,t);break}case T.H1:case T.H2:case T.H3:case T.H4:case T.H5:case T.H6:{mOt(e);break}case T.BR:{hOt(e);break}case T.BODY:{iOt(e,t);break}case T.HTML:{sOt(e,t);break}case T.FORM:{lOt(e);break}case T.APPLET:case T.OBJECT:case T.MARQUEE:{pOt(e,t);break}case T.TEMPLATE:{yS(e,t);break}default:AOe(e,t);}}function EOe(e,t){e.tmplInsertionModeStack.length>0?_Oe(e,t):j3(e,t);}function gOt(e,t){var n;t.tagID===T.SCRIPT&&((n=e.scriptHandler)===null||n===void 0||n.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode;}function fOt(e,t){e._err(t,he.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t);}function F3(e,t){if(e.openElements.currentTagId!==void 0&&fOe.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=false,e.originalInsertionMode=e.insertionMode,e.insertionMode=K.IN_TABLE_TEXT,t.type){case kn.CHARACTER:{wOe(e,t);break}case kn.WHITESPACE_CHARACTER:{vOe(e,t);break}}else vx(e,t);}function yOt(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_CAPTION;}function SOt(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_COLUMN_GROUP;}function bOt(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(se.COLGROUP,T.COLGROUP),e.insertionMode=K.IN_COLUMN_GROUP,$3(e,t);}function TOt(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_TABLE_BODY;}function AOt(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(se.TBODY,T.TBODY),e.insertionMode=K.IN_TABLE_BODY,RB(e,t);}function EOt(e,t){e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode(),e._processStartTag(t));}function vOt(e,t){TOe(t)?e._appendElement(t,Ie.HTML):vx(e,t),t.ackSelfClosing=true;}function wOt(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,Ie.HTML),e.formElement=e.openElements.current,e.openElements.pop());}function BE(e,t){switch(t.tagID){case T.TD:case T.TH:case T.TR:{AOt(e,t);break}case T.STYLE:case T.SCRIPT:case T.TEMPLATE:{xu(e,t);break}case T.COL:{bOt(e,t);break}case T.FORM:{wOt(e,t);break}case T.TABLE:{EOt(e,t);break}case T.TBODY:case T.TFOOT:case T.THEAD:{TOt(e,t);break}case T.INPUT:{vOt(e,t);break}case T.CAPTION:{yOt(e,t);break}case T.COLGROUP:{SOt(e,t);break}default:vx(e,t);}}function Ex(e,t){switch(t.tagID){case T.TABLE:{e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode());break}case T.TEMPLATE:{yS(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:vx(e,t);}}function vx(e,t){let n=e.fosterParentingEnabled;e.fosterParentingEnabled=true,vB(e,t),e.fosterParentingEnabled=n;}function vOe(e,t){e.pendingCharacterTokens.push(t);}function wOe(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=true;}function gx(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n<e.pendingCharacterTokens.length;n++)vx(e,e.pendingCharacterTokens[n]);else for(;n<e.pendingCharacterTokens.length;n++)e._insertCharacters(e.pendingCharacterTokens[n]);e.insertionMode=e.originalInsertionMode,e._processToken(t);}var ROe=new Set([T.CAPTION,T.COL,T.COLGROUP,T.TBODY,T.TD,T.TFOOT,T.TH,T.THEAD,T.TR]);function ROt(e,t){let n=t.tagID;ROe.has(n)?e.openElements.hasInTableScope(T.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=K.IN_TABLE,BE(e,t)):Bs(e,t);}function COt(e,t){let n=t.tagID;switch(n){case T.CAPTION:case T.TABLE:{e.openElements.hasInTableScope(T.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=K.IN_TABLE,n===T.TABLE&&Ex(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:wB(e,t);}}function $3(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.COL:{e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.TEMPLATE:{xu(e,t);break}default:AB(e,t);}}function IOt(e,t){switch(t.tagID){case T.COLGROUP:{e.openElements.currentTagId===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=K.IN_TABLE);break}case T.TEMPLATE:{yS(e,t);break}case T.COL:break;default:AB(e,t);}}function AB(e,t){e.openElements.currentTagId===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=K.IN_TABLE,e._processToken(t));}function RB(e,t){switch(t.tagID){case T.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_ROW;break}case T.TH:case T.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(se.TR,T.TR),e.insertionMode=K.IN_ROW,CB(e,t);break}case T.CAPTION:case T.COL:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE,BE(e,t));break}default:BE(e,t);}}function U3(e,t){let n=t.tagID;switch(t.tagID){case T.TBODY:case T.TFOOT:case T.THEAD:{e.openElements.hasInTableScope(n)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE);break}case T.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE,Ex(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:Ex(e,t);}}function CB(e,t){switch(t.tagID){case T.TH:case T.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_CELL,e.activeFormattingElements.insertMarker();break}case T.CAPTION:case T.COL:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:case T.TR:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY,RB(e,t));break}default:BE(e,t);}}function COe(e,t){switch(t.tagID){case T.TR:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY);break}case T.TABLE:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY,U3(e,t));break}case T.TBODY:case T.TFOOT:case T.THEAD:{(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(T.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY,U3(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:Ex(e,t);}}function xOt(e,t){let n=t.tagID;ROe.has(n)?(e.openElements.hasInTableScope(T.TD)||e.openElements.hasInTableScope(T.TH))&&(e._closeTableCell(),CB(e,t)):Bs(e,t);}function _Ot(e,t){let n=t.tagID;switch(n){case T.TD:case T.TH:{e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=K.IN_ROW);break}case T.TABLE:case T.TBODY:case T.TFOOT:case T.THEAD:case T.TR:{e.openElements.hasInTableScope(n)&&(e._closeTableCell(),COe(e,t));break}case T.BODY:case T.CAPTION:case T.COL:case T.COLGROUP:case T.HTML:break;default:wB(e,t);}}function IOe(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.OPTION:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e._insertElement(t,Ie.HTML);break}case T.OPTGROUP:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop(),e._insertElement(t,Ie.HTML);break}case T.HR:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop(),e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.INPUT:case T.KEYGEN:case T.TEXTAREA:case T.SELECT:{e.openElements.hasInSelectScope(T.SELECT)&&(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),t.tagID!==T.SELECT&&e._processStartTag(t));break}case T.SCRIPT:case T.TEMPLATE:{xu(e,t);break}}}function xOe(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:{yS(e,t);break}}}function POt(e,t){let n=t.tagID;n===T.CAPTION||n===T.TABLE||n===T.TBODY||n===T.TFOOT||n===T.THEAD||n===T.TR||n===T.TD||n===T.TH?(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),e._processStartTag(t)):IOe(e,t);}function OOt(e,t){let n=t.tagID;n===T.CAPTION||n===T.TABLE||n===T.TBODY||n===T.TFOOT||n===T.THEAD||n===T.TR||n===T.TD||n===T.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),e.onEndTag(t)):xOe(e,t);}function MOt(e,t){switch(t.tagID){case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:case T.NOFRAMES:case T.SCRIPT:case T.STYLE:case T.TEMPLATE:case T.TITLE:{xu(e,t);break}case T.CAPTION:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:{e.tmplInsertionModeStack[0]=K.IN_TABLE,e.insertionMode=K.IN_TABLE,BE(e,t);break}case T.COL:{e.tmplInsertionModeStack[0]=K.IN_COLUMN_GROUP,e.insertionMode=K.IN_COLUMN_GROUP,$3(e,t);break}case T.TR:{e.tmplInsertionModeStack[0]=K.IN_TABLE_BODY,e.insertionMode=K.IN_TABLE_BODY,RB(e,t);break}case T.TD:case T.TH:{e.tmplInsertionModeStack[0]=K.IN_ROW,e.insertionMode=K.IN_ROW,CB(e,t);break}default:e.tmplInsertionModeStack[0]=K.IN_BODY,e.insertionMode=K.IN_BODY,Bs(e,t);}}function kOt(e,t){t.tagID===T.TEMPLATE&&yS(e,t);}function _Oe(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):j3(e,t);}function LOt(e,t){t.tagID===T.HTML?Bs(e,t):EB(e,t);}function POe(e,t){var n;if(t.tagID===T.HTML){if(e.fragmentContext||(e.insertionMode=K.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===T.HTML){e._setEndLocation(e.openElements.items[0],t);let o=e.openElements.items[1];o&&!(!((n=e.treeAdapter.getNodeSourceCodeLocation(o))===null||n===void 0)&&n.endTag)&&e._setEndLocation(o,t);}}else EB(e,t);}function EB(e,t){e.insertionMode=K.IN_BODY,vB(e,t);}function NOt(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.FRAMESET:{e._insertElement(t,Ie.HTML);break}case T.FRAME:{e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.NOFRAMES:{xu(e,t);break}}}function DOt(e,t){t.tagID===T.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==T.FRAMESET&&(e.insertionMode=K.AFTER_FRAMESET));}function FOt(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.NOFRAMES:{xu(e,t);break}}}function BOt(e,t){t.tagID===T.HTML&&(e.insertionMode=K.AFTER_AFTER_FRAMESET);}function UOt(e,t){t.tagID===T.HTML?Bs(e,t):TB(e,t);}function TB(e,t){e.insertionMode=K.IN_BODY,vB(e,t);}function HOt(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.NOFRAMES:{xu(e,t);break}}}function jOt(e,t){t.chars=Go,e._insertCharacters(t);}function $Ot(e,t){e._insertCharacters(t),e.framesetOk=false;}function OOe(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==Ie.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop();}function GOt(e,t){if(cOe(t))OOe(e),e._startTagOutsideForeignContent(t);else {let n=e._getAdjustedCurrentElement(),o=e.treeAdapter.getNamespaceURI(n);o===Ie.MATHML?N3(t):o===Ie.SVG&&(uOe(t),D3(t)),bB(t),t.selfClosing?e._appendElement(t,o):e._insertElement(t,o),t.ackSelfClosing=true;}}function zOt(e,t){if(t.tagID===T.P||t.tagID===T.BR){OOe(e),e._endTagOutsideForeignContent(t);return}for(let n=e.openElements.stackTop;n>0;n--){let o=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(o)===Ie.HTML){e._endTagOutsideForeignContent(t);break}let r=e.treeAdapter.getTagName(o);if(r.toLowerCase()===t.tagName){t.tagName=r,e.openElements.shortenToLength(n);break}}}new Set([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 MOe(e,t,n){typeof e=="string"&&(n=t,t=e,e=null);let o=Ax.getFragmentParser(e,n);return o.tokenizer.write(t,true),o.getFragment()}var VOt=5e3,HE=1024;function UE(e){return typeof e.tagName=="string"&&Array.isArray(e.attrs)}function IB(e){return e.nodeName==="#text"}function xB(e,t){let n=MOe(e),o={nodesLeft:VOt};for(let s of n.childNodes)if(UE(s)&&s.tagName.toLowerCase()==="body"){let a=t(s,o);if(a!==void 0)return a}let r=[];for(let s of n.childNodes){if(o.nodesLeft<=0)break;if(UE(s)){let a=t(s,o);a!==void 0&&r.push(a);}}let i={tag:"body"};return r.length>0&&(i.children=r),i}var WOt=new Set(["html","head","meta","link","template","script","style","noscript","path","br","polygon","defs"]),qOt=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 KOt(e,t){return qOt.has(t)?true:e.attrs.some(({name:n})=>M3.has(n.toLowerCase()))}function kOe(e,t){if(t.nodesLeft<=0)return;let n=e.tagName.toLowerCase();if(WOt.has(n))return;let o,r;for(let{name:c,value:u}of e.attrs){let d=c.toLowerCase();if(d==="role"){r=u;continue}o===void 0&&(o={}),o[d]=u;}let i,s=[];for(let c of e.childNodes){if(t.nodesLeft<=0)break;if(IB(c)){let u=c.value;if(u&&u.trim().length>0){let d=u.length>HE?u.slice(0,HE):u;i=i===void 0?d:`${i} ${d}`;}}else if(UE(c)){let u=kOe(c,t);u!==void 0&&s.push(u);}}let a=n==="body"||KOt(e,n);if(!a&&s.length===0&&i===void 0)return;if(!a&&s.length===1&&i===void 0)return s[0];t.nodesLeft-=1;let l={tag:n};return r!==void 0&&(l.role=r),o!==void 0&&(l.attributes=o),i!==void 0&&(l.text=i),s.length>0&&(l.children=s),l}function G3(e){return xB(e,kOe)}function LOe(e,t){if(t.nodesLeft<=0)return;t.nodesLeft-=1;let n=e.tagName.toLowerCase(),o,r;for(let{name:l,value:c}of e.attrs){let u=l.toLowerCase();if(u==="role"){r=c;continue}o===void 0&&(o={}),o[u]=c;}let i,s=[];for(let l of e.childNodes){if(t.nodesLeft<=0)break;if(IB(l)){let c=l.value;if(c&&c.trim().length>0){let u=c.length>HE?c.slice(0,HE):c;i=i===void 0?u:`${i} ${u}`;}}else if(UE(l)){let c=LOe(l,t);c!==void 0&&s.push(c);}}let a={tag:n};return r!==void 0&&(a.role=r),o!==void 0&&(a.attributes=o),i!==void 0&&(a.text=i),s.length>0&&(a.children=s),a}function z3(e){return xB(e,LOe)}var YOt=new Set(["PRESET_ACTION","AI_ACTION_DYNAMIC"]),SS=class{constructor(t,n,o,r,i,s){this.orgId=t;this.testId=n;this.testName=o;this.diskStorage=r;this.parentFlushResults=i;this.appGraphSink=s;}children=[];finished=false;stepFrequenciesByType={};currentResults=[];async getScreenshot(t,n){return this.diskStorage.readFile(`${oa}/${n}.jpeg`)}async getHtmlSnapshot(t,n){return this.diskStorage.readFile(`${oa}/${n}.html`)?.toString()}recordStepStat(t){t.type!=="PRESET_ACTION"?this.stepFrequenciesByType[t.type]=(this.stepFrequenciesByType[t.type]||0)+1:this.stepFrequenciesByType[t.command.type]=(this.stepFrequenciesByType[t.command.type]||0)+1;}sendFinalizedStepStats(){for(let[t,n]of Object.entries(this.stepFrequenciesByType))dn.increment("test_step_execution",n,[`type:${t}`,"platform:browser","executor:cli",`orgId:${this.orgId}`]);}flushResults(t){this.currentResults=t,this.parentFlushResults(t);}async startStep(t,n){let{logger:o,step:r,parentStepIdChain:i}=t;this.recordStepStat(r);let s={step:r,status:"RUNNING",startedAt:new Date},a=[...n];this.currentResults=a;let l=new V3(this.orgId,this.testId,this.testName,s,this.diskStorage,o,c=>{this.flushResults([...a,c]);},i??[],this.appGraphSink);return this.children.push(l),l}async finish(t){this.finished||(this.finished=true,await Promise.all(this.children.map(n=>n.finishInternal({status:SQ(t.status),finishedAt:t.finishedAt}))),this.sendFinalizedStepStats());}};function JOt(e){switch(e){case "SUCCESS":return "PASSED";case "FAILED":return "FAILED";case "CANCELLED":return "CANCELLED";case "RUNNING":return "RUNNING";case "IDLE":return "PENDING";default:return Xe(e)}}function _B(e){return e.some(t=>t.status==="FAILED")?"FAILED":e.some(t=>t.status==="CANCELLED")?"CANCELLED":"RUNNING"}var V3=class{constructor(t,n,o,r,i,s,a,l,c){this.orgId=t;this.testId=n;this.testName=o;this.metadata=r;this.diskStorage=i;this.logger=s;this.parentFlushResults=a;this.parentStepIdChain=l;this.appGraphSink=c;this.interactionTracer=new zd({storeTraceAsset:u=>this.storeTraceAsset(u)}),Gd.initializeRootTracerContext(this.interactionTracer);}children=[];finished=false;interactionTracer;pendingAssetWrites=Promise.resolve();async attachBeforeScreenshot(t){let{snapshotId:n,screenshot:o}=t;if(o){this.metadata.beforeSnapshotId=n;try{await this.diskStorage.storeFileAsync({name:`${oa}/${n}.jpeg`,contents:o});}catch(r){this.logger.warn({err:r,snapshotId:n},"Failed to store before-step screenshot");}}}async attachAfterScreenshot(t){let{snapshotId:n,screenshot:o}=t;if(o){this.metadata.afterSnapshotId=n;try{await this.diskStorage.storeFileAsync({name:`${oa}/${n}.jpeg`,contents:o});}catch(r){this.logger.warn({err:r,snapshotId:n},"Failed to store after-step screenshot");}}}attachBeforeHtmlSnapshot(t){let{snapshotId:n,html:o}=t;this.metadata.beforeSnapshotId=n,this.queueAssetWrite(`${n}.html`,o);}attachAfterHtmlSnapshot(t){let{snapshotId:n,html:o,fingerprintHtml:r,url:i,logger:s}=t;this.metadata.afterSnapshotId=n,this.queueAssetWrite(`${n}.html`,o),this.appGraphSink&&YOt.has(this.metadata.step.type)&&this.appGraphSink({html:r??o,archivalHtml:o,url:i,stepId:this.metadata.step.id,parentStepIdChain:[...this.parentStepIdChain],logger:s});}recordTargetAutoHeal(t){let{healType:n}=t,o=n==="AI"?"ai-target-heal":"cache-heal";dn.increment("test_event",1,[`name:${o}`,`orgId:${this.orgId}`]),this.metadata.healMetadata={healType:n,healedAt:new Date};}storeTraceAsset(t){this.queueAssetWrite(`${t.snapshotId}.${t.extension??"jpeg"}`,t.data);}queueAssetWrite(t,n){this.pendingAssetWrites=this.pendingAssetWrites.then(async()=>{try{await this.diskStorage.storeFileAsync({name:`${oa}/${t}`,contents:n});}catch(o){this.logger.warn({err:o,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(n=>n.finish({status:JOt(t.status),finishedAt:t.finishedAt})).concat(this.pendingAssetWrites)));}recordStepDuration(t,n,o){xO({durationMs:n,executor:"cli",logger:this.logger,orgId:this.orgId,resolvedStep:t,status:o});}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 n=>({...t,status:_B(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n,type:"MODULE"});case "CONDITIONAL":return n=>({...t,blocks:t.blocks.map(r=>({assertion:r.assertion,steps:bl(r.steps)})),elseSteps:t.elseSteps?bl(t.elseSteps):void 0,status:_B(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n});case "WHILE_LOOP":return n=>({...t,steps:bl(t.steps),status:_B(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n});case "AI_ACTION":case "AI_ACTION_DYNAMIC":case "PRESET_ACTION":case "SECTION":return n=>({...t,status:_B(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n});default:return Xe(t)}}async startSubSteps(){let t=this.getResultBuilderForCurrentStep(),n=new SS(this.orgId,this.testId,this.testName,this.diskStorage,o=>{let r=t(o);this.parentFlushResults(r);});return this.children.push(n),n}};var PB=class{constructor(t,n,o,r,i,s,a,l){this.orgId=t;this.testId=n;this.testName=o;this.runAttemptId=r;this.metadata=i;this.diskStorage=s;this.recordVideo=a;this.progressHandle=l;this.diskStorage.mkdir(oa),this.harWriter=new $y(this.diskStorage.createFileStream(`${oa}/har-pages.log`),this.diskStorage.createFileStream(`${oa}/har-entries.log`)),this.resourceUsageStream=this.diskStorage.createFileStream(`${oa}/resource-usage.ndjson`),this.resourceUsageSampler=Vte({keepSamples:false,onSample:c=>{this.resourceUsageStream.write(`${JSON.stringify(c)}
|
|
10465
|
+
`).map(o=>o.trim()).filter(Boolean)||[];if(!(t.length===0&&n.length===0))return [{expanded:t,backtrace:n}]}function ixt(e){let t=e.status==="FAILED"?X0(e):void 0;return z_e([["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 sxt(e,t,n){let o=G_e(n.filePath);return {id:n.runId||randomUUID(),scope:e,name:n.testName,location:o,file_name:mo__default.basename(o),result:txt(n.status),failure_reason:oxt(n),failure_expanded:rxt(n),history:nxt(t,n.lastAttemptStartedAt,n.finishedAt),tags:ixt(n)}}function j_e(e,t,n,o,r){let i=G_e(t);return {id:randomUUID(),scope:e,name:n,location:i,file_name:mo__default.basename(i),result:"skipped",history:{start_at:0,end_at:0,duration:0},tags:z_e([["quarantined",r?.quarantined||"false"],["failure_recovery","false"]])}}function axt(e,t){let n=t.map(i=>sxt(e.suiteName,e.startedAt,i)),o=e.testsToSkip.map(i=>j_e(e.suiteName,i.relativeFilePath,i.name,i.id,void 0)),r=e.quarantinedTestsToSkip.map(i=>j_e(e.suiteName,i.relativeFilePath,i.name,i.id,{quarantined:"true"}));return [...n,...o,...r]}function V_e(e,t,n){let o=axt(t,n);oo__default.writeFileSync(mo__default.join(e,`${t.suiteName}.buildkite.json`),JSON.stringify(o,null,2));}function kE(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 q_e(e,t,n){let o=S3(t,n);oo__default.writeFileSync(mo__default.join(e,`${t.suiteName}.momentic.json`),JSON.stringify(o,null,2));}function S3(e,t){let n=t.map(cxt),o=[...e.testsToSkip.map(r=>W_e(r,false)),...e.quarantinedTestsToSkip.map(r=>W_e(r,true))];return aQ.parse({version:1,runGroup:{startedAt:e.startedAt.toISOString(),finishedAt:e.finishedAt.toISOString(),durationMs:e.finishedAt.getTime()-e.startedAt.getTime()},summary:uxt(n,o),runs:n,skipped:o})}function cxt(e){let t=e.status==="PASSED"&&(e.failureRecoveryDetails?.attempts??0)>0,n=e.failureDetails?.manualClassification??e.failureDetails?.classification,o=e.status==="FAILED"?{reason:e.failureReason,message:e.failureDetails?.errorMessage}:null;return {runId:e.runId,testId:e.testId,testName:e.testName,filePath:mo__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:o,classification:n?{reasoning:n.summary,category:n.reason,citations:n.citations}:null}}function W_e(e,t){return {testId:e.id,testName:e.name,filePath:mo__default.relative(".",e.relativeFilePath),labels:e.labels,quarantined:t}}function uxt(e,t){return {total:e.length+t.length,executed:e.length,skipped:t.length,passed:e.filter(n=>n.status==="PASSED").length,failed:e.filter(n=>n.status==="FAILED").length,cancelled:e.filter(n=>n.status==="CANCELLED").length,quarantined:e.filter(n=>n.quarantined).length+t.filter(n=>n.quarantined).length,recovered:e.filter(n=>n.recovered).length}}function K_e(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 mxt(e,t){let n=X0(e);if(t.name(e.testName).className(e.testName).file(mo__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(o=>{t.property("dd_tags[label]",o);})),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&&K_e(t,e.quarantinedMetadata),n==="setup"&&(t.property("setup_failed","true"),t.property("dd_tags[setup_failed]","true")),n==="main"&&(t.property("main_failed","true"),t.property("dd_tags[main_failed]","true")),n==="teardown"&&(t.property("teardown_failed","true"),t.property("dd_tags[teardown_failed]","true")),e.status==="FAILED"){let o=Mu({failureReason:e.failureReason,classification:e.failureDetails?.classification,manualClassification:e.failureDetails?.manualClassification});if(o.title){let{description:r}=o;e.runId&&(r+=` Visit https://app.momentic.ai/runs/${e.runId} for more details.`),t.failure(r,o.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 pxt(e,t,n){let{suiteId:o,suiteName:r,startedAt:i,finishedAt:s,testsToSkip:a,quarantinedTestsToSkip:l,quarantinedTestsMetadata:c}=t,u=e.testSuite().name(r);o&&u.property("id",o),u.timestamp(i).property("startedAt",i.toISOString()).property("finishedAt",s.toISOString()).time((s.getTime()-i.getTime())/1e3);for(let d of n){let m=u.testCase();mxt(d,m);}for(let d of a){let m=u.testCase();m.name(d.name).className(d.name).file(mo__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(mo__default.relative(".",d.relativeFilePath)).property("id",d.id);let p=c[d.id];p&&K_e(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 Y_e(e,t,n){let o=dxt.newBuilder();pxt(o,t,n),o.writeTo(mo__default.join(e,`${t.suiteName}.xml`));}var hxt="insights-collector.newrelic.com",gxt="insights-collector.eu01.nr-data.net",fxt=4e3;async function b3({logger:e,config:t,params:n,runs:o,runGroupId:r,envName:i,appUrl:s,gitMetadata:a}){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=o.map(kE),u=S3(n,c),d=J_e({...t.attributes,runGroupId:r,environment:i,suiteName:n.suiteName,gitBranch:a.gitBranchName,gitCommit:a.gitCommitSha,gitRepository:a.githubRepository??a.gitOriginUrl,ciRunUrl:yxt()}),m=u.runs.map((g,f)=>({...d,eventType:"MomenticRun",timestamp:new Date(g.finishedAt).getTime(),...J_e({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?`${s}/runs/${g.runId}`:void 0})}));m.push({...d,eventType:"MomenticRunGroup",timestamp:new Date(n.finishedAt).getTime(),startedAt:n.startedAt.toISOString(),finishedAt:n.finishedAt.toISOString(),durationMs:u.runGroup.durationMs,runGroupUrl:`${s}/run-groups/${r}`,...u.summary,passRate:u.summary.executed>0?u.summary.passed/u.summary.executed:0});let h=`https://${t.region==="EU"?gxt:hxt}/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: ${z(g)}`);}}function J_e(e){let t={};for(let[n,o]of Object.entries(e))o==null||o===""||(t[n]=typeof o=="string"?o.slice(0,fxt):o);return t}function yxt(){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 X_e(e){return {title:no(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(X_e):[]}}async function Txt(e,t,n,o){if(o.results?.length){let r=await J0({logger:e,debugDataStorage:t,folder:n,label:"final-state",snapshotId:o.results[o.results.length-1].afterSnapshot});return r?[{name:"Final state screenshot",path:r,contentType:"image/jpeg"}]:[]}return []}async function Axt(e,t,n,o){let r;if(o.status==="FAILED"&&o.failureReason){let i=Mu({failureReason:o.failureReason,classification:o.failureDetails?.classification,manualClassification:o.failureDetails?.manualClassification});r={value:o.failureDetails?.classification?.reason??o.failureReason,message:i.description};}return {status:o.status==="PASSED"?"passed":o.status==="CANCELLED"?"interrupted":"failed",duration:o.finishedAt.getTime()-o.lastAttemptStartedAt.getTime(),error:r,retry:o.attempts-1,steps:o.results?.map(X_e)||[],startTime:o.lastAttemptStartedAt.toISOString(),attachments:await Txt(e,t,n,o)}}async function Ext(e,t,n,o){return {expectedStatus:"passed",status:o.status==="PASSED"?"expected":"unexpected",results:[await Axt(e,t,n,o)]}}async function vxt(e,t,n,o){return {tags:[],title:o.test.name,ok:o.status==="PASSED",tests:[await Ext(e,t,n,o)],id:o.runId,file:o.filePath}}function T3(e,t){return e.reduce((n,o)=>t(o)?n+1:n,0)}async function wxt(e,t,n,o,r){return {suites:[{title:o.suiteName,file:o.projectConfigPath,specs:await Promise.all(r.map(async i=>{let s=i.runId&&i.runAttemptId?t.createDebugDataReaderForRunAttempt(i.runId,i.runAttemptId):new Bw;try{return await vxt(e,s,n,i)}finally{s.close();}}))}],errors:[],stats:{startTime:o.startedAt.toISOString(),duration:o.finishedAt.getTime()-o.startedAt.getTime(),expected:T3(r,i=>i.status==="PASSED"),unexpected:T3(r,i=>i.status!=="PASSED"),flaky:T3(r,i=>!!i.isFlake),skipped:0}}}async function Q_e(e,t,n,o,r){let i=await wxt(e,t,n,o,r);oo__default.writeFileSync(mo__default.join(n,`${o.suiteName}.json`),JSON.stringify(i,null,2));}async function Z_e({logger:e,callbacks:t,format:n,params:o,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}),n){case "json":{let s=r.map(kE);q_e(i,o,s);return}case "junit":{let s=r.map(kE);Y_e(i,o,s);return}case "buildkite-json":{let s=r.map(kE);V_e(i,o,s);return}case "allure":case "allure-json":await U_e(e,t,i,o,r);return;case "playwright-json":await Q_e(e,t,i,o,r);return;default:throw new Error(`Unknown reporter format requested: '${n}'`)}}function gS(e){let t=e??Mxt();return ePe()&&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 Mxt(){let e=ePe(),t=e?2:1;return C.debug(`Auto-detected device pixel ratio ${t} (Mac OS Retina: ${e}).`),t}var ePe=once(()=>{if(platform()!=="darwin")return false;try{return execSync("system_profiler SPDisplaysDataType").toString().includes("Retina")}catch{return false}});async function eB(e,t=true,n=false){let o=Dxt(e),r=await Lxt.which(o[0],true),i=o.slice(1),s=kxt.exec(Nxt(r),i,{delay:100,silent:n});if(t)return s;s.catch(a=>{C.warn({err:a},`Background command exited with an error: ${e}`);});}var tPe="the Momentic GitHub app is missing permission to create pull requests or write branches for this repository";function Fxt(e,{context:t}){return e instanceof Hn?e.rawError.includes("Resource not accessible by integration")?`Cannot create ${t} because ${tPe}.`:e.status>=400&&e.status<500?e.rawError:`Could not create ${t} due to a GitHub error.`:`Could not create ${t}: ${z(e)}`}function nPe(e){return e instanceof Hn?e.rawError.includes("Resource not accessible by integration")?tPe:e.status>=400&&e.status<500?e.rawError:"a GitHub error occurred":z(e)}function oPe(e,t){C.error(Fxt(e,t));}function tB(e){return rPe(e,"runs","run")}function A3(e){return rPe(e,"run-groups","run group")}function rPe(e,t,n){let o=e.trim(),r=/^https?:\/\//i.test(o)?Uxt(o,t,n):o;if(!z$1.guid().safeParse(r).success)throw new Error(`Invalid ${n} ID: ${e}. Expected a UUID or a URL like https://app.momentic.ai/${t}/<id>.`);return r}function Uxt(e,t,n){let o;try{o=new URL(e);}catch{throw new Error(`Invalid ${n} URL: ${e}`)}let r=o.pathname.split("/").filter(i=>i.length>0);if(r.length!==2||r[0]!==t)throw new Error(`Could not extract ${n} ID from URL: ${e}. Expected a URL like https://app.momentic.ai/${t}/<id>.`);return r[1]}function nB(e){return new Promise((t,n)=>{let o=[];createReadStream(e).pipe(Hxt()).on("data",r=>o.push(r)).on("end",()=>t(o)).on("error",r=>n(r));})}var Vt="3.56.2",{checkCLIVersion:ti,getLatestCLIVersion:iPe}=Ume({packageName:"momentic",currentVersion:Vt,changelogUrl:"https://github.com/momentic-ai/cli/releases",updateCommand:"npx momentic@latest upgrade"});Hdt("phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI","POSTHOG_WEB_WRITE_KEY is not set");var{captureEvent:rm,setAnalyticsIdentity:oB,shutdownAnalytics:sPe}=cO({writeKey:"phc_WRWd8LYIv6rolgDsyCdrPpxtZhsu6qXAkEwPicl44bI",host:"https://p.momentic.ai",platform:"cli",identity:"stashed",flushImmediately:true,onIdentify:Ipe});var Gxt=3e3,rB=new Set;function aPe(e){rB.add(e),e.finally(()=>rB.delete(e));}async function lPe(){if(rB.size!==0)try{await ge(Promise.allSettled([...rB]),{milliseconds:Gxt});}catch{}}async function rt(){try{await ge(Promise.all([lPe(),aO(),dn.flush(),sPe(),EO(),qV()]),{milliseconds:5e3});}catch{}}async function uPe({momenticFiles:e,project:t,logger:n}){let o;try{o=await Yg({repoRoot:t.rootDir??process.cwd(),mainBranch:t.config.gitMainBranch,logger:n});}catch(i){let s="Make sure the checkout has enough git history to reach the base ref (CI checkouts are often shallow by default).";throw i instanceof Fp?new ue(`Could not determine the base ref to diff against for --changed. ${s}`):new ue(`--changed could not compute the git diff: ${z(i)}. ${s}`)}let r=zxt({changedFiles:o.changedFiles,repoRoot:o.repoRoot,momenticFiles:e});return C.log(r.length===0?`No changed tests or modules vs ${o.baseRef}.`:`${r.length} changed test(s) vs ${o.baseRef}.`),r.map(i=>i.fullFilePath)}function zxt({changedFiles:e,repoRoot:t,momenticFiles:n}){let o=e.filter(u=>u.status!=="D"),r=o.filter(u=>u.path.endsWith(".test.yaml")),i=o.filter(u=>u.path.endsWith(".module.yaml")),s=Object.values(n.tests),a=new Map(s.map(u=>[u.fullFilePath,u])),l=new Map;for(let u of r){let d=a.get(rp.resolve(t,u.path));d&&!l.has(d.id)&&l.set(d.id,{fullFilePath:d.fullFilePath,relativePath:d.relativePath,reason:"test-changed"});}let c=Vxt({momenticFiles:n,changedModuleFullPaths:i.map(u=>rp.resolve(t,u.path))});if(c.size>0)for(let u of s){if(l.has(u.id))continue;let d=jR(u.fullFilePath,n);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 Vxt({momenticFiles:e,changedModuleFullPaths:t}){let n=new Set(t),o=new Set;for(let[s,a]of Object.entries(e.modules))n.has(a.fullFilePath)&&o.add(s);if(o.size===0)return o;let r=new Map;for(let[s,a]of Object.entries(e.modules))r.set(s,jR(a.fullFilePath,e));let i=true;for(;i;){i=false;for(let[s,a]of r)if(!o.has(s)){for(let l of a)if(o.has(l)){o.add(s),i=true;break}}}return o}async function Xg({tests:e,changed:t,momenticFiles:n,project:o,yes:r,include:i,exclude:s,labels:a,logger:l}){let c=new Set;if(t)(await uPe({momenticFiles:n,project:o,logger:fe})).forEach(m=>c.add(m));else if(e&&e.length>0){let d=e.some(p=>oo__default.existsSync(p)),m=cwd();d?(m!==o.rootDir&&l.warn(`Test paths resolve against the current directory ('${m}'), not the project root ('${o.rootDir}'). Run from the project root or use substring filters to avoid surprises.`),e.forEach(p=>{if(!oo__default.existsSync(p))throw new Error(`Path '${p}' does not exist.`);let h;try{h=oo__default.statSync(p).isDirectory();}catch(f){l.warn({err:f},`Skipping path ${p} because it cannot be read`);return}let g=mo__default.resolve(p);Object.values(n.tests).filter(f=>h?Rte(f.fullFilePath,g):f.fullFilePath===g).forEach(f=>{c.add(f.fullFilePath);});})):Object.values(n.tests).forEach(p=>{e.some(h=>p.relativePath.includes(h))&&c.add(p.fullFilePath);});}else !r&&!await Kr("No test paths or substrings were provided. Do you want to run all tests?")&&(l.error("Cancelled by user."),process.exit(1)),Object.values(n.tests).forEach(m=>{c.add(m.fullFilePath);});for(let d of c){let m=mo__default.relative(o.rootDir,d);i&&!i.some(p=>new RegExp(p).test(m))&&c.delete(d),s&&s.some(p=>new RegExp(p).test(m))&&c.delete(d);}let u=Array.from(c).map(async d=>{try{let m=await $a(d,fe,n);if(lp.gt(m.schemaVersion,Ct)&&mne(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"),a&&a.length>0){let p=m.labels||[];if(!a.some(g=>p.includes(g)))return null}return {...m,fullFilePath:d,relativeFilePath:mo__default.relative(o.rootDir,d),testBundleHash:ok({absoluteTestFilePath:d,momenticFiles:n,logger:fe})}}catch(m){l.error(`Failed to read and resolve test at '${d}': ${z(m)}`),process.exit(1);}});return compact(await Promise.all(u))}function mPe({testDefinitions:e,quarantinedTestsMetadata:t,onlyQuarantined:n=false,skipQuarantined:o=false}){let[r,i]=partition(e,l=>l.disabled),[s,a]=partition(i,l=>l.id in t);return {testsToSkip:r,quarantinedTestsToSkip:o?s:[],testsToRun:n?[]:a,quarantinedTestsToRun:o?[]:s}}function pPe({testsToRun:e,quarantinedTestsToRun:t,quarantinedTestsMetadata:n,testInputMatrix:o}){let r=[],i=(s,a,l)=>{o?o.forEach((c,u)=>{r.push({inputs:c,inputIndex:u,testDefinition:s,quarantined:a,quarantinedMetadata:l});}):r.push({inputs:void 0,testDefinition:s,quarantined:a,quarantinedMetadata:l});};return e.forEach(s=>i(s,false)),t.forEach(s=>i(s,true,n[s.id])),r}var hPe=()=>process.exit(130),gPe=()=>process.exit(143);process.on("SIGINT",hPe);process.on("SIGTERM",gPe);function LE(){process.off("SIGINT",hPe),process.off("SIGTERM",gPe);}async function fPe({orgId:e,codeEvaluator:t,logger:n,outputDefinitions:o,testContext:r}){let i={};for(let s of o){let{name:a,value:l}=s;i[a]=await Ls({orgId:e,s:l,codeEvaluator:t,logger:n,context:r});}return i}var SPe=["QUEUED","PROVISIONING","READY","CONNECTED","TERMINATING","TERMINATED","FAILED","EXPIRED"];var w3=z$1.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/),R3=z$1.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/),Yxt=R3.array().min(1).max(32).refine(e=>new Set(e).size===e.length,{message:"service IDs must be unique"}).refine(e=>e.every((t,n)=>n===0||e[n-1]<t),{message:"service IDs must be sorted"}),ax=z$1.discriminatedUnion("mode",[z$1.object({mode:z$1.literal("playwright")}).strict(),z$1.object({mode:z$1.literal("private-service"),connectorId:w3,serviceIds:Yxt.optional()}).strict()]),C3=z$1.record(z$1.string().regex(/^[a-z0-9]([-.a-z0-9_]{0,61}[a-z0-9])?$/),z$1.string()),I3=z$1.union([z$1.guid(),z$1.string().regex(/^[a-f0-9]{64}$/)]),Jxt=z$1.object({allocationRequestId:z$1.guid(),apiKeyId:z$1.string().min(1),maxSessionTtlSeconds:z$1.number().int().min(1).max(3600),network:ax,organizationId:z$1.string().min(1),runAttemptId:z$1.guid(),runId:z$1.guid(),testId:z$1.string().min(1).max(128)}).strict(),bPe="X-Browser-Fleet-Max-Concurrent-Sessions",x3=z$1.object({allocationRequestId:z$1.guid(),maxConcurrentSessions:z$1.number().int().positive().optional(),maxSessionTtlSeconds:z$1.number().int().min(1).max(3600),metadata:C3.optional(),network:ax,principalId:I3,tokenVersion:z$1.literal(2)}).strict();z$1.union([x3,Jxt]);z$1.object({records:z$1.object({endedAt:z$1.iso.datetime(),metadata:C3,sessionId:z$1.string().min(1),usageSeconds:z$1.number().int().nonnegative()}).strict().array().min(1).max(500)}).strict();var TPe=z$1.object({accessToken:z$1.string().min(1),expiresAt:z$1.iso.datetime(),tokenType:z$1.literal("Bearer")}).strict();var yPe=z$1.object({host:z$1.string().trim().min(1).max(253),port:z$1.number().int().min(1).max(65535)}).strict(),Xxt=z$1.object({browserAddress:yPe,id:R3,target:yPe}).strict(),Qxt=z$1.object({id:R3,mode:z$1.literal("localhost")}).strict(),Zxt=z$1.union([Xxt,Qxt]),APe=z$1.object({services:Zxt.array().min(1).max(32)}).strict().superRefine(({services:e},t)=>{let n=e.filter(o=>"mode"in o);new Set(e.map(({id:o})=>o)).size!==e.length&&t.addIssue({code:"custom",message:"service IDs must be unique"}),n.length>1&&t.addIssue({code:"custom",message:"only one localhost namespace service is allowed"}),n.length===1&&e.length>1&&t.addIssue({code:"custom",message:"localhost cannot be combined with explicit services"});}),EPe=z$1.object({algorithm:z$1.literal("RSA-OAEP-256"),chunks:z$1.string().min(1).array().min(1).max(128)}).strict();z$1.object({metadata:C3.optional(),browser:z$1.literal("chromium"),network:ax.default({mode:"playwright"}),playwrightVersion:z$1.string(),ttlSeconds:z$1.number().int().min(1).max(3600),waitTimeoutMs:z$1.number().int().min(0).max(1e4).default(5e3)}).strict();var IPe=z$1.object({connectToken:z$1.string().optional(),failureCode:z$1.string().nullable().optional(),id:z$1.string(),network:ax.default({mode:"playwright"}),status:z$1.enum(SPe),wsEndpoint:z$1.string().optional()}),e_t=IPe.extend({connectToken:z$1.string(),status:z$1.literal("READY"),wsEndpoint:z$1.string()}),P3=500,t_t=250,n_t=1e4,o_t=2e4,r_t=z$1.object({id:z$1.string()}),wPe=z$1.object({connectorId:z$1.string(),state:z$1.enum(["PROVISIONING","ACTIVE","DELETING","DELETED","FAILED"])}).strict(),i_t=z$1.object({encryptedEnrollmentCredential:EPe}).strict(),RPe=64*1024,iB=class{authorization;baseUrl;controlAuthorization;requestTimeoutMs;constructor({accessToken:t,apiKey:n=process.env.BROWSER_FLEET_API_KEY,baseUrl:o=process.env.BROWSER_FLEET_BASE_URL,controlApiKey:r,requestTimeoutMs:i}){if(!o)throw new Error("Browser Fleet base URL is not configured");let s;t?s=`Bearer ${t}`:n&&(s=`Bearer ${n}`),this.authorization=s,this.baseUrl=o.replace(/\/$/,""),this.controlAuthorization=r?`Bearer ${r}`:void 0,this.requestTimeoutMs=i;}async createSession(t){return (await this.createSessionResponse(t)).session}createSessionResponse({idempotencyKey:t,network:n,signal:o,ttlSeconds:r,waitTimeoutMs:i}){return this.requestSession("","session creation",{body:JSON.stringify({browser:"chromium",playwrightVersion:"1.60",...n?{network:n}:{},ttlSeconds:r,waitTimeoutMs:i}),headers:{"Content-Type":"application/json","Idempotency-Key":t},method:"POST",signal:o})}async createSessionAccessToken(t,n){if(!this.authorization)throw new Error("Browser Fleet session API key is not configured");let o=this.authorization,{maxConcurrentSessions:r,...i}=x3.parse(t),s=l=>fetch(`${this.baseUrl}/v1/token`,{body:JSON.stringify(l),headers:{Authorization:o,...r===void 0?{}:{[bPe]:String(r)},"Content-Type":"application/json"},method:"POST",signal:this.requestSignal(n)}),a=await s(i);if(a.status===400&&i.metadata&&(a=await s({...i,metadata:void 0})),!a.ok)throw new Error(`Browser Fleet token request failed with status ${a.status}`);return TPe.parse(await _3(a))}async createReadySession({allocationTimeoutMs:t,idempotencyKey:n,network:o,signal:r,ttlSeconds:i,waitTimeoutMs:s}){r?.throwIfAborted();let a,l=Date.now()+t;try{let c=await this.retrySessionRequest(()=>this.createSessionResponse({idempotencyKey:n,network:o,signal:r,ttlSeconds:i,waitTimeoutMs:s}),l,r);if(a=c.session,a=await this.waitForReady(c,l,r),r?.throwIfAborted(),a.status==="READY"&&a.wsEndpoint&&a.connectToken)return e_t.parse(a);throw new Error(`Browser fleet session ${a.id} did not become ready (${a.failureCode??a.status})`)}catch(c){let u=a?.id??(c instanceof lx?c.sessionId:void 0);if(!u&&r?.aborted)try{u=(await this.createSessionResponse({idempotencyKey:n,network:o,signal:AbortSignal.timeout(o_t),ttlSeconds:i,waitTimeoutMs:s})).session.id;}catch(d){d instanceof lx&&(u=d.sessionId);}throw u&&await this.deleteSession(u,AbortSignal.timeout(n_t)).catch(()=>{}),c}}async getSession(t,n){return (await this.requestSession(`/${t}`,"session status",{signal:n})).session}async waitForReady(t,n,o){let r=t;for(;(r.session.status==="QUEUED"||r.session.status==="PROVISIONING")&&Date.now()<n&&(await setTimeout$1(Math.min(CPe(r.retryAfterMs),n-Date.now()),void 0,{signal:o}),!(Date.now()>=n));)r=await this.retrySessionRequest(()=>this.requestSession(`/${r.session.id}`,"session status",{signal:o}),n,o);return r.session}async retrySessionRequest(t,n,o){for(;;)try{return await t()}catch(r){if(o?.throwIfAborted(),!s_t(r)||Date.now()>=n)throw r;let i=r instanceof cx?r.retryAfterMs:P3;await setTimeout$1(Math.min(CPe(i),n-Date.now()),void 0,{signal:o});}}async deleteSession(t,n){if(!this.authorization)throw new Error("Browser Fleet session API key is not configured");let o=await fetch(`${this.baseUrl}/v1/sessions/${t}`,{headers:{Authorization:this.authorization},method:"DELETE",signal:this.requestSignal(n)});if(!o.ok)throw new Error(`Browser fleet session deletion failed with status ${o.status}`)}async reconcilePrivateConnector({connectorId:t,desiredState:n,principalId:o,signal:r}){return wPe.parse(await this.requestControl(t,"",{body:JSON.stringify(APe.parse(n)),headers:{"Content-Type":"application/json",...o?{"X-Browser-Fleet-Principal-Id":I3.parse(o)}:{}},method:"PUT",signal:r}))}async getPrivateConnector(t,n){return wPe.parse(await this.requestControl(t,"",{signal:n}))}async createPrivateConnectorEnrollment({connectorId:t,publicKey:n,signal:o}){return i_t.parse(await this.requestControl(t,"/enrollment-credentials",{body:JSON.stringify({publicKey:n}),headers:{"Content-Type":"application/json"},method:"POST",signal:o})).encryptedEnrollmentCredential}async deletePrivateConnector(t,n){await this.requestControl(t,"",{method:"DELETE",signal:n},true);}async requestSession(t,n,o={}){if(!this.authorization)throw new Error("Browser Fleet session API key is not configured");let r;try{r=await fetch(`${this.baseUrl}/v1/sessions${t}`,{...o,headers:{Authorization:this.authorization,...o.headers},signal:this.requestSignal(o.signal)});}catch(l){throw o.signal?.aborted?l:new ux(n,{cause:l})}let i=a_t(r.headers.get("Retry-After"));if(!r.ok)throw new cx(n,r.status,i);let s;try{s=await r.json();}catch(l){throw o.signal?.aborted?l:new ux(n,{cause:l})}let a=IPe.safeParse(s);if(a.success)return {retryAfterMs:i,session:a.data};throw new lx(r_t.safeParse(s).data?.id)}async requestControl(t,n,o,r=false){if(!this.controlAuthorization)throw new Error("Browser Fleet control API key is not configured");let i=w3.parse(t),s=await fetch(`${this.baseUrl}/v1/private-connectors/${encodeURIComponent(i)}${n}`,{...o,headers:{Authorization:this.controlAuthorization,...o.headers},signal:this.requestSignal(o.signal)});if(!s.ok){let a=await _3(s).catch(()=>{}),l=typeof a=="object"&&a!==null&&"code"in a&&typeof a.code=="string"?a.code:"FLEET_CONTROL_ERROR";throw new O3(l,s.status)}return r?void 0:_3(s)}requestSignal(t){if(!this.requestTimeoutMs)return t??void 0;let n=AbortSignal.timeout(this.requestTimeoutMs);return t?AbortSignal.any([t,n]):n}},cx=class extends Error{constructor(n,o,r){super(`Browser fleet ${n} failed with status ${o}`);this.status=o;this.retryAfterMs=r;}},ux=class extends Error{constructor(t,n){super(`Browser fleet ${t} request failed`,n);}};function s_t(e){return e instanceof ux||e instanceof cx&&(e.status===408||e.status===429||e.status>=500)}function a_t(e){if(!e)return P3;let t=Number(e);if(Number.isFinite(t)&&t>=0)return t*1e3;let n=Date.parse(e);return Number.isNaN(n)?P3:Math.max(0,n-Date.now())}function CPe(e){return e+Math.random()*Math.min(t_t,e/4)}var O3=class extends Error{constructor(n,o){super(`Browser Fleet control request failed (${n}, ${o})`);this.code=n;this.status=o;}};async function _3(e){let t=Number(e.headers.get("Content-Length"));if(Number.isFinite(t)&&t>RPe)throw new Error("Browser Fleet response is too large");if(!e.body)return;let n=e.body.getReader(),o=[],r=0;for(let a=await n.read();!a.done;a=await n.read()){let{value:l}=a;if(r+=l.byteLength,r>RPe)throw await n.cancel(),new Error("Browser Fleet response is too large");o.push(l);}let i=new Uint8Array(r),s=0;for(let a of o)i.set(a,s),s+=a.byteLength;return JSON.parse(new TextDecoder().decode(i))}var lx=class extends Error{constructor(n){super("Browser fleet returned a malformed session response");this.sessionId=n;}};var xPe=new Set;function _Pe(e){return de({name:"cli.setup_browser_and_controller",attributes:{"momentic.remote_browser":e.localBrowserConfig.remoteBrowser===true},fn:async t=>{let n=await l_t(e);return t?.setAttribute("momentic.browser_execution_mode",n.controller.browser.executionMode),n}})}async function l_t({baseUrl:e,envName:t,devicePixelRatio:n,apiClient:o,test:r,storageClient:i,codeEvaluator:s,generator:a,orgId:l,variables:c,logger:u,customHeaders:d,testInputs:m,localBrowserConfig:p,aiSettings:h,visualDiffScreenshotStorage:g,tracer:f,runId:y,runAttemptId:S,runGroupId:b,browserTypeOverride:v,attemptedRemoteBrowserProviders:A,abortSignal:R}){let w={baseUrl:o.baseUrl,apiKey:o.apiKey,logger:fe,mode:o.mode,runner:o.runner},{controller:O,context:I}=await OI({baseUrl:e,envName:t,test:r,variables:c,logger:u,orgId:l,localBrowserConfig:p,aiSettings:h,customHeaders:d,codeEvaluator:s,storage:i,enricher:new ep(w,a),generator:a,visualDiffScreenshotStorage:g,devicePixelRatio:n,browserTypeOverride:v,callbacks:{onNetworkPage:_=>f.onNetworkPage(_),onNetworkLogs:_=>f.onNetworkLogs(_)},videoOptions:f.videoOutputPath?{videoOutputPath:f.videoOutputPath,onVideoPageChange:({videoName:_,timestamp:P})=>{f.setActiveVideo(_,P);}}:void 0,validateBrowserType:_=>{Ch(_)||(fe.warn({browserType:_,testName:r.name},"Browser required by test does not appear to be installed"),!xPe.has(_)&&(xPe.add(_),C.warn(`Browser ${_} does not appear to be installed. Run '${rh(_)}' if you hit launch errors.`)));},createRemoteBrowserConnection:p.remoteBrowser?async()=>{let _=Date.now(),P,N=A?.slice(-1),D=crypto.randomUUID(),k=async()=>{let H=await o.createRemoteBrowserConnection({attemptedProviders:N,envName:t,runAttemptId:S,runGroupId:b,runId:y,testId:r.id,testName:r.name});return P=H.provider,H.provider&&A?.push(H.provider),H};try{if(N?.includes("SELF_HOSTED"))return await k();let H=await o.tryCreateBrowserFleetAccessToken({allocationRequestId:D,envName:t,runAttemptId:S,runGroupId:b,runId:y,testId:r.id,testName:r.name},R);if(!H)return await k();P=H.provider,A?.push(H.provider);let J=await new iB({accessToken:H.accessToken,baseUrl:H.fleetApiUrl,requestTimeoutMs:15e3}).createReadySession({allocationTimeoutMs:9e4,idempotencyKey:D,network:H.network,signal:R,ttlSeconds:3600,waitTimeoutMs:1e4});return {accessToken:J.connectToken,endpointType:"PLAYWRIGHT",operatingSystem:"linux",provider:H.provider,wsEndpoint:J.wsEndpoint}}catch(H){throw R?.aborted?H:new Lc("Browser Fleet session allocation failed",{cause:H})}finally{dn.distribution("test_event_duration",Date.now()-_,["name:remote-browser-allocation",`provider:${P??"unknown"}`]);}}:void 0});try{await kI({orgId:l,test:r,testInputs:m,codeEvaluator:s,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 MI&&(C.error(_.message),process.exit(1)),_}return {controller:O,context:I}}function PPe({testAdvancedSettings:e,orgSettings:t,logger:n}){if(e.failureRecovery===false||e.failureRecovery===void 0&&!t?.failureRecovery)return false;if(!fl){let o="This test is ineligible for failure recovery since this does not appear to be a CI environment";return n.warn(o),C.debug(o),false}return true}async function OPe({attemptInputs:e,attemptFixtures:t,attemptMetadata:n,runFixtures:o,recordVideo:r,stepCallbacks:i}){let{orgId:s,userId:a,runId:l}=n,{runTracer:c,runGroupTracer:u,project:d,apiClient:m}=o,{controller:p,context:h,codeEvaluator:g,storageClient:f,cacheStorage:y,logger:S,usageTracker:b,tracer:v}=t,{test:A,orgSettings:R}=e;S.info(`Running test '${A.name}' locally (run link: https://app.momentic.ai/runs/${l})`);let w={controller:p,storage:f,cacheStorage:y,usageTracker:b,context:h,logger:S,codeEvaluator:g},O={orgId:s,userId:a,runId:l,testMetadata:A,steps:A.steps,beforeSteps:A.beforeSteps,afterSteps:A.afterSteps,orgSettings:R},I={collectDebugData:true,reinitializeBrowser:true,disableHealing:!await PPe({testAdvancedSettings:A.advanced,orgSettings:R.ai,logger:S})};return Rwe({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();}}},testParams:{attemptTracer:v},runParams:{runTracer:c,runGroupTracer:u,project:d,apiClient:m,captureEvent:rm,abortSignal:o.abortSignal}})}async function MPe(e){let{testDefinition:t,traceMetadata:n}=e;return de({name:"cli.test_run",newTrace:true,serviceName:"cli",attributes:{"momentic.org_id":e.orgId,"momentic.run_group_id":n.runGroupId,"momentic.run_id":e.runId,"momentic.test_id":t.id,"momentic.parallel":n.parallel,"momentic.worker_count":n.workerCount,"momentic.worker_index":n.workerIndex,"momentic.remote_browser_run":n.remoteBrowser},fn:async o=>{let r=await d_t(e);return o?.setAttributes({"momentic.test_status":r.status,"momentic.test_attempts":r.attempts}),r}})}async function d_t(e){let{testDefinition:t,logger:n}=e,o=new Date;try{return await m_t(e)}catch(r){wh(r);let{customHeaders:i,envName:s,testInputs:a,urlOverride:l}=e,c={customHeaders:i,envName:s,testInputs:a,urlOverride:l},u="Fatal error running test";return n.error({err:r},u),C.error({err:r},u),kPe({err:oi(r),parameters:c,test:t,failureReason:oe.reasonFor(r,"UnknownError"),startedAt:o,lastAttemptStartedAt:o,attempts:0,quarantined:e.quarantined,quarantinedMetadata:e.quarantinedMetadata})}}async function m_t(e){let{testDefinition:t,snapshot:n,project:o,apiClient:r,orgId:i,userId:s,urlOverride:a,runGroupTracer:l,logger:c,gitMetadata:u,cacheOptions:d,runId:m,testInputs:p,quarantined:h,quarantinedMetadata:g,usageTracker:f}=e,y=n?{...o.config,...n.metadata.config}:o.config,S=new VT(r,i),b=op({logger:c,orgId:i,client:r,gitMetadata:u,regenerateCache:d.regenerateCache,alwaysSaveCache:d.alwaysSaveCache,noCache:n?true:d.noCache,isolateCachesByEnvironment:o.config?.advanced?.isolateCachesByEnvironment,bustOldestCachePercentage:d.bustOldestCachePercentage}),v,A,R;n?(v={envName:n.metadata.environment.envName,resolvedEnv:n.metadata.environment.resolvedEnv,environmentVariables:{...n.metadata.environment.variables},baseUrl:n.metadata.environment.baseUrl},A={steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps}):(v=yy({test:t,envNameOverride:e.envName,urlOverride:a,resolveEnv:M=>gc(M,o,c)}),{stepListsWithCaches:A,restoredStepLists:R}=await uc({cacheStorage:b,logger:c,schemaVersion:t.schemaVersion,stepLists:{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,environment:v.envName,useSnapshotIdentityCache:o.config.fileFormat==="v2"}));let{envName:w,resolvedEnv:O,environmentVariables:I,baseUrl:_}=v,P=A.steps,N=A.beforeSteps??void 0,D=A.afterSteps??void 0,k=ow(t),H=k||(e.recordVideo??false);k&&e.recordVideo!==true&&c.info("Enabling video recording because the test defines run assertions");let J=await l.startRun({logger:c,runId:m,originalSteps:R??{steps:t.steps,beforeSteps:t.beforeSteps,afterSteps:t.afterSteps},testId:t.id,testName:t.name,directory:dirname(t.relativeFilePath),testDescription:t.description??void 0,testLabels:t.labels,baseUrl:_,environmentName:w,schemaVersion:t.schemaVersion,testBundleHash:t.testBundleHash,resolvedInputs:p,quarantined:h,quarantinedReason:g?.quarantinedReason,aiSettings:y.ai,recordVideoOverride:k?true:void 0}),W=c.child(J.loggerBindings||{});Object.entries(J.envVarBindings||{}).forEach(([M,X])=>{I[M]=X;});let V=await h_t({...e,recordVideo:H,effectiveConfig:y,variables:I,envName:w,resolvedEnv:O,baseUrl:_,storageClient:S,tracer:J,runGroupTracer:l,logger:W,cacheStorage:b,stepsWithCaches:P,beforeStepsWithCaches:N,afterStepsWithCaches:D,usageTracker:f});return await J.finish({logger:c,status:V.status,finishedAt:V.finishedAt,failureDetails:V.failureDetails,failureReason:V.failureReason,isFlake:V.isFlake,failureRecoveryDetails:V.failureRecoveryDetails,runAssertionResults:V.runAssertionResults}),p_t({apiClient:r,classificationEnabled:y.ai?.classification?.enabled===true,runId:m,environment:w,status:V.status,logger:W}),{runId:J.runId,...V}}function p_t({apiClient:e,classificationEnabled:t,runId:n,environment:o,status:r,logger:i}){if(!t||r!=="PASSED"&&r!=="FAILED")return;let s=e.recordRunOutcomeForFailureRate({runId:n,environment:o,status:r==="PASSED"?"PASSED":"FAILED"}).catch(a=>{i.debug({err:a,runId:n},"Failed to report run outcome for failure rate");});aPe(s);}async function h_t(e){let{testDefinition:t,effectiveConfig:n,stepsWithCaches:o,beforeStepsWithCaches:r,afterStepsWithCaches:i,project:s,regenerateGoldenFiles:a,apiClient:l,generator:c,baseUrl:u,storageClient:d,orgId:m,userId:p,envName:h,urlOverride:g,customHeaders:f,testInputs:y,variables:S,resolvedEnv:b,retriesOverride:v,devicePixelRatio:A,logUpdate:R,tracer:w,runGroupTracer:O,logger:I,cacheStorage:_,gitMetadata:P,quarantined:N,quarantinedMetadata:D,usageTracker:k}=e,H=n,J=H.ai?.aiFailureAnalysis??false,W=new Date,V=new KT(s,l,a),M={envName:h,urlOverride:g,customHeaders:f,testInputs:y},X={...H.browser||{},...b?.browser||{},...t.advanced||{},...e.remoteBrowserOverride?{remoteBrowser:true}:{}},$=X.remoteBrowser===true,G=[],ne,ie=Math.abs(v??t.retries??n.retries??1),Pe=[],Ne=[];I.info({...P,labels:t.labels,name:t.name,cwd:process.cwd()},"Starting test run using CLI");for(let Fe=0;Fe<=ie;Fe++){let it=randomUUID(),ee=await w.startAttempt(it),Z=I.child(ee.loggerBindings||{}),be={...t,steps:cloneDeep(o),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)};Fe!==0&&R("RETRY",`attempt ${Fe+1}/${ie+1}`);let bt=new Date,Ke=Gy({tools:new np({httpClient:new ua({baseUrl:l.baseUrl,apiKey:l.apiKey,logger:Z,mode:l.mode,runner:l.runner}),fakerSeed:H.advanced?.fakerConstantSeed?Dw:void 0})}),we;try{let{controller:ct,context:kt}=await _Pe({tracer:ee,runId:w.runId,runAttemptId:it,runGroupId:e.traceMetadata.runGroupId,baseUrl:u,envName:h,apiClient:l,devicePixelRatio:A,logger:Z,storageClient:d,codeEvaluator:Ke,test:be,generator:c,orgId:m,variables:S,customHeaders:f,testInputs:y,localBrowserConfig:X,browserTypeOverride:e.browserTypeOverride,attemptedRemoteBrowserProviders:G,abortSignal:e.abortSignal,aiSettings:{...H.ai||{},...be.advanced||{}},visualDiffScreenshotStorage:V});e.abortSignal&&(e.abortSignal.aborted?ct.executeAbortController.abort():(we=()=>{ct.executeAbortController.abort();},e.abortSignal.addEventListener("abort",we,{once:!0}))),ne=await OPe({attemptMetadata:{attemptNumber:Fe+1,orgId:m,userId:p,runId:w.runId},attemptFixtures:{logger:Z,storageClient:d,cacheStorage:_,usageTracker:k,codeEvaluator:Ke,context:kt,controller:ct,tracer:ee},attemptInputs:{test:be,orgSettings:H},runFixtures:{runTracer:w,runGroupTracer:O,project:s,apiClient:l,abortSignal:e.abortSignal},recordVideo:e.recordVideo??!1,stepCallbacks:{onStepStart:e.onStepStart,onStepEnd:e.onStepEnd,onSectionStart:e.onSectionStart}});let An=new Date,et={logger:I,cacheStorage:_,orgId:m,testId:t.id,environment:h,originalStepsWithCaches:{steps:cloneDeep(o),beforeSteps:cloneDeep(r),afterSteps:cloneDeep(i)},updatedStepsWithCaches:{steps:be.steps,beforeSteps:be.beforeSteps,afterSteps:be.afterSteps}};await zf({logger:I,cacheStorage:_,orgId:m,testId:t.id,environment:h,stepLists:et.updatedStepsWithCaches,useSnapshotIdentityCache:s.config.fileFormat==="v2"}),ne?.status==="PASSED"||ne?.status==="CANCELLED"&&n.advanced?.saveCacheOnCancel?await Vf(et):ne?.status==="FAILED"&&Fe===ie&&await sT(et),await ee.finish({logger:Z,result:ne});let Qe;if(ne.status==="PASSED"&&ow(t)){e.onStepStart?.(eQ);let It=await ove({runAssertions:t.runAssertions??[],orgId:m,project:s,generator:c,apiClient:l,runTracer:w,runGroupTracer:O,logger:Z,testPlatform:"web",captureEvent:rm,abortSignal:e.abortSignal});An=new Date,It&&(Ne.push(It),Qe=tQ(It.evaluations));}let Wt=Ne.length>0?{attempts:Ne}:void 0;Pe.unshift(Qe!==void 0?"FAILED":ne.status);let Qn=await fPe({orgId:m,codeEvaluator:Ke,logger:Z,outputDefinitions:t.outputs??[],testContext:kt}),ro=iQ(Pe),rl=Fe+1;if(ne.status!=="FAILED"&&Qe===void 0)return {...ne,runAttemptId:it,parameters:M,test:be,filePath:be.relativeFilePath,startedAt:W,lastAttemptStartedAt:bt,finishedAt:An,attempts:rl,baseUrl:u,outputs:Qn,isFlake:ro,runAssertionResults:Wt,quarantined:N,quarantinedMetadata:D,usedRemoteBrowser:$};let Bl=ne.failedStepResult,Hi=Qe??(Bl?.message||"Unknown failure"),ls=Qe?"AssertionFailureError":Bl?.failureReason??e_(Hi)??"UnknownError",ir=Z.child({failureReason:ls,errorMessage:Hi,numAttempts:(ie+1).toString(),name:be.name});if(Fe<ie){ir.warn(`Retrying failed execution attempt for run: ${Hi}`);continue}ir.error({usedRemoteBrowser:$},`Test failed after all exhausting attempts: ${Hi}`);let U=new Error(Hi),ve={errorMessage:Hi,errorStack:U.stack},ft;if(H.ai?.classification?.enabled===!0){let It=Bl?.failureClassification;It||(e.onStepStart?.(dm),It=await cF({runTracer:w,runGroupTracer:O,outputDir:e.outputDir,orgId:m,project:s,generator:c,apiClient:l,logger:I,testPlatform:"web",aiSettings:H.ai,captureEvent:rm,abortSignal:e.abortSignal,failedStepMessage:Qe??Bl?.message,runAssertionResults:Wt})),It&&(ft=It.classification.category,ls=It.classification.category,ve.classification={reason:It.classification.category,secondaryCategories:It.classification.secondaryCategories,summary:It.classification.reasoning,recoverable:It.classification.recoverable,confidence:It.classification.confidence,action:It.action,citations:It.classification.citations,cache:It.classification.cache,source:"v2"});}else if(J){let It;try{if(ne.results&&ne.results.length>0){e.onStepStart?.(dm);let{classification:en,aiFailureReason:lm}=await Gre({logger:Z,browserStateStorage:ee,generator:c,fullResults:ne,failureReason:ls,error:U,maxItemsFromEnd:void 0,numStepsWithScreenshots:void 0,disableCache:!1});It=en,ft=lm;}}catch(en){Z.warn({err:en},"Failed to classify test results");}It&&(ve.classification=It,ls=ft??ls,ve.classification.source="v1");}return {...ne,status:"FAILED",runAttemptId:it,parameters:M,failureDetails:ve,failureReason:ls,test:be,filePath:be.relativeFilePath,startedAt:W,lastAttemptStartedAt:bt,finishedAt:An,attempts:Fe+1,baseUrl:u,outputs:Qn,runAssertionResults:Wt,quarantined:N,quarantinedMetadata:D,usedRemoteBrowser:$}}catch(ct){let kt=`Encountered fatal platform error while running test '${be.name}'`;return Z.error({err:ct},kt),C.error({err:ct},kt),await ee.finish({logger:Z,result:{status:"FAILED"}}),kPe({err:oi(ct),parameters:M,test:be,failureReason:oe.reasonFor(ct,"InternalPlatformError"),startedAt:W,lastAttemptStartedAt:bt,attempts:Fe+1,quarantined:N,quarantinedMetadata:D,runAttemptId:it,baseUrl:u,usedRemoteBrowser:$})}finally{we&&e.abortSignal?.removeEventListener("abort",we);}}throw new Error("This code should not be reachable")}function kPe({err:e,parameters:t,test:n,failureReason:o,startedAt:r,lastAttemptStartedAt:i,attempts:s,quarantined:a,quarantinedMetadata:l,runAttemptId:c,baseUrl:u,usedRemoteBrowser:d}){return {status:"FAILED",results:[],parameters:t,test:n,filePath:n.relativeFilePath,failureReason:o,failureDetails:{errorMessage:e.message,errorStack:e.stack},startedAt:r,lastAttemptStartedAt:i,finishedAt:new Date,attempts:s,outputs:{},quarantined:a,quarantinedMetadata:l,runAttemptId:c,baseUrl:u,usedRemoteBrowser:d}}var LPe=3e4;async function FE({timeoutMinutes:e,cancel:t,run:n}){let o=()=>void t("SIGINT received"),r=()=>void t("SIGTERM received");LE(),process.once("SIGINT",o),process.once("SIGTERM",r);let i;e!==void 0&&e>0&&(i=setTimeout(()=>void t(`Timeout of ${e} minute(s) reached`),e*60*1e3));try{return await n()}finally{process.off("SIGINT",o),process.off("SIGTERM",r),clearTimeout(i);}}var DE=class{constructor(t){this.params=t;}runQueue={};runResults=[];cancelledRunsById=new Map;cancelled=false;cancellationReason;async cancel(t,n=true){if(this.cancelled)return;this.cancelled=true,this.cancellationReason=t;for(let r of Object.values(this.runQueue))r.done||r.abortController.abort();n&&await ge(Promise.allSettled(Object.values(this.runQueue).map(r=>r.promise)),{milliseconds:LPe}).catch(()=>{this.params.runGroupLogger.warn(`Graceful shutdown timeout of ${LPe}ms reached while waiting for running tests to settle.`);});let o=new Set(this.runResults.map(r=>r.runId).filter(r=>!!r));for(let r of Object.values(this.runQueue)){if(r.done||o.has(r.activeRun.runId))continue;let{activeRun:i}=r,s={results:[],beforeResults:[],afterResults:[],test:i.testDefinition,filePath:i.testDefinition.relativeFilePath,startedAt:i.startedAt,lastAttemptStartedAt:i.startedAt,finishedAt:new Date,status:"CANCELLED",attempts:0,runId:i.runId,cancellationReason:t,quarantined:i.quarantined,quarantinedMetadata:i.quarantinedMetadata,parameters:{testInputs:i.inputs,envName:this.params.envName,urlOverride:this.params.urlOverride,customHeaders:this.params.customHeaders},outputs:{}};this.cancelledRunsById.set(i.runId,s);}}resolveNext(){if(this.params.next)return this.params.next;let t=[...this.params.testsToRun??[]];return ()=>Promise.resolve(t.shift())}async run(){let t=this.resolveNext(),{parallel:n,reporter:o,runGroupTracer:r,runGroupLogger:i,logger:s,project:a,client:l,generator:c,orgId:u,userId:d,devicePixelRatio:m,outputDir:p,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:S,gitMetadata:b,cacheOptions:v,browserTypeOverride:A,remoteBrowserOverride:R,onResult:w,onFatal:O}=this.params,I=0,_=true;for(;_;){let P=Object.values(this.runQueue);if(P.length===n&&await Promise.race(P.map(J=>J.promise)),this.cancelled){_=false;continue}let N=await t();if(N===void 0){_=false;continue}let D=`test-${I++}`,k={...N,startedAt:new Date},H=new AbortController;this.runQueue[D]={done:false,activeRun:k,abortController:H,promise:(async({inputs:J,quarantined:W,quarantinedMetadata:V,testDefinition:M,snapshot:X,runId:$})=>{let G=M.relativeFilePath.includes("..")?M.fullFilePath:M.relativeFilePath;o.onTestBegin(G);let ne=i.child({testId:M.id,runId:$}),ie=new Gm({logger:ne,reporter:new Qm(l),runType:"test-run",platform:"WEB",runId:$,runGroupId:r.runGroupMetadata.id,envName:f,testMetadata:M,suiteMetadata:void 0,runner:"test-runner"});try{let Pe=await MPe({testDefinition:M,snapshot:X,project:a,testInputs:J,quarantined:W,quarantinedMetadata:V,orgId:u,userId:d,runId:$,devicePixelRatio:m,apiClient:l,runGroupTracer:r,outputDir:p,generator:c,retriesOverride:h,urlOverride:g,envName:f,customHeaders:y,regenerateGoldenFiles:S,logUpdate:(Ne,Fe)=>o.onTestStatus(G,Ne,Fe),...upe(o,G),logger:ne,gitMetadata:b,cacheOptions:v,usageTracker:ie,browserTypeOverride:A,remoteBrowserOverride:R,recordVideo:this.params.recordVideo,abortSignal:H.signal,traceMetadata:this.params.traceMetadata});o.onTestEnd(G,Pe.status,{recovered:Pe.status==="PASSED"&&!!Pe.failureRecoveryDetails?.attempts}),this.runResults.push(Pe),w?.(Pe);}catch(Pe){let Ne=`Encountered unexpected fatal error when running test '${M.name}'`;ne.error({err:Pe},Ne),C.error({err:Pe},Ne),wh(Pe),O?.(Pe),await this.cancel("Fatal error occurred",false);}finally{let Pe=this.runQueue[D];Pe&&(Pe.done=true),await ie.flush(s),delete this.runQueue[D];}})(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 sB(e){return createHash("sha1").update(e).digest("hex")}var f_t=["tab","view","mode","step"],y_t=[/^[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 S_t(e){return y_t.some(t=>t.test(e))}function NPe(e,t={}){let n;try{n=new URL(e);}catch{return e}let o=new Set(t.queryAllowlist??f_t),i=n.pathname.split("/").map(c=>c.length>0&&S_t(c)?"{id}":c).join("/"),s=[],a=Array.from(n.searchParams.keys()).sort();for(let c of a){if(!o.has(c))continue;let u=n.searchParams.getAll(c).sort();for(let d of u)s.push(`${encodeURIComponent(c)}=${encodeURIComponent(d)}`);}let l=s.length>0?`?${s.join("&")}`:"";return `${n.protocol}//${n.host}${i}${l}`}var M3=new Set(["id","name","role","type","href","for","placeholder","aria-label","data-testid"]),b_t=/^[A-Za-z0-9_-]{16,256}$|^:r[0-9a-z]{1,32}:$/,T_t=[/\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],DPe=new Set(["h1","h2","h3","h4","h5","h6"]),A_t=new Set(["input","select","textarea"]);function E_t(e){let t=e;for(let n of T_t)t=t.replace(n,"{id}");return t}function FPe(e){return E_t(e).toLowerCase().replace(/\s+/g," ").trim().replace(/[.,:;!?]+$/u,"").replace(/\s*\d+\s*$/u,"").trim()}function v_t(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 w_t(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":b_t.test(t)?"@gen":FPe(t)}function BPe(e,t,n){let o=e.tag.toLowerCase(),r=(e.role??e.attributes?.role)?.toLowerCase(),i=Math.min(Math.floor(t/4),6),s=`<${o}@${i}`;if(r!==void 0&&(s+=` role=${r}`),e.attributes!==void 0){let l=Object.keys(e.attributes).filter(c=>M3.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=w_t(u,d);s+=` ${u}=${m}`;}}n.tokens.push(s);let a=e.text?.trim();a!==void 0&&a.length>0&&(r==="button"||r==="link"||r==="heading"||o==="button"||o==="a"||o==="label"||DPe.has(o)?n.tokens.push(`label=${FPe(a)}`):n.tokens.push(v_t(a))),(o==="button"||r==="button")&&(n.counts.buttons+=1),(o==="a"||r==="link")&&(n.counts.links+=1),(A_t.has(o)||r==="textbox"||r==="combobox")&&(n.counts.formFields+=1),(DPe.has(o)||r==="heading")&&(n.counts.headings+=1);for(let l of e.children??[])BPe(l,t+1,n);}function UPe(e){let t={tokens:[],counts:{buttons:0,links:0,formFields:0,headings:0}};return BPe(e,0,t),{tokens:t.tokens,counts:t.counts}}function HPe(e,t){let n=new TextEncoder().encode(e),o=n.length,r=Math.floor(o/4),i=t>>>0,s=3432918353,a=461845907;for(let d=0;d<r;d++){let m=d*4,p=n[m]|n[m+1]<<8|n[m+2]<<16|n[m+3]<<24;p=Math.imul(p,s),p=p<<15|p>>>17,p=Math.imul(p,a),i^=p,i=i<<13|i>>>19,i=Math.imul(i,5)+3864292196;}let l=0,c=o&3,u=r*4;return c===3&&(l^=n[u+2]<<16),c>=2&&(l^=n[u+1]<<8),c>=1&&(l^=n[u],l=Math.imul(l,s),l=l<<15|l>>>17,l=Math.imul(l,a),i^=l),i^=o,i^=i>>>16,i=Math.imul(i,2246822507),i^=i>>>13,i=Math.imul(i,3266489909),i^=i>>>16,i>>>0}var aB=128,R_t=4294967295,C_t=(()=>{let e=[];for(let t=0;t<aB;t++)e.push(HPe(`perm:${t}`,0));return e})();function jPe(e){let t=new Uint32Array(aB);for(let o=0;o<aB;o++)t[o]=R_t;let n=new Set(e);for(let o of n)for(let r=0;r<aB;r++){let i=HPe(o,C_t[r]);i<t[r]&&(t[r]=i);}return t}var x_t=32;function lB(e){let t=NPe(e.url,{queryAllowlist:e.queryAllowlist}),{tokens:n,counts:o}=UPe(e.dom),r=[`url:${t}`,`counts:buttons=${o.buttons}`,`counts:links=${o.links}`,`counts:formFields=${o.formFields}`,`counts:headings=${o.headings}`,...n],i=jPe(r),s=Buffer.from(i.buffer,i.byteOffset,i.byteLength);return {fingerprintHash:createHash$1("sha256").update(s).digest("hex").slice(0,x_t),minhash:Array.from(i),canonicalUrl:t}}var __t=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]),Go="\uFFFD",F;(function(e){e[e.EOF=-1]="EOF",e[e.NULL=0]="NULL",e[e.TABULATION=9]="TABULATION",e[e.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",e[e.LINE_FEED=10]="LINE_FEED",e[e.FORM_FEED=12]="FORM_FEED",e[e.SPACE=32]="SPACE",e[e.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",e[e.QUOTATION_MARK=34]="QUOTATION_MARK",e[e.AMPERSAND=38]="AMPERSAND",e[e.APOSTROPHE=39]="APOSTROPHE",e[e.HYPHEN_MINUS=45]="HYPHEN_MINUS",e[e.SOLIDUS=47]="SOLIDUS",e[e.DIGIT_0=48]="DIGIT_0",e[e.DIGIT_9=57]="DIGIT_9",e[e.SEMICOLON=59]="SEMICOLON",e[e.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",e[e.EQUALS_SIGN=61]="EQUALS_SIGN",e[e.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",e[e.QUESTION_MARK=63]="QUESTION_MARK",e[e.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",e[e.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",e[e.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",e[e.GRAVE_ACCENT=96]="GRAVE_ACCENT",e[e.LATIN_SMALL_A=97]="LATIN_SMALL_A",e[e.LATIN_SMALL_Z=122]="LATIN_SMALL_Z";})(F||(F={}));var va={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function cB(e){return e>=55296&&e<=57343}function $Pe(e){return e>=56320&&e<=57343}function GPe(e,t){return (e-55296)*1024+9216+t}function uB(e){return e!==32&&e!==10&&e!==13&&e!==9&&e!==12&&e>=1&&e<=31||e>=127&&e<=159}function dB(e){return e>=64976&&e<=65007||__t.has(e)}var he;(function(e){e.controlCharacterInInputStream="control-character-in-input-stream",e.noncharacterInInputStream="noncharacter-in-input-stream",e.surrogateInInputStream="surrogate-in-input-stream",e.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",e.endTagWithAttributes="end-tag-with-attributes",e.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",e.unexpectedSolidusInTag="unexpected-solidus-in-tag",e.unexpectedNullCharacter="unexpected-null-character",e.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",e.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",e.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",e.missingEndTagName="missing-end-tag-name",e.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",e.unknownNamedCharacterReference="unknown-named-character-reference",e.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",e.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",e.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",e.eofBeforeTagName="eof-before-tag-name",e.eofInTag="eof-in-tag",e.missingAttributeValue="missing-attribute-value",e.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",e.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",e.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",e.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",e.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",e.missingDoctypePublicIdentifier="missing-doctype-public-identifier",e.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",e.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",e.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",e.cdataInHtmlContent="cdata-in-html-content",e.incorrectlyOpenedComment="incorrectly-opened-comment",e.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",e.eofInDoctype="eof-in-doctype",e.nestedComment="nested-comment",e.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",e.eofInComment="eof-in-comment",e.incorrectlyClosedComment="incorrectly-closed-comment",e.eofInCdata="eof-in-cdata",e.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",e.nullCharacterReference="null-character-reference",e.surrogateCharacterReference="surrogate-character-reference",e.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",e.controlCharacterReference="control-character-reference",e.noncharacterCharacterReference="noncharacter-character-reference",e.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",e.missingDoctypeName="missing-doctype-name",e.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",e.duplicateAttribute="duplicate-attribute",e.nonConformingDoctype="non-conforming-doctype",e.missingDoctype="missing-doctype",e.misplacedDoctype="misplaced-doctype",e.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",e.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",e.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",e.openElementsLeftAfterEof="open-elements-left-after-eof",e.abandonedHeadElementChild="abandoned-head-element-child",e.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",e.nestedNoscriptInHead="nested-noscript-in-head",e.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text";})(he||(he={}));var O_t=65536,mB=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=O_t,this.isEol=false,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1;}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(t,n){let{line:o,col:r,offset:i}=this,s=r+n,a=i+n;return {code:t,startLine:o,endLine:o,startCol:s,endCol:s,startOffset:a,endOffset:a}}_err(t){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(t,0)));}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos;}_processSurrogate(t){if(this.pos!==this.html.length-1){let n=this.html.charCodeAt(this.pos+1);if($Pe(n))return this.pos++,this._addGap(),GPe(t,n)}else if(!this.lastChunkWritten)return this.endOfChunkHit=true,F.EOF;return this._err(he.surrogateInInputStream),t}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0);}write(t,n){this.html.length>0?this.html+=t:this.html=t,this.endOfChunkHit=false,this.lastChunkWritten=n;}insertHtmlAtCurrentPos(t){this.html=this.html.substring(0,this.pos+1)+t+this.html.substring(this.pos+1),this.endOfChunkHit=false;}startsWith(t,n){if(this.pos+t.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,false;if(n)return this.html.startsWith(t,this.pos);for(let o=0;o<t.length;o++)if((this.html.charCodeAt(this.pos+o)|32)!==t.charCodeAt(o))return false;return true}peek(t){let n=this.pos+t;if(n>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,F.EOF;let o=this.html.charCodeAt(n);return o===F.CARRIAGE_RETURN?F.LINE_FEED:o}advance(){if(this.pos++,this.isEol&&(this.isEol=false,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,F.EOF;let t=this.html.charCodeAt(this.pos);return t===F.CARRIAGE_RETURN?(this.isEol=true,this.skipNextNewLine=true,F.LINE_FEED):t===F.LINE_FEED&&(this.isEol=true,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=false,this._addGap(),this.advance()):(this.skipNextNewLine=false,cB(t)&&(t=this._processSurrogate(t)),this.handler.onParseError===null||t>31&&t<127||t===F.LINE_FEED||t===F.CARRIAGE_RETURN||t>159&&t<64976||this._checkForProblematicCharacters(t),t)}_checkForProblematicCharacters(t){uB(t)?this._err(he.controlCharacterInInputStream):dB(t)&&this._err(he.noncharacterInInputStream);}retreat(t){for(this.pos-=t;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=false;}};var kn;(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";})(kn||(kn={}));function pB(e,t){for(let n=e.attrs.length-1;n>=0;n--)if(e.attrs[n].name===t)return e.attrs[n].value;return null}var k_t=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 zPe(e){return e>=55296&&e<=57343||e>1114111?65533:k_t.get(e)??e}function VPe(e){let t=atob(e),n=t.length&-2,o=new Uint16Array(n/2);for(let r=0,i=0;r<n;r+=2){let s=t.charCodeAt(r),a=t.charCodeAt(r+1);o[i++]=s|a<<8;}return o}var k3=VPe("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 Ds;(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";})(Ds||(Ds={}));var pr;(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";})(pr||(pr={}));var WPe=32;function L3(e){return e>=pr.ZERO&&e<=pr.NINE}function L_t(e){return e>=pr.UPPER_A&&e<=pr.UPPER_F||e>=pr.LOWER_A&&e<=pr.LOWER_F}function N_t(e){return e>=pr.UPPER_A&&e<=pr.UPPER_Z||e>=pr.LOWER_A&&e<=pr.LOWER_Z||L3(e)}function D_t(e){return e===pr.EQUALS||N_t(e)}var Ui;(function(e){e[e.EntityStart=0]="EntityStart",e[e.NumericStart=1]="NumericStart",e[e.NumericDecimal=2]="NumericDecimal",e[e.NumericHex=3]="NumericHex",e[e.NamedEntity=4]="NamedEntity";})(Ui||(Ui={}));var im;(function(e){e[e.Legacy=0]="Legacy",e[e.Strict=1]="Strict",e[e.Attribute=2]="Attribute";})(im||(im={}));var hB=class{decodeTree;emitCodePoint;errors;constructor(t,n,o){this.decodeTree=t,this.emitCodePoint=n,this.errors=o;}state=Ui.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=im.Strict;runConsumed=0;startEntity(t){this.decodeMode=t,this.state=Ui.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0;}write(t,n){switch(this.state){case Ui.EntityStart:return t.charCodeAt(n)===pr.NUM?(this.state=Ui.NumericStart,this.consumed+=1,this.stateNumericStart(t,n+1)):(this.state=Ui.NamedEntity,this.stateNamedEntity(t,n));case Ui.NumericStart:return this.stateNumericStart(t,n);case Ui.NumericDecimal:return this.stateNumericDecimal(t,n);case Ui.NumericHex:return this.stateNumericHex(t,n);case Ui.NamedEntity:return this.stateNamedEntity(t,n)}}stateNumericStart(t,n){return n>=t.length?-1:(t.charCodeAt(n)|WPe)===pr.LOWER_X?(this.state=Ui.NumericHex,this.consumed+=1,this.stateNumericHex(t,n+1)):(this.state=Ui.NumericDecimal,this.stateNumericDecimal(t,n))}stateNumericHex(t,n){for(;n<t.length;){let o=t.charCodeAt(n);if(L3(o)||L_t(o)){let r=o<=pr.NINE?o-pr.ZERO:(o|WPe)-pr.LOWER_A+10;this.result=this.result*16+r,this.consumed++,n++;}else return this.emitNumericEntity(o,3)}return -1}stateNumericDecimal(t,n){for(;n<t.length;){let o=t.charCodeAt(n);if(L3(o))this.result=this.result*10+(o-pr.ZERO),this.consumed++,n++;else return this.emitNumericEntity(o,2)}return -1}emitNumericEntity(t,n){if(this.consumed<=n)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(t===pr.SEMI)this.consumed+=1;else if(this.decodeMode===im.Strict)return 0;return this.emitCodePoint(zPe(this.result),this.consumed),this.errors&&(t!==pr.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(t,n){let{decodeTree:o}=this,r=o[this.treeIndex],i=(r&Ds.VALUE_LENGTH)>>14;for(;n<t.length;){if(i===0&&r&Ds.FLAG13){let a=(r&Ds.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let l=r&Ds.JUMP_TABLE;if(t.charCodeAt(n)!==l)return this.result===0?0:this.emitNotTerminatedNamedEntity();n++,this.excess++,this.runConsumed++;}for(;this.runConsumed<a;){if(n>=t.length)return -1;let l=this.runConsumed-1,c=o[this.treeIndex+1+(l>>1)],u=l%2===0?c&255:c>>8&255;if(t.charCodeAt(n)!==u)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();n++,this.excess++,this.runConsumed++;}this.runConsumed=0,this.treeIndex+=1+(a>>1),r=o[this.treeIndex],i=(r&Ds.VALUE_LENGTH)>>14;}if(n>=t.length)break;let s=t.charCodeAt(n);if(s===pr.SEMI&&i!==0&&r&Ds.FLAG13)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);if(this.treeIndex=F_t(o,r,this.treeIndex+Math.max(1,i),s),this.treeIndex<0)return this.result===0||this.decodeMode===im.Attribute&&(i===0||D_t(s))?0:this.emitNotTerminatedNamedEntity();if(r=o[this.treeIndex],i=(r&Ds.VALUE_LENGTH)>>14,i!==0){if(s===pr.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==im.Strict&&!(r&Ds.FLAG13)&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0);}n++,this.excess++;}return -1}emitNotTerminatedNamedEntity(){let{result:t,decodeTree:n}=this,o=(n[t]&Ds.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,o,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(t,n,o){let{decodeTree:r}=this;return this.emitCodePoint(n===1?r[t]&~(Ds.VALUE_LENGTH|Ds.FLAG13):r[t+1],o),n===3&&this.emitCodePoint(r[t+2],o),o}end(){switch(this.state){case Ui.NamedEntity:return this.result!==0&&(this.decodeMode!==im.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case Ui.NumericDecimal:return this.emitNumericEntity(0,2);case Ui.NumericHex:return this.emitNumericEntity(0,3);case Ui.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case Ui.EntityStart:return 0}}};function F_t(e,t,n,o){let r=(t&Ds.BRANCH_LENGTH)>>7,i=t&Ds.JUMP_TABLE;if(r===0)return i!==0&&o===i?n:-1;if(i){let c=o-i;return c<0||c>=r?-1:e[n+c]-1}let s=r+1>>1,a=0,l=r-1;for(;a<=l;){let c=a+l>>>1,u=c>>1,m=e[n+u]>>(c&1)*8&255;if(m<o)a=c+1;else if(m>o)l=c-1;else return e[n+s+c]}return -1}var Ie;(function(e){e.HTML="http://www.w3.org/1999/xhtml",e.MATHML="http://www.w3.org/1998/Math/MathML",e.SVG="http://www.w3.org/2000/svg",e.XLINK="http://www.w3.org/1999/xlink",e.XML="http://www.w3.org/XML/1998/namespace",e.XMLNS="http://www.w3.org/2000/xmlns/";})(Ie||(Ie={}));var Up;(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";})(Up||(Up={}));var wa;(function(e){e.NO_QUIRKS="no-quirks",e.QUIRKS="quirks",e.LIMITED_QUIRKS="limited-quirks";})(wa||(wa={}));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 B_t=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 fS(e){var t;return (t=B_t.get(e))!==null&&t!==void 0?t:T.UNKNOWN}var Be=T,qPe={[Ie.HTML]:new Set([Be.ADDRESS,Be.APPLET,Be.AREA,Be.ARTICLE,Be.ASIDE,Be.BASE,Be.BASEFONT,Be.BGSOUND,Be.BLOCKQUOTE,Be.BODY,Be.BR,Be.BUTTON,Be.CAPTION,Be.CENTER,Be.COL,Be.COLGROUP,Be.DD,Be.DETAILS,Be.DIR,Be.DIV,Be.DL,Be.DT,Be.EMBED,Be.FIELDSET,Be.FIGCAPTION,Be.FIGURE,Be.FOOTER,Be.FORM,Be.FRAME,Be.FRAMESET,Be.H1,Be.H2,Be.H3,Be.H4,Be.H5,Be.H6,Be.HEAD,Be.HEADER,Be.HGROUP,Be.HR,Be.HTML,Be.IFRAME,Be.IMG,Be.INPUT,Be.LI,Be.LINK,Be.LISTING,Be.MAIN,Be.MARQUEE,Be.MENU,Be.META,Be.NAV,Be.NOEMBED,Be.NOFRAMES,Be.NOSCRIPT,Be.OBJECT,Be.OL,Be.P,Be.PARAM,Be.PLAINTEXT,Be.PRE,Be.SCRIPT,Be.SECTION,Be.SELECT,Be.SOURCE,Be.STYLE,Be.SUMMARY,Be.TABLE,Be.TBODY,Be.TD,Be.TEMPLATE,Be.TEXTAREA,Be.TFOOT,Be.TH,Be.THEAD,Be.TITLE,Be.TR,Be.TRACK,Be.UL,Be.WBR,Be.XMP]),[Ie.MATHML]:new Set([Be.MI,Be.MO,Be.MN,Be.MS,Be.MTEXT,Be.ANNOTATION_XML]),[Ie.SVG]:new Set([Be.TITLE,Be.FOREIGN_OBJECT,Be.DESC]),[Ie.XLINK]:new Set,[Ie.XML]:new Set,[Ie.XMLNS]:new Set},dx=new Set([Be.H1,Be.H2,Be.H3,Be.H4,Be.H5,Be.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 Fs={DATA:j.DATA,RCDATA:j.RCDATA,RAWTEXT:j.RAWTEXT,SCRIPT_DATA:j.SCRIPT_DATA,PLAINTEXT:j.PLAINTEXT,CDATA_SECTION:j.CDATA_SECTION};function H_t(e){return e>=F.DIGIT_0&&e<=F.DIGIT_9}function mx(e){return e>=F.LATIN_CAPITAL_A&&e<=F.LATIN_CAPITAL_Z}function j_t(e){return e>=F.LATIN_SMALL_A&&e<=F.LATIN_SMALL_Z}function Qg(e){return j_t(e)||mx(e)}function KPe(e){return Qg(e)||H_t(e)}function gB(e){return e+32}function JPe(e){return e===F.SPACE||e===F.LINE_FEED||e===F.TABULATION||e===F.FORM_FEED}function YPe(e){return JPe(e)||e===F.SOLIDUS||e===F.GREATER_THAN_SIGN}function $_t(e){return e===F.NULL?he.nullCharacterReference:e>1114111?he.characterReferenceOutsideUnicodeRange:cB(e)?he.surrogateCharacterReference:dB(e)?he.noncharacterCharacterReference:uB(e)||e===F.CARRIAGE_RETURN?he.controlCharacterReference:null}var px=class{constructor(t,n){this.options=t,this.handler=n,this.paused=false,this.inLoop=false,this.inForeignNode=false,this.lastStartTagName="",this.active=false,this.state=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 mB(n),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new hB(k3,(o,r)=>{this.preprocessor.pos=this.entityStartPos+r-1,this._flushCodePointConsumedAsCharacterReference(o);},n.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(he.missingSemicolonAfterCharacterReference,1);},absenceOfDigitsInNumericCharacterReference:o=>{this._err(he.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+o);},validateNumericCharacterReference:o=>{let r=$_t(o);r&&this._err(r,1);}}:void 0);}_err(t,n=0){var o,r;(r=(o=this.handler).onParseError)===null||r===void 0||r.call(o,this.preprocessor.getError(t,n));}getCurrentLocation(t){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-t,startOffset:this.preprocessor.offset-t,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=true;this.active&&!this.paused;){this.consumedAfterSnapshot=0;let t=this._consume();this._ensureHibernation()||this._callState(t);}this.inLoop=false;}}pause(){this.paused=true;}resume(t){if(!this.paused)throw new Error("Parser was already resumed");this.paused=false,!this.inLoop&&(this._runParsingLoop(),this.paused||t?.());}write(t,n,o){this.active=true,this.preprocessor.write(t,n),this._runParsingLoop(),this.paused||o?.();}insertHtmlAtCurrentPos(t){this.active=true,this.preprocessor.insertHtmlAtCurrentPos(t),this._runParsingLoop();}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=false,true):false}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(t){this.consumedAfterSnapshot+=t;for(let n=0;n<t;n++)this.preprocessor.advance();}_consumeSequenceIfMatch(t,n){return this.preprocessor.startsWith(t,n)?(this._advanceBy(t.length-1),true):false}_createStartTagToken(){this.currentToken={type:kn.START_TAG,tagName:"",tagID:T.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(1)};}_createEndTagToken(){this.currentToken={type:kn.END_TAG,tagName:"",tagID:T.UNKNOWN,selfClosing:false,ackSelfClosing:false,attrs:[],location:this.getCurrentLocation(2)};}_createCommentToken(t){this.currentToken={type:kn.COMMENT,data:"",location:this.getCurrentLocation(t)};}_createDoctypeToken(t){this.currentToken={type:kn.DOCTYPE,name:t,forceQuirks:false,publicId:null,systemId:null,location:this.currentLocation};}_createCharacterToken(t,n){this.currentCharacterToken={type:t,chars:n,location:this.currentLocation};}_createAttr(t){this.currentAttr={name:t,value:""},this.currentLocation=this.getCurrentLocation(0);}_leaveAttrName(){var t,n;let o=this.currentToken;if(pB(o,this.currentAttr.name)===null){if(o.attrs.push(this.currentAttr),o.location&&this.currentLocation){let r=(t=(n=o.location).attrs)!==null&&t!==void 0?t:n.attrs=Object.create(null);r[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue();}}else this._err(he.duplicateAttribute);}_leaveAttrValue(){this.currentLocation&&(this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset);}prepareToken(t){this._emitCurrentCharacterToken(t.location),this.currentToken=null,t.location&&(t.location.endLine=this.preprocessor.line,t.location.endCol=this.preprocessor.col+1,t.location.endOffset=this.preprocessor.offset+1),this.currentLocation=this.getCurrentLocation(-1);}emitCurrentTagToken(){let t=this.currentToken;this.prepareToken(t),t.tagID=fS(t.tagName),t.type===kn.START_TAG?(this.lastStartTagName=t.tagName,this.handler.onStartTag(t)):(t.attrs.length>0&&this._err(he.endTagWithAttributes),t.selfClosing&&this._err(he.endTagWithTrailingSolidus),this.handler.onEndTag(t)),this.preprocessor.dropParsedChunk();}emitCurrentComment(t){this.prepareToken(t),this.handler.onComment(t),this.preprocessor.dropParsedChunk();}emitCurrentDoctype(t){this.prepareToken(t),this.handler.onDoctype(t),this.preprocessor.dropParsedChunk();}_emitCurrentCharacterToken(t){if(this.currentCharacterToken){switch(t&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=t.startLine,this.currentCharacterToken.location.endCol=t.startCol,this.currentCharacterToken.location.endOffset=t.startOffset),this.currentCharacterToken.type){case kn.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case kn.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case kn.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:kn.EOF,location:t}),this.active=false;}_appendCharToCurrentCharacterToken(t,n){if(this.currentCharacterToken)if(this.currentCharacterToken.type===t){this.currentCharacterToken.chars+=n;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(t,n);}_emitCodePoint(t){let n=JPe(t)?kn.WHITESPACE_CHARACTER:t===F.NULL?kn.NULL_CHARACTER:kn.CHARACTER;this._appendCharToCurrentCharacterToken(n,t<65536?String.fromCharCode(t):String.fromCodePoint(t));}_emitChars(t){this._appendCharToCurrentCharacterToken(kn.CHARACTER,t);}_startCharacterReference(){this.returnState=this.state,this.state=j.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?im.Attribute:im.Legacy);}_isCharacterReferenceInAttribute(){return this.returnState===j.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(t){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(t):this._emitCodePoint(t);}_callState(t){switch(this.state){case j.DATA:{this._stateData(t);break}case j.RCDATA:{this._stateRcdata(t);break}case j.RAWTEXT:{this._stateRawtext(t);break}case j.SCRIPT_DATA:{this._stateScriptData(t);break}case j.PLAINTEXT:{this._statePlaintext(t);break}case j.TAG_OPEN:{this._stateTagOpen(t);break}case j.END_TAG_OPEN:{this._stateEndTagOpen(t);break}case j.TAG_NAME:{this._stateTagName(t);break}case j.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(t);break}case j.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(t);break}case j.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(t);break}case j.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(t);break}case j.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(t);break}case j.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(t);break}case j.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(t);break}case j.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(t);break}case j.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(t);break}case j.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(t);break}case j.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(t);break}case j.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(t);break}case j.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(t);break}case j.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(t);break}case j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(t);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(t);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(t);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(t);break}case j.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(t);break}case j.ATTRIBUTE_NAME:{this._stateAttributeName(t);break}case j.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(t);break}case j.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(t);break}case j.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(t);break}case j.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(t);break}case j.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(t);break}case j.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(t);break}case j.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(t);break}case j.BOGUS_COMMENT:{this._stateBogusComment(t);break}case j.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(t);break}case j.COMMENT_START:{this._stateCommentStart(t);break}case j.COMMENT_START_DASH:{this._stateCommentStartDash(t);break}case j.COMMENT:{this._stateComment(t);break}case j.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(t);break}case j.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(t);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(t);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(t);break}case j.COMMENT_END_DASH:{this._stateCommentEndDash(t);break}case j.COMMENT_END:{this._stateCommentEnd(t);break}case j.COMMENT_END_BANG:{this._stateCommentEndBang(t);break}case j.DOCTYPE:{this._stateDoctype(t);break}case j.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(t);break}case j.DOCTYPE_NAME:{this._stateDoctypeName(t);break}case j.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(t);break}case j.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(t);break}case j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(t);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(t);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(t);break}case j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(t);break}case j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(t);break}case j.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(t);break}case j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(t);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(t);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(t);break}case j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(t);break}case j.BOGUS_DOCTYPE:{this._stateBogusDoctype(t);break}case j.CDATA_SECTION:{this._stateCdataSection(t);break}case j.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(t);break}case j.CDATA_SECTION_END:{this._stateCdataSectionEnd(t);break}case j.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case j.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(t);break}default:throw new Error("Unknown state")}}_stateData(t){switch(t){case F.LESS_THAN_SIGN:{this.state=j.TAG_OPEN;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitCodePoint(t);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRcdata(t){switch(t){case F.AMPERSAND:{this._startCharacterReference();break}case F.LESS_THAN_SIGN:{this.state=j.RCDATA_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars(Go);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateRawtext(t){switch(t){case F.LESS_THAN_SIGN:{this.state=j.RAWTEXT_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars(Go);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptData(t){switch(t){case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars(Go);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_statePlaintext(t){switch(t){case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars(Go);break}case F.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateTagOpen(t){if(Qg(t))this._createStartTagToken(),this.state=j.TAG_NAME,this._stateTagName(t);else switch(t){case F.EXCLAMATION_MARK:{this.state=j.MARKUP_DECLARATION_OPEN;break}case F.SOLIDUS:{this.state=j.END_TAG_OPEN;break}case F.QUESTION_MARK:{this._err(he.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t);break}case F.EOF:{this._err(he.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(he.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=j.DATA,this._stateData(t);}}_stateEndTagOpen(t){if(Qg(t))this._createEndTagToken(),this.state=j.TAG_NAME,this._stateTagName(t);else switch(t){case F.GREATER_THAN_SIGN:{this._err(he.missingEndTagName),this.state=j.DATA;break}case F.EOF:{this._err(he.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(he.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t);}}_stateTagName(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_ATTRIBUTE_NAME;break}case F.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.tagName+=Go;break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:n.tagName+=String.fromCodePoint(mx(t)?gB(t):t);}}_stateRcdataLessThanSign(t){t===F.SOLIDUS?this.state=j.RCDATA_END_TAG_OPEN:(this._emitChars("<"),this.state=j.RCDATA,this._stateRcdata(t));}_stateRcdataEndTagOpen(t){Qg(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 n=this.currentToken;switch(n.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=j.BEFORE_ATTRIBUTE_NAME,false;case F.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=j.SELF_CLOSING_START_TAG,false;case F.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=j.DATA,false;default:return !this._ensureHibernation()}}_stateRcdataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.RCDATA,this._stateRcdata(t));}_stateRawtextLessThanSign(t){t===F.SOLIDUS?this.state=j.RAWTEXT_END_TAG_OPEN:(this._emitChars("<"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagOpen(t){Qg(t)?(this.state=j.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(t)):(this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateRawtextEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(t));}_stateScriptDataLessThanSign(t){switch(t){case F.SOLIDUS:{this.state=j.SCRIPT_DATA_END_TAG_OPEN;break}case F.EXCLAMATION_MARK:{this.state=j.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=j.SCRIPT_DATA,this._stateScriptData(t);}}_stateScriptDataEndTagOpen(t){Qg(t)?(this.state=j.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(t)):(this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEndTagName(t){this.handleSpecialEndTag(t)&&(this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStart(t){t===F.HYPHEN_MINUS?(this.state=j.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-")):(this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscapeStartDash(t){t===F.HYPHEN_MINUS?(this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-")):(this.state=j.SCRIPT_DATA,this._stateScriptData(t));}_stateScriptDataEscaped(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars(Go);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataEscapedDash(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(Go);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedDashDash(t){switch(t){case F.HYPHEN_MINUS:{this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case F.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(Go);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataEscapedLessThanSign(t){t===F.SOLIDUS?this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Qg(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){Qg(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(va.SCRIPT,false)&&YPe(this.preprocessor.peek(va.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<va.SCRIPT.length;n++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED;}else this._ensureHibernation()||(this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(t));}_stateScriptDataDoubleEscaped(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this._emitChars(Go);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDash(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Go);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedDashDash(t){switch(t){case F.HYPHEN_MINUS:{this._emitChars("-");break}case F.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case F.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(Go);break}case F.EOF:{this._err(he.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(t);}}_stateScriptDataDoubleEscapedLessThanSign(t){t===F.SOLIDUS?(this.state=j.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t));}_stateScriptDataDoubleEscapeEnd(t){if(this.preprocessor.startsWith(va.SCRIPT,false)&&YPe(this.preprocessor.peek(va.SCRIPT.length))){this._emitCodePoint(t);for(let n=0;n<va.SCRIPT.length;n++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_ESCAPED;}else this._ensureHibernation()||(this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(t));}_stateBeforeAttributeName(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.SOLIDUS:case F.GREATER_THAN_SIGN:case F.EOF:{this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case F.EQUALS_SIGN:{this._err(he.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=j.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateAttributeName(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:case F.SOLIDUS:case F.GREATER_THAN_SIGN:case F.EOF:{this._leaveAttrName(),this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(t);break}case F.EQUALS_SIGN:{this._leaveAttrName(),this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case F.QUOTATION_MARK:case F.APOSTROPHE:case F.LESS_THAN_SIGN:{this._err(he.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(t);break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.name+=Go;break}default:this.currentAttr.name+=String.fromCodePoint(mx(t)?gB(t):t);}}_stateAfterAttributeName(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case F.EQUALS_SIGN:{this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(t);}}_stateBeforeAttributeValue(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.QUOTATION_MARK:{this.state=j.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this.state=j.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingAttributeValue),this.state=j.DATA,this.emitCurrentTagToken();break}default:this.state=j.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(t);}}_stateAttributeValueDoubleQuoted(t){switch(t){case F.QUOTATION_MARK:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.value+=Go;break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueSingleQuoted(t){switch(t){case F.APOSTROPHE:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.value+=Go;break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAttributeValueUnquoted(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case F.AMPERSAND:{this._startCharacterReference();break}case F.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case F.NULL:{this._err(he.unexpectedNullCharacter),this.currentAttr.value+=Go;break}case F.QUOTATION_MARK:case F.APOSTROPHE:case F.LESS_THAN_SIGN:case F.EQUALS_SIGN:case F.GRAVE_ACCENT:{this._err(he.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(t);break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(t);}}_stateAfterAttributeValueQuoted(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case F.SOLIDUS:{this._leaveAttrValue(),this.state=j.SELF_CLOSING_START_TAG;break}case F.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this._err(he.missingWhitespaceBetweenAttributes),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateSelfClosingStartTag(t){switch(t){case F.GREATER_THAN_SIGN:{let n=this.currentToken;n.selfClosing=true,this.state=j.DATA,this.emitCurrentTagToken();break}case F.EOF:{this._err(he.eofInTag),this._emitEOFToken();break}default:this._err(he.unexpectedSolidusInTag),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(t);}}_stateBogusComment(t){let n=this.currentToken;switch(t){case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(n);break}case F.EOF:{this.emitCurrentComment(n),this._emitEOFToken();break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.data+=Go;break}default:n.data+=String.fromCodePoint(t);}}_stateMarkupDeclarationOpen(t){this._consumeSequenceIfMatch(va.DASH_DASH,true)?(this._createCommentToken(va.DASH_DASH.length+1),this.state=j.COMMENT_START):this._consumeSequenceIfMatch(va.DOCTYPE,false)?(this.currentLocation=this.getCurrentLocation(va.DOCTYPE.length+1),this.state=j.DOCTYPE):this._consumeSequenceIfMatch(va.CDATA_START,true)?this.inForeignNode?this.state=j.CDATA_SECTION:(this._err(he.cdataInHtmlContent),this._createCommentToken(va.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=j.BOGUS_COMMENT):this._ensureHibernation()||(this._err(he.incorrectlyOpenedComment),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(t));}_stateCommentStart(t){switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_START_DASH;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptClosingOfEmptyComment),this.state=j.DATA;let n=this.currentToken;this.emitCurrentComment(n);break}default:this.state=j.COMMENT,this._stateComment(t);}}_stateCommentStartDash(t){let n=this.currentToken;switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptClosingOfEmptyComment),this.state=j.DATA,this.emitCurrentComment(n);break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="-",this.state=j.COMMENT,this._stateComment(t);}}_stateComment(t){let n=this.currentToken;switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_END_DASH;break}case F.LESS_THAN_SIGN:{n.data+="<",this.state=j.COMMENT_LESS_THAN_SIGN;break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.data+=Go;break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+=String.fromCodePoint(t);}}_stateCommentLessThanSign(t){let n=this.currentToken;switch(t){case F.EXCLAMATION_MARK:{n.data+="!",this.state=j.COMMENT_LESS_THAN_SIGN_BANG;break}case F.LESS_THAN_SIGN:{n.data+="<";break}default:this.state=j.COMMENT,this._stateComment(t);}}_stateCommentLessThanSignBang(t){t===F.HYPHEN_MINUS?this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=j.COMMENT,this._stateComment(t));}_stateCommentLessThanSignBangDash(t){t===F.HYPHEN_MINUS?this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=j.COMMENT_END_DASH,this._stateCommentEndDash(t));}_stateCommentLessThanSignBangDashDash(t){t!==F.GREATER_THAN_SIGN&&t!==F.EOF&&this._err(he.nestedComment),this.state=j.COMMENT_END,this._stateCommentEnd(t);}_stateCommentEndDash(t){let n=this.currentToken;switch(t){case F.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="-",this.state=j.COMMENT,this._stateComment(t);}}_stateCommentEnd(t){let n=this.currentToken;switch(t){case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(n);break}case F.EXCLAMATION_MARK:{this.state=j.COMMENT_END_BANG;break}case F.HYPHEN_MINUS:{n.data+="-";break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="--",this.state=j.COMMENT,this._stateComment(t);}}_stateCommentEndBang(t){let n=this.currentToken;switch(t){case F.HYPHEN_MINUS:{n.data+="--!",this.state=j.COMMENT_END_DASH;break}case F.GREATER_THAN_SIGN:{this._err(he.incorrectlyClosedComment),this.state=j.DATA,this.emitCurrentComment(n);break}case F.EOF:{this._err(he.eofInComment),this.emitCurrentComment(n),this._emitEOFToken();break}default:n.data+="--!",this.state=j.COMMENT,this._stateComment(t);}}_stateDoctype(t){switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_NAME;break}case F.GREATER_THAN_SIGN:{this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);break}case F.EOF:{this._err(he.eofInDoctype),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingWhitespaceBeforeDoctypeName),this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(t);}}_stateBeforeDoctypeName(t){if(mx(t))this._createDoctypeToken(String.fromCharCode(gB(t))),this.state=j.DOCTYPE_NAME;else switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.NULL:{this._err(he.unexpectedNullCharacter),this._createDoctypeToken(Go),this.state=j.DOCTYPE_NAME;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypeName),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),this._createDoctypeToken(null);let n=this.currentToken;n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(t)),this.state=j.DOCTYPE_NAME;}}_stateDoctypeName(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.AFTER_DOCTYPE_NAME;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.name+=Go;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.name+=String.fromCodePoint(mx(t)?gB(t):t);}}_stateAfterDoctypeName(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(va.PUBLIC,false)?this.state=j.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(va.SYSTEM,false)?this.state=j.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(he.invalidCharacterSequenceAfterDoctypeName),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t));}}_stateAfterDoctypePublicKeyword(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case F.QUOTATION_MARK:{this._err(he.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this._err(he.missingWhitespaceAfterDoctypePublicKeyword),n.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypePublicIdentifier),n.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypePublicIdentifier),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypePublicIdentifier(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.QUOTATION_MARK:{n.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{n.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypePublicIdentifier),n.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypePublicIdentifier),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypePublicIdentifierDoubleQuoted(t){let n=this.currentToken;switch(t){case F.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.publicId+=Go;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypePublicIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.publicId+=String.fromCodePoint(t);}}_stateDoctypePublicIdentifierSingleQuoted(t){let n=this.currentToken;switch(t){case F.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.publicId+=Go;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypePublicIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.publicId+=String.fromCodePoint(t);}}_stateAfterDoctypePublicIdentifier(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case F.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.QUOTATION_MARK:{this._err(he.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this._err(he.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBetweenDoctypePublicAndSystemIdentifiers(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.QUOTATION_MARK:{n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateAfterDoctypeSystemKeyword(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case F.QUOTATION_MARK:{this._err(he.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{this._err(he.missingWhitespaceAfterDoctypeSystemKeyword),n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypeSystemIdentifier),n.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBeforeDoctypeSystemIdentifier(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.QUOTATION_MARK:{n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case F.APOSTROPHE:{n.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case F.GREATER_THAN_SIGN:{this._err(he.missingDoctypeSystemIdentifier),n.forceQuirks=true,this.state=j.DATA,this.emitCurrentDoctype(n);break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.missingQuoteBeforeDoctypeSystemIdentifier),n.forceQuirks=true,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateDoctypeSystemIdentifierDoubleQuoted(t){let n=this.currentToken;switch(t){case F.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.systemId+=Go;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypeSystemIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.systemId+=String.fromCodePoint(t);}}_stateDoctypeSystemIdentifierSingleQuoted(t){let n=this.currentToken;switch(t){case F.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case F.NULL:{this._err(he.unexpectedNullCharacter),n.systemId+=Go;break}case F.GREATER_THAN_SIGN:{this._err(he.abruptDoctypeSystemIdentifier),n.forceQuirks=true,this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:n.systemId+=String.fromCodePoint(t);}}_stateAfterDoctypeSystemIdentifier(t){let n=this.currentToken;switch(t){case F.SPACE:case F.LINE_FEED:case F.TABULATION:case F.FORM_FEED:break;case F.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.EOF:{this._err(he.eofInDoctype),n.forceQuirks=true,this.emitCurrentDoctype(n),this._emitEOFToken();break}default:this._err(he.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(t);}}_stateBogusDoctype(t){let n=this.currentToken;switch(t){case F.GREATER_THAN_SIGN:{this.emitCurrentDoctype(n),this.state=j.DATA;break}case F.NULL:{this._err(he.unexpectedNullCharacter);break}case F.EOF:{this.emitCurrentDoctype(n),this._emitEOFToken();break}}}_stateCdataSection(t){switch(t){case F.RIGHT_SQUARE_BRACKET:{this.state=j.CDATA_SECTION_BRACKET;break}case F.EOF:{this._err(he.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(t);}}_stateCdataSectionBracket(t){t===F.RIGHT_SQUARE_BRACKET?this.state=j.CDATA_SECTION_END:(this._emitChars("]"),this.state=j.CDATA_SECTION,this._stateCdataSection(t));}_stateCdataSectionEnd(t){switch(t){case F.GREATER_THAN_SIGN:{this.state=j.DATA;break}case F.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=j.CDATA_SECTION,this._stateCdataSection(t);}}_stateCharacterReference(){let t=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(t<0)if(this.preprocessor.lastChunkWritten)t=this.entityDecoder.end();else {this.active=false,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=true;return}t===0?(this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(F.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&KPe(this.preprocessor.peek(1))?j.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState;}_stateAmbiguousAmpersand(t){KPe(t)?this._flushCodePointConsumedAsCharacterReference(t):(t===F.SEMICOLON&&this._err(he.unknownNamedCharacterReference),this.state=this.returnState,this._callState(t));}};var eOe=new Set([T.DD,T.DT,T.LI,T.OPTGROUP,T.OPTION,T.P,T.RB,T.RP,T.RT,T.RTC]),XPe=new Set([...eOe,T.CAPTION,T.COLGROUP,T.TBODY,T.TD,T.TFOOT,T.TH,T.THEAD,T.TR]),fB=new Set([T.APPLET,T.CAPTION,T.HTML,T.MARQUEE,T.OBJECT,T.TABLE,T.TD,T.TEMPLATE,T.TH]),G_t=new Set([...fB,T.OL,T.UL]),z_t=new Set([...fB,T.BUTTON]),QPe=new Set([T.ANNOTATION_XML,T.MI,T.MN,T.MO,T.MS,T.MTEXT]),ZPe=new Set([T.DESC,T.FOREIGN_OBJECT,T.TITLE]),V_t=new Set([T.TR,T.TEMPLATE,T.HTML]),W_t=new Set([T.TBODY,T.TFOOT,T.THEAD,T.TEMPLATE,T.HTML]),q_t=new Set([T.TABLE,T.TEMPLATE,T.HTML]),K_t=new Set([T.TD,T.TH]),yB=class{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(t,n,o){this.treeAdapter=n,this.handler=o,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=T.UNKNOWN,this.current=t;}_indexOf(t){return this.items.lastIndexOf(t,this.stackTop)}_isInTemplate(){return this.currentTagId===T.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===Ie.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop];}push(t,n){this.stackTop++,this.items[this.stackTop]=t,this.current=t,this.tagIDs[this.stackTop]=n,this.currentTagId=n,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(t,n,true);}pop(){let t=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,true);}replace(t,n){let o=this._indexOf(t);this.items[o]=n,o===this.stackTop&&(this.current=n);}insertAfter(t,n,o){let r=this._indexOf(t)+1;this.items.splice(r,0,n),this.tagIDs.splice(r,0,o),this.stackTop++,r===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,r===this.stackTop);}popUntilTagNamePopped(t){let n=this.stackTop+1;do n=this.tagIDs.lastIndexOf(t,n-1);while(n>0&&this.treeAdapter.getNamespaceURI(this.items[n])!==Ie.HTML);this.shortenToLength(Math.max(n,0));}shortenToLength(t){for(;this.stackTop>=t;){let n=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(n,this.stackTop<t);}}popUntilElementPopped(t){let n=this._indexOf(t);this.shortenToLength(Math.max(n,0));}popUntilPopped(t,n){let o=this._indexOfTagNames(t,n);this.shortenToLength(Math.max(o,0));}popUntilNumberedHeaderPopped(){this.popUntilPopped(dx,Ie.HTML);}popUntilTableCellPopped(){this.popUntilPopped(K_t,Ie.HTML);}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1);}_indexOfTagNames(t,n){for(let o=this.stackTop;o>=0;o--)if(t.has(this.tagIDs[o])&&this.treeAdapter.getNamespaceURI(this.items[o])===n)return o;return -1}clearBackTo(t,n){let o=this._indexOfTagNames(t,n);this.shortenToLength(o+1);}clearBackToTableContext(){this.clearBackTo(q_t,Ie.HTML);}clearBackToTableBodyContext(){this.clearBackTo(W_t,Ie.HTML);}clearBackToTableRowContext(){this.clearBackTo(V_t,Ie.HTML);}remove(t){let n=this._indexOf(t);n>=0&&(n===this.stackTop?this.pop():(this.items.splice(n,1),this.tagIDs.splice(n,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(t,false)));}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===T.BODY?this.items[1]:null}contains(t){return this._indexOf(t)>-1}getCommonAncestor(t){let n=this._indexOf(t)-1;return n>=0?this.items[n]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===T.HTML}hasInDynamicScope(t,n){for(let o=this.stackTop;o>=0;o--){let r=this.tagIDs[o];switch(this.treeAdapter.getNamespaceURI(this.items[o])){case Ie.HTML:{if(r===t)return true;if(n.has(r))return false;break}case Ie.SVG:{if(ZPe.has(r))return false;break}case Ie.MATHML:{if(QPe.has(r))return false;break}}}return true}hasInScope(t){return this.hasInDynamicScope(t,fB)}hasInListItemScope(t){return this.hasInDynamicScope(t,G_t)}hasInButtonScope(t){return this.hasInDynamicScope(t,z_t)}hasNumberedHeaderInScope(){for(let t=this.stackTop;t>=0;t--){let n=this.tagIDs[t];switch(this.treeAdapter.getNamespaceURI(this.items[t])){case Ie.HTML:{if(dx.has(n))return true;if(fB.has(n))return false;break}case Ie.SVG:{if(ZPe.has(n))return false;break}case Ie.MATHML:{if(QPe.has(n))return false;break}}}return true}hasInTableScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===Ie.HTML)switch(this.tagIDs[n]){case t:return true;case T.TABLE:case T.HTML:return false}return true}hasTableBodyContextInTableScope(){for(let t=this.stackTop;t>=0;t--)if(this.treeAdapter.getNamespaceURI(this.items[t])===Ie.HTML)switch(this.tagIDs[t]){case T.TBODY:case T.THEAD:case T.TFOOT:return true;case T.TABLE:case T.HTML:return false}return true}hasInSelectScope(t){for(let n=this.stackTop;n>=0;n--)if(this.treeAdapter.getNamespaceURI(this.items[n])===Ie.HTML)switch(this.tagIDs[n]){case t:return true;case T.OPTION:case T.OPTGROUP:break;default:return false}return true}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&eOe.has(this.currentTagId);)this.pop();}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&XPe.has(this.currentTagId);)this.pop();}generateImpliedEndTagsWithExclusion(t){for(;this.currentTagId!==void 0&&this.currentTagId!==t&&XPe.has(this.currentTagId);)this.pop();}};var Cu;(function(e){e[e.Marker=0]="Marker",e[e.Element=1]="Element";})(Cu||(Cu={}));var tOe={type:Cu.Marker},SB=class{constructor(t){this.treeAdapter=t,this.entries=[],this.bookmark=null;}_getNoahArkConditionCandidates(t,n){let o=[],r=n.length,i=this.treeAdapter.getTagName(t),s=this.treeAdapter.getNamespaceURI(t);for(let a=0;a<this.entries.length;a++){let l=this.entries[a];if(l.type===Cu.Marker)break;let{element:c}=l;if(this.treeAdapter.getTagName(c)===i&&this.treeAdapter.getNamespaceURI(c)===s){let u=this.treeAdapter.getAttrList(c);u.length===r&&o.push({idx:a,attrs:u});}}return o}_ensureNoahArkCondition(t){if(this.entries.length<3)return;let n=this.treeAdapter.getAttrList(t),o=this._getNoahArkConditionCandidates(t,n);if(o.length<3)return;let r=new Map(n.map(s=>[s.name,s.value])),i=0;for(let s=0;s<o.length;s++){let a=o[s];a.attrs.every(l=>r.get(l.name)===l.value)&&(i+=1,i>=3&&this.entries.splice(a.idx,1));}}insertMarker(){this.entries.unshift(tOe);}pushElement(t,n){this._ensureNoahArkCondition(t),this.entries.unshift({type:Cu.Element,element:t,token:n});}insertElementAfterBookmark(t,n){let o=this.entries.indexOf(this.bookmark);this.entries.splice(o,0,{type:Cu.Element,element:t,token:n});}removeEntry(t){let n=this.entries.indexOf(t);n!==-1&&this.entries.splice(n,1);}clearToLastMarker(){let t=this.entries.indexOf(tOe);t===-1?this.entries.length=0:this.entries.splice(0,t+1);}getElementEntryInScopeWithTagName(t){let n=this.entries.find(o=>o.type===Cu.Marker||this.treeAdapter.getTagName(o.element)===t);return n&&n.type===Cu.Element?n:null}getElementEntry(t){return this.entries.find(n=>n.type===Cu.Element&&n.element===t)}};var Iu={createDocument(){return {nodeName:"#document",mode:wa.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return {nodeName:"#document-fragment",childNodes:[]}},createElement(e,t,n){return {nodeName:e,tagName:e,attrs:n,namespaceURI:t,childNodes:[],parentNode:null}},createCommentNode(e){return {nodeName:"#comment",data:e,parentNode:null}},createTextNode(e){return {nodeName:"#text",value:e,parentNode:null}},appendChild(e,t){e.childNodes.push(t),t.parentNode=e;},insertBefore(e,t,n){let o=e.childNodes.indexOf(n);e.childNodes.splice(o,0,t),t.parentNode=e;},setTemplateContent(e,t){e.content=t;},getTemplateContent(e){return e.content},setDocumentType(e,t,n,o){let r=e.childNodes.find(i=>i.nodeName==="#documentType");if(r)r.name=t,r.publicId=n,r.systemId=o;else {let i={nodeName:"#documentType",name:t,publicId:n,systemId:o,parentNode:null};Iu.appendChild(e,i);}},setDocumentMode(e,t){e.mode=t;},getDocumentMode(e){return e.mode},detachNode(e){if(e.parentNode){let t=e.parentNode.childNodes.indexOf(e);e.parentNode.childNodes.splice(t,1),e.parentNode=null;}},insertText(e,t){if(e.childNodes.length>0){let n=e.childNodes[e.childNodes.length-1];if(Iu.isTextNode(n)){n.value+=t;return}}Iu.appendChild(e,Iu.createTextNode(t));},insertTextBefore(e,t,n){let o=e.childNodes[e.childNodes.indexOf(n)-1];o&&Iu.isTextNode(o)?o.value+=t:Iu.insertBefore(e,Iu.createTextNode(t),n);},adoptAttributes(e,t){let n=new Set(e.attrs.map(o=>o.name));for(let o=0;o<t.length;o++)n.has(t[o].name)||e.attrs.push(t[o]);},getFirstChild(e){return e.childNodes[0]},getChildNodes(e){return e.childNodes},getParentNode(e){return e.parentNode},getAttrList(e){return e.attrs},getTagName(e){return e.tagName},getNamespaceURI(e){return e.namespaceURI},getTextNodeContent(e){return e.value},getCommentNodeContent(e){return e.data},getDocumentTypeNodeName(e){return e.name},getDocumentTypeNodePublicId(e){return e.publicId},getDocumentTypeNodeSystemId(e){return e.systemId},isTextNode(e){return e.nodeName==="#text"},isCommentNode(e){return e.nodeName==="#comment"},isDocumentTypeNode(e){return e.nodeName==="#documentType"},isElementNode(e){return Object.prototype.hasOwnProperty.call(e,"tagName")},setNodeSourceCodeLocation(e,t){e.sourceCodeLocation=t;},getNodeSourceCodeLocation(e){return e.sourceCodeLocation},updateNodeSourceCodeLocation(e,t){e.sourceCodeLocation={...e.sourceCodeLocation,...t};}};var oOe="html",Y_t="about:legacy-compat",J_t="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",rOe=["+//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//"],X_t=[...rOe,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],Q_t=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),iOe=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],Z_t=[...iOe,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function nOe(e,t){return t.some(n=>e.startsWith(n))}function sOe(e){return e.name===oOe&&e.publicId===null&&(e.systemId===null||e.systemId===Y_t)}function aOe(e){if(e.name!==oOe)return wa.QUIRKS;let{systemId:t}=e;if(t&&t.toLowerCase()===J_t)return wa.QUIRKS;let{publicId:n}=e;if(n!==null){if(n=n.toLowerCase(),Q_t.has(n))return wa.QUIRKS;let o=t===null?X_t:rOe;if(nOe(n,o))return wa.QUIRKS;if(o=t===null?iOe:Z_t,nOe(n,o))return wa.LIMITED_QUIRKS}return wa.NO_QUIRKS}var lOe={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},tPt="definitionurl",nPt="definitionURL",oPt=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])),rPt=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:Ie.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:Ie.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:Ie.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:Ie.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:Ie.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:Ie.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:Ie.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:Ie.XML}],["xml:space",{prefix:"xml",name:"space",namespace:Ie.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:Ie.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:Ie.XMLNS}]]),iPt=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])),sPt=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 cOe(e){let t=e.tagID;return t===T.FONT&&e.attrs.some(({name:o})=>o===Up.COLOR||o===Up.SIZE||o===Up.FACE)||sPt.has(t)}function N3(e){for(let t=0;t<e.attrs.length;t++)if(e.attrs[t].name===tPt){e.attrs[t].name=nPt;break}}function D3(e){for(let t=0;t<e.attrs.length;t++){let n=oPt.get(e.attrs[t].name);n!=null&&(e.attrs[t].name=n);}}function bB(e){for(let t=0;t<e.attrs.length;t++){let n=rPt.get(e.attrs[t].name);n&&(e.attrs[t].prefix=n.prefix,e.attrs[t].name=n.name,e.attrs[t].namespace=n.namespace);}}function uOe(e){let t=iPt.get(e.tagName);t!=null&&(e.tagName=t,e.tagID=fS(e.tagName));}function aPt(e,t){return t===Ie.MATHML&&(e===T.MI||e===T.MO||e===T.MN||e===T.MS||e===T.MTEXT)}function lPt(e,t,n){if(t===Ie.MATHML&&e===T.ANNOTATION_XML){for(let o=0;o<n.length;o++)if(n[o].name===Up.ENCODING){let r=n[o].value.toLowerCase();return r===lOe.TEXT_HTML||r===lOe.APPLICATION_XML}}return t===Ie.SVG&&(e===T.FOREIGN_OBJECT||e===T.DESC||e===T.TITLE)}function dOe(e,t,n,o){return (!o||o===Ie.HTML)&&lPt(e,t,n)||(!o||o===Ie.MATHML)&&aPt(e,t)}var cPt="hidden",uPt=8,dPt=3,K;(function(e){e[e.INITIAL=0]="INITIAL",e[e.BEFORE_HTML=1]="BEFORE_HTML",e[e.BEFORE_HEAD=2]="BEFORE_HEAD",e[e.IN_HEAD=3]="IN_HEAD",e[e.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",e[e.AFTER_HEAD=5]="AFTER_HEAD",e[e.IN_BODY=6]="IN_BODY",e[e.TEXT=7]="TEXT",e[e.IN_TABLE=8]="IN_TABLE",e[e.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",e[e.IN_CAPTION=10]="IN_CAPTION",e[e.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",e[e.IN_TABLE_BODY=12]="IN_TABLE_BODY",e[e.IN_ROW=13]="IN_ROW",e[e.IN_CELL=14]="IN_CELL",e[e.IN_SELECT=15]="IN_SELECT",e[e.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",e[e.IN_TEMPLATE=17]="IN_TEMPLATE",e[e.AFTER_BODY=18]="AFTER_BODY",e[e.IN_FRAMESET=19]="IN_FRAMESET",e[e.AFTER_FRAMESET=20]="AFTER_FRAMESET",e[e.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",e[e.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET";})(K||(K={}));var mPt={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},fOe=new Set([T.TABLE,T.TBODY,T.TFOOT,T.THEAD,T.TR]),pOe={scriptingEnabled:true,sourceCodeLocationInfo:false,treeAdapter:Iu,onParseError:null},Ax=class{constructor(t,n,o=null,r=null){this.fragmentContext=o,this.scriptHandler=r,this.currentToken=null,this.stopped=false,this.insertionMode=K.INITIAL,this.originalInsertionMode=K.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=false,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=false,this.framesetOk=true,this.skipNextNewLine=false,this.fosterParentingEnabled=false,this.options={...pOe,...t},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError&&(this.options.sourceCodeLocationInfo=true),this.document=n??this.treeAdapter.createDocument(),this.tokenizer=new px(this.options,this),this.activeFormattingElements=new SB(this.treeAdapter),this.fragmentContextID=o?fS(this.treeAdapter.getTagName(o)):T.UNKNOWN,this._setContextModes(o??this.document,this.fragmentContextID),this.openElements=new yB(this.document,this.treeAdapter,this);}static parse(t,n){let o=new this(n);return o.tokenizer.write(t,true),o.document}static getFragmentParser(t,n){let o={...pOe,...n};t??(t=o.treeAdapter.createElement(se.TEMPLATE,Ie.HTML,[]));let r=o.treeAdapter.createElement("documentmock",Ie.HTML,[]),i=new this(o,r,t);return i.fragmentContextID===T.TEMPLATE&&i.tmplInsertionModeStack.unshift(K.IN_TEMPLATE),i._initTokenizerForFragmentParsing(),i._insertFakeRootElement(),i._resetInsertionMode(),i._findFormInFragmentContext(),i}getFragment(){let t=this.treeAdapter.getFirstChild(this.document),n=this.treeAdapter.createDocumentFragment();return this._adoptNodes(t,n),n}_err(t,n,o){var r;if(!this.onParseError)return;let i=(r=t.location)!==null&&r!==void 0?r:mPt,s={code:n,startLine:i.startLine,startCol:i.startCol,startOffset:i.startOffset,endLine:o?i.startLine:i.endLine,endCol:o?i.startCol:i.endCol,endOffset:o?i.startOffset:i.endOffset};this.onParseError(s);}onItemPush(t,n,o){var r,i;(i=(r=this.treeAdapter).onItemPush)===null||i===void 0||i.call(r,t),o&&this.openElements.stackTop>0&&this._setContextModes(t,n);}onItemPop(t,n){var o,r;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(t,this.currentToken),(r=(o=this.treeAdapter).onItemPop)===null||r===void 0||r.call(o,t,this.openElements.current),n){let i,s;this.openElements.stackTop===0&&this.fragmentContext?(i=this.fragmentContext,s=this.fragmentContextID):{current:i,currentTagId:s}=this.openElements,this._setContextModes(i,s);}}_setContextModes(t,n){let o=t===this.document||t&&this.treeAdapter.getNamespaceURI(t)===Ie.HTML;this.currentNotInHTML=!o,this.tokenizer.inForeignNode=!o&&t!==void 0&&n!==void 0&&!this._isIntegrationPoint(n,t);}_switchToTextParsing(t,n){this._insertElement(t,Ie.HTML),this.tokenizer.state=n,this.originalInsertionMode=this.insertionMode,this.insertionMode=K.TEXT;}switchToPlaintextParsing(){this.insertionMode=K.TEXT,this.originalInsertionMode=K.IN_BODY,this.tokenizer.state=Fs.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)!==Ie.HTML))switch(this.fragmentContextID){case T.TITLE:case T.TEXTAREA:{this.tokenizer.state=Fs.RCDATA;break}case T.STYLE:case T.XMP:case T.IFRAME:case T.NOEMBED:case T.NOFRAMES:case T.NOSCRIPT:{this.tokenizer.state=Fs.RAWTEXT;break}case T.SCRIPT:{this.tokenizer.state=Fs.SCRIPT_DATA;break}case T.PLAINTEXT:{this.tokenizer.state=Fs.PLAINTEXT;break}}}_setDocumentType(t){let n=t.name||"",o=t.publicId||"",r=t.systemId||"";if(this.treeAdapter.setDocumentType(this.document,n,o,r),t.location){let s=this.treeAdapter.getChildNodes(this.document).find(a=>this.treeAdapter.isDocumentTypeNode(a));s&&this.treeAdapter.setNodeSourceCodeLocation(s,t.location);}}_attachElementToTree(t,n){if(this.options.sourceCodeLocationInfo){let o=n&&{...n,startTag:n};this.treeAdapter.setNodeSourceCodeLocation(t,o);}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(t);else {let o=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(o??this.document,t);}}_appendElement(t,n){let o=this.treeAdapter.createElement(t.tagName,n,t.attrs);this._attachElementToTree(o,t.location);}_insertElement(t,n){let o=this.treeAdapter.createElement(t.tagName,n,t.attrs);this._attachElementToTree(o,t.location),this.openElements.push(o,t.tagID);}_insertFakeElement(t,n){let o=this.treeAdapter.createElement(t,Ie.HTML,[]);this._attachElementToTree(o,null),this.openElements.push(o,n);}_insertTemplate(t){let n=this.treeAdapter.createElement(t.tagName,Ie.HTML,t.attrs),o=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(n,o),this._attachElementToTree(n,t.location),this.openElements.push(n,t.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,null);}_insertFakeRootElement(){let t=this.treeAdapter.createElement(se.HTML,Ie.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(t,null),this.treeAdapter.appendChild(this.openElements.current,t),this.openElements.push(t,T.HTML);}_appendCommentNode(t,n){let o=this.treeAdapter.createCommentNode(t.data);this.treeAdapter.appendChild(n,o),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(o,t.location);}_insertCharacters(t){let n,o;if(this._shouldFosterParentOnInsertion()?({parent:n,beforeElement:o}=this._findFosterParentingLocation(),o?this.treeAdapter.insertTextBefore(n,t.chars,o):this.treeAdapter.insertText(n,t.chars)):(n=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(n,t.chars)),!t.location)return;let r=this.treeAdapter.getChildNodes(n),i=o?r.lastIndexOf(o):r.length,s=r[i-1];if(this.treeAdapter.getNodeSourceCodeLocation(s)){let{endLine:l,endCol:c,endOffset:u}=t.location;this.treeAdapter.updateNodeSourceCodeLocation(s,{endLine:l,endCol:c,endOffset:u});}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(s,t.location);}_adoptNodes(t,n){for(let o=this.treeAdapter.getFirstChild(t);o;o=this.treeAdapter.getFirstChild(t))this.treeAdapter.detachNode(o),this.treeAdapter.appendChild(n,o);}_setEndLocation(t,n){if(this.treeAdapter.getNodeSourceCodeLocation(t)&&n.location){let o=n.location,r=this.treeAdapter.getTagName(t),i=n.type===kn.END_TAG&&r===n.tagName?{endTag:{...o},endLine:o.endLine,endCol:o.endCol,endOffset:o.endOffset}:{endLine:o.startLine,endCol:o.startCol,endOffset:o.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(t,i);}}shouldProcessStartTagTokenInForeignContent(t){if(!this.currentNotInHTML)return false;let n,o;return this.openElements.stackTop===0&&this.fragmentContext?(n=this.fragmentContext,o=this.fragmentContextID):{current:n,currentTagId:o}=this.openElements,t.tagID===T.SVG&&this.treeAdapter.getTagName(n)===se.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(n)===Ie.MATHML?false:this.tokenizer.inForeignNode||(t.tagID===T.MGLYPH||t.tagID===T.MALIGNMARK)&&o!==void 0&&!this._isIntegrationPoint(o,n,Ie.HTML)}_processToken(t){switch(t.type){case kn.CHARACTER:{this.onCharacter(t);break}case kn.NULL_CHARACTER:{this.onNullCharacter(t);break}case kn.COMMENT:{this.onComment(t);break}case kn.DOCTYPE:{this.onDoctype(t);break}case kn.START_TAG:{this._processStartTag(t);break}case kn.END_TAG:{this.onEndTag(t);break}case kn.EOF:{this.onEof(t);break}case kn.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(t);break}}}_isIntegrationPoint(t,n,o){let r=this.treeAdapter.getNamespaceURI(n),i=this.treeAdapter.getAttrList(n);return dOe(t,r,i,o)}_reconstructActiveFormattingElements(){let t=this.activeFormattingElements.entries.length;if(t){let n=this.activeFormattingElements.entries.findIndex(r=>r.type===Cu.Marker||this.openElements.contains(r.element)),o=n===-1?t-1:n-1;for(let r=o;r>=0;r--){let i=this.activeFormattingElements.entries[r];this._insertElement(i.token,this.treeAdapter.getNamespaceURI(i.element)),i.element=this.openElements.current;}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=K.IN_ROW;}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(T.P),this.openElements.popUntilTagNamePopped(T.P);}_resetInsertionMode(){for(let t=this.openElements.stackTop;t>=0;t--)switch(t===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[t]){case T.TR:{this.insertionMode=K.IN_ROW;return}case T.TBODY:case T.THEAD:case T.TFOOT:{this.insertionMode=K.IN_TABLE_BODY;return}case T.CAPTION:{this.insertionMode=K.IN_CAPTION;return}case T.COLGROUP:{this.insertionMode=K.IN_COLUMN_GROUP;return}case T.TABLE:{this.insertionMode=K.IN_TABLE;return}case T.BODY:{this.insertionMode=K.IN_BODY;return}case T.FRAMESET:{this.insertionMode=K.IN_FRAMESET;return}case T.SELECT:{this._resetInsertionModeForSelect(t);return}case T.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case T.HTML:{this.insertionMode=this.headElement?K.AFTER_HEAD:K.BEFORE_HEAD;return}case T.TD:case T.TH:{if(t>0){this.insertionMode=K.IN_CELL;return}break}case T.HEAD:{if(t>0){this.insertionMode=K.IN_HEAD;return}break}}this.insertionMode=K.IN_BODY;}_resetInsertionModeForSelect(t){if(t>0)for(let n=t-1;n>0;n--){let o=this.openElements.tagIDs[n];if(o===T.TEMPLATE)break;if(o===T.TABLE){this.insertionMode=K.IN_SELECT_IN_TABLE;return}}this.insertionMode=K.IN_SELECT;}_isElementCausesFosterParenting(t){return fOe.has(t)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let t=this.openElements.stackTop;t>=0;t--){let n=this.openElements.items[t];switch(this.openElements.tagIDs[t]){case T.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(n)===Ie.HTML)return {parent:this.treeAdapter.getTemplateContent(n),beforeElement:null};break}case T.TABLE:{let o=this.treeAdapter.getParentNode(n);return o?{parent:o,beforeElement:n}:{parent:this.openElements.items[t-1],beforeElement:null}}}}return {parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(t){let n=this._findFosterParentingLocation();n.beforeElement?this.treeAdapter.insertBefore(n.parent,t,n.beforeElement):this.treeAdapter.appendChild(n.parent,t);}_isSpecialElement(t,n){let o=this.treeAdapter.getNamespaceURI(t);return qPe[o].has(n)}onCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){$Ot(this,t);return}switch(this.insertionMode){case K.INITIAL:{hx(this,t);break}case K.BEFORE_HTML:{fx(this,t);break}case K.BEFORE_HEAD:{yx(this,t);break}case K.IN_HEAD:{Sx(this,t);break}case K.IN_HEAD_NO_SCRIPT:{bx(this,t);break}case K.AFTER_HEAD:{Tx(this,t);break}case K.IN_BODY:case K.IN_CAPTION:case K.IN_CELL:case K.IN_TEMPLATE:{SOe(this,t);break}case K.TEXT:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:{this._insertCharacters(t);break}case K.IN_TABLE:case K.IN_TABLE_BODY:case K.IN_ROW:{F3(this,t);break}case K.IN_TABLE_TEXT:{wOe(this,t);break}case K.IN_COLUMN_GROUP:{AB(this,t);break}case K.AFTER_BODY:{EB(this,t);break}case K.AFTER_AFTER_BODY:{TB(this,t);break}}}onNullCharacter(t){if(this.skipNextNewLine=false,this.tokenizer.inForeignNode){jOt(this,t);return}switch(this.insertionMode){case K.INITIAL:{hx(this,t);break}case K.BEFORE_HTML:{fx(this,t);break}case K.BEFORE_HEAD:{yx(this,t);break}case K.IN_HEAD:{Sx(this,t);break}case K.IN_HEAD_NO_SCRIPT:{bx(this,t);break}case K.AFTER_HEAD:{Tx(this,t);break}case K.TEXT:{this._insertCharacters(t);break}case K.IN_TABLE:case K.IN_TABLE_BODY:case K.IN_ROW:{F3(this,t);break}case K.IN_COLUMN_GROUP:{AB(this,t);break}case K.AFTER_BODY:{EB(this,t);break}case K.AFTER_AFTER_BODY:{TB(this,t);break}}}onComment(t){if(this.skipNextNewLine=false,this.currentNotInHTML){B3(this,t);return}switch(this.insertionMode){case K.INITIAL:case K.BEFORE_HTML:case K.BEFORE_HEAD:case K.IN_HEAD:case K.IN_HEAD_NO_SCRIPT:case K.AFTER_HEAD:case K.IN_BODY:case K.IN_TABLE:case K.IN_CAPTION:case K.IN_COLUMN_GROUP:case K.IN_TABLE_BODY:case K.IN_ROW:case K.IN_CELL:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:case K.IN_TEMPLATE:case K.IN_FRAMESET:case K.AFTER_FRAMESET:{B3(this,t);break}case K.IN_TABLE_TEXT:{gx(this,t);break}case K.AFTER_BODY:{bPt(this,t);break}case K.AFTER_AFTER_BODY:case K.AFTER_AFTER_FRAMESET:{TPt(this,t);break}}}onDoctype(t){switch(this.skipNextNewLine=false,this.insertionMode){case K.INITIAL:{APt(this,t);break}case K.BEFORE_HEAD:case K.IN_HEAD:case K.IN_HEAD_NO_SCRIPT:case K.AFTER_HEAD:{this._err(t,he.misplacedDoctype);break}case K.IN_TABLE_TEXT:{gx(this,t);break}}}onStartTag(t){this.skipNextNewLine=false,this.currentToken=t,this._processStartTag(t),t.selfClosing&&!t.ackSelfClosing&&this._err(t,he.nonVoidHtmlElementStartTagWithTrailingSolidus);}_processStartTag(t){this.shouldProcessStartTagTokenInForeignContent(t)?GOt(this,t):this._startTagOutsideForeignContent(t);}_startTagOutsideForeignContent(t){switch(this.insertionMode){case K.INITIAL:{hx(this,t);break}case K.BEFORE_HTML:{EPt(this,t);break}case K.BEFORE_HEAD:{wPt(this,t);break}case K.IN_HEAD:{xu(this,t);break}case K.IN_HEAD_NO_SCRIPT:{IPt(this,t);break}case K.AFTER_HEAD:{_Pt(this,t);break}case K.IN_BODY:{Bs(this,t);break}case K.IN_TABLE:{BE(this,t);break}case K.IN_TABLE_TEXT:{gx(this,t);break}case K.IN_CAPTION:{ROt(this,t);break}case K.IN_COLUMN_GROUP:{$3(this,t);break}case K.IN_TABLE_BODY:{RB(this,t);break}case K.IN_ROW:{CB(this,t);break}case K.IN_CELL:{xOt(this,t);break}case K.IN_SELECT:{IOe(this,t);break}case K.IN_SELECT_IN_TABLE:{POt(this,t);break}case K.IN_TEMPLATE:{MOt(this,t);break}case K.AFTER_BODY:{LOt(this,t);break}case K.IN_FRAMESET:{NOt(this,t);break}case K.AFTER_FRAMESET:{FOt(this,t);break}case K.AFTER_AFTER_BODY:{UOt(this,t);break}case K.AFTER_AFTER_FRAMESET:{HOt(this,t);break}}}onEndTag(t){this.skipNextNewLine=false,this.currentToken=t,this.currentNotInHTML?zOt(this,t):this._endTagOutsideForeignContent(t);}_endTagOutsideForeignContent(t){switch(this.insertionMode){case K.INITIAL:{hx(this,t);break}case K.BEFORE_HTML:{vPt(this,t);break}case K.BEFORE_HEAD:{RPt(this,t);break}case K.IN_HEAD:{CPt(this,t);break}case K.IN_HEAD_NO_SCRIPT:{xPt(this,t);break}case K.AFTER_HEAD:{PPt(this,t);break}case K.IN_BODY:{wB(this,t);break}case K.TEXT:{gOt(this,t);break}case K.IN_TABLE:{Ex(this,t);break}case K.IN_TABLE_TEXT:{gx(this,t);break}case K.IN_CAPTION:{COt(this,t);break}case K.IN_COLUMN_GROUP:{IOt(this,t);break}case K.IN_TABLE_BODY:{U3(this,t);break}case K.IN_ROW:{COe(this,t);break}case K.IN_CELL:{_Ot(this,t);break}case K.IN_SELECT:{xOe(this,t);break}case K.IN_SELECT_IN_TABLE:{OOt(this,t);break}case K.IN_TEMPLATE:{kOt(this,t);break}case K.AFTER_BODY:{POe(this,t);break}case K.IN_FRAMESET:{DOt(this,t);break}case K.AFTER_FRAMESET:{BOt(this,t);break}case K.AFTER_AFTER_BODY:{TB(this,t);break}}}onEof(t){switch(this.insertionMode){case K.INITIAL:{hx(this,t);break}case K.BEFORE_HTML:{fx(this,t);break}case K.BEFORE_HEAD:{yx(this,t);break}case K.IN_HEAD:{Sx(this,t);break}case K.IN_HEAD_NO_SCRIPT:{bx(this,t);break}case K.AFTER_HEAD:{Tx(this,t);break}case K.IN_BODY:case K.IN_TABLE:case K.IN_CAPTION:case K.IN_COLUMN_GROUP:case K.IN_TABLE_BODY:case K.IN_ROW:case K.IN_CELL:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:{EOe(this,t);break}case K.TEXT:{fOt(this,t);break}case K.IN_TABLE_TEXT:{gx(this,t);break}case K.IN_TEMPLATE:{_Oe(this,t);break}case K.AFTER_BODY:case K.IN_FRAMESET:case K.AFTER_FRAMESET:case K.AFTER_AFTER_BODY:case K.AFTER_AFTER_FRAMESET:{j3(this,t);break}}}onWhitespaceCharacter(t){if(this.skipNextNewLine&&(this.skipNextNewLine=false,t.chars.charCodeAt(0)===F.LINE_FEED)){if(t.chars.length===1)return;t.chars=t.chars.substr(1);}if(this.tokenizer.inForeignNode){this._insertCharacters(t);return}switch(this.insertionMode){case K.IN_HEAD:case K.IN_HEAD_NO_SCRIPT:case K.AFTER_HEAD:case K.TEXT:case K.IN_COLUMN_GROUP:case K.IN_SELECT:case K.IN_SELECT_IN_TABLE:case K.IN_FRAMESET:case K.AFTER_FRAMESET:{this._insertCharacters(t);break}case K.IN_BODY:case K.IN_CAPTION:case K.IN_CELL:case K.IN_TEMPLATE:case K.AFTER_BODY:case K.AFTER_AFTER_BODY:case K.AFTER_AFTER_FRAMESET:{yOe(this,t);break}case K.IN_TABLE:case K.IN_TABLE_BODY:case K.IN_ROW:{F3(this,t);break}case K.IN_TABLE_TEXT:{vOe(this,t);break}}}};function pPt(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName);return n?e.openElements.contains(n.element)?e.openElements.hasInScope(t.tagID)||(n=null):(e.activeFormattingElements.removeEntry(n),n=null):AOe(e,t),n}function hPt(e,t){let n=null,o=e.openElements.stackTop;for(;o>=0;o--){let r=e.openElements.items[o];if(r===t.element)break;e._isSpecialElement(r,e.openElements.tagIDs[o])&&(n=r);}return n||(e.openElements.shortenToLength(Math.max(o,0)),e.activeFormattingElements.removeEntry(t)),n}function gPt(e,t,n){let o=t,r=e.openElements.getCommonAncestor(t);for(let i=0,s=r;s!==n;i++,s=r){r=e.openElements.getCommonAncestor(s);let a=e.activeFormattingElements.getElementEntry(s),l=a&&i>=dPt;!a||l?(l&&e.activeFormattingElements.removeEntry(a),e.openElements.remove(s)):(s=fPt(e,a),o===t&&(e.activeFormattingElements.bookmark=a),e.treeAdapter.detachNode(o),e.treeAdapter.appendChild(s,o),o=s);}return o}function fPt(e,t){let n=e.treeAdapter.getNamespaceURI(t.element),o=e.treeAdapter.createElement(t.token.tagName,n,t.token.attrs);return e.openElements.replace(t.element,o),t.element=o,o}function yPt(e,t,n){let o=e.treeAdapter.getTagName(t),r=fS(o);if(e._isElementCausesFosterParenting(r))e._fosterParentElement(n);else {let i=e.treeAdapter.getNamespaceURI(t);r===T.TEMPLATE&&i===Ie.HTML&&(t=e.treeAdapter.getTemplateContent(t)),e.treeAdapter.appendChild(t,n);}}function SPt(e,t,n){let o=e.treeAdapter.getNamespaceURI(n.element),{token:r}=n,i=e.treeAdapter.createElement(r.tagName,o,r.attrs);e._adoptNodes(t,i),e.treeAdapter.appendChild(t,i),e.activeFormattingElements.insertElementAfterBookmark(i,r),e.activeFormattingElements.removeEntry(n),e.openElements.remove(n.element),e.openElements.insertAfter(t,i,r.tagID);}function H3(e,t){for(let n=0;n<uPt;n++){let o=pPt(e,t);if(!o)break;let r=hPt(e,o);if(!r)break;e.activeFormattingElements.bookmark=o;let i=gPt(e,r,o.element),s=e.openElements.getCommonAncestor(o.element);e.treeAdapter.detachNode(i),s&&yPt(e,s,i),SPt(e,r,o);}}function B3(e,t){e._appendCommentNode(t,e.openElements.currentTmplContentOrNode);}function bPt(e,t){e._appendCommentNode(t,e.openElements.items[0]);}function TPt(e,t){e._appendCommentNode(t,e.document);}function j3(e,t){if(e.stopped=true,t.location){let n=e.fragmentContext?0:2;for(let o=e.openElements.stackTop;o>=n;o--)e._setEndLocation(e.openElements.items[o],t);if(!e.fragmentContext&&e.openElements.stackTop>=0){let o=e.openElements.items[0],r=e.treeAdapter.getNodeSourceCodeLocation(o);if(r&&!r.endTag&&(e._setEndLocation(o,t),e.openElements.stackTop>=1)){let i=e.openElements.items[1],s=e.treeAdapter.getNodeSourceCodeLocation(i);s&&!s.endTag&&e._setEndLocation(i,t);}}}}function APt(e,t){e._setDocumentType(t);let n=t.forceQuirks?wa.QUIRKS:aOe(t);sOe(t)||e._err(t,he.nonConformingDoctype),e.treeAdapter.setDocumentMode(e.document,n),e.insertionMode=K.BEFORE_HTML;}function hx(e,t){e._err(t,he.missingDoctype,true),e.treeAdapter.setDocumentMode(e.document,wa.QUIRKS),e.insertionMode=K.BEFORE_HTML,e._processToken(t);}function EPt(e,t){t.tagID===T.HTML?(e._insertElement(t,Ie.HTML),e.insertionMode=K.BEFORE_HEAD):fx(e,t);}function vPt(e,t){let n=t.tagID;(n===T.HTML||n===T.HEAD||n===T.BODY||n===T.BR)&&fx(e,t);}function fx(e,t){e._insertFakeRootElement(),e.insertionMode=K.BEFORE_HEAD,e._processToken(t);}function wPt(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.HEAD:{e._insertElement(t,Ie.HTML),e.headElement=e.openElements.current,e.insertionMode=K.IN_HEAD;break}default:yx(e,t);}}function RPt(e,t){let n=t.tagID;n===T.HEAD||n===T.BODY||n===T.HTML||n===T.BR?yx(e,t):e._err(t,he.endTagWithoutMatchingOpenElement);}function yx(e,t){e._insertFakeElement(se.HEAD,T.HEAD),e.headElement=e.openElements.current,e.insertionMode=K.IN_HEAD,e._processToken(t);}function xu(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:{e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.TITLE:{e._switchToTextParsing(t,Fs.RCDATA);break}case T.NOSCRIPT:{e.options.scriptingEnabled?e._switchToTextParsing(t,Fs.RAWTEXT):(e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_HEAD_NO_SCRIPT);break}case T.NOFRAMES:case T.STYLE:{e._switchToTextParsing(t,Fs.RAWTEXT);break}case T.SCRIPT:{e._switchToTextParsing(t,Fs.SCRIPT_DATA);break}case T.TEMPLATE:{e._insertTemplate(t),e.activeFormattingElements.insertMarker(),e.framesetOk=false,e.insertionMode=K.IN_TEMPLATE,e.tmplInsertionModeStack.unshift(K.IN_TEMPLATE);break}case T.HEAD:{e._err(t,he.misplacedStartTagForHeadElement);break}default:Sx(e,t);}}function CPt(e,t){switch(t.tagID){case T.HEAD:{e.openElements.pop(),e.insertionMode=K.AFTER_HEAD;break}case T.BODY:case T.BR:case T.HTML:{Sx(e,t);break}case T.TEMPLATE:{yS(e,t);break}default:e._err(t,he.endTagWithoutMatchingOpenElement);}}function yS(e,t){e.openElements.tmplCount>0?(e.openElements.generateImpliedEndTagsThoroughly(),e.openElements.currentTagId!==T.TEMPLATE&&e._err(t,he.closingOfElementWithOpenChildElements),e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode()):e._err(t,he.endTagWithoutMatchingOpenElement);}function Sx(e,t){e.openElements.pop(),e.insertionMode=K.AFTER_HEAD,e._processToken(t);}function IPt(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.BASEFONT:case T.BGSOUND:case T.HEAD:case T.LINK:case T.META:case T.NOFRAMES:case T.STYLE:{xu(e,t);break}case T.NOSCRIPT:{e._err(t,he.nestedNoscriptInHead);break}default:bx(e,t);}}function xPt(e,t){switch(t.tagID){case T.NOSCRIPT:{e.openElements.pop(),e.insertionMode=K.IN_HEAD;break}case T.BR:{bx(e,t);break}default:e._err(t,he.endTagWithoutMatchingOpenElement);}}function bx(e,t){let n=t.type===kn.EOF?he.openElementsLeftAfterEof:he.disallowedContentInNoscriptInHead;e._err(t,n),e.openElements.pop(),e.insertionMode=K.IN_HEAD,e._processToken(t);}function _Pt(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.BODY:{e._insertElement(t,Ie.HTML),e.framesetOk=false,e.insertionMode=K.IN_BODY;break}case T.FRAMESET:{e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_FRAMESET;break}case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:case T.NOFRAMES:case T.SCRIPT:case T.STYLE:case T.TEMPLATE:case T.TITLE:{e._err(t,he.abandonedHeadElementChild),e.openElements.push(e.headElement,T.HEAD),xu(e,t),e.openElements.remove(e.headElement);break}case T.HEAD:{e._err(t,he.misplacedStartTagForHeadElement);break}default:Tx(e,t);}}function PPt(e,t){switch(t.tagID){case T.BODY:case T.HTML:case T.BR:{Tx(e,t);break}case T.TEMPLATE:{yS(e,t);break}default:e._err(t,he.endTagWithoutMatchingOpenElement);}}function Tx(e,t){e._insertFakeElement(se.BODY,T.BODY),e.insertionMode=K.IN_BODY,vB(e,t);}function vB(e,t){switch(t.type){case kn.CHARACTER:{SOe(e,t);break}case kn.WHITESPACE_CHARACTER:{yOe(e,t);break}case kn.COMMENT:{B3(e,t);break}case kn.START_TAG:{Bs(e,t);break}case kn.END_TAG:{wB(e,t);break}case kn.EOF:{EOe(e,t);break}}}function yOe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t);}function SOe(e,t){e._reconstructActiveFormattingElements(),e._insertCharacters(t),e.framesetOk=false;}function OPt(e,t){e.openElements.tmplCount===0&&e.treeAdapter.adoptAttributes(e.openElements.items[0],t.attrs);}function MPt(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e.openElements.tmplCount===0&&(e.framesetOk=false,e.treeAdapter.adoptAttributes(n,t.attrs));}function kPt(e,t){let n=e.openElements.tryPeekProperlyNestedBodyElement();e.framesetOk&&n&&(e.treeAdapter.detachNode(n),e.openElements.popAllUpToHtmlElement(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_FRAMESET);}function LPt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML);}function NPt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e.openElements.currentTagId!==void 0&&dx.has(e.openElements.currentTagId)&&e.openElements.pop(),e._insertElement(t,Ie.HTML);}function DPt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),e.skipNextNewLine=true,e.framesetOk=false;}function FPt(e,t){let n=e.openElements.tmplCount>0;(!e.formElement||n)&&(e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),n||(e.formElement=e.openElements.current));}function BPt(e,t){e.framesetOk=false;let n=t.tagID;for(let o=e.openElements.stackTop;o>=0;o--){let r=e.openElements.tagIDs[o];if(n===T.LI&&r===T.LI||(n===T.DD||n===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[o],r))break}e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML);}function UPt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),e.tokenizer.state=Fs.PLAINTEXT;}function HPt(e,t){e.openElements.hasInScope(T.BUTTON)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.BUTTON)),e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.framesetOk=false;}function jPt(e,t){let n=e.activeFormattingElements.getElementEntryInScopeWithTagName(se.A);n&&(H3(e,t),e.openElements.remove(n.element),e.activeFormattingElements.removeEntry(n)),e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function $Pt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function GPt(e,t){e._reconstructActiveFormattingElements(),e.openElements.hasInScope(T.NOBR)&&(H3(e,t),e._reconstructActiveFormattingElements()),e._insertElement(t,Ie.HTML),e.activeFormattingElements.pushElement(e.openElements.current,t);}function zPt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.activeFormattingElements.insertMarker(),e.framesetOk=false;}function VPt(e,t){e.treeAdapter.getDocumentMode(e.document)!==wa.QUIRKS&&e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._insertElement(t,Ie.HTML),e.framesetOk=false,e.insertionMode=K.IN_TABLE;}function bOe(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Ie.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function TOe(e){let t=pB(e,Up.TYPE);return t!=null&&t.toLowerCase()===cPt}function WPt(e,t){e._reconstructActiveFormattingElements(),e._appendElement(t,Ie.HTML),TOe(t)||(e.framesetOk=false),t.ackSelfClosing=true;}function qPt(e,t){e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;}function KPt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._appendElement(t,Ie.HTML),e.framesetOk=false,t.ackSelfClosing=true;}function YPt(e,t){t.tagName=se.IMG,t.tagID=T.IMG,bOe(e,t);}function JPt(e,t){e._insertElement(t,Ie.HTML),e.skipNextNewLine=true,e.tokenizer.state=Fs.RCDATA,e.originalInsertionMode=e.insertionMode,e.framesetOk=false,e.insertionMode=K.TEXT;}function XPt(e,t){e.openElements.hasInButtonScope(T.P)&&e._closePElement(),e._reconstructActiveFormattingElements(),e.framesetOk=false,e._switchToTextParsing(t,Fs.RAWTEXT);}function QPt(e,t){e.framesetOk=false,e._switchToTextParsing(t,Fs.RAWTEXT);}function hOe(e,t){e._switchToTextParsing(t,Fs.RAWTEXT);}function ZPt(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML),e.framesetOk=false,e.insertionMode=e.insertionMode===K.IN_TABLE||e.insertionMode===K.IN_CAPTION||e.insertionMode===K.IN_TABLE_BODY||e.insertionMode===K.IN_ROW||e.insertionMode===K.IN_CELL?K.IN_SELECT_IN_TABLE:K.IN_SELECT;}function eOt(e,t){e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML);}function tOt(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTags(),e._insertElement(t,Ie.HTML);}function nOt(e,t){e.openElements.hasInScope(T.RUBY)&&e.openElements.generateImpliedEndTagsWithExclusion(T.RTC),e._insertElement(t,Ie.HTML);}function oOt(e,t){e._reconstructActiveFormattingElements(),N3(t),bB(t),t.selfClosing?e._appendElement(t,Ie.MATHML):e._insertElement(t,Ie.MATHML),t.ackSelfClosing=true;}function rOt(e,t){e._reconstructActiveFormattingElements(),D3(t),bB(t),t.selfClosing?e._appendElement(t,Ie.SVG):e._insertElement(t,Ie.SVG),t.ackSelfClosing=true;}function gOe(e,t){e._reconstructActiveFormattingElements(),e._insertElement(t,Ie.HTML);}function Bs(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:{$Pt(e,t);break}case T.A:{jPt(e,t);break}case T.H1:case T.H2:case T.H3:case T.H4:case T.H5:case T.H6:{NPt(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:{LPt(e,t);break}case T.LI:case T.DD:case T.DT:{BPt(e,t);break}case T.BR:case T.IMG:case T.WBR:case T.AREA:case T.EMBED:case T.KEYGEN:{bOe(e,t);break}case T.HR:{KPt(e,t);break}case T.RB:case T.RTC:{tOt(e,t);break}case T.RT:case T.RP:{nOt(e,t);break}case T.PRE:case T.LISTING:{DPt(e,t);break}case T.XMP:{XPt(e,t);break}case T.SVG:{rOt(e,t);break}case T.HTML:{OPt(e,t);break}case T.BASE:case T.LINK:case T.META:case T.STYLE:case T.TITLE:case T.SCRIPT:case T.BGSOUND:case T.BASEFONT:case T.TEMPLATE:{xu(e,t);break}case T.BODY:{MPt(e,t);break}case T.FORM:{FPt(e,t);break}case T.NOBR:{GPt(e,t);break}case T.MATH:{oOt(e,t);break}case T.TABLE:{VPt(e,t);break}case T.INPUT:{WPt(e,t);break}case T.PARAM:case T.TRACK:case T.SOURCE:{qPt(e,t);break}case T.IMAGE:{YPt(e,t);break}case T.BUTTON:{HPt(e,t);break}case T.APPLET:case T.OBJECT:case T.MARQUEE:{zPt(e,t);break}case T.IFRAME:{QPt(e,t);break}case T.SELECT:{ZPt(e,t);break}case T.OPTION:case T.OPTGROUP:{eOt(e,t);break}case T.NOEMBED:case T.NOFRAMES:{hOe(e,t);break}case T.FRAMESET:{kPt(e,t);break}case T.TEXTAREA:{JPt(e,t);break}case T.NOSCRIPT:{e.options.scriptingEnabled?hOe(e,t):gOe(e,t);break}case T.PLAINTEXT:{UPt(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:gOe(e,t);}}function iOt(e,t){if(e.openElements.hasInScope(T.BODY)&&(e.insertionMode=K.AFTER_BODY,e.options.sourceCodeLocationInfo)){let n=e.openElements.tryPeekProperlyNestedBodyElement();n&&e._setEndLocation(n,t);}}function sOt(e,t){e.openElements.hasInScope(T.BODY)&&(e.insertionMode=K.AFTER_BODY,POe(e,t));}function aOt(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n));}function lOt(e){let t=e.openElements.tmplCount>0,{formElement:n}=e;t||(e.formElement=null),(n||t)&&e.openElements.hasInScope(T.FORM)&&(e.openElements.generateImpliedEndTags(),t?e.openElements.popUntilTagNamePopped(T.FORM):n&&e.openElements.remove(n));}function cOt(e){e.openElements.hasInButtonScope(T.P)||e._insertFakeElement(se.P,T.P),e._closePElement();}function uOt(e){e.openElements.hasInListItemScope(T.LI)&&(e.openElements.generateImpliedEndTagsWithExclusion(T.LI),e.openElements.popUntilTagNamePopped(T.LI));}function dOt(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTagsWithExclusion(n),e.openElements.popUntilTagNamePopped(n));}function mOt(e){e.openElements.hasNumberedHeaderInScope()&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilNumberedHeaderPopped());}function pOt(e,t){let n=t.tagID;e.openElements.hasInScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker());}function hOt(e){e._reconstructActiveFormattingElements(),e._insertFakeElement(se.BR,T.BR),e.openElements.pop(),e.framesetOk=false;}function AOe(e,t){let n=t.tagName,o=t.tagID;for(let r=e.openElements.stackTop;r>0;r--){let i=e.openElements.items[r],s=e.openElements.tagIDs[r];if(o===s&&(o!==T.UNKNOWN||e.treeAdapter.getTagName(i)===n)){e.openElements.generateImpliedEndTagsWithExclusion(o),e.openElements.stackTop>=r&&e.openElements.shortenToLength(r);break}if(e._isSpecialElement(i,s))break}}function wB(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:{H3(e,t);break}case T.P:{cOt(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:{aOt(e,t);break}case T.LI:{uOt(e);break}case T.DD:case T.DT:{dOt(e,t);break}case T.H1:case T.H2:case T.H3:case T.H4:case T.H5:case T.H6:{mOt(e);break}case T.BR:{hOt(e);break}case T.BODY:{iOt(e,t);break}case T.HTML:{sOt(e,t);break}case T.FORM:{lOt(e);break}case T.APPLET:case T.OBJECT:case T.MARQUEE:{pOt(e,t);break}case T.TEMPLATE:{yS(e,t);break}default:AOe(e,t);}}function EOe(e,t){e.tmplInsertionModeStack.length>0?_Oe(e,t):j3(e,t);}function gOt(e,t){var n;t.tagID===T.SCRIPT&&((n=e.scriptHandler)===null||n===void 0||n.call(e,e.openElements.current)),e.openElements.pop(),e.insertionMode=e.originalInsertionMode;}function fOt(e,t){e._err(t,he.eofInElementThatCanContainOnlyText),e.openElements.pop(),e.insertionMode=e.originalInsertionMode,e.onEof(t);}function F3(e,t){if(e.openElements.currentTagId!==void 0&&fOe.has(e.openElements.currentTagId))switch(e.pendingCharacterTokens.length=0,e.hasNonWhitespacePendingCharacterToken=false,e.originalInsertionMode=e.insertionMode,e.insertionMode=K.IN_TABLE_TEXT,t.type){case kn.CHARACTER:{wOe(e,t);break}case kn.WHITESPACE_CHARACTER:{vOe(e,t);break}}else vx(e,t);}function yOt(e,t){e.openElements.clearBackToTableContext(),e.activeFormattingElements.insertMarker(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_CAPTION;}function SOt(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_COLUMN_GROUP;}function bOt(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(se.COLGROUP,T.COLGROUP),e.insertionMode=K.IN_COLUMN_GROUP,$3(e,t);}function TOt(e,t){e.openElements.clearBackToTableContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_TABLE_BODY;}function AOt(e,t){e.openElements.clearBackToTableContext(),e._insertFakeElement(se.TBODY,T.TBODY),e.insertionMode=K.IN_TABLE_BODY,RB(e,t);}function EOt(e,t){e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode(),e._processStartTag(t));}function vOt(e,t){TOe(t)?e._appendElement(t,Ie.HTML):vx(e,t),t.ackSelfClosing=true;}function wOt(e,t){!e.formElement&&e.openElements.tmplCount===0&&(e._insertElement(t,Ie.HTML),e.formElement=e.openElements.current,e.openElements.pop());}function BE(e,t){switch(t.tagID){case T.TD:case T.TH:case T.TR:{AOt(e,t);break}case T.STYLE:case T.SCRIPT:case T.TEMPLATE:{xu(e,t);break}case T.COL:{bOt(e,t);break}case T.FORM:{wOt(e,t);break}case T.TABLE:{EOt(e,t);break}case T.TBODY:case T.TFOOT:case T.THEAD:{TOt(e,t);break}case T.INPUT:{vOt(e,t);break}case T.CAPTION:{yOt(e,t);break}case T.COLGROUP:{SOt(e,t);break}default:vx(e,t);}}function Ex(e,t){switch(t.tagID){case T.TABLE:{e.openElements.hasInTableScope(T.TABLE)&&(e.openElements.popUntilTagNamePopped(T.TABLE),e._resetInsertionMode());break}case T.TEMPLATE:{yS(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:vx(e,t);}}function vx(e,t){let n=e.fosterParentingEnabled;e.fosterParentingEnabled=true,vB(e,t),e.fosterParentingEnabled=n;}function vOe(e,t){e.pendingCharacterTokens.push(t);}function wOe(e,t){e.pendingCharacterTokens.push(t),e.hasNonWhitespacePendingCharacterToken=true;}function gx(e,t){let n=0;if(e.hasNonWhitespacePendingCharacterToken)for(;n<e.pendingCharacterTokens.length;n++)vx(e,e.pendingCharacterTokens[n]);else for(;n<e.pendingCharacterTokens.length;n++)e._insertCharacters(e.pendingCharacterTokens[n]);e.insertionMode=e.originalInsertionMode,e._processToken(t);}var ROe=new Set([T.CAPTION,T.COL,T.COLGROUP,T.TBODY,T.TD,T.TFOOT,T.TH,T.THEAD,T.TR]);function ROt(e,t){let n=t.tagID;ROe.has(n)?e.openElements.hasInTableScope(T.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=K.IN_TABLE,BE(e,t)):Bs(e,t);}function COt(e,t){let n=t.tagID;switch(n){case T.CAPTION:case T.TABLE:{e.openElements.hasInTableScope(T.CAPTION)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(T.CAPTION),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=K.IN_TABLE,n===T.TABLE&&Ex(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:wB(e,t);}}function $3(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.COL:{e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.TEMPLATE:{xu(e,t);break}default:AB(e,t);}}function IOt(e,t){switch(t.tagID){case T.COLGROUP:{e.openElements.currentTagId===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=K.IN_TABLE);break}case T.TEMPLATE:{yS(e,t);break}case T.COL:break;default:AB(e,t);}}function AB(e,t){e.openElements.currentTagId===T.COLGROUP&&(e.openElements.pop(),e.insertionMode=K.IN_TABLE,e._processToken(t));}function RB(e,t){switch(t.tagID){case T.TR:{e.openElements.clearBackToTableBodyContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_ROW;break}case T.TH:case T.TD:{e.openElements.clearBackToTableBodyContext(),e._insertFakeElement(se.TR,T.TR),e.insertionMode=K.IN_ROW,CB(e,t);break}case T.CAPTION:case T.COL:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE,BE(e,t));break}default:BE(e,t);}}function U3(e,t){let n=t.tagID;switch(t.tagID){case T.TBODY:case T.TFOOT:case T.THEAD:{e.openElements.hasInTableScope(n)&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE);break}case T.TABLE:{e.openElements.hasTableBodyContextInTableScope()&&(e.openElements.clearBackToTableBodyContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE,Ex(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:Ex(e,t);}}function CB(e,t){switch(t.tagID){case T.TH:case T.TD:{e.openElements.clearBackToTableRowContext(),e._insertElement(t,Ie.HTML),e.insertionMode=K.IN_CELL,e.activeFormattingElements.insertMarker();break}case T.CAPTION:case T.COL:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:case T.TR:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY,RB(e,t));break}default:BE(e,t);}}function COe(e,t){switch(t.tagID){case T.TR:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY);break}case T.TABLE:{e.openElements.hasInTableScope(T.TR)&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY,U3(e,t));break}case T.TBODY:case T.TFOOT:case T.THEAD:{(e.openElements.hasInTableScope(t.tagID)||e.openElements.hasInTableScope(T.TR))&&(e.openElements.clearBackToTableRowContext(),e.openElements.pop(),e.insertionMode=K.IN_TABLE_BODY,U3(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:Ex(e,t);}}function xOt(e,t){let n=t.tagID;ROe.has(n)?(e.openElements.hasInTableScope(T.TD)||e.openElements.hasInTableScope(T.TH))&&(e._closeTableCell(),CB(e,t)):Bs(e,t);}function _Ot(e,t){let n=t.tagID;switch(n){case T.TD:case T.TH:{e.openElements.hasInTableScope(n)&&(e.openElements.generateImpliedEndTags(),e.openElements.popUntilTagNamePopped(n),e.activeFormattingElements.clearToLastMarker(),e.insertionMode=K.IN_ROW);break}case T.TABLE:case T.TBODY:case T.TFOOT:case T.THEAD:case T.TR:{e.openElements.hasInTableScope(n)&&(e._closeTableCell(),COe(e,t));break}case T.BODY:case T.CAPTION:case T.COL:case T.COLGROUP:case T.HTML:break;default:wB(e,t);}}function IOe(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.OPTION:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e._insertElement(t,Ie.HTML);break}case T.OPTGROUP:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop(),e._insertElement(t,Ie.HTML);break}case T.HR:{e.openElements.currentTagId===T.OPTION&&e.openElements.pop(),e.openElements.currentTagId===T.OPTGROUP&&e.openElements.pop(),e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.INPUT:case T.KEYGEN:case T.TEXTAREA:case T.SELECT:{e.openElements.hasInSelectScope(T.SELECT)&&(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),t.tagID!==T.SELECT&&e._processStartTag(t));break}case T.SCRIPT:case T.TEMPLATE:{xu(e,t);break}}}function xOe(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:{yS(e,t);break}}}function POt(e,t){let n=t.tagID;n===T.CAPTION||n===T.TABLE||n===T.TBODY||n===T.TFOOT||n===T.THEAD||n===T.TR||n===T.TD||n===T.TH?(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),e._processStartTag(t)):IOe(e,t);}function OOt(e,t){let n=t.tagID;n===T.CAPTION||n===T.TABLE||n===T.TBODY||n===T.TFOOT||n===T.THEAD||n===T.TR||n===T.TD||n===T.TH?e.openElements.hasInTableScope(n)&&(e.openElements.popUntilTagNamePopped(T.SELECT),e._resetInsertionMode(),e.onEndTag(t)):xOe(e,t);}function MOt(e,t){switch(t.tagID){case T.BASE:case T.BASEFONT:case T.BGSOUND:case T.LINK:case T.META:case T.NOFRAMES:case T.SCRIPT:case T.STYLE:case T.TEMPLATE:case T.TITLE:{xu(e,t);break}case T.CAPTION:case T.COLGROUP:case T.TBODY:case T.TFOOT:case T.THEAD:{e.tmplInsertionModeStack[0]=K.IN_TABLE,e.insertionMode=K.IN_TABLE,BE(e,t);break}case T.COL:{e.tmplInsertionModeStack[0]=K.IN_COLUMN_GROUP,e.insertionMode=K.IN_COLUMN_GROUP,$3(e,t);break}case T.TR:{e.tmplInsertionModeStack[0]=K.IN_TABLE_BODY,e.insertionMode=K.IN_TABLE_BODY,RB(e,t);break}case T.TD:case T.TH:{e.tmplInsertionModeStack[0]=K.IN_ROW,e.insertionMode=K.IN_ROW,CB(e,t);break}default:e.tmplInsertionModeStack[0]=K.IN_BODY,e.insertionMode=K.IN_BODY,Bs(e,t);}}function kOt(e,t){t.tagID===T.TEMPLATE&&yS(e,t);}function _Oe(e,t){e.openElements.tmplCount>0?(e.openElements.popUntilTagNamePopped(T.TEMPLATE),e.activeFormattingElements.clearToLastMarker(),e.tmplInsertionModeStack.shift(),e._resetInsertionMode(),e.onEof(t)):j3(e,t);}function LOt(e,t){t.tagID===T.HTML?Bs(e,t):EB(e,t);}function POe(e,t){var n;if(t.tagID===T.HTML){if(e.fragmentContext||(e.insertionMode=K.AFTER_AFTER_BODY),e.options.sourceCodeLocationInfo&&e.openElements.tagIDs[0]===T.HTML){e._setEndLocation(e.openElements.items[0],t);let o=e.openElements.items[1];o&&!(!((n=e.treeAdapter.getNodeSourceCodeLocation(o))===null||n===void 0)&&n.endTag)&&e._setEndLocation(o,t);}}else EB(e,t);}function EB(e,t){e.insertionMode=K.IN_BODY,vB(e,t);}function NOt(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.FRAMESET:{e._insertElement(t,Ie.HTML);break}case T.FRAME:{e._appendElement(t,Ie.HTML),t.ackSelfClosing=true;break}case T.NOFRAMES:{xu(e,t);break}}}function DOt(e,t){t.tagID===T.FRAMESET&&!e.openElements.isRootHtmlElementCurrent()&&(e.openElements.pop(),!e.fragmentContext&&e.openElements.currentTagId!==T.FRAMESET&&(e.insertionMode=K.AFTER_FRAMESET));}function FOt(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.NOFRAMES:{xu(e,t);break}}}function BOt(e,t){t.tagID===T.HTML&&(e.insertionMode=K.AFTER_AFTER_FRAMESET);}function UOt(e,t){t.tagID===T.HTML?Bs(e,t):TB(e,t);}function TB(e,t){e.insertionMode=K.IN_BODY,vB(e,t);}function HOt(e,t){switch(t.tagID){case T.HTML:{Bs(e,t);break}case T.NOFRAMES:{xu(e,t);break}}}function jOt(e,t){t.chars=Go,e._insertCharacters(t);}function $Ot(e,t){e._insertCharacters(t),e.framesetOk=false;}function OOe(e){for(;e.treeAdapter.getNamespaceURI(e.openElements.current)!==Ie.HTML&&e.openElements.currentTagId!==void 0&&!e._isIntegrationPoint(e.openElements.currentTagId,e.openElements.current);)e.openElements.pop();}function GOt(e,t){if(cOe(t))OOe(e),e._startTagOutsideForeignContent(t);else {let n=e._getAdjustedCurrentElement(),o=e.treeAdapter.getNamespaceURI(n);o===Ie.MATHML?N3(t):o===Ie.SVG&&(uOe(t),D3(t)),bB(t),t.selfClosing?e._appendElement(t,o):e._insertElement(t,o),t.ackSelfClosing=true;}}function zOt(e,t){if(t.tagID===T.P||t.tagID===T.BR){OOe(e),e._endTagOutsideForeignContent(t);return}for(let n=e.openElements.stackTop;n>0;n--){let o=e.openElements.items[n];if(e.treeAdapter.getNamespaceURI(o)===Ie.HTML){e._endTagOutsideForeignContent(t);break}let r=e.treeAdapter.getTagName(o);if(r.toLowerCase()===t.tagName){t.tagName=r,e.openElements.shortenToLength(n);break}}}new Set([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 MOe(e,t,n){typeof e=="string"&&(n=t,t=e,e=null);let o=Ax.getFragmentParser(e,n);return o.tokenizer.write(t,true),o.getFragment()}var VOt=5e3,HE=1024;function UE(e){return typeof e.tagName=="string"&&Array.isArray(e.attrs)}function IB(e){return e.nodeName==="#text"}function xB(e,t){let n=MOe(e),o={nodesLeft:VOt};for(let s of n.childNodes)if(UE(s)&&s.tagName.toLowerCase()==="body"){let a=t(s,o);if(a!==void 0)return a}let r=[];for(let s of n.childNodes){if(o.nodesLeft<=0)break;if(UE(s)){let a=t(s,o);a!==void 0&&r.push(a);}}let i={tag:"body"};return r.length>0&&(i.children=r),i}var WOt=new Set(["html","head","meta","link","template","script","style","noscript","path","br","polygon","defs"]),qOt=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 KOt(e,t){return qOt.has(t)?true:e.attrs.some(({name:n})=>M3.has(n.toLowerCase()))}function kOe(e,t){if(t.nodesLeft<=0)return;let n=e.tagName.toLowerCase();if(WOt.has(n))return;let o,r;for(let{name:c,value:u}of e.attrs){let d=c.toLowerCase();if(d==="role"){r=u;continue}o===void 0&&(o={}),o[d]=u;}let i,s=[];for(let c of e.childNodes){if(t.nodesLeft<=0)break;if(IB(c)){let u=c.value;if(u&&u.trim().length>0){let d=u.length>HE?u.slice(0,HE):u;i=i===void 0?d:`${i} ${d}`;}}else if(UE(c)){let u=kOe(c,t);u!==void 0&&s.push(u);}}let a=n==="body"||KOt(e,n);if(!a&&s.length===0&&i===void 0)return;if(!a&&s.length===1&&i===void 0)return s[0];t.nodesLeft-=1;let l={tag:n};return r!==void 0&&(l.role=r),o!==void 0&&(l.attributes=o),i!==void 0&&(l.text=i),s.length>0&&(l.children=s),l}function G3(e){return xB(e,kOe)}function LOe(e,t){if(t.nodesLeft<=0)return;t.nodesLeft-=1;let n=e.tagName.toLowerCase(),o,r;for(let{name:l,value:c}of e.attrs){let u=l.toLowerCase();if(u==="role"){r=c;continue}o===void 0&&(o={}),o[u]=c;}let i,s=[];for(let l of e.childNodes){if(t.nodesLeft<=0)break;if(IB(l)){let c=l.value;if(c&&c.trim().length>0){let u=c.length>HE?c.slice(0,HE):c;i=i===void 0?u:`${i} ${u}`;}}else if(UE(l)){let c=LOe(l,t);c!==void 0&&s.push(c);}}let a={tag:n};return r!==void 0&&(a.role=r),o!==void 0&&(a.attributes=o),i!==void 0&&(a.text=i),s.length>0&&(a.children=s),a}function z3(e){return xB(e,LOe)}var YOt=new Set(["PRESET_ACTION","AI_ACTION_DYNAMIC"]),SS=class{constructor(t,n,o,r,i,s){this.orgId=t;this.testId=n;this.testName=o;this.diskStorage=r;this.parentFlushResults=i;this.appGraphSink=s;}children=[];finished=false;stepFrequenciesByType={};currentResults=[];async getScreenshot(t,n){return this.diskStorage.readFile(`${oa}/${n}.jpeg`)}async getHtmlSnapshot(t,n){return this.diskStorage.readFile(`${oa}/${n}.html`)?.toString()}recordStepStat(t){t.type!=="PRESET_ACTION"?this.stepFrequenciesByType[t.type]=(this.stepFrequenciesByType[t.type]||0)+1:this.stepFrequenciesByType[t.command.type]=(this.stepFrequenciesByType[t.command.type]||0)+1;}sendFinalizedStepStats(){for(let[t,n]of Object.entries(this.stepFrequenciesByType))dn.increment("test_step_execution",n,[`type:${t}`,"platform:browser","executor:cli",`orgId:${this.orgId}`]);}flushResults(t){this.currentResults=t,this.parentFlushResults(t);}async startStep(t,n){let{logger:o,step:r,parentStepIdChain:i}=t;this.recordStepStat(r);let s={step:r,status:"RUNNING",startedAt:new Date},a=[...n];this.currentResults=a;let l=new V3(this.orgId,this.testId,this.testName,s,this.diskStorage,o,c=>{this.flushResults([...a,c]);},i??[],this.appGraphSink);return this.children.push(l),l}async finish(t){this.finished||(this.finished=true,await Promise.all(this.children.map(n=>n.finishInternal({status:SQ(t.status),finishedAt:t.finishedAt}))),this.sendFinalizedStepStats());}};function JOt(e){switch(e){case "SUCCESS":return "PASSED";case "FAILED":return "FAILED";case "CANCELLED":return "CANCELLED";case "RUNNING":return "RUNNING";case "IDLE":return "PENDING";default:return Xe(e)}}function _B(e){return e.some(t=>t.status==="FAILED")?"FAILED":e.some(t=>t.status==="CANCELLED")?"CANCELLED":"RUNNING"}var V3=class{constructor(t,n,o,r,i,s,a,l,c){this.orgId=t;this.testId=n;this.testName=o;this.metadata=r;this.diskStorage=i;this.logger=s;this.parentFlushResults=a;this.parentStepIdChain=l;this.appGraphSink=c;this.interactionTracer=new zd({storeTraceAsset:u=>this.storeTraceAsset(u)}),Gd.initializeRootTracerContext(this.interactionTracer);}children=[];finished=false;interactionTracer;pendingAssetWrites=Promise.resolve();async attachBeforeScreenshot(t){let{snapshotId:n,screenshot:o}=t;if(o){this.metadata.beforeSnapshotId=n;try{await this.diskStorage.storeFileAsync({name:`${oa}/${n}.jpeg`,contents:o});}catch(r){this.logger.warn({err:r,snapshotId:n},"Failed to store before-step screenshot");}}}async attachAfterScreenshot(t){let{snapshotId:n,screenshot:o}=t;if(o){this.metadata.afterSnapshotId=n;try{await this.diskStorage.storeFileAsync({name:`${oa}/${n}.jpeg`,contents:o});}catch(r){this.logger.warn({err:r,snapshotId:n},"Failed to store after-step screenshot");}}}attachBeforeHtmlSnapshot(t){let{snapshotId:n,html:o}=t;this.metadata.beforeSnapshotId=n,this.queueAssetWrite(`${n}.html`,o);}attachAfterHtmlSnapshot(t){let{snapshotId:n,html:o,fingerprintHtml:r,url:i,logger:s}=t;this.metadata.afterSnapshotId=n,this.queueAssetWrite(`${n}.html`,o),this.appGraphSink&&YOt.has(this.metadata.step.type)&&this.appGraphSink({html:r??o,archivalHtml:o,url:i,stepId:this.metadata.step.id,parentStepIdChain:[...this.parentStepIdChain],logger:s});}recordTargetAutoHeal(t){let{healType:n}=t,o=n==="AI"?"ai-target-heal":"cache-heal";dn.increment("test_event",1,[`name:${o}`,`orgId:${this.orgId}`]),this.metadata.healMetadata={healType:n,healedAt:new Date};}storeTraceAsset(t){this.queueAssetWrite(`${t.snapshotId}.${t.extension??"jpeg"}`,t.data);}queueAssetWrite(t,n){this.pendingAssetWrites=this.pendingAssetWrites.then(async()=>{try{await this.diskStorage.storeFileAsync({name:`${oa}/${t}`,contents:n});}catch(o){this.logger.warn({err:o,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(n=>n.finish({status:JOt(t.status),finishedAt:t.finishedAt})).concat(this.pendingAssetWrites)));}recordStepDuration(t,n,o){xO({durationMs:n,executor:"cli",logger:this.logger,orgId:this.orgId,resolvedStep:t,status:o});}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 n=>({...t,status:_B(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n,type:"MODULE"});case "CONDITIONAL":return n=>({...t,blocks:t.blocks.map(r=>({assertion:r.assertion,steps:bl(r.steps)})),elseSteps:t.elseSteps?bl(t.elseSteps):void 0,status:_B(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n});case "WHILE_LOOP":return n=>({...t,steps:bl(t.steps),status:_B(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n});case "AI_ACTION":case "AI_ACTION_DYNAMIC":case "PRESET_ACTION":case "SECTION":return n=>({...t,status:_B(n),startedAt:this.metadata.startedAt,finishedAt:new Date,results:n});default:return Xe(t)}}async startSubSteps(){let t=this.getResultBuilderForCurrentStep(),n=new SS(this.orgId,this.testId,this.testName,this.diskStorage,o=>{let r=t(o);this.parentFlushResults(r);});return this.children.push(n),n}};var PB=class{constructor(t,n,o,r,i,s,a,l){this.orgId=t;this.testId=n;this.testName=o;this.runAttemptId=r;this.metadata=i;this.diskStorage=s;this.recordVideo=a;this.progressHandle=l;this.diskStorage.mkdir(oa),this.harWriter=new $y(this.diskStorage.createFileStream(`${oa}/har-pages.log`),this.diskStorage.createFileStream(`${oa}/har-entries.log`)),this.resourceUsageStream=this.diskStorage.createFileStream(`${oa}/resource-usage.ndjson`),this.resourceUsageSampler=Vte({keepSamples:false,onSample:c=>{this.resourceUsageStream.write(`${JSON.stringify(c)}
|
|
10466
10466
|
`),c.system.cpu&&(this.cpuUsageSum+=c.system.cpu.total,this.cpuSampleCount++);let u=c.system.memory.total-c.system.memory.free;this.memoryUsageSum+=u,this.memorySampleCount++;}});}finished=false;children=[];beforeResults;mainResults=[];afterResults;harWriter;resourceUsageStream;resourceUsageSampler;uiStatesStream;previousHtmlByteHash;previousFingerprint;previousArchivalHtmlByteHash;previousArchivalFingerprint;cpuUsageSum=0;cpuSampleCount=0;memoryUsageSum=0;memorySampleCount=0;get loggerBindings(){return {runAttemptId:this.runAttemptId}}getResourceUsageAverages(){return {avgCpuUsage:this.cpuSampleCount>0?this.cpuUsageSum/this.cpuSampleCount:0,avgMemoryUsage:this.memorySampleCount>0?this.memoryUsageSum/this.memorySampleCount:0}}get videoOutputPath(){if(this.recordVideo)return mo__default.resolve(this.diskStorage.cwd(),oa)}setActiveVideo(t,n){this.recordVideo&&(this.metadata.activeVideos=this.metadata.activeVideos||[],this.metadata.activeVideos.push({videoName:t,timestamp:n}));}setViewport(t){this.metadata.viewport=t;}onNetworkPage(t){this.finished||this.harWriter.writePage(t);}appendUiState(t){this.finished||(this.uiStatesStream||(this.uiStatesStream=this.diskStorage.createFileStream(Z6)),this.uiStatesStream.write(`${JSON.stringify(t)}
|
|
10467
10467
|
`));}buildAppGraphSink(){return ({html:t,archivalHtml:n,url:o,stepId:r,parentStepIdChain:i,logger:s})=>{let a=sB(t),l=a===this.previousHtmlByteHash?this.previousFingerprint:void 0;if(!l){try{l=lB({url:o,dom:z3(t)});}catch(u){s.debug({err:u,stepId:r},"Failed to compute app-graph UIState fingerprint");return}this.previousHtmlByteHash=a,this.previousFingerprint=l;}let c=this.computeArchivalFingerprint({archivalHtml:n,url:o,stepId:r,logger:s});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:n,stepId:o,logger:r}){let i=sB(t);if(i===this.previousArchivalHtmlByteHash)return this.previousArchivalFingerprint;try{let s=lB({url:n,dom:G3(t)});return this.previousArchivalHtmlByteHash=i,this.previousArchivalFingerprint=s,s}catch(s){r.debug({err:s,stepId:o},"Failed to compute archival app-graph UIState fingerprint");return}}onNetworkLogs(t){this.finished||this.harWriter.writeEntries(t);}attachConsoleLogs(t){let{logs:n}=t;this.diskStorage.storeFile({name:"console.json",contents:JSON.stringify(n,null,2)});}attachBrowserCrashDump(t){let{crashReportDirFetcher:n,logger:o}=t,r=n();if(!r)return;let i=new wW;i.addLocalFolder(r,void 0,s=>s!==".DS_Store"),this.diskStorage.storeFile({name:`${oa}/${j$}`,contents:i.toBuffer()}),o.info({browserCrashZipName:j$},"Attached browser crash ZIP");}writeMetadata(t){this.diskStorage.storeFile({name:dt,contents:JSON.stringify(t,null,2)});}flushResults(t){let{results:n,beforeResults:o,afterResults:r}=oz({results:t?.mainResults??this.mainResults,beforeResults:t?.beforeResults??this.beforeResults,afterResults:t?.afterResults??this.afterResults},bs);this.writeMetadata({...this.metadata,results:n,beforeResults:o,afterResults:r}),this.reportProgress(o,n,r);}reportProgress(t,n,o){try{this.progressHandle.reportCompletedSteps(rM(t??[])+rM(n)+rM(o??[]));}catch(r){bs.warn({err:r},"Failed to report run progress");}}async finish(t){if(this.finished){t.logger.info({runAttemptId:this.runAttemptId,callerStatus:t.result.status},"CliRunAttemptTracer.finish() called but already finished \u2014 ignoring (real results already written)");return}this.finished=true;let{logger:n,result:o}=t,{results:r,beforeResults:i,afterResults:s}=oz({...o,results:o.results??this.mainResults,beforeResults:o.beforeResults??this.beforeResults,afterResults:o.afterResults??this.afterResults},n),a={...this.metadata,status:o.status,finishedAt:new Date,results:r,beforeResults:i,afterResults:s};await Promise.all(this.children.map(l=>l.finish({status:a.status,finishedAt:a.finishedAt}))),this.harWriter.close();try{this.resourceUsageSampler.stop(),this.resourceUsageStream.end();}catch{}if(this.uiStatesStream)try{this.uiStatesStream.end();}catch{}this.recordVideo==="on-fail"&&o.status==="PASSED"&&(Aoe(n,this.videoOutputPath),a.activeVideos=void 0),this.writeMetadata(a),this.reportProgress(i,r,s);}finishBeforeStepList(t){this.beforeResults=t;}finishAfterStepList(t){this.afterResults=t;}async startBeforeStepList(t=[]){this.beforeResults=t;let n=new SS(this.orgId,this.testId,this.testName,this.diskStorage,o=>this.flushResults({beforeResults:o}),this.buildAppGraphSink());return this.children.push(n),n}async startMainStepList(t=[]){this.mainResults=t;let n=new SS(this.orgId,this.testId,this.testName,this.diskStorage,o=>this.flushResults({mainResults:o}),this.buildAppGraphSink());return this.children.push(n),n}async startAfterStepList(t=[]){this.afterResults=t;let n=new SS(this.orgId,this.testId,this.testName,this.diskStorage,o=>this.flushResults({afterResults:o}),this.buildAppGraphSink());return this.children.push(n),n}async getScreenshot(t,n){return this.diskStorage.readFile(`${oa}/${n}.jpeg`)}async getHtmlSnapshot(t,n){return this.diskStorage.readFile(`${oa}/${n}.html`)?.toString()}};var OB=class{constructor(t,n,o,r,i,s,a,l){this.orgId=t;this.testId=n;this.testName=o;this.runId=r;this.metadata=i;this.diskStorage=s;this.recordVideo=a;this.progressHandle=l;}children=[];finished=false;get loggerBindings(){return {runId:this.runId}}get envVarBindings(){return {[Twe]:this.runId}}get runMetadata(){return this.metadata}get storageDirectoryPath(){return this.diskStorage.cwd()}async finish(t){if(this.finished)return;this.finished=true;let o=this.children[this.children.length-1]?.getResourceUsageAverages(),r={...this.metadata,schemaVersion:Ct,finishedAt:t.finishedAt||new Date,status:t.status,failureDetails:t.failureDetails,failureReason:t.failureReason,flake:t.isFlake||false,failureRecoveryDetails:t.failureRecoveryDetails,avgCpuUsage:o?.avgCpuUsage,avgMemoryUsage:o?.avgMemoryUsage,runAssertionResults:t.runAssertionResults};await Promise.all(this.children.map(i=>i.finish({logger:t.logger,result:{status:r.status}}))),this.diskStorage.storeFile({name:dt,contents:JSON.stringify(r,null,2)}),this.diskStorage.close(),this.progressHandle.setStatus(t.status);}async startAttempt(t){this.metadata.attempts=this.metadata.attempts+1,this.metadata.status="RUNNING",this.metadata.schemaVersion=Ct,this.diskStorage.storeFile({name:dt,contents:JSON.stringify(this.metadata,null,2)});let n=this.diskStorage.cd(`attempts/${this.metadata.attempts}`),o={id:t,schemaVersion:Ct,runAttemptSchemaVersion:yte,startedAt:new Date,status:"RUNNING"};n.storeFile({name:dt,contents:JSON.stringify(o,null,2)});let r=new PB(this.orgId,this.testId,this.testName,t,o,n,this.recordVideo,this.progressHandle);return this.children.push(r),r}};var bS=class e{constructor(t,n,o,r,i,s=true,a){this.orgId=t;this.runGroupId=n;this.metadata=o;this.diskStorage=r;this.recordVideo=i;this.ownsRunGroupMetadata=s;this.progressWriter=a;}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:n,relativeProjectDir:o,orgId:r,runGroupId:i,outputDir:s,gitMetadata:a,labels:l,recordVideo:c,ai:u,browser:d,ownsRunGroupMetadata:m,progressSink:p,logger:h}){let g=m??true,f={...a,suiteName:t&&Ao(t),projectName:n,relativeProjectDir:o,id:i,trigger:ml.CLI,startedAt:new Date,status:"RUNNING",cliVersion:Vt,labels:l??[],ai:u,browser:d},y=new aC(s,h,g);return g&&y.storeFile({name:dt,contents:JSON.stringify(f,null,2)}),new e(r,i,f,y,c??false,g,p??new oM(s,i,h))}getLiveRunStatusCounts(){return this.progressWriter.getRunStatusCounts()}registerWorkerRun(t){this.progressWriter.registerRun(t);}updateWorkerRun(t,n){this.progressWriter.updateRun(t,n);}async finish(t){this.finished||(this.finished=true,await de({name:"cli.finish_run_group",serviceName:"cli",fn:()=>this.finishHelper(t)}));}async finishHelper(t){let{status:n}=t,o={...this.metadata,status:n,updatedAt:new Date,finishedAt:new Date};await Promise.all(this.children.map(r=>r.finish({logger:t.logger,status:o.status,finishedAt:o.finishedAt}))),this.ownsRunGroupMetadata&&(this.diskStorage.storeFile({name:dt,contents:JSON.stringify(o,null,2)}),this.progressWriter.finish(n));}async startRun(t){let n=this.diskStorage.createRunArchive(t.runId,t.logger),o={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?Ao(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:Vt,schemaVersion:t.schemaVersion,testBundleHash:t.testBundleHash,startedAt:new Date,attempts:0,quarantined:t.quarantined??false,quarantinedReason:t.quarantinedReason,executionType:"WEB",aiSettings:t.aiSettings};n.storeFile({name:dt,contents:JSON.stringify(o,null,2)});let r=this.progressWriter.registerRun({runId:t.runId,testId:t.testId,testName:t.testName,directory:t.directory,totalSteps:voe([...t.originalSteps.beforeSteps??[],...t.originalSteps.steps,...t.originalSteps.afterSteps??[]])}),i=new OB(this.orgId,t.testId,t.testName,t.runId,o,n,t.recordVideoOverride??this.recordVideo,r);return this.children.push(i),i}};async function NOe(e,t,n){if(n)return {};try{let{quarantined:o}=await t.getQuarantinedTests();return Object.fromEntries(o.map(r=>[r.testId,{quarantinedAt:r.quarantinedAt,quarantinedReason:r.quarantinedReason,quarantinedBy:r.quarantinedBy}]))}catch(o){return e.warn({err:o},"Failed to fetch quarantined tests, proceeding without them."),{}}}var MB=class{constructor(t){this.send=t;}onBegin(t){}onTestBegin(t){this.send({type:"reporter",event:"testBegin",testRef:t});}onTestStatus(t,n,o){this.send({type:"reporter",event:"testStatus",testRef:t,status:n,note:o});}onStepStart(t,n,o){this.send({type:"reporter",event:"stepStart",testRef:t,label:n,depth:o});}onStepEnd(t,n,o){this.send({type:"reporter",event:"stepEnd",testRef:t,label:n,depth:o.depth,durationMs:o.durationMs,success:o.success});}onSectionStart(t,n){this.send({type:"reporter",event:"sectionStart",testRef:t,label:n});}onTestEnd(t,n,o){this.send({type:"reporter",event:"testEnd",testRef:t,status:n,recovered:o?.recovered});}onEnd(t){}};var wx="__run-worker";function ZOt(){let e=[],t=false,n=[];return {next:()=>{let s=e.shift();return s?Promise.resolve(s):t?Promise.resolve(void 0):new Promise(a=>n.push(a))},assignTest:s=>{let a=n.shift();a?a(s):e.push(s);},markNoMoreTests:()=>{for(t=true;n.length>0;)n.shift()(void 0);}}}var W3=class{constructor(t){this.emit=t;}registerRun(t){return this.emit({type:"progressRegister",params:t}),new fR(this,t.runId)}updateRun(t,n){this.emit({type:"progressUpdate",runId:t,update:n});}finish(){}getRunStatusCounts(){}};async function q3(){let e=process.send?.bind(process);e||(C.error("Worker process started without an IPC channel."),process.exit(1));let t=f=>new Promise(y=>e(f,void 0,void 0,()=>y())),n=ZOt(),o=[],r=await new Promise((f,y)=>{let S=false,b=()=>{process.off("message",R),process.off("disconnect",w);},v=O=>{S||(S=true,b(),y(O));},A=O=>{S||(S=true,b(),f(O));},R=O=>{if(O.type==="init"){A(O.config);return}o.push(O);},w=()=>{v(new Error("Parent process disconnected before sending init"));};process.on("message",R),process.on("disconnect",w),t({type:"ready"});}),i,s=[],a=f=>{switch(f.type){case "assignTest":n.assignTest(f.test);return;case "noMoreTests":n.markNoMoreTests();return;case "cancel":n.markNoMoreTests(),i?i.cancel(f.reason,f.waitForRunsToSettle):s.push(f);return}};process.on("message",a);for(let f of o)a(f);r.shareDiagnostics&&await ac({serviceName:"cli",enabled:true});let l=new Nt({baseUrl:r.serverUrl??"",apiKey:r.apiKey??"",logger:fe,mode:"runner",runner:"test-runner"}),c=new Cr(r.project.config.ai?.agentConfig,{baseUrl:l.baseUrl,apiKey:l.apiKey,logger:fe,mode:"runner",runner:"test-runner"}),u=await bS.start({orgId:r.orgId,runGroupId:r.runGroupId,projectName:r.project.config.name,relativeProjectDir:await YT(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 W3(f=>void t(f)),logger:fe}),d=fe,m=d.child(u.loggerBindings||{}),p=new MB(f=>void t(f));i=new DE({next:n.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:z(f)})});for(let f of s)a(f);let h=await FE({cancel:f=>i.cancel(f),run:()=>i.run()});process.off("message",a);let g=h.cancelled?"CANCELLED":oP(h.runResults);await u.finish({logger:m,status:g}),await t({type:"done",cancelledRuns:[...h.cancelledRunsById.values()],cancelled:h.cancelled,cancellationReason:h.cancellationReason}),await rt(),process.exit(0);}var tMt=3e4,nMt=5e3,oMt="MOMENTIC_WORKER_PROCESSES";function DOe({parallel:e,testCount:t,override:n=process.env[oMt]}){let o=Math.max(1,Math.min(e,t));if(n===void 0||n.trim().length===0)return 1;let r=Number(n);return !Number.isFinite(r)||r<1?1:Math.min(Math.floor(r),o)}function rMt(e,t){if(t<=0)return [];let n=Math.floor(e/t),o=e-n*t;return Array.from({length:t},(r,i)=>i<o?n+1:n)}var K3=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 n={type:"cancel",reason:t,waitForRunsToSettle:true};for(let o of this.workers)this.cancelWorker(o,n);}async start(){let{engineTests:t,parallel:n,workerCount:o}=this.params,r=rMt(n,o);return this.pendingQueue=[...t],this.workers=r.map((i,s)=>this.spawnWorker({index:s,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:n}){let o=process.argv[1];if(!o)throw new Error("Cannot fork worker: process.argv[1] is undefined.");let r=fork(o,[wx],{serialization:"advanced",stdio:["ignore","pipe","pipe","ipc"],env:process.env}),i,s=new Promise(l=>{i=l;}),a={index:t,child:r,parallel:n,inFlight:0,dispatchedTests:[],noMoreTestsSent:false,donePromise:s,resolveDone:i,settled:false,exitCode:null,exitSignal:null};return this.forwardChildLogs(r,t),r.on("message",l=>this.handleWorkerMessage(a,l)),r.on("error",l=>{this.params.logger.error({err:l,workerIndex:t},"Worker error");}),r.on("exit",(l,c)=>{a.exitCode=l,a.exitSignal=c;}),r.on("close",()=>this.handleWorkerClose(a)),a}dispatchToWorker(t){if(t.settled||this.cancelled)return;let n=Math.max(0,t.parallel-t.inFlight),o=this.pendingQueue.splice(0,Math.min(n,this.pendingQueue.length));for(let r of o)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,n){switch(n.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(n);return;case "result":n.result.runId&&this.reportedRunIds.add(n.result.runId),this.runResults.push(n.result),t.inFlight=Math.max(0,t.inFlight-1),this.dispatchToWorker(t);return;case "progressRegister":this.params.runGroupTracer.registerWorkerRun(n.params);return;case "progressUpdate":this.params.runGroupTracer.updateWorkerRun(n.runId,n.update);return;case "fatal":this.params.logger.error({workerIndex:t.index,message:n.message},"Worker reported a fatal error"),this.cancel("Fatal error occurred");return;case "done":for(let o of n.cancelledRuns)o.runId&&(this.reportedRunIds.add(o.runId),this.cancelledRunsById.set(o.runId,o));n.cancelled&&!this.cancelled&&(this.cancelled=true,this.cancellationReason=n.cancellationReason),this.settleWorker(t);return}}relayReporterEvent(t){let{reporter:n}=this.params;switch(t.event){case "testBegin":n.onTestBegin(t.testRef);return;case "testStatus":n.onTestStatus(t.testRef,t.status??"",t.note);return;case "stepStart":n.onStepStart(t.testRef,t.label??"",t.depth);return;case "stepEnd":n.onStepEnd(t.testRef,t.label??"",{durationMs:t.durationMs??0,success:t.success??false,depth:t.depth??0});return;case "sectionStart":n.onSectionStart(t.testRef,t.label??"");return;case "testEnd":n.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,n){t.settled||(t.child.connected&&t.child.send(n),!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");},nMt),t.forceKillTimer.unref());},tMt),t.cancelTimer.unref()));}synthesizeMissingResults(t){let n=this.cancellationReason??"Worker process exited unexpectedly";for(let o of t.dispatchedTests){if(this.reportedRunIds.has(o.runId))continue;this.reportedRunIds.add(o.runId);let r=new Date;this.cancelledRunsById.set(o.runId,{results:[],beforeResults:[],afterResults:[],test:o.testDefinition,filePath:o.testDefinition.relativeFilePath,startedAt:r,lastAttemptStartedAt:r,finishedAt:r,status:"CANCELLED",attempts:0,runId:o.runId,cancellationReason:n,quarantined:o.quarantined,quarantinedMetadata:o.quarantinedMetadata,parameters:{testInputs:o.inputs,envName:this.params.baseConfig.envName,urlOverride:this.params.baseConfig.urlOverride,customHeaders:this.params.baseConfig.customHeaders},outputs:{}});}}forwardChildLogs(t,n){let o=r=>{let i=r.toString().trimEnd();i.length>0&&this.params.logger.debug({workerIndex:n},i);};t.stdout?.on("data",o),t.stderr?.on("data",o);}};async function FOe(e){let t=new K3({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"),FE({timeoutMinutes:e.timeoutMinutes,cancel:n=>t.cancel(n),run:()=>t.start()})}async function X3({logger:e,orgId:t,waitOn:n,waitOnProxy:o,waitOnTimeout:r,log:i=true}){e.info({orgId:t},`Waiting for url: ${n} with timeout: ${r} seconds.`);let s=o?new URL(o):void 0,a;s&&(a={host:s.hostname,port:s.port?parseInt(s.port):s.protocol.startsWith("https")?443:80,auth:s.username||s.password?{username:s.username,password:s.password}:void 0}),await sMt({resources:[n],interval:2500,timeout:r*1e3,headers:{Accept:"*/*"},followRedirect:true,verbose:false,log:i,strictSSL:false,proxy:a});}async function UOe(e){let{suiteName:t,logger:n,tests:o,snapshots:r,yes:i,start:s,waitOn:a,waitOnProxy:l,client:c,project:u,retriesOverride:d,urlOverride:m,envName:p,orgId:h,userId:g,devicePixelRatio:f,customHeaders:y,testInputMatrix:S,include:b,exclude:v,labels:A,reporterDir:R=Due,outputDir:w=uu,uploadResults:O=false,waitOnTimeout:I=60,parallel:_,shardIndex:P=1,shardCount:N=1,regenerateGoldenFiles:D,gitMetadata:k,cacheOptions:H,ignoreQuarantine:J,skipQuarantined:W,onlyQuarantined:V,runGroupId:M,recordVideo:X,timeoutMinutes:$,workers:G,browserTypeOverride:ne,remoteBrowserOverride:ie,aiSelect:Pe=false,aiSelectBase:Ne,aiSelectBudget:Fe,aiSelectDryRun:it=false,aiSelectPrompts:ee=[],shareDiagnostics:Z}=e,be=Pe||it,bt=be&&!r;it||(s&&(n.info({orgId:h},`Executing start command: ${s}`),await eB(s,false)),a&&await X3({logger:n,orgId:h,waitOn:a,waitOnProxy:l,waitOnTimeout:I}));let Ke=new Cr(u.config.ai?.agentConfig,{baseUrl:c.baseUrl,apiKey:c.apiKey,logger:n,mode:"runner",runner:"test-runner"}),we=null,ct=null,kt=[],An=[],et={},Qe,Wt=[];if(r)Qe=r.map(Dt=>({inputs:void 0,testDefinition:Dt.testDefinition,snapshot:Dt}));else {let Dt=await tt(u);Wt=await Xg({tests:o,momenticFiles:Dt,yes:i,project:u,include:b,exclude:v,labels:A,logger:C}),bt&&C.log(`Momentic CLI v${Vt}`);let Yo=await lMt({envName:p,aiSelect:be,aiSelectBase:Ne,aiSelectBudget:Fe,aiSelectDryRun:it,aiSelectPrompts:ee,allTestDefinitions:Wt,client:c,gitMetadata:k,logger:n,orgId:h,project:u});we=Yo.selectionPlanResult,ct=Yo.aiSelectMetadata;let Hs=Yo.testDefinitions;et=await NOe(n,c,J);let Pu=mPe({testDefinitions:Hs,quarantinedTestsMetadata:et,onlyQuarantined:V,skipQuarantined:W});kt=Pu.testsToSkip,An=Pu.quarantinedTestsToSkip,Qe=pPe({testsToRun:Pu.testsToRun,quarantinedTestsToRun:Pu.quarantinedTestsToRun,quarantinedTestsMetadata:et,testInputMatrix:S});}let Qn=Fne({items:Qe,shardIndex:P,shardCount:N,sortKey:Dt=>`${Dt.testDefinition.fullFilePath}:${Dt.inputIndex??0}`}),ro=Qn.some(Dt=>ow(Dt.testDefinition));ro&&pR(),n.info({tests:Qn.length,shardCount:N,shardIndex:P,parallel:_},"Running local tests");let rl=Qn.filter(Dt=>Dt.quarantined).length,Bl=Qn.length-rl,Hi=DOe({parallel:_,testCount:Qn.length,override:G!==void 0?String(G):void 0}),ls=P===1?[...kt.map(Dt=>({relativeFilePath:Dt.relativeFilePath,skipped:{kind:"disabled"}})),...An.map(Dt=>({relativeFilePath:Dt.relativeFilePath,quarantined:true,skipped:{kind:"quarantined",reason:et[Dt.id]?.quarantinedReason??void 0}}))]:[],ir=qe(),U=ie??u.config.browser?.remoteBrowser??false;C.log(Cme({cliName:bt?void 0:"Momentic CLI",cliVersion:bt?void 0:Vt,parallel:_,workerCount:Hi,timeoutMinutes:$,runningCount:Bl,quarantinedCount:rl,skippedCount:ls.length,shardIndex:P,shardCount:N},ir));let{live:ve,files:ft,network:It}=ype({reporter:e.reporter,screen:ir});C.log(""),ve.onBegin({parallel:_,shardCount:N,shardIndex:P,tests:[...ls,...Qn.map(Dt=>({relativeFilePath:Dt.testDefinition.relativeFilePath,inputIndex:Dt.inputIndex,quarantined:Dt.quarantined}))]});let en=[],lm=new Map,of=false,AS,rf=new Date,hr=async()=>{let Dt=c.getAppUrl(),Yo=[...lm.values(),...en.filter(Zn=>!Zn.runId||!lm.has(Zn.runId))].map(Zn=>Zn.status==="CANCELLED"&&!Zn.cancellationReason?{...Zn,cancellationReason:AS}:Zn),Hs=dG(Yo),Pu=Yo.filter(Zn=>Zn.status==="PASSED"&&!!Zn.failureRecoveryDetails?.attempts).length,Hx={results:Yo,startTime:rf.getTime(),getPath:Zn=>Zn.filePath,getUrl:Zn=>Zn.runId?`${Dt}/runs/${Zn.runId}`:void 0,getFailureSummary:Zn=>Zn.failureReason?Mu({failureReason:Zn.failureReason,classification:Zn.failureDetails?.classification,manualClassification:Zn.failureDetails?.manualClassification}).title??Zn.failureReason:"Test failed",printFailureBody:MO,getCancellationReason:Zn=>Zn.cancellationReason,recoveredCount:Pu,skippedCount:ls.length,videoRecordingActive:(!!X||ro)&&U};if(ve.onEnd(Hx),mG(Hx),Wme({errorMessages:Yo.map(Zn=>Zn.failureDetails?.errorMessage),doctorCommand:"`npx momentic doctor`"}),C.log(""),O){let Zn=await mn({text:"Uploading to Momentic\u2026",screen:ir},()=>de({name:"file-storage.upload_test_outputs",serviceName:"file-storage",fn:()=>sC({client:c,resultsPath:w})}));Zn.success?(C.success("Uploaded to Momentic."),C.dimmed(` ${er(Zn.runGroupUrl,ir)}`)):(C.error(`Upload failed: ${Zn.error}.`),C.success(`Saved to ${w}/`),C.dimmed(` upload: npx momentic results upload ${w}`),C.dimmed(` view: npx momentic results view ${w}`)),rm({type:"cli:results_uploaded",test_platform:"web",success:Zn.success});}else if(C.success(`Saved to ${w}/`),C.dimmed(` upload: npx momentic results upload ${w}`),C.dimmed(` view: npx momentic results view ${w}`),N>1||P>1){let jx=rp.dirname(w)||".";C.dimmed(` merge shards: npx momentic results merge ${jx} --output-dir ${rp.join(jx,"merged")}`);}else {let jx=`${Dt}/run-groups/${M}`;C.dimmed(` after upload: ${er(jx,ir)}`);}return Hs},gr=await bS.start({suiteName:t,projectName:u.config.name,relativeProjectDir:await YT(u.rootDir),orgId:h,runGroupId:M,outputDir:w,gitMetadata:k,labels:A,recordVideo:X,ai:u.config.ai,browser:u.config.browser,logger:n});ct&&gr.setAiSelectMetadata(ct);let Us=n.child(gr.loggerBindings||{}),Ul=Qn.map(Dt=>({...Dt,runId:randomUUID()}));if(Hi>1){let Dt=await FOe({engineTests:Ul,parallel:_,workerCount:Hi,timeoutMinutes:$,reporter:ve,logger:Us,runGroupTracer:gr,baseConfig:{project:u,serverUrl:c.baseUrl,apiKey:c.apiKey,orgId:h,userId:g,runGroupId:M,devicePixelRatio:f,outputDir:w,retriesOverride:d,urlOverride:m,envName:p,customHeaders:y,regenerateGoldenFiles:D,gitMetadata:k,cacheOptions:H,browserTypeOverride:ne,remoteBrowserOverride:ie,recordVideo:X,shareDiagnostics:Z,runParallel:_,workerCount:Hi,remoteBrowser:U}});en.push(...Dt.runResults);for(let[Yo,Hs]of Dt.cancelledRunsById)lm.set(Yo,Hs);of=Dt.cancelled,AS=Dt.cancellationReason;}else {let Dt=new DE({testsToRun:Ul,parallel:_,reporter:ve,runGroupTracer:gr,runGroupLogger:Us,logger:n,project:u,client:c,generator:Ke,orgId:h,userId:g,devicePixelRatio:f,outputDir:w,retriesOverride:d,urlOverride:m,envName:p,customHeaders:y,regenerateGoldenFiles:D,gitMetadata:k,cacheOptions:H,browserTypeOverride:ne,remoteBrowserOverride:ie,recordVideo:X,traceMetadata:{runGroupId:M,parallel:_,workerCount:Hi,workerIndex:0,remoteBrowser:U}}),Yo=await FE({timeoutMinutes:$,cancel:Hs=>Dt.cancel(Hs),run:()=>Dt.run()});en.push(...Yo.runResults);for(let[Hs,Pu]of Yo.cancelledRunsById)lm.set(Hs,Pu);of=Yo.cancelled,AS=Yo.cancellationReason;}let cm=of?"CANCELLED":oP(en,{onlyQuarantined:V});await gr.finish({logger:Us,status:cm}),rm({type:"cli:run_completed",test_platform:"web",status:cm,test_count:en.length,duration_ms:Date.now()-rf.getTime()});for(let Dt of ft)await de({name:"reporting.write_standard_report",serviceName:"reporting",fn:()=>Z_e({logger:Us,callbacks:{createDebugDataReaderForRunAttempt:(Yo,Hs)=>new eL(w,Yo,Hs)},format:Dt,params:{projectConfigPath:u.configFilePath,suiteName:t??u.config.name,startedAt:rf,finishedAt:new Date,testsToSkip:kt,quarantinedTestsToSkip:An,quarantinedTestsMetadata:et},runs:en,folder:R})});if(It.includes("newrelic")){let Dt=u.config.reporting?.newrelic;if(!Dt)C.error("The newrelic reporter requires a reporting.newrelic block in momentic.config.yaml.");else try{await de({name:"reporting.send_new_relic_report",serviceName:"reporting",fn:()=>b3({logger:C,config:{...Dt,accountId:vl(Dt.accountId),licenseKey:Dt.licenseKey?vl(Dt.licenseKey):void 0,attributes:Dt.attributes?Object.fromEntries(Object.entries(Dt.attributes).map(([Yo,Hs])=>[Yo,vl(Hs)])):void 0},params:{projectConfigPath:u.configFilePath,suiteName:t??u.config.name,startedAt:rf,finishedAt:new Date,testsToSkip:kt,quarantinedTestsToSkip:An,quarantinedTestsMetadata:et},runs:en,runGroupId:M,envName:p,appUrl:c.getAppUrl(),gitMetadata:k})});}catch(Yo){C.error(`Failed to send report to New Relic: ${z(Yo)}`);}}let OLe=await hr();if(aMt(),we){let Dt=k.githubRepository??k.gitOriginUrl??"",Yo=we.diff?.headSha??"";if(Dt.length>0&&Yo.length>0){let Hs=we.kind==="ready"?we.plan.selectedTests.map(Hx=>Hx.testId):[],Pu=we.kind==="ready"?we.planId:null;n.info({event:"ai_select.run_outcome",repository:Dt,headSha:Yo,runGroupId:M,planId:Pu,mode:it?"SHADOW":"SELECTED",totalCandidates:Wt.length,selectedCount:Hs.length,excludedCount:0,unobservedRunCount:ct?.forcedTests.length??0},"ai-select run outcome");}}return OLe}function aMt(){if(!Su.isEnabled()||Su.getTotalRecords()===0)return;let e=Su.getSummary(),t=Su.getTotalRecords(),n=e.reduce((o,r)=>o+r.totalMs,0);C.log(""),C.dimmed(`CDP Performance Summary (${t} calls, ${Rx(n)} total)`),C.dimmed(BOe("Method",40)+sm("Count",8)+sm("Total",12)+sm("Avg",12)+sm("Min",12)+sm("Max",12));for(let o of e)C.dimmed(BOe(o.method,40)+sm(String(o.count),8)+sm(Rx(o.totalMs),12)+sm(Rx(o.avgMs),12)+sm(Rx(o.minMs),12)+sm(Rx(o.maxMs),12));C.log("");}function Rx(e){return e>=1e3?`${(e/1e3).toFixed(2)}s`:`${e.toFixed(1)}ms`}async function lMt(e){let{aiSelect:t,aiSelectBase:n,aiSelectBudget:o,aiSelectDryRun:r,aiSelectPrompts:i,allTestDefinitions:s,client:a,gitMetadata:l,logger:c,orgId:u,project:d}=e;if(!t)return {selectionPlanResult:null,aiSelectMetadata:null,testDefinitions:s};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:s};let p=d.config.ai?.select,h={baseUrl:a.baseUrl,apiKey:a.apiKey,logger:c,mode:a.mode,runner:"ai-select"},g=new Nt(h),f=new Cr(d.config.ai?.agentConfig,h),y=await Yk({client:g,gitMetadata:l,logger:c}),S=o??p?.targetTests??null,b="default";o!==void 0?b="cli-flag":p?.targetTests!==void 0&&(b="config");let v;try{v=await g3({apiClient:g,generator:f,logger:c,orgId:u,repoRoot:d.rootDir??process.cwd(),repository:m,explicitBase:n,config:p,mainBranch:d.config.gitMainBranch,budgetCap:S,budgetSource:b,dryRun:r,customPrompt:rx(i),environmentName:e.envName,changeRequestDescription:y,candidateTests:s.map(I=>({testPath:I.relativeFilePath.split(rp.sep).join("/"),testId:I.id,baseUrl:I.baseUrl??void 0,description:I.description??void 0})),allTestDefinitions:s.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: ${z(I)}.`,diff:null},P=Y3({selectionPlanResult:_,aiSelectDryRun:r,totalCandidates:s.length,selectedCount:s.length,forcedTests:[]});return J3(P),{selectionPlanResult:_,aiSelectMetadata:P,testDefinitions:s}}let A=v.kind==="ready"&&v.diff?JI({allTestDefinitions:s,changedFiles:v.diff.changedFiles,repoRoot:v.diff.repoRoot,projectRoot:d.rootDir??process.cwd()}):[],R=v.kind==="ready"?cMt(s,v.plan.selectedTests,A,c):{tests:[],planMatchedCount:0};if(v.kind==="ready"&&!r&&s.length>0&&R.tests.length===0&&v.plan.selectedTests.length>0){c.warn({planId:v.planId,planSize:v.plan.selectedTests.length,candidateCount:s.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:v.diff},_=Y3({selectionPlanResult:I,aiSelectDryRun:r,totalCandidates:s.length,selectedCount:s.length,forcedTests:A});return J3(_),{selectionPlanResult:I,aiSelectMetadata:_,testDefinitions:s}}let w=s;v.kind==="ready"&&!r?w=R.tests:v.kind==="run-none"&&!r&&(w=[]);let O=Y3({selectionPlanResult:v,aiSelectDryRun:r,totalCandidates:s.length,selectedCount:R.planMatchedCount,forcedTests:A});return J3(O),r&&process.exit(0),{selectionPlanResult:v,aiSelectMetadata:O,testDefinitions:w}}function Y3(e){let{selectionPlanResult:t,aiSelectDryRun:n,forcedTests:o}=e,r=o.map(s=>({name:s.test.name,testPath:s.test.relativeFilePath,status:s.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:n?"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(s=>({testId:s.testId,name:s.name,testPath:s.testPath,confidence:s.confidence,signals:s.signals,rationale:s.rationale})),forcedTests:r,runAllReason:null}}function J3(e){let t=qe(),n=Je(t),o=[],r=i=>rs({label:"",text:i,screen:t,indent:4});switch(e.mode){case "RUN_ALL":o.push(` ${n.statusGlyph("cancel")} AI selection unavailable${n.dim(`${n.separator}running all ${e.totalCandidates} tests`)}`),e.runAllReason&&o.push(...r(e.runAllReason));break;case "RUN_NONE":o.push(` ${n.statusGlyph("skip")} No relevant tests${n.dim(`${n.separator}skipping all ${e.totalCandidates} tests`)}`),e.runAllReason&&o.push(...r(e.runAllReason));break;case "SHADOW":o.push(` ${n.statusGlyph("pass")} Dry run${n.separator}AI would have selected ${e.selectedCount} of ${e.totalCandidates} tests`),o.push(...r(e.userSummary));break;case "SELECTED":if(o.push(` ${n.statusGlyph("pass")} Selected ${e.selectedCount} of ${e.totalCandidates} tests with AI`),o.push(...r(e.userSummary)),e.forcedTests.length>0){o.push("",` ${n.statusGlyph("pass")} ${e.forcedTests.length} ${e.forcedTests.length===1?"test":"tests"} force-included${n.dim(`${n.separator}edited or added in this change`)}`);for(let i of e.forcedTests)o.push(` ${n.dim("-")} ${i.name} ${n.dim(`(${i.testPath})`)}`);}break;default:Xe(e.mode);}o.push(""),C.log(o.join(`
|
|
10468
10468
|
`));}function cMt(e,t,n,o){let r=new Set,i=new Set;for(let c of t)r.add(c.testId),c.testPath&&i.add(c.testPath);let s=new Set(n.map(c=>c.test.id)),a=[],l=0;for(let c of e){let u=c.relativeFilePath.split(rp.sep).join("/"),d=r.has(c.id)||i.has(u);d&&l++,(d||s.has(c.id))&&a.push(c);}return o.info({total:e.length,selected:a.length,planSize:t.length,forcedCount:n.length},"ai-select: intersected plan with local tests"),{tests:a,planMatchedCount:l}}function BOe(e,t){return e.length>t?e.substring(0,t-1)+"\u2026":e+" ".repeat(t-e.length)}function sm(e,t){return e.length>=t?e:" ".repeat(t-e.length)+e}var HOe=30,pMt=1e3,LB=32;function $Oe(e){let t=new Set([...e.recoveredPromotedRunIds??[],...e.quarantinedSelectedRunIds??[]]);return e.selectedForHealing.filter(n=>!t.has(n.runId))}function GOe(e){return $Oe(e).length+e.failed.length}function zOe(e,t){return t?SJ({failureCount:GOe(e),totalCount:hMt(e)}):{withinBudget:true}}function hMt(e){return GOe(e)+(e.quarantinedSelectedRunIds??[]).length+e.quarantined.failed.length+e.passed.length+e.recovered.length+e.quarantined.passed.length}function jE(){return {selectedForHealing:[],recovered:[],passed:[],failed:[],quarantined:{passed:[],failed:[]}}}async function VOe({resultsDir:e,excludePatterns:t,...n}){let o=mo__default.resolve(e);await _u("load_target");let r=await de({name:"heal.load_target",attributes:{"momentic.heal_target_kind":"results"},fn:async()=>yMt({resultsDir:o,logger:n.logger})}),{healableFailures:i,triageInputSummary:s}=BB({runs:r,excludePatterns:t,skipQuarantined:n.skipQuarantined,ignoreQuarantine:n.ignoreQuarantine}),a=n.agentOutputStream?new Ms(n.agentOutputStream):void 0,l=GE(n);try{let{recoveryAssessments:c,permanentRecoveryCandidates:u}=await DB({candidates:r,excludePatterns:t,triageInputSummary:s,isCompleteRunGroup:!0,outputDir:o,output:a,timelineRecorder:l,shared:n}),d=[...i,...u];return {...await $E({...n,healingCandidates:d,triageInputSummary:s,outputDir:o,output:a,timelineRecorder:l,source:o,isCompleteRunGroup:!0,noResultsMessage:`No failed or permanently-healable recovered test results found in ${o}.`}),recoveryAssessments:c}}finally{a?.finalize();}}async function WOe({runGroupId:e,excludePatterns:t,...n}){await _u("load_target");let o=await de({name:"heal.load_target",attributes:{"momentic.heal_target_kind":"run-group"},fn:()=>Q3({agentOutputStream:n.agentOutputStream,text:`Loading run group ${e}...`,fn:()=>fMt({apiClient:n.apiClient,logger:n.logger,runGroupId:e})})}),{healableFailures:r,triageInputSummary:i}=BB({runs:o,excludePatterns:t,skipQuarantined:n.skipQuarantined,ignoreQuarantine:n.ignoreQuarantine}),s=n.agentOutputStream?new Ms(n.agentOutputStream):void 0,a=GE(n);try{let{recoveryAssessments:l,permanentRecoveryCandidates:c}=await DB({candidates:o,excludePatterns:t,triageInputSummary:i,isCompleteRunGroup:!0,output:s,timelineRecorder:a,shared:n});n.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 $E({...n,healingCandidates:u,triageInputSummary:i,output:s,timelineRecorder:a,source:`run group ${e}`,isCompleteRunGroup:!0,noResultsMessage:`No failed or permanently-healable recovered runs found in run group ${e}.`}),recoveryAssessments:l}}finally{s?.finalize();}}async function qOe({runIds:e,excludePatterns:t,...n}){await _u("load_target");let o=await de({name:"heal.load_target",attributes:{"momentic.heal_target_kind":"run","momentic.run_count":e.length},fn:()=>Q3({agentOutputStream:n.agentOutputStream,text:e.length===1?`Loading run ${e[0]}...`:`Loading ${e.length} runs...`,fn:()=>Promise.all(e.map(async c=>{let u=await n.apiClient.getRun(c);if(!u)throw new ue(`Run ${c} was not found. Check the run ID and that your API key belongs to the same organization.`);return FB({run:u,logger:n.logger,scopeLabel:`run ${c}`})}))})}),{healableFailures:r,triageInputSummary:i}=BB({runs:o,excludePatterns:t,skipQuarantined:n.skipQuarantined,ignoreQuarantine:n.ignoreQuarantine}),s=e.length===1?`run ${e[0]}`:`${e.length} runs`,a=n.agentOutputStream?new Ms(n.agentOutputStream):void 0,l=GE(n);try{let{recoveryAssessments:c,permanentRecoveryCandidates:u}=await DB({candidates:o,excludePatterns:t,triageInputSummary:i,isCompleteRunGroup:!1,output:a,timelineRecorder:l,shared:n});n.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 $E({...n,healingCandidates:d,triageInputSummary:i,output:a,timelineRecorder:l,source:s,isCompleteRunGroup:!1,noResultsMessage:`No failed or permanently-healable recovered runs found for ${s}.`}),recoveryAssessments:c}}finally{a?.finalize();}}async function KOe({gitCommitSha:e,excludePatterns:t,...n}){await _u("load_target");let r=(await de({name:"heal.load_target",attributes:{"momentic.heal_target_kind":"commit"},fn:()=>Q3({agentOutputStream:n.agentOutputStream,text:`Loading runs for commit ${e}...`,fn:()=>n.apiClient.getRunsByCommit(e)})})).map(c=>FB({run:c,logger:n.logger,scopeLabel:`commit ${e}`})),{healableFailures:i,triageInputSummary:s}=BB({runs:r,excludePatterns:t,skipQuarantined:n.skipQuarantined,ignoreQuarantine:n.ignoreQuarantine}),a=n.agentOutputStream?new Ms(n.agentOutputStream):void 0,l=GE(n);try{let{recoveryAssessments:c,permanentRecoveryCandidates:u}=await DB({candidates:r,excludePatterns:t,triageInputSummary:s,isCompleteRunGroup:!0,output:a,timelineRecorder:l,shared:n});n.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 $E({...n,healingCandidates:d,triageInputSummary:s,output:a,timelineRecorder:l,source:`commit ${e}`,isCompleteRunGroup:!0,noResultsMessage:`No failed or permanently-healable recovered runs found for commit ${e}.`}),recoveryAssessments:c}}finally{a?.finalize();}}async function YOe({output:e,generator:t,logger:n,serverId:o,dryRun:r,categoryDefinitions:i,healingConfig:s,abortSignal:a}){if(e)return ZIe({logger:n,generator:t,sessionId:o,dryRun:r,summaryContext:e.summaryContext,healResults:e.heals,bucketingIterations:e.bucketingIterations,failureMessage:e.failure?.message,triageInputSummary:e.triageInputSummary,categoryDefinitions:i,healingConfig:s,abortSignal:a})}function JOe({resultsDir:e,summary:t}){let n=mo__default.join(mo__default.resolve(e),dt),o=ic.parse(JSON.parse(oo__default.readFileSync(n,"utf-8")));oo__default.writeFileSync(n,JSON.stringify({...o,healRiskSummary:t},null,2));}async function DB({candidates:e,excludePatterns:t,triageInputSummary:n,isCompleteRunGroup:o,outputDir:r,output:i,timelineRecorder:s,shared:a}){if(!zOe(n,o).withinBudget)return {recoveryAssessments:[],permanentRecoveryCandidates:[]};let l=t?.map(p=>new RegExp(p)),c=[];for(let p of e)if(!(a.skipRecovered||!p.recoveryInput)&&!(a.skipQuarantined&&p.quarantined&&!a.ignoreQuarantine)&&!tMe({run:p,excludeRegexes:l})){if(a.ignoreQuarantine&&p.recoveryInput.quarantined){c.push({...p.recoveryInput,quarantined:false});continue}c.push(p.recoveryInput);}c.length>0&&i?.commitSection("Recovery assessment"),await _u("recovery_assessment");let u;try{u=await de({name:"heal.recovery_assessment",attributes:{"momentic.recovery_run_count":c.length},fn:()=>nxe({recoveryRuns:c,orgId:a.orgId,serverId:a.serverId,project:a.project,logger:a.logger,generator:a.generator,apiClient:a.apiClient,outputDir:r,abortSignal:a.healingAbortSignal,output:i,timelineRecorder:s})});}catch(p){if(!a.healingAbortSignal.aborted)throw p;a.logger.info({reason:a.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)n.selectedForHealing.push({runId:p.runId,testId:p.testId,testName:p.testName,classification:{activeClassification:null}}),(n.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 $E({healingCandidates:e,triageInputSummary:t,serverId:n,noResultsMessage:o,outputDir:r,limit:i,project:s,apiClient:a,generator:l,logger:c,orgId:u,apiKey:d,start:m,waitOn:p,waitOnProxy:h,waitOnTimeout:g,alwaysSaveCache:f,noCache:y,regenerateHeal:S,sessionOptions:b,timeoutMinutes:v,parallel:A,resolveGitMetadataForCache:R,resolveGitMetadata:w,source:O,sessionManager:I,dryRun:_,jsonOutput:P,abortController:N,healingAbortSignal:D,prepareCheckoutForHealing:k,healingConfig:H,reclassifyContradictions:J,output:W,timelineRecorder:V,isCompleteRunGroup:M}){if(D.throwIfAborted(),i!==void 0&&e.length>i)return {...NB({triageInputSummary:t,err:new Error(`Found ${e.length} healing candidate${e.length===1?"":"s"}, which exceeds the configured limit of ${i}.`)}),...Zg(V)};let X=zOe(t,M);if(!X.withinBudget)return C.warn(X.reason??"Skipping AI triage for this run group."),{heals:[],bucketingIterations:[],existingFixes:[],triageInputSummary:{...t,declinedForOutage:$Oe(t)},healPatches:[],...Zg(V)};if(e.length===0)return C.info(o),{heals:[],bucketingIterations:[],existingFixes:[],triageInputSummary:t,healPatches:[],...Zg(V)};let $=qe();await _u("resolve_git_cache_metadata");let G=await de({name:"heal.resolve_git_cache_metadata",fn:()=>P?R():mn({text:"Resolving git cache context...",screen:$},R)});if(c.info({gitCacheMetadata:G},"Got local git cache metadata"),!P){let Qe=Je($),Wt=[`${A} ${A===1?"worker":"workers"}`];v!==void 0&&v>0&&Wt.push(`timeout=${v}m`);let Qn=[{label:"source",value:O}];G.gitBranchName&&Qn.push({label:"branch",value:G.gitBranchName});let ro=[`Healing ${e.length} ${e.length===1?"test":"tests"}`,...Wt].join(Qe.separator);C.log(`Momentic CLI v${Vt}
|
|
@@ -10836,4 +10836,4 @@ smol-toml/dist/index.js:
|
|
|
10836
10836
|
*/
|
|
10837
10837
|
//# sourceMappingURL=out.js.map
|
|
10838
10838
|
//# sourceMappingURL=cli.js.map
|
|
10839
|
-
//# debugId=
|
|
10839
|
+
//# debugId=93f85515-0b13-50f5-9019-c9d17d973be2
|