ideawave 0.0.65 → 0.0.67

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.
Files changed (3) hide show
  1. package/README.md +6 -10
  2. package/dist/index.mjs +166 -56
  3. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import{createRequire as c7}from"node:module";var l7=c7(import.meta.url);function d7(){let Z=globalThis.performance?.now?.()??Date.now();return Math.round(Z*10)/10}function m(Z,X={}){if(typeof process<"u"&&process.env.IDEAWAVE_AGENT_RUNTIME_TRACE==="0")return;let Q=Object.fromEntries(Object.entries(X).filter(([,K])=>K!==void 0));console.info("[agent-runtime-trace]",JSON.stringify({event:Z,epochMs:Date.now(),monotonicMs:d7(),...typeof document>"u"?{}:{visibility:document.visibilityState},...Q}))}var i7=600000,a7=60000,Y6=200,p7=2,A=new Map,q0=null;function s7(Z){Z.then((X)=>X.dispose()).catch(()=>{return})}function N1(Z){for(let X of Z.idleWaiters)X();Z.idleWaiters.clear()}function O0(Z,X){if(A.get(Z)!==X)return;A.delete(Z),N1(X),s7(X.sessionPromise)}function r7(){if(q0!==null)return;q0=setInterval(()=>{let Z=Date.now();for(let[X,Q]of A){if(Q.inUse)continue;if(Z-Q.lastUsed<i7)continue;O0(X,Q)}if(A.size===0&&q0!==null)clearInterval(q0),q0=null},a7),q0.unref?.()}function o7(){if(A.size<Y6)return;let Z=null,X=1/0;for(let[K,Y]of A){if(Y.inUse)continue;if(Y.lastUsed>=X)continue;Z=K,X=Y.lastUsed}if(!Z)return;let Q=A.get(Z);if(!Q)return;O0(Z,Q)}function n7(){let Z=0;while(A.size>Y6){let X=null,Q=null;for(let[K,Y]of A){if(Y.inUse)continue;if(Q&&Y.lastUsed>=Q.lastUsed)continue;X=K,Q=Y}if(!X||!Q)break;O0(X,Q),Z+=1}if(Z>0)m("session_pool.global_idle_trimmed",{evictedSessions:Z,poolEntries:A.size})}function t7(Z){let X=Array.from(A.entries()).filter(([,K])=>K.frontendSessionId===Z&&!K.inUse).sort(([,K],[,Y])=>K.lastUsed-Y.lastUsed),Q=X.length-p7;if(Q<=0)return;for(let[K,Y]of X.slice(0,Q))O0(K,Y);m("session_pool.frontend_idle_trimmed",{frontendSessionId:Z,evictedSessions:Q,poolEntries:A.size})}function h4(Z,X,Q){return`${Z}:${X}:${Q}`}async function D1(Z){let X=A.get(Z.key);if(X){if(X.inUse)return m("session_pool.wait_for_idle",{frontendSessionId:X.frontendSessionId,poolEntries:A.size}),await new Promise((K)=>X.idleWaiters.add(K)),D1(Z);if(X.fingerprint===Z.fingerprint){X.inUse=!0,X.lastUsed=Date.now();try{let K=await X.sessionPromise;if(K.isAlive()){if(X.frontendSessionId)m("session_pool.reuse",{frontendSessionId:X.frontendSessionId,poolEntries:A.size});return K}}catch{}O0(Z.key,X)}else O0(Z.key,X)}let Q=Z.open();if(o7(),A.set(Z.key,{key:Z.key,frontendSessionId:Z.frontendSessionId??null,fingerprint:Z.fingerprint,sessionPromise:Q,lastUsed:Date.now(),inUse:!0,idleWaiters:new Set}),r7(),Z.frontendSessionId)m("session_pool.open",{frontendSessionId:Z.frontendSessionId,poolEntries:A.size});try{return await Q}catch(K){let Y=A.get(Z.key);if(Y?.sessionPromise===Q)O0(Z.key,Y);throw K}}function M4(Z,X=!1){let Q=A.get(Z);if(!Q)return;if(X){O0(Z,Q);return}if(Q.inUse=!1,Q.lastUsed=Date.now(),Q.frontendSessionId)t7(Q.frontendSessionId),m("session_pool.release",{frontendSessionId:Q.frontendSessionId,poolEntries:A.size});if(n7(),A.get(Z)===Q)N1(Q)}async function J6(Z){let X=Array.from(A.entries()).filter(([,Q])=>Q.frontendSessionId===Z);for(let[Q,K]of X)A.delete(Q),N1(K);return await Promise.all(X.map(([,Q])=>Q.sessionPromise.then((K)=>K.dispose()).catch(()=>{return}))),m("session_pool.frontend_evicted",{frontendSessionId:Z,evictedSessions:X.length,poolEntries:A.size}),X.length}async function e7(){let Z=Array.from(A.values());A.clear();for(let X of Z)N1(X);if(q0!==null)clearInterval(q0),q0=null;await Promise.all(Z.map((X)=>X.sessionPromise.then((Q)=>Q.dispose()).catch(()=>{return})))}function N4(Z){let X=Object.entries(Z.configValues??{}),Q=X.length>0?JSON.stringify(Object.fromEntries(X.sort(([K],[Y])=>K.localeCompare(Y)))):"";return[Z.adapterId,Z.configId??"",Z.modelId??"",Q,Z.mcpUrl??"",Z.runFolder??"",Z.toolSurface??"full"].join(" ")}var W6=!1;function Z9(){if(W6)return;W6=!0;let Z=()=>{e7()};process.once("beforeExit",Z),process.once("SIGTERM",Z),process.once("SIGINT",Z)}Z9();import{readFileSync as K9}from"node:fs";import{homedir as X9}from"node:os";import{join as $1}from"node:path";function Q9(){let Z=X9();switch(process.platform){case"win32":return process.env.APPDATA??$1(Z,"AppData","Roaming");case"darwin":return $1(Z,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??$1(Z,".config")}}function V6(){let Z=process.env.IDEAWAVE_MCP_JSON_PATH;if(Z&&Z.trim().length>0)return Z;return $1(Q9(),"ideawave","mcp.json")}var H6=null;function z6(Z){H6=Z}var W9=86400000;function Y9(){let Z;try{Z=K9(V6(),"utf8")}catch{return null}let X;try{X=JSON.parse(Z)}catch{return null}if(typeof X.url!=="string")return null;if(typeof X.startedAt==="string"){let Q=Date.parse(X.startedAt);if(!Number.isNaN(Q)){if(Date.now()-Q>W9)return null}}if(typeof X.pid==="number"&&X.pid>0)try{process.kill(X.pid,0)}catch(Q){if(Q?.code!=="EPERM")return null}return{url:X.url}}function j6(Z,X={}){let Q=[];if(X.userId&&X.userId.trim().length>0)Q.push({name:"X-Ideawave-User-Id",value:X.userId.trim()});if(X.frontendSessionId&&X.frontendSessionId.trim().length>0)Q.push({name:"X-Ideawave-Frontend-Session-Id",value:X.frontendSessionId.trim()});if(X.toolSurface==="read")Q.push({name:"X-Ideawave-Tool-Surface",value:"read"});if(X.imagesSupported)Q.push({name:"X-Ideawave-Images-Supported",value:"1"});if(X.cardId&&X.cardId.trim().length>0)Q.push({name:"X-Ideawave-Card-Id",value:X.cardId.trim()});if(X.boardId&&X.boardId.trim().length>0)Q.push({name:"X-Ideawave-Board-Id",value:X.boardId.trim()});if(X.runFolder&&X.runFolder.trim().length>0)Q.push({name:"X-Ideawave-Run-Folder",value:X.runFolder.trim()});return{type:"http",name:"ideawave-board",url:Z,headers:Q}}function D4(Z={}){let X=H6;if(X)return j6(X.url,Z);let Q=Y9();if(!Q)return null;return j6(Q.url,Z)}var w6="browser-proxy-v2",U6="browser-proxy-v3",F6="browser-proxy-v4",J9=new Set(["hello","frontend_hello","cli_status","browser_status","bridge_probe","bridge_probe_ack","bridge_ping","bridge_pong","tool_metadata","run_turn","cancel_run","tool_result","request_tool_metadata","tool_call","partial_text","tool_activity","run_settled","runtime_rpc","runtime_rpc_result","browser_rpc","browser_rpc_result","warmup_run","warmup_result"]);function g1(Z){try{let X=JSON.parse(Z);if(X&&typeof X==="object"&&typeof X.type==="string"&&J9.has(X.type))return X}catch{}return null}function G1(Z){return JSON.stringify(Z)}import Z1 from"node:fs/promises";import w9 from"node:path";import{z as g}from"zod";var B6=g.object({id:g.string(),name:g.string().nullable().default(null),description:g.string().nullable().default(null)}),x6=g.union([g.string(),g.boolean()]),V9=g.object({value:g.string(),name:g.string(),description:g.string().nullable().default(null),group:g.string().nullable().default(null),groupName:g.string().nullable().default(null)}),L6=g.object({id:g.string(),name:g.string(),category:g.string().nullable().default(null),description:g.string().nullable().default(null),type:g.enum(["select","boolean"]),currentValue:x6.nullable().default(null),options:g.array(V9).default([])}),$4=g.record(g.string(),x6).default({}),j9=g.discriminatedUnion("kind",[g.object({id:g.string(),kind:g.literal("registered"),adapterId:g.enum(["claude-code","opencode","codex","copilot"]),displayName:g.string(),runFolder:g.string().nullable(),defaultModelId:g.string().nullable().default(null),defaultConfigValues:$4,discoveredModels:g.array(B6).default([]),discoveredConfigOptions:g.array(L6).default([]),discoveredAt:g.string().nullable().default(null)}),g.object({id:g.string(),kind:g.literal("custom"),displayName:g.string(),command:g.string(),args:g.array(g.string()),env:g.record(g.string(),g.string()),runFolder:g.string().nullable(),defaultModelId:g.string().nullable().default(null),defaultConfigValues:$4,discoveredModels:g.array(B6).default([]),discoveredConfigOptions:g.array(L6).default([]),discoveredAt:g.string().nullable().default(null)})]),q6=g.object({runtimeConfigId:g.string(),runFolder:g.string().nullable(),modelId:g.string().nullable().default(null),configValues:$4}),E1=g.object({version:g.literal(1),globalDefaultConfigId:g.string().nullable(),runtimes:g.array(j9),boardOverrides:g.record(g.string(),q6).default({}),cardOverrides:g.record(g.string(),q6).default({})});import H9 from"node:os";import m1 from"node:path";function z9(){let Z=H9.homedir();switch(process.platform){case"win32":return process.env.APPDATA??m1.join(Z,"AppData","Roaming");case"darwin":return m1.join(Z,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??m1.join(Z,".config")}}function k1(){let Z=process.env.IDEAWAVE_RUNTIME_CONFIG_PATH;if(Z)return Z;return m1.join(z9(),"ideawave","runtimes.json")}var U9={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},P6=new Map;function F9(Z){return P6.get(Z)??Promise.resolve()}function B9(Z,X){P6.set(Z,X)}async function W0(Z){let X=Z??k1(),Q;try{Q=await Z1.readFile(X,"utf-8")}catch(Y){if(Y.code==="ENOENT")return structuredClone(U9);throw Y}return E1.parse(JSON.parse(Q))}async function j0(Z,X){let Q=X??k1(),K=F9(Q).then(async()=>{let Y=await W0(Q),J=structuredClone(Y),H=await Z(J);return await L9(J,Q),H});return B9(Q,K.catch(()=>{return})),K}async function L9(Z,X){let Q=X??k1(),K=w9.dirname(Q);await Z1.mkdir(K,{recursive:!0});let Y=`${Q}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`,J=JSON.stringify(Z,null,2);await Z1.writeFile(Y,J,"utf-8");try{await Z1.rename(Y,Q)}catch(H){throw await Z1.unlink(Y).catch(()=>{return}),H}}import{spawn as C9}from"node:child_process";import{closeSync as h9,existsSync as v6,mkdirSync as R6,openSync as M9,readFileSync as N9,renameSync as D9,rmSync as C6,statSync as $9,unlinkSync as g9,writeFileSync as G9}from"node:fs";import O6 from"node:os";import m0 from"node:path";var q9=/\.(?:cmd|bat)$/i;function x9(Z){return process.platform==="win32"&&q9.test(Z)}function _1(Z){return x9(Z)?{shell:!0,windowsHide:!0}:{}}import{execFile as v9}from"node:child_process";import{promisify as R9}from"node:util";import{execFile as P9}from"node:child_process";import{promisify as f9}from"node:util";var y9=f9(P9),g4=new Map,f6=5000,O9=/\.(?:cmd|bat|com|exe)$/i;function b9(Z){let X=Z.split(/\r?\n/).map((Q)=>Q.trim()).filter((Q)=>Q.length>0);if(X.length===0)return null;if(process.platform!=="win32")return X[0]??null;return X.find((Q)=>O9.test(Q))??X[0]??null}async function y6(Z,X=y9){let Q=g4.get(Z);if(Q&&Q.expiresAt>Date.now())return Q.value;let K=process.platform==="win32"?"where":"which";try{let{stdout:Y}=await X(K,[Z],{timeout:2000}),J=b9(Y);return g4.set(Z,{value:J,expiresAt:Date.now()+f6}),J}catch{return g4.set(Z,{value:null,expiresAt:Date.now()+f6}),null}}class X1 extends Error{code;constructor(Z,X){super(Z);this.name="AcpError",this.code=X}}class E0 extends X1{constructor(Z="No ACP runtime configured"){super(Z,"RUNTIME_NOT_CONFIGURED");this.name="RuntimeNotConfiguredError"}}class T extends X1{constructor(Z){super(Z,"RUNTIME_UNREACHABLE");this.name="RuntimeUnreachableError"}}class c0 extends X1{authMethods;constructor(Z,X){super(Z,"AUTH_REQUIRED");this.name="AuthRequiredError",this.authMethods=X}}class U0 extends X1{constructor(Z="ACP session timed out"){super(Z,"SESSION_TIMEOUT");this.name="SessionTimeoutError"}}var YY=R9(v9);function i(Z,...X){return y6(Z,...X)}function K0(Z){let X={};for(let[Q,K]of Object.entries(process.env))if(typeof K==="string")X[Q]=K;return{...X,...Z??{}}}var E4=[{adapterId:"claude-code",runtimeBinary:"claude",packageName:"@agentclientprotocol/claude-agent-acp",version:"0.61.0",warmupArgs:["--cli","--help"]},{adapterId:"codex",runtimeBinary:"codex",packageName:"@agentclientprotocol/codex-acp",version:"1.1.7",warmupArgs:["--version"]}],E9=1800000,S1=new Map;function m4(){if(process.env.IDEAWAVE_ACP_BRIDGE_CACHE_DIR)return process.env.IDEAWAVE_ACP_BRIDGE_CACHE_DIR;if(process.platform==="win32"){let Z=process.env.LOCALAPPDATA??m0.join(O6.homedir(),"AppData","Local");return m0.join(Z,"ideawave","acp-bridges")}return m0.join(process.env.XDG_CACHE_HOME??m0.join(O6.homedir(),".cache"),"ideawave","acp-bridges")}function m9(Z){return Z.replace(/^@/,"").replace(/[/\\]/g,"-")}function I1(){return m0.join(m4(),"install-state.json")}function k4(Z){return m0.join(m4(),`${m9(Z.packageName)}@${Z.version}.install.lock`)}function _4(){return process.platform==="win32"?"npx.cmd":"npx"}function S4(Z){return`${Z.packageName}@${Z.version}`}function h6(){let Z=I1();if(!v6(Z))return{};try{return JSON.parse(N9(Z,"utf8"))}catch{return{}}}function G4(Z,X){let Q=m4();R6(Q,{recursive:!0});let K=h6();K.bridges={...K.bridges??{},[Z.adapterId]:X},G9(`${I1()}.tmp`,`${JSON.stringify(K,null,2)}
3
- `),D9(`${I1()}.tmp`,I1())}function M6(Z){return E4.find((X)=>X.packageName===Z)??null}function Y0(Z,X,Q){return{adapterId:Z.adapterId,packageName:Z.packageName,version:Z.version,status:X,...Q?{error:Q}:{}}}function b6(Z,X){return X?.packageName===Z.packageName&&X.version===Z.version}function N6(Z){try{return Date.now()-$9(Z).mtimeMs>E9}catch{return!1}}function k9(Z){let X=k4(Z);if(!v6(X))return!1;if(N6(X))return C6(X,{force:!0}),!1;return!0}function _9(Z){let X=k4(Z);if(R6(m0.dirname(X),{recursive:!0}),N6(X))C6(X,{force:!0});try{let Q=M9(X,"wx");return h9(Q),!0}catch{return!1}}function S9(Z){g9(k4(Z))}function I4(Z){let X=h6().bridges?.[Z.adapterId];if(b6(Z,X)&&X.status==="ready")return Y0(Z,"ready");if(S1.has(Z.adapterId)||k9(Z))return Y0(Z,"installing");if(b6(Z,X)&&X.status==="failed")return Y0(Z,"failed",X.error);return Y0(Z,"missing")}function Q1(Z,X){Z?.onStatusChange?.(X)}function I9(Z,X){let Q=I4(Z);if(Q.status==="ready")return Q1(X,Q),Q;if(Q.status==="installing"){let U=S1.get(Z.adapterId);if(U&&X?.onStatusChange)U.then((q)=>Q1(X,q));return Q1(X,Q),Q}if(!_9(Z))return Y0(Z,"installing");let K=Y0(Z,"installing");G4(Z,K),Q1(X,K);let Y=()=>{},J=new Promise((U)=>{Y=U});S1.set(Z.adapterId,J);let H=!1,w=(U)=>{if(H)return;H=!0;try{S9(Z)}catch{}G4(Z,U),Q1(X,U),S1.delete(Z.adapterId),Y(U)},B;try{let U=_4();B=C9(U,["-y",S4(Z),...Z.warmupArgs],{stdio:"ignore",windowsHide:!0,..._1(U)})}catch(U){let q=Y0(Z,"failed",U instanceof Error?U.message:String(U));return w(q),q}return B.on("error",(U)=>{w(Y0(Z,"failed",U.message))}),B.on("close",(U)=>{if(U===0){w(Y0(Z,"ready"));return}w(Y0(Z,"failed",`npx warmup exited ${U??"null"}`))}),B.unref(),K}function l0(Z){let X=M6(Z);return X?I4(X):null}async function D6(Z){let X=[];for(let Q of E4){if(!await i(Q.runtimeBinary)){X.push(Y0(Q,"not_needed"));continue}X.push(I9(Q,Z))}return X.filter((Q)=>Q.status!=="not_needed")}function T1(Z){let X=M6(Z);if(!X)return null;if(I4(X).status!=="ready")return null;return{command:_4(),args:["-y",S4(X)],env:{}}}function T4(Z,X){if(Z.command!==_4())return!1;let Q=E4.find((K)=>Z.args.includes(S4(K)));if(!Q)return!1;return G4(Q,Y0(Q,"failed",X)),!0}var $6="claude",A4="@agentclientprotocol/claude-agent-acp",g6=["claude-agent-acp","claude-code-acp"],G6="Install Claude Code from https://github.com/anthropics/claude-code",E6={id:"claude-code",displayName:"Claude Code",kind:"registered",supportsImages:!0,resolveSpawnConfig:async()=>{if(!await i($6))throw new T(`Claude Code CLI not found. ${G6}`);let X=T1(A4);if(X)return{command:X.command,args:X.args,env:K0(X.env)};let Q=l0(A4),K=Q?.status==="installing";for(let J of g6){let H=await i(J);if(H&&!K&&Q?.status!=="failed")return{command:H,args:[],env:K0()}}let Y=Q?.status==="failed"?`Claude Code ACP bridge install failed. ${Q.error??"Restart IdeaWave CLI so it can warm the pinned bridge again."}`:"Claude Code ACP bridge is not ready. Keep IdeaWave CLI running and retry in a moment.";throw new T(Y)},checkReadiness:async()=>{if(!await i($6))return{status:"not_installed",detail:G6};let X=l0(A4);if(X?.status==="ready")return{status:"ready"};if(X?.status==="installing")return{status:"not_running",detail:"Installing Claude Code ACP bridge..."};if(X?.status==="failed")return{status:"not_running",detail:X.error??"Claude Code ACP bridge install failed. Restart IdeaWave CLI so it can warm the pinned bridge again."};for(let Q of g6)if(await i(Q))return{status:"ready"};return{status:"not_running",detail:"Installing Claude Code ACP bridge..."}},authHint:"Run `claude login` (or set ANTHROPIC_API_KEY)."};var m6="codex",u4="@agentclientprotocol/codex-acp",k6="codex-acp",_6="Install Codex CLI from https://developers.openai.com/codex/cli",S6={id:"codex",displayName:"Codex",kind:"registered",resolveSpawnConfig:async()=>{if(!await i(m6))throw new T(`Codex CLI not found. ${_6}`);let X=T1(u4);if(X)return{command:X.command,args:X.args,env:K0(X.env)};let Q=l0(u4),K=Q?.status==="installing",Y=await i(k6);if(Y&&!K&&Q?.status!=="failed")return{command:Y,args:[],env:K0()};let J=Q?.status==="failed"?`Codex ACP bridge install failed. ${Q.error??"Restart IdeaWave CLI so it can warm the pinned bridge again."}`:"Codex ACP bridge is not ready. Keep IdeaWave CLI running and retry in a moment.";throw new T(J)},checkReadiness:async()=>{if(!await i(m6))return{status:"not_installed",detail:_6};let X=l0(u4);if(X?.status==="ready")return{status:"ready"};if(X?.status==="installing")return{status:"not_running",detail:"Installing Codex ACP bridge..."};if(X?.status==="failed")return{status:"not_running",detail:X.error??"Codex ACP bridge install failed. Restart IdeaWave CLI so it can warm the pinned bridge again."};if(await i(k6))return{status:"ready"};return{status:"not_running",detail:"Installing Codex ACP bridge..."}},authHint:"Run `codex login` (or set OPENAI_API_KEY)."};var I6="copilot",T6="copilot-acp",A6="npm i -g @github/copilot",u6={id:"copilot",displayName:"GitHub Copilot",kind:"registered",resolveSpawnConfig:async()=>{let Z=await i(I6);if(Z)return{command:Z,args:["--acp"],env:K0()};let X=await i(T6);if(X)return{command:X,args:[],env:K0()};throw new T(`Copilot not installed. Run: ${A6}`)},checkReadiness:async()=>{if(await i(I6))return{status:"ready"};if(await i(T6))return{status:"ready"};return{status:"not_installed",detail:A6}},authHint:"Run `gh auth login` (or `copilot login`)."};import T9 from"node:fs/promises";function A9(Z){return Z.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(Z)}async function c6(Z){if(A9(Z))try{return await T9.access(Z),!0}catch{return!1}return await i(Z)!==null}var l6={id:"custom",displayName:"Custom ACP",kind:"custom",resolveSpawnConfig:async(Z)=>{if(Z.kind!=="custom")throw new T("customAdapter received non-custom entry");if(!await c6(Z.command))throw new T(`custom: command "${Z.command}" not found`);return{command:Z.command,args:Z.args,env:K0(Z.env)}},checkReadiness:async(Z)=>{if(Z.kind!=="custom")return{status:"unknown"};return await c6(Z.command)?{status:"ready"}:{status:"not_installed"}}};var d6="opencode",i6="Install OpenCode from https://opencode.ai",a6={id:"opencode",displayName:"OpenCode",kind:"registered",resolveSpawnConfig:async()=>{let Z=await i(d6);if(!Z)throw new T(`OpenCode not installed. ${i6}`);return{command:Z,args:["acp"],env:K0()}},checkReadiness:async()=>{if(!await i(d6))return{status:"not_installed",detail:i6};return{status:"ready"}},authHint:"Run `opencode auth login <provider>` (or set the provider's API-key env var)."};var p6={"claude-code":E6,opencode:a6,codex:S6,copilot:u6};function F0(Z){if(Z.kind==="custom")return l6;let X=p6[Z.adapterId];if(!X)throw Error(`Unknown registered adapter: ${Z.adapterId}`);return X}function d0(){return Object.values(p6)}var c4=new Map,A1=new Map,u9=30000;function u1(Z,X){let Q=c4.get(Z);if(Q&&Q.expiresAt>Date.now())return Promise.resolve(Q.value);let K=A1.get(Z);if(K)return K;let Y=X().then((J)=>{return c4.set(Z,{value:J,expiresAt:Date.now()+u9}),J}).finally(()=>{A1.delete(Z)});return A1.set(Z,Y),Y}async function s6(Z){let X=await Promise.all(d0().map((J)=>u1(J.id,async()=>({adapterId:J.id,...await J.checkReadiness({id:"__probe__",kind:"registered",adapterId:J.id,displayName:J.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})})))),K=(await W0(Z)).runtimes.filter((J)=>J.kind==="custom"),Y=await Promise.all(K.map((J)=>u1(`custom:${J.id}`,async()=>({adapterId:J.id,...await F0(J).checkReadiness(J)}))));return[...X,...Y]}async function r6(Z,X){let Q=d0().find((J)=>J.id===Z);if(Q)return u1(Q.id,async()=>({adapterId:Q.id,...await Q.checkReadiness({id:"__probe__",kind:"registered",adapterId:Q.id,displayName:Q.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})}));let Y=(await W0(X)).runtimes.find((J)=>J.id===Z);if(!Y||Y.kind!=="custom")return null;return u1(`custom:${Y.id}`,async()=>({adapterId:Y.id,...await F0(Y).checkReadiness(Y)}))}function o6(){c4.clear(),A1.clear()}import{randomBytes as X8,randomUUID as e6}from"node:crypto";import{WebSocket as c1,WebSocketServer as l9}from"ws";function b0(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function c9(Z){try{let X=new URL(Z);if(X.protocol!=="https:"||X.hostname!=="www.google.com"||X.username||X.password||X.pathname!=="/"&&X.pathname!=="/webhp")return null;return"https://www.google.com/search"}catch{return null}}function l4(Z){let X=b0(c9(Z.sourceUrl));return`(() => {
2
+ function y2(){let X=globalThis.performance?.now?.()??Date.now();return Math.round(X*10)/10}function q(X,$={}){if(typeof process<"u"&&process.env.IDEAWAVE_AGENT_RUNTIME_TRACE==="0")return;let Z=Object.fromEntries(Object.entries($).filter(([,Q])=>Q!==void 0));console.info("[agent-runtime-trace]",JSON.stringify({event:X,epochMs:Date.now(),monotonicMs:y2(),...typeof document>"u"?{}:{visibility:document.visibilityState},...Z}))}var R2=600000,b2=60000,L1=200,T2=2,y=new Map,i=null;function E2(X){X.then(($)=>$.dispose()).catch(()=>{return})}function v0(X){for(let $ of X.idleWaiters)$();X.idleWaiters.clear()}function t(X,$){if(y.get(X)!==$)return;y.delete(X),v0($),E2($.sessionPromise)}function v2(){if(i!==null)return;i=setInterval(()=>{let X=Date.now();for(let[$,Z]of y){if(Z.inUse)continue;if(X-Z.lastUsed<R2)continue;t($,Z)}if(y.size===0&&i!==null)clearInterval(i),i=null},b2),i.unref?.()}function h2(){if(y.size<L1)return;let X=null,$=1/0;for(let[Q,K]of y){if(K.inUse)continue;if(K.lastUsed>=$)continue;X=Q,$=K.lastUsed}if(!X)return;let Z=y.get(X);if(!Z)return;t(X,Z)}function I2(){let X=0;while(y.size>L1){let $=null,Z=null;for(let[Q,K]of y){if(K.inUse)continue;if(Z&&K.lastUsed>=Z.lastUsed)continue;$=Q,Z=K}if(!$||!Z)break;t($,Z),X+=1}if(X>0)q("session_pool.global_idle_trimmed",{evictedSessions:X,poolEntries:y.size})}function S2(X){let $=Array.from(y.entries()).filter(([,Q])=>Q.frontendSessionId===X&&!Q.inUse).sort(([,Q],[,K])=>Q.lastUsed-K.lastUsed),Z=$.length-T2;if(Z<=0)return;for(let[Q,K]of $.slice(0,Z))t(Q,K);q("session_pool.frontend_idle_trimmed",{frontendSessionId:X,evictedSessions:Z,poolEntries:y.size})}function DX(X,$,Z){return`${X}:${$}:${Z}`}async function h0(X){let $=y.get(X.key);if($){if($.inUse)return q("session_pool.wait_for_idle",{frontendSessionId:$.frontendSessionId,poolEntries:y.size}),await new Promise((Q)=>$.idleWaiters.add(Q)),h0(X);if($.fingerprint===X.fingerprint){$.inUse=!0,$.lastUsed=Date.now();try{let Q=await $.sessionPromise;if(Q.isAlive()){if($.frontendSessionId)q("session_pool.reuse",{frontendSessionId:$.frontendSessionId,poolEntries:y.size});return Q}}catch{}t(X.key,$)}else t(X.key,$)}let Z=X.open();if(h2(),y.set(X.key,{key:X.key,frontendSessionId:X.frontendSessionId??null,fingerprint:X.fingerprint,sessionPromise:Z,lastUsed:Date.now(),inUse:!0,idleWaiters:new Set}),v2(),X.frontendSessionId)q("session_pool.open",{frontendSessionId:X.frontendSessionId,poolEntries:y.size});try{return await Z}catch(Q){let K=y.get(X.key);if(K?.sessionPromise===Z)t(X.key,K);throw Q}}function NX(X,$=!1){let Z=y.get(X);if(!Z)return;if($){t(X,Z);return}if(Z.inUse=!1,Z.lastUsed=Date.now(),Z.frontendSessionId)S2(Z.frontendSessionId),q("session_pool.release",{frontendSessionId:Z.frontendSessionId,poolEntries:y.size});if(I2(),y.get(X)===Z)v0(Z)}async function P1(X){let $=Array.from(y.entries()).filter(([,Z])=>Z.frontendSessionId===X);for(let[Z,Q]of $)y.delete(Z),v0(Q);return await Promise.all($.map(([,Z])=>Z.sessionPromise.then((Q)=>Q.dispose()).catch(()=>{return}))),q("session_pool.frontend_evicted",{frontendSessionId:X,evictedSessions:$.length,poolEntries:y.size}),$.length}async function g2(){let X=Array.from(y.values());y.clear();for(let $ of X)v0($);if(i!==null)clearInterval(i),i=null;await Promise.all(X.map(($)=>$.sessionPromise.then((Z)=>Z.dispose()).catch(()=>{return})))}function wX(X){let $=Object.entries(X.configValues??{}),Z=$.length>0?JSON.stringify(Object.fromEntries($.sort(([Q],[K])=>Q.localeCompare(K)))):"";return[X.adapterId,X.configId??"",X.modelId??"",Z,X.mcpUrl??"",X.runFolder??"",X.toolSurface??"full"].join(" ")}var M1=!1;function m2(){if(M1)return;M1=!0;let X=()=>{g2()};process.once("beforeExit",X),process.once("SIGTERM",X),process.once("SIGINT",X)}m2();import{readFileSync as p2}from"node:fs";import{homedir as c2}from"node:os";import{join as I0}from"node:path";function l2(){let X=c2();switch(process.platform){case"win32":return process.env.APPDATA??I0(X,"AppData","Roaming");case"darwin":return I0(X,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??I0(X,".config")}}function F1(){let X=process.env.IDEAWAVE_MCP_JSON_PATH;if(X&&X.trim().length>0)return X;return I0(l2(),"ideawave","mcp.json")}var k1=null;function q1(X){k1=X}var u2=86400000;function a2(){let X;try{X=p2(F1(),"utf8")}catch{return null}let $;try{$=JSON.parse(X)}catch{return null}if(typeof $.url!=="string")return null;if(typeof $.startedAt==="string"){let Z=Date.parse($.startedAt);if(!Number.isNaN(Z)){if(Date.now()-Z>u2)return null}}if(typeof $.pid==="number"&&$.pid>0)try{process.kill($.pid,0)}catch(Z){if(Z?.code!=="EPERM")return null}return{url:$.url}}function O1(X,$={}){let Z=[];if($.userId&&$.userId.trim().length>0)Z.push({name:"X-Ideawave-User-Id",value:$.userId.trim()});if($.frontendSessionId&&$.frontendSessionId.trim().length>0)Z.push({name:"X-Ideawave-Frontend-Session-Id",value:$.frontendSessionId.trim()});if($.toolSurface==="read")Z.push({name:"X-Ideawave-Tool-Surface",value:"read"});if($.imagesSupported)Z.push({name:"X-Ideawave-Images-Supported",value:"1"});if($.cardId&&$.cardId.trim().length>0)Z.push({name:"X-Ideawave-Card-Id",value:$.cardId.trim()});if($.boardId&&$.boardId.trim().length>0)Z.push({name:"X-Ideawave-Board-Id",value:$.boardId.trim()});if($.runFolder&&$.runFolder.trim().length>0)Z.push({name:"X-Ideawave-Run-Folder",value:$.runFolder.trim()});return{type:"http",name:"ideawave-board",url:X,headers:Z}}function BX(X={}){let $=k1;if($)return O1($.url,X);let Z=a2();if(!Z)return null;return O1(Z.url,X)}var _1="browser-proxy-v5";var d2=new Set(["hello","frontend_hello","cli_status","browser_status","bridge_probe","bridge_probe_ack","bridge_ping","bridge_pong","tool_metadata","run_turn","cancel_run","tool_result","request_tool_metadata","tool_call","partial_text","tool_activity","run_settled","runtime_rpc","runtime_rpc_result","browser_rpc","browser_rpc_result","warmup_run","warmup_result"]);function S0(X){try{let $=JSON.parse(X);if($&&typeof $==="object"&&typeof $.type==="string"&&d2.has($.type))return $}catch{}return null}function g0(X){return JSON.stringify(X)}import O0 from"node:fs/promises";import r2 from"node:path";import{z as F}from"zod";var A1=F.object({id:F.string(),name:F.string().nullable().default(null),description:F.string().nullable().default(null)}),y1=F.union([F.string(),F.boolean()]),i2=F.object({value:F.string(),name:F.string(),description:F.string().nullable().default(null),group:F.string().nullable().default(null),groupName:F.string().nullable().default(null)}),C1=F.object({id:F.string(),name:F.string(),category:F.string().nullable().default(null),description:F.string().nullable().default(null),type:F.enum(["select","boolean"]),currentValue:y1.nullable().default(null),options:F.array(i2).default([])}),MX=F.record(F.string(),y1).default({}),o2=F.discriminatedUnion("kind",[F.object({id:F.string(),kind:F.literal("registered"),adapterId:F.enum(["claude-code","opencode","codex","copilot"]),displayName:F.string(),runFolder:F.string().nullable(),defaultModelId:F.string().nullable().default(null),defaultConfigValues:MX,discoveredModels:F.array(A1).default([]),discoveredConfigOptions:F.array(C1).default([]),discoveredAt:F.string().nullable().default(null)}),F.object({id:F.string(),kind:F.literal("custom"),displayName:F.string(),command:F.string(),args:F.array(F.string()),env:F.record(F.string(),F.string()),runFolder:F.string().nullable(),defaultModelId:F.string().nullable().default(null),defaultConfigValues:MX,discoveredModels:F.array(A1).default([]),discoveredConfigOptions:F.array(C1).default([]),discoveredAt:F.string().nullable().default(null)})]),f1=F.object({runtimeConfigId:F.string(),runFolder:F.string().nullable(),modelId:F.string().nullable().default(null),configValues:MX}),m0=F.object({version:F.literal(1),globalDefaultConfigId:F.string().nullable(),runtimes:F.array(o2),boardOverrides:F.record(F.string(),f1).default({}),cardOverrides:F.record(F.string(),f1).default({})});import n2 from"node:os";import c0 from"node:path";function t2(){let X=n2.homedir();switch(process.platform){case"win32":return process.env.APPDATA??c0.join(X,"AppData","Roaming");case"darwin":return c0.join(X,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??c0.join(X,".config")}}function l0(){let X=process.env.IDEAWAVE_RUNTIME_CONFIG_PATH;if(X)return X;return c0.join(t2(),"ideawave","runtimes.json")}var s2={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},R1=new Map;function e2(X){return R1.get(X)??Promise.resolve()}function X6(X,$){R1.set(X,$)}async function m(X){let $=X??l0(),Z;try{Z=await O0.readFile($,"utf-8")}catch(K){if(K.code==="ENOENT")return structuredClone(s2);throw K}return m0.parse(JSON.parse(Z))}async function p(X,$){let Z=$??l0(),Q=e2(Z).then(async()=>{let K=await m(Z),J=structuredClone(K),Y=await X(J);return await $6(J,Z),Y});return X6(Z,Q.catch(()=>{return})),Q}async function $6(X,$){let Z=$??l0(),Q=r2.dirname(Z);await O0.mkdir(Q,{recursive:!0});let K=`${Z}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`,J=JSON.stringify(X,null,2);await O0.writeFile(K,J,"utf-8");try{await O0.rename(K,Z)}catch(Y){throw await O0.unlink(K).catch(()=>{return}),Y}}import{spawn as z6}from"node:child_process";import{closeSync as U6,existsSync as h1,mkdirSync as I1,openSync as H6,readFileSync as x6,renameSync as D6,rmSync as S1,statSync as N6,unlinkSync as w6,writeFileSync as B6}from"node:fs";import E1 from"node:os";import W0 from"node:path";var Z6=/\.(?:cmd|bat)$/i;function Q6(X){return process.platform==="win32"&&Z6.test(X)}function p0(X){return Q6(X)?{shell:!0,windowsHide:!0}:{}}import{execFile as G6}from"node:child_process";import{promisify as V6}from"node:util";import{execFile as K6}from"node:child_process";import{promisify as J6}from"node:util";var Y6=J6(K6),LX=new Map,b1=5000,W6=/\.(?:cmd|bat|com|exe)$/i;function j6(X){let $=X.split(/\r?\n/).map((Z)=>Z.trim()).filter((Z)=>Z.length>0);if($.length===0)return null;if(process.platform!=="win32")return $[0]??null;return $.find((Z)=>W6.test(Z))??$[0]??null}async function T1(X,$=Y6){let Z=LX.get(X);if(Z&&Z.expiresAt>Date.now())return Z.value;let Q=process.platform==="win32"?"where":"which";try{let{stdout:K}=await $(Q,[X],{timeout:2000}),J=j6(K);return LX.set(X,{value:J,expiresAt:Date.now()+b1}),J}catch{return LX.set(X,{value:null,expiresAt:Date.now()+b1}),null}}class k0 extends Error{code;constructor(X,$){super(X);this.name="AcpError",this.code=$}}class Y0 extends k0{constructor(X="No ACP runtime configured"){super(X,"RUNTIME_NOT_CONFIGURED");this.name="RuntimeNotConfiguredError"}}class f extends k0{constructor(X){super(X,"RUNTIME_UNREACHABLE");this.name="RuntimeUnreachableError"}}class H0 extends k0{authMethods;constructor(X,$){super(X,"AUTH_REQUIRED");this.name="AuthRequiredError",this.authMethods=$}}class u extends k0{constructor(X="ACP session timed out"){super(X,"SESSION_TIMEOUT");this.name="SessionTimeoutError"}}var q4=V6(G6);function T(X,...$){return T1(X,...$)}function g(X){let $={};for(let[Z,Q]of Object.entries(process.env))if(typeof Q==="string")$[Z]=Q;return{...$,...X??{}}}var FX=[{adapterId:"claude-code",runtimeBinary:"claude",packageName:"@agentclientprotocol/claude-agent-acp",version:"0.61.0",warmupArgs:["--cli","--help"]},{adapterId:"codex",runtimeBinary:"codex",packageName:"@agentclientprotocol/codex-acp",version:"1.1.7",warmupArgs:["--version"]}],M6=1800000,u0=new Map;function OX(){if(process.env.IDEAWAVE_ACP_BRIDGE_CACHE_DIR)return process.env.IDEAWAVE_ACP_BRIDGE_CACHE_DIR;if(process.platform==="win32"){let X=process.env.LOCALAPPDATA??W0.join(E1.homedir(),"AppData","Local");return W0.join(X,"ideawave","acp-bridges")}return W0.join(process.env.XDG_CACHE_HOME??W0.join(E1.homedir(),".cache"),"ideawave","acp-bridges")}function L6(X){return X.replace(/^@/,"").replace(/[/\\]/g,"-")}function a0(){return W0.join(OX(),"install-state.json")}function kX(X){return W0.join(OX(),`${L6(X.packageName)}@${X.version}.install.lock`)}function qX(){return process.platform==="win32"?"npx.cmd":"npx"}function _X(X){return`${X.packageName}@${X.version}`}function g1(){let X=a0();if(!h1(X))return{};try{return JSON.parse(x6(X,"utf8"))}catch{return{}}}function PX(X,$){let Z=OX();I1(Z,{recursive:!0});let Q=g1();Q.bridges={...Q.bridges??{},[X.adapterId]:$},B6(`${a0()}.tmp`,`${JSON.stringify(Q,null,2)}
3
+ `),D6(`${a0()}.tmp`,a0())}function m1(X){return FX.find(($)=>$.packageName===X)??null}function c(X,$,Z){return{adapterId:X.adapterId,packageName:X.packageName,version:X.version,status:$,...Z?{error:Z}:{}}}function v1(X,$){return $?.packageName===X.packageName&&$.version===X.version}function c1(X){try{return Date.now()-N6(X).mtimeMs>M6}catch{return!1}}function P6(X){let $=kX(X);if(!h1($))return!1;if(c1($))return S1($,{force:!0}),!1;return!0}function F6(X){let $=kX(X);if(I1(W0.dirname($),{recursive:!0}),c1($))S1($,{force:!0});try{let Z=H6($,"wx");return U6(Z),!0}catch{return!1}}function O6(X){w6(kX(X))}function AX(X){let $=g1().bridges?.[X.adapterId];if(v1(X,$)&&$.status==="ready")return c(X,"ready");if(u0.has(X.adapterId)||P6(X))return c(X,"installing");if(v1(X,$)&&$.status==="failed")return c(X,"failed",$.error);return c(X,"missing")}function q0(X,$){X?.onStatusChange?.($)}function k6(X,$){let Z=AX(X);if(Z.status==="ready")return q0($,Z),Z;if(Z.status==="installing"){let W=u0.get(X.adapterId);if(W&&$?.onStatusChange)W.then((V)=>q0($,V));return q0($,Z),Z}if(!F6(X))return c(X,"installing");let Q=c(X,"installing");PX(X,Q),q0($,Q);let K=()=>{},J=new Promise((W)=>{K=W});u0.set(X.adapterId,J);let Y=!1,j=(W)=>{if(Y)return;Y=!0;try{O6(X)}catch{}PX(X,W),q0($,W),u0.delete(X.adapterId),K(W)},z;try{let W=qX();z=z6(W,["-y",_X(X),...X.warmupArgs],{stdio:"ignore",windowsHide:!0,...p0(W)})}catch(W){let V=c(X,"failed",W instanceof Error?W.message:String(W));return j(V),V}return z.on("error",(W)=>{j(c(X,"failed",W.message))}),z.on("close",(W)=>{if(W===0){j(c(X,"ready"));return}j(c(X,"failed",`npx warmup exited ${W??"null"}`))}),z.unref(),Q}function x0(X){let $=m1(X);return $?AX($):null}async function l1(X){let $=[];for(let Z of FX){if(!await T(Z.runtimeBinary)){$.push(c(Z,"not_needed"));continue}$.push(k6(Z,X))}return $.filter((Z)=>Z.status!=="not_needed")}function d0(X){let $=m1(X);if(!$)return null;if(AX($).status!=="ready")return null;return{command:qX(),args:["-y",_X($)],env:{}}}function CX(X,$){if(X.command!==qX())return!1;let Z=FX.find((Q)=>X.args.includes(_X(Q)));if(!Z)return!1;return PX(Z,c(Z,"failed",$)),!0}var p1="claude",fX="@agentclientprotocol/claude-agent-acp",u1=["claude-agent-acp","claude-code-acp"],a1="Install Claude Code from https://github.com/anthropics/claude-code",d1={id:"claude-code",displayName:"Claude Code",kind:"registered",supportsImages:!0,resolveSpawnConfig:async()=>{if(!await T(p1))throw new f(`Claude Code CLI not found. ${a1}`);let $=d0(fX);if($)return{command:$.command,args:$.args,env:g($.env)};let Z=x0(fX),Q=Z?.status==="installing";for(let J of u1){let Y=await T(J);if(Y&&!Q&&Z?.status!=="failed")return{command:Y,args:[],env:g()}}let K=Z?.status==="failed"?`Claude Code ACP bridge install failed. ${Z.error??"Restart IdeaWave CLI so it can warm the pinned bridge again."}`:"Claude Code ACP bridge is not ready. Keep IdeaWave CLI running and retry in a moment.";throw new f(K)},checkReadiness:async()=>{if(!await T(p1))return{status:"not_installed",detail:a1};let $=x0(fX);if($?.status==="ready")return{status:"ready"};if($?.status==="installing")return{status:"not_running",detail:"Installing Claude Code ACP bridge..."};if($?.status==="failed")return{status:"not_running",detail:$.error??"Claude Code ACP bridge install failed. Restart IdeaWave CLI so it can warm the pinned bridge again."};for(let Z of u1)if(await T(Z))return{status:"ready"};return{status:"not_running",detail:"Installing Claude Code ACP bridge..."}},authHint:"Run `claude login` (or set ANTHROPIC_API_KEY)."};var i1="codex",yX="@agentclientprotocol/codex-acp",o1="codex-acp",n1="Install Codex CLI from https://developers.openai.com/codex/cli",t1={id:"codex",displayName:"Codex",kind:"registered",resolveSpawnConfig:async()=>{if(!await T(i1))throw new f(`Codex CLI not found. ${n1}`);let $=d0(yX);if($)return{command:$.command,args:$.args,env:g($.env)};let Z=x0(yX),Q=Z?.status==="installing",K=await T(o1);if(K&&!Q&&Z?.status!=="failed")return{command:K,args:[],env:g()};let J=Z?.status==="failed"?`Codex ACP bridge install failed. ${Z.error??"Restart IdeaWave CLI so it can warm the pinned bridge again."}`:"Codex ACP bridge is not ready. Keep IdeaWave CLI running and retry in a moment.";throw new f(J)},checkReadiness:async()=>{if(!await T(i1))return{status:"not_installed",detail:n1};let $=x0(yX);if($?.status==="ready")return{status:"ready"};if($?.status==="installing")return{status:"not_running",detail:"Installing Codex ACP bridge..."};if($?.status==="failed")return{status:"not_running",detail:$.error??"Codex ACP bridge install failed. Restart IdeaWave CLI so it can warm the pinned bridge again."};if(await T(o1))return{status:"ready"};return{status:"not_running",detail:"Installing Codex ACP bridge..."}},authHint:"Run `codex login` (or set OPENAI_API_KEY)."};var r1="copilot",s1="copilot-acp",e1="npm i -g @github/copilot",X$={id:"copilot",displayName:"GitHub Copilot",kind:"registered",resolveSpawnConfig:async()=>{let X=await T(r1);if(X)return{command:X,args:["--acp"],env:g()};let $=await T(s1);if($)return{command:$,args:[],env:g()};throw new f(`Copilot not installed. Run: ${e1}`)},checkReadiness:async()=>{if(await T(r1))return{status:"ready"};if(await T(s1))return{status:"ready"};return{status:"not_installed",detail:e1}},authHint:"Run `gh auth login` (or `copilot login`)."};import q6 from"node:fs/promises";function _6(X){return X.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(X)}async function $$(X){if(_6(X))try{return await q6.access(X),!0}catch{return!1}return await T(X)!==null}var Z$={id:"custom",displayName:"Custom ACP",kind:"custom",resolveSpawnConfig:async(X)=>{if(X.kind!=="custom")throw new f("customAdapter received non-custom entry");if(!await $$(X.command))throw new f(`custom: command "${X.command}" not found`);return{command:X.command,args:X.args,env:g(X.env)}},checkReadiness:async(X)=>{if(X.kind!=="custom")return{status:"unknown"};return await $$(X.command)?{status:"ready"}:{status:"not_installed"}}};var Q$="opencode",K$="Install OpenCode from https://opencode.ai",J$={id:"opencode",displayName:"OpenCode",kind:"registered",resolveSpawnConfig:async()=>{let X=await T(Q$);if(!X)throw new f(`OpenCode not installed. ${K$}`);return{command:X,args:["acp"],env:g()}},checkReadiness:async()=>{if(!await T(Q$))return{status:"not_installed",detail:K$};return{status:"ready"}},authHint:"Run `opencode auth login <provider>` (or set the provider's API-key env var)."};var Y$={"claude-code":d1,opencode:J$,codex:t1,copilot:X$};function a(X){if(X.kind==="custom")return Z$;let $=Y$[X.adapterId];if(!$)throw Error(`Unknown registered adapter: ${X.adapterId}`);return $}function D0(){return Object.values(Y$)}var RX=new Map,i0=new Map,A6=30000;function o0(X,$){let Z=RX.get(X);if(Z&&Z.expiresAt>Date.now())return Promise.resolve(Z.value);let Q=i0.get(X);if(Q)return Q;let K=$().then((J)=>{return RX.set(X,{value:J,expiresAt:Date.now()+A6}),J}).finally(()=>{i0.delete(X)});return i0.set(X,K),K}async function W$(X){let $=await Promise.all(D0().map((J)=>o0(J.id,async()=>({adapterId:J.id,...await J.checkReadiness({id:"__probe__",kind:"registered",adapterId:J.id,displayName:J.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})})))),Q=(await m(X)).runtimes.filter((J)=>J.kind==="custom"),K=await Promise.all(Q.map((J)=>o0(`custom:${J.id}`,async()=>({adapterId:J.id,...await a(J).checkReadiness(J)}))));return[...$,...K]}async function j$(X,$){let Z=D0().find((J)=>J.id===X);if(Z)return o0(Z.id,async()=>({adapterId:Z.id,...await Z.checkReadiness({id:"__probe__",kind:"registered",adapterId:Z.id,displayName:Z.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})}));let K=(await m($)).runtimes.find((J)=>J.id===X);if(!K||K.kind!=="custom")return null;return o0(`custom:${K.id}`,async()=>({adapterId:K.id,...await a(K).checkReadiness(K)}))}function G$(){RX.clear(),i0.clear()}import{randomBytes as N$,randomUUID as H$}from"node:crypto";import{WebSocket as n0,WebSocketServer as f6}from"ws";function r(X){return JSON.stringify(X).replace(/</g,"\\u003c")}function C6(X){try{let $=new URL(X);if($.protocol!=="https:"||$.hostname!=="www.google.com"||$.username||$.password||$.pathname!=="/"&&$.pathname!=="/webhp")return null;return"https://www.google.com/search"}catch{return null}}function V$(X){let $=r(C6(X.sourceUrl));return`(() => {
4
4
  "use strict";
5
- let TOKEN = ${b0(Z.token)};
6
- let SOURCE_URL = ${b0(Z.sourceUrl)};
7
- const REVISION = ${b0(Z.revision)};
8
- const NAVIGATE_PREFIX = ${b0(Z.navigateUrlPrefix??null)};
9
- const RESOURCE_PREFIX = ${b0(Z.resourceUrlPrefix??null)};
10
- const PARENT_ORIGIN = ${b0(Z.parentOrigin??null)};
11
- const FROZEN = ${b0(Z.frozen===!0)};
12
- const GOOGLE_HOMEPAGE_SEARCH_URL = ${X};
5
+ let TOKEN = ${r(X.token)};
6
+ let SOURCE_URL = ${r(X.sourceUrl)};
7
+ const REVISION = ${r(X.revision)};
8
+ const NAVIGATE_PREFIX = ${r(X.navigateUrlPrefix??null)};
9
+ const RESOURCE_PREFIX = ${r(X.resourceUrlPrefix??null)};
10
+ const PARENT_ORIGIN = ${r(X.parentOrigin??null)};
11
+ const FROZEN = ${r(X.frozen===!0)};
12
+ const GOOGLE_HOMEPAGE_SEARCH_URL = ${$};
13
13
  const BRIDGE_SCRIPT = document.currentScript;
14
14
  const parentPostMessage = window.parent.postMessage.bind(window.parent);
15
15
  const stopImmediatePropagation = Event.prototype.stopImmediatePropagation;
@@ -396,12 +396,12 @@ import{createRequire as c7}from"node:module";var l7=c7(import.meta.url);function
396
396
  if (BRIDGE_SCRIPT) BRIDGE_SCRIPT.remove();
397
397
  if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", state, { once: true });
398
398
  else state();
399
- })();`}function n6(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function d4(Z){return`(() => {
399
+ })();`}function z$(X){return JSON.stringify(X).replace(/</g,"\\u003c")}function bX(X){return`(() => {
400
400
  "use strict";
401
401
  if (window.__browserKitHooked) return;
402
402
  window.__browserKitHooked = true;
403
- let REAL = ${n6(Z.sourceUrl)};
404
- const PROXY_ORIGIN = ${n6(Z.proxyOrigin)};
403
+ let REAL = ${z$(X.sourceUrl)};
404
+ const PROXY_ORIGIN = ${z$(X.proxyOrigin)};
405
405
  const PREFIX = PROXY_ORIGIN + "/browser-kit/proxy/";
406
406
 
407
407
  const currentRealUrl = () => {
@@ -421,6 +421,7 @@ import{createRequire as c7}from"node:module";var l7=c7(import.meta.url);function
421
421
  const realOrigin = () => new URL(currentRealUrl()).origin;
422
422
  const notifyNavigation = () => {
423
423
  REAL = currentRealUrl();
424
+ window.__browserKitRealUrl = REAL;
424
425
  window.dispatchEvent(new CustomEvent("ideawave-browser-navigate", { detail: { url: REAL } }));
425
426
  };
426
427
 
@@ -475,6 +476,42 @@ import{createRequire as c7}from"node:module";var l7=c7(import.meta.url);function
475
476
  history.replaceState(history.state, "", virtualHistoryUrl(REAL));
476
477
  }
477
478
  } catch {}
479
+ window.__browserKitRealUrl = currentRealUrl();
480
+
481
+ // Some applications canonicalize a non-production host by assigning the
482
+ // current real URL to location. In the proxy that is a redundant navigation
483
+ // which would escape the iframe, so cancel it before the request starts.
484
+ try {
485
+ if (window.navigation) {
486
+ window.navigation.addEventListener("navigate", (event) => {
487
+ if (!event.cancelable) return;
488
+ try {
489
+ const destination = new URL(event.destination.url);
490
+ if (destination.href === currentRealUrl()) event.preventDefault();
491
+ } catch {}
492
+ });
493
+ }
494
+ } catch {}
495
+
496
+ // Match the POC's frame-buster handling for the top proxied document. The
497
+ // sandbox remains the hard boundary; this only makes top/self checks see the
498
+ // standalone shape that the upstream page expects.
499
+ try {
500
+ if (window.top !== window.self) {
501
+ let parentProxied = true;
502
+ try {
503
+ parentProxied = window.parent.location.pathname.startsWith(
504
+ "/browser-kit/proxy/",
505
+ );
506
+ } catch {}
507
+ if (!parentProxied) {
508
+ Object.defineProperty(window, "top", {
509
+ value: window,
510
+ configurable: true,
511
+ });
512
+ }
513
+ }
514
+ } catch {}
478
515
 
479
516
  if (window.fetch) {
480
517
  window.fetch = new Proxy(window.fetch, {
@@ -531,6 +568,96 @@ import{createRequire as c7}from"node:module";var l7=c7(import.meta.url);function
531
568
  }
532
569
  } catch {}
533
570
 
571
+ // The POC runs at the top-level localhost site, while IdeaWave embeds the
572
+ // wrapper below a hosted app. Third-party-cookie blocking therefore affects
573
+ // the embedded build even though both versions proxy the page to localhost.
574
+ // Keep client-written upstream cookies in partitioned localhost cookies. The
575
+ // CLI decodes these on the next proxy request and adds them to the session's
576
+ // server-side cookie jar.
577
+ try {
578
+ const cookieDescriptor =
579
+ Object.getOwnPropertyDescriptor(Document.prototype, "cookie") ||
580
+ Object.getOwnPropertyDescriptor(HTMLDocument.prototype, "cookie");
581
+ const nativeCookieGet = cookieDescriptor && cookieDescriptor.get;
582
+ const nativeCookieSet = cookieDescriptor && cookieDescriptor.set;
583
+ const cookiePrefix = "__browser_kit_client_";
584
+ const encodeCookiePart = (value) =>
585
+ btoa(unescape(encodeURIComponent(value)))
586
+ .replace(/\\+/g, "-")
587
+ .replace(/\\//g, "_")
588
+ .replace(/=+$/g, "");
589
+ const originCookiePrefix =
590
+ cookiePrefix + encodeCookiePart(realOrigin()) + ".";
591
+ const nativeCookies = () =>
592
+ nativeCookieGet ? nativeCookieGet.call(document) : "";
593
+
594
+ if (nativeCookieGet && nativeCookieSet) {
595
+ Object.defineProperty(document, "cookie", {
596
+ configurable: true,
597
+ get() {
598
+ return nativeCookies()
599
+ .split(";")
600
+ .map((part) => part.trim())
601
+ .filter((part) => part.startsWith(originCookiePrefix))
602
+ .map((part) => {
603
+ const equals = part.indexOf("=");
604
+ if (equals < 0) return "";
605
+ try {
606
+ const payload = JSON.parse(
607
+ decodeURIComponent(part.slice(equals + 1)),
608
+ );
609
+ return payload && !payload.deleted
610
+ ? payload.name + "=" + payload.value
611
+ : "";
612
+ } catch {
613
+ return "";
614
+ }
615
+ })
616
+ .filter(Boolean)
617
+ .join("; ");
618
+ },
619
+ set(value) {
620
+ const parts = String(value).split(";");
621
+ const nameValue = parts.shift() || "";
622
+ const equals = nameValue.indexOf("=");
623
+ if (equals < 1) return;
624
+ const name = nameValue.slice(0, equals).trim();
625
+ const cookieValue = nameValue.slice(equals + 1).trim();
626
+ const attributes = new Map();
627
+ for (const part of parts) {
628
+ const index = part.indexOf("=");
629
+ const key = (index < 0 ? part : part.slice(0, index))
630
+ .trim()
631
+ .toLowerCase();
632
+ attributes.set(
633
+ key,
634
+ index < 0 ? "" : part.slice(index + 1).trim(),
635
+ );
636
+ }
637
+ const maxAge = Number(attributes.get("max-age"));
638
+ const expiresAt = Date.parse(attributes.get("expires") || "");
639
+ const deleted =
640
+ (Number.isFinite(maxAge) && maxAge <= 0) ||
641
+ (Number.isFinite(expiresAt) && expiresAt <= Date.now());
642
+ const wrapperName = originCookiePrefix + encodeCookiePart(name);
643
+ const payload = encodeURIComponent(
644
+ JSON.stringify({ name, value: cookieValue, deleted }),
645
+ );
646
+ const lifetime = deleted ? 60 : 60 * 60 * 24 * 30;
647
+ nativeCookieSet.call(
648
+ document,
649
+ wrapperName +
650
+ "=" +
651
+ payload +
652
+ "; Path=/; Max-Age=" +
653
+ lifetime +
654
+ "; SameSite=None; Secure; Partitioned",
655
+ );
656
+ },
657
+ });
658
+ }
659
+ } catch {}
660
+
534
661
  const namespaceStorage = (storage) => {
535
662
  if (!storage) return storage;
536
663
  const prefix = "__browser_kit_" + realOrigin() + "::";
@@ -618,7 +745,11 @@ import{createRequire as c7}from"node:module";var l7=c7(import.meta.url);function
618
745
  if (!anchor) return;
619
746
  const raw = anchor.getAttribute("href");
620
747
  if (!raw || raw.startsWith("#") || /^(javascript|mailto|tel|blob|data):/i.test(raw)) return;
621
- const target = anchor.getAttribute("target");
748
+ let target = anchor.getAttribute("target");
749
+ if (!target) {
750
+ const base = document.querySelector("base[target]");
751
+ if (base) target = base.getAttribute("target");
752
+ }
622
753
  const escapes = Boolean(target && target !== "_self");
623
754
  const absolute = /^(https?:\\/\\/|\\/\\/)/i.test(raw);
624
755
  if (!absolute && !escapes) return;
@@ -654,7 +785,7 @@ import{createRequire as c7}from"node:module";var l7=c7(import.meta.url);function
654
785
  };
655
786
  addEventListener("popstate", notifyNavigation);
656
787
  addEventListener("hashchange", notifyNavigation);
657
- })();`}var t6=new Set(["content-security-policy","content-security-policy-report-only","x-frame-options","cross-origin-opener-policy","cross-origin-embedder-policy","cross-origin-resource-policy","content-encoding","content-length","transfer-encoding","set-cookie","strict-transport-security","report-to","nel","permissions-policy","x-content-type-options"]);function i0(Z,X,Q){if(!Z)return Z;let K=Z.trim();if(K.startsWith(`${Q}/browser-kit/proxy/`)||K.startsWith("/browser-kit/proxy/")||/^(data|blob|mailto|tel|javascript):/i.test(K)||K.startsWith("#"))return K;try{let Y=new URL(K,X);if(Y.protocol!=="http:"&&Y.protocol!=="https:")return K;return`${Q}/browser-kit/proxy/${Y.href}`}catch{return K}}function i4(Z){let X=(Q)=>{let K=Q.trim().replace(/^["']|["']$/g,"");if(!K||K.startsWith("data:"))return Q;return i0(K,Z.baseUrl,Z.proxyOrigin)};return Z.css.replace(/url\(\s*([^)]+?)\s*\)/gi,(Q,K)=>`url(${X(K)})`).replace(/@import\s+(["'])([^"']+)\1/gi,(Q,K,Y)=>`@import ${K}${X(Y)}${K}`)}function a4(Z){let X=new URL(Z.sourceUrl).origin,Q=Z.html.replace(/<meta[^>]+http-equiv\s*=\s*["']?content-security-policy["']?[^>]*>/gi,"").replace(/\sintegrity\s*=\s*(["'])[^"']*\1/gi,"").replace(/(\b(?:href|src|action|poster)\s*=\s*["'])(https?:)\/\//gi,"$1/browser-kit/proxy/$2//").replace(/(\b(?:href|src|action|poster)\s*=\s*["'])\/\//gi,"$1/browser-kit/proxy/https://").replace(/(\b(?:href|action|poster)\s*=\s*["'])\/(?!\/|browser-kit\/proxy\/)/gi,`$1/browser-kit/proxy/${X}/`).replace(/(\bimport\s*\(\s*["'])\/(?!\/|browser-kit\/proxy\/)([^"']*)(["']\s*\))/g,`$1/browser-kit/proxy/${X}/$2$3`).replace(/(\bimport\s*\(\s*\\["'])\/(?!\/|browser-kit\/proxy\/)([^"'\\]*)(\\["']\s*\))/g,`$1/browser-kit/proxy/${X}/$2$3`);Q=Q.replace(/(<meta[^>]+http-equiv\s*=\s*["']?refresh["']?[^>]*content\s*=\s*["'][^"']*?url\s*=\s*)([^"'\s>]+)/gi,(H,w,B)=>w+i0(B,Z.sourceUrl,Z.proxyOrigin)),Q=Q.replace(/\bsrcset\s*=\s*["']([^"']*)["']/gi,(H,w)=>{return`srcset="${w.split(",").map((U)=>{let q=U.trim().split(/\s+/),h=q.shift();if(!h)return"";return[i0(h,Z.sourceUrl,Z.proxyOrigin),...q].join(" ")}).filter(Boolean).join(", ")}"`});let K=d4({sourceUrl:Z.sourceUrl,proxyOrigin:Z.proxyOrigin}),Y=l4({token:Z.bridgeToken,sourceUrl:Z.sourceUrl,revision:Z.revision,navigateUrlPrefix:Z.navigateUrlPrefix,parentOrigin:Z.proxyOrigin}),J=`<base href="${Z.proxyOrigin}/browser-kit/proxy/${Z.sourceUrl}"><script data-browser-kit-runtime>${K}</script><script data-ideawave-browser-bridge>${Y}</script>`;if(/<head[^>]*>/i.test(Q))return Q.replace(/<head[^>]*>/i,(H)=>H+J);if(/<html[^>]*>/i.test(Q))return Q.replace(/<html[^>]*>/i,(H)=>H+J);return J+Q}function p4(){return`
788
+ })();`}var U$=new Set(["content-security-policy","content-security-policy-report-only","x-frame-options","cross-origin-opener-policy","cross-origin-embedder-policy","cross-origin-resource-policy","content-encoding","content-length","transfer-encoding","set-cookie","strict-transport-security","report-to","nel","permissions-policy","x-content-type-options"]);function s(X,$,Z){if(!X)return X;let Q=X.trim();if(Q.startsWith(`${Z}/browser-kit/proxy/`)||Q.startsWith("/browser-kit/proxy/")||/^(data|blob|mailto|tel|javascript):/i.test(Q)||Q.startsWith("#"))return Q;try{let K=new URL(Q,$);if(K.protocol!=="http:"&&K.protocol!=="https:")return Q;return`${Z}/browser-kit/proxy/${K.href}`}catch{return Q}}function TX(X){let $=(Z)=>{let Q=Z.trim().replace(/^["']|["']$/g,"");if(!Q||Q.startsWith("data:"))return Z;return s(Q,X.baseUrl,X.proxyOrigin)};return X.css.replace(/url\(\s*([^)]+?)\s*\)/gi,(Z,Q)=>`url(${$(Q)})`).replace(/@import\s+(["'])([^"']+)\1/gi,(Z,Q,K)=>`@import ${Q}${$(K)}${Q}`)}function EX(X){let $=new URL(X.sourceUrl).origin,Z=X.html.replace(/<meta[^>]+http-equiv\s*=\s*["']?content-security-policy["']?[^>]*>/gi,"").replace(/\sintegrity\s*=\s*(["'])[^"']*\1/gi,"").replace(/(\b(?:href|src|action|poster)\s*=\s*["'])(https?:)\/\//gi,"$1/browser-kit/proxy/$2//").replace(/(\b(?:href|src|action|poster)\s*=\s*["'])\/\//gi,"$1/browser-kit/proxy/https://").replace(/(\b(?:href|action|poster)\s*=\s*["'])\/(?!\/|browser-kit\/proxy\/)/gi,`$1/browser-kit/proxy/${$}/`).replace(/(\bimport\s*\(\s*["'])\/(?!\/|browser-kit\/proxy\/)([^"']*)(["']\s*\))/g,`$1/browser-kit/proxy/${$}/$2$3`).replace(/(\bimport\s*\(\s*\\["'])\/(?!\/|browser-kit\/proxy\/)([^"'\\]*)(\\["']\s*\))/g,`$1/browser-kit/proxy/${$}/$2$3`);Z=Z.replace(/(<meta[^>]+http-equiv\s*=\s*["']?refresh["']?[^>]*content\s*=\s*["'][^"']*?url\s*=\s*)([^"'\s>]+)/gi,(Y,j,z)=>j+s(z,X.sourceUrl,X.proxyOrigin)),Z=Z.replace(/\bsrcset\s*=\s*["']([^"']*)["']/gi,(Y,j)=>{return`srcset="${j.split(",").map((W)=>{let V=W.trim().split(/\s+/),B=V.shift();if(!B)return"";return[/^https?:\/\//i.test(B)||B.startsWith("//")||B.startsWith("/")?s(B,X.sourceUrl,X.proxyOrigin):B,...V].join(" ")}).filter(Boolean).join(", ")}"`});let Q=bX({sourceUrl:X.sourceUrl,proxyOrigin:X.proxyOrigin}),K=V$({token:X.bridgeToken,sourceUrl:X.sourceUrl,revision:X.revision,navigateUrlPrefix:X.navigateUrlPrefix,parentOrigin:X.proxyOrigin}),J=`<base href="${X.proxyOrigin}/browser-kit/proxy/${X.sourceUrl}"><script data-browser-kit-runtime>${Q}</script><script data-ideawave-browser-bridge>${K}</script>`;if(/<head[^>]*>/i.test(Z))return Z.replace(/<head[^>]*>/i,(Y)=>Y+J);if(/<html[^>]*>/i.test(Z))return Z.replace(/<html[^>]*>/i,(Y)=>Y+J);return J+Z}function vX(){return`
658
789
  self.addEventListener("install", (event) => event.waitUntil(self.skipWaiting()));
659
790
  self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim()));
660
791
 
@@ -742,14 +873,13 @@ self.addEventListener("fetch", (event) => {
742
873
  return proxy(event, url.href);
743
874
  })());
744
875
  });
745
- `}var d9=1800000,K1="/browser-kit/proxy/";function i9(Z){let X=Z??"";return X.startsWith("[")?X.slice(1,X.indexOf("]")):X.split(":")[0]??""}function Z8(Z){let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")throw Error("Only HTTP(S) browser URLs are supported");return X.href}function a9(Z){let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")throw Error("Browser frontend origin is invalid");return X.origin}function s4(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function p9(){return X8(12).toString("hex")}function s9(Z){let X=new Headers;for(let[Q,K]of Object.entries(Z.headers))if(typeof K==="string")X.set(Q,K);else if(Array.isArray(K))X.set(Q,K.join(", "));return X}async function r9(Z){if(Z.method==="GET"||Z.method==="HEAD")return;let X=[];for await(let Q of Z)X.push(Buffer.isBuffer(Q)?Q:Buffer.from(Q));return X.length>0?Buffer.concat(X):void 0}function o9(Z){let X={};return Z.forEach((Q,K)=>{X[K]=Q}),X}function n9(Z,X){return`<!doctype html>
876
+ `}var y6=1800000,N0="/browser-kit/proxy/",x$="__browser_kit_client_";function R6(X){let $=X??"";return $.startsWith("[")?$.slice(1,$.indexOf("]")):$.split(":")[0]??""}function D$(X){let $=new URL(X);if($.protocol!=="http:"&&$.protocol!=="https:")throw Error("Only HTTP(S) browser URLs are supported");return $.href}function b6(X){let $=new URL(X);if($.protocol!=="http:"&&$.protocol!=="https:")throw Error("Browser frontend origin is invalid");return $.origin}function hX(X){return JSON.stringify(X).replace(/</g,"\\u003c")}function T6(){return N$(12).toString("hex")}function E6(X){let $=new Headers;for(let[Z,Q]of Object.entries(X.headers))if(typeof Q==="string")$.set(Z,Q);else if(Array.isArray(Q))$.set(Z,Q.join(", "));return $}async function v6(X){if(X.method==="GET"||X.method==="HEAD")return;let $=[];for await(let Z of X)$.push(Buffer.isBuffer(Z)?Z:Buffer.from(Z));return $.length>0?Buffer.concat($):void 0}function h6(X){let $={};return X.forEach((Z,Q)=>{$[Q]=Z}),$}function I6(X,$){return`<!doctype html>
746
877
  <html>
747
878
  <head>
748
879
  <meta charset="utf-8">
749
- <meta name="color-scheme" content="light">
750
880
  <style>
751
881
  *{box-sizing:border-box}
752
- html,body,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden;background:#fff}
882
+ html,body,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden;background:#fff;color-scheme:normal}
753
883
  #view{display:block}
754
884
  #status{position:fixed;right:12px;bottom:12px;left:12px;z-index:10;padding:8px 10px;border:1px solid #fecaca;border-radius:8px;background:rgba(255,255,255,.96);color:#b91c1c;font:12px system-ui;box-shadow:0 8px 24px rgba(15,23,42,.12)}
755
885
  #status[hidden]{display:none}
@@ -760,9 +890,9 @@ html,body,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden;backgro
760
890
  <div id="status" hidden></div>
761
891
  <script>
762
892
  (() => {
763
- const TOKEN = ${s4(Z.bridgeToken)};
764
- const FRONTEND_ORIGIN = ${s4(Z.frontendOrigin)};
765
- const INITIAL_URL = ${s4(X)};
893
+ const TOKEN = ${hX(X.bridgeToken)};
894
+ const FRONTEND_ORIGIN = ${hX(X.frontendOrigin)};
895
+ const INITIAL_URL = ${hX($)};
766
896
  const frame = document.getElementById("view");
767
897
  const status = document.getElementById("status");
768
898
  const showError = (error) => {
@@ -788,49 +918,29 @@ html,body,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden;backgro
788
918
  })();
789
919
  </script>
790
920
  </body>
791
- </html>`}class l1{sessions=new Map;cookies=new Map;socketServer=new l9({noServer:!0});sweepTimer;port=null;constructor(){this.sweepTimer=setInterval(()=>this.sweep(),60000),this.sweepTimer.unref?.()}setPort(Z){this.port=Z}wrapperOrigin(Z){if(!this.port)throw Error("Browser kit is not ready");return`http://${Z.wrapperHost}.localhost:${this.port}`}result(Z){let X=this.wrapperOrigin(Z);return{proxySessionId:Z.id,wrapperUrl:`${X}/browser-kit/wrapper?session=${encodeURIComponent(Z.id)}`,bridgeToken:Z.bridgeToken,navigateUrlPrefix:`${X}/browser-kit/navigate?session=${encodeURIComponent(Z.id)}&url=`}}async handleRpc(Z,X,Q){if(Q.method==="open_proxy_session"){let K=Q.params;if(typeof K.browserNodeId!=="string"||typeof K.url!=="string")throw Error("Browser proxy session input is invalid");let Y=Z8(K.url),J=a9(X),H=[...this.sessions.values()].find((B)=>B.frontendSessionId===Z&&B.browserNodeId===K.browserNodeId);if(H){if(H.frontendOrigin!==J)throw Error("Browser proxy session origin changed unexpectedly");return H.currentUrl=Y,H.lastUsedAt=Date.now(),this.result(H)}let w={id:e6(),frontendSessionId:Z,frontendOrigin:J,browserNodeId:K.browserNodeId,wrapperHost:`iw-browser-${p9()}`,bridgeToken:X8(24).toString("base64url"),currentUrl:Y,lastUsedAt:Date.now()};return this.sessions.set(w.id,w),this.result(w)}if(Q.method==="close_proxy_session"){let K=Q.params;if(typeof K.proxySessionId!=="string")throw Error("Browser proxy session input is invalid");let Y=this.sessions.get(K.proxySessionId);if(Y&&Y.frontendSessionId!==Z)throw Error("Browser proxy session belongs to another frontend session");if(Y)this.sessions.delete(Y.id);return{closed:!0}}if(Q.method==="build_snapshot")throw Error("Browser-kit snapshots are not available yet");throw Error("Unsupported browser-kit RPC operation")}closeFrontendSession(Z){for(let X of this.sessions.values())if(X.frontendSessionId===Z)this.sessions.delete(X.id)}async close(){clearInterval(this.sweepTimer),this.sessions.clear(),this.socketServer.close()}sweep(){let Z=Date.now()-d9;for(let X of this.sessions.values())if(X.lastUsedAt<Z)this.sessions.delete(X.id)}sessionForRequest(Z){let X=i9(Z.headers.host);return[...this.sessions.values()].find((Q)=>X===`${Q.wrapperHost}.localhost`)??null}storeCookies(Z,X){for(let Q of Z){let[K="",...Y]=Q.split(";"),J=K.indexOf("=");if(J<0)continue;let H=K.slice(0,J).trim(),w=K.slice(J+1).trim(),B=X.toLowerCase();for(let q of Y){let h=q.indexOf("="),M=(h<0?q:q.slice(0,h)).trim().toLowerCase(),O=h<0?"":q.slice(h+1).trim();if(M==="domain"&&O)B=O.replace(/^\./,"").toLowerCase()}if(!this.cookies.has(B))this.cookies.set(B,new Map);let U=this.cookies.get(B);if(!U)continue;if(w===""||/(^|;)\s*max-age=0/i.test(Q))U.delete(H);else U.set(H,w)}}cookieHeader(Z){let X=Z.toLowerCase(),Q=[];for(let[K,Y]of this.cookies)if(X===K||X.endsWith(`.${K}`))for(let[J,H]of Y)Q.push(`${J}=${H}`);return Q.join("; ")}async proxy(Z,X,Q,K){let Y=K.pathname.slice(K1.length)+K.search+K.hash;if(!/^https?:\/\//i.test(Y)){X.writeHead(400,{"content-type":"text/plain"}),X.end(`Bad proxy target: ${Y}`);return}let J=await r9(Z),H=Z.method??"GET",w=Y,B=J,U=null;for(let O=0;;O+=1){let f=new URL(w),C=s9(Z);for(let _ of["host","connection","origin","referer","cookie","accept-encoding"])C.delete(_);let N=this.cookieHeader(f.hostname);if(N)C.set("cookie",N);C.set("referer",`${f.origin}/`);let b={method:H,headers:C,redirect:"manual",...H!=="GET"&&H!=="HEAD"&&B?{body:B,duplex:"half"}:{}};try{U=await fetch(w,b)}catch(_){X.writeHead(502,{"content-type":"text/plain"}),X.end(`Proxy fetch error for ${w}: ${_ instanceof Error?_.message:String(_)}`);return}let $=U.headers.getSetCookie,v=typeof $==="function"?$.call(U.headers):[];if(v.length>0)this.storeCookies(v,f.hostname);let G=U.headers.get("location");if(U.status>=300&&U.status<400&&G&&O<15){if(w=new URL(G,w).href,U.status===303||H==="POST"&&(U.status===301||U.status===302))H="GET",B=void 0;continue}break}if(!U)throw Error("Browser proxy received no response");Q.lastUsedAt=Date.now();let q=new Headers;U.headers.forEach((O,f)=>{if(!t6.has(f.toLowerCase()))q.set(f,O)}),q.set("access-control-allow-origin","*"),q.set("access-control-allow-credentials","true");for(let O of["location","content-location"]){let f=q.get(O);if(f)q.set(O,i0(f,w,this.wrapperOrigin(Q)))}let h=(U.headers.get("content-type")??"").toLowerCase(),M;if(h.includes("text/html")){let O=e6();M=a4({html:await U.text(),sourceUrl:w,proxyOrigin:this.wrapperOrigin(Q),bridgeToken:Q.bridgeToken,revision:O,navigateUrlPrefix:`${this.wrapperOrigin(Q)}/browser-kit/navigate?session=${encodeURIComponent(Q.id)}&url=`}),q.delete("etag"),q.delete("last-modified"),q.set("cache-control","no-store"),q.append("set-cookie",`__browser_kit_origin=${encodeURIComponent(new URL(w).origin)}; Path=/; SameSite=Lax`)}else if(h.includes("text/css"))M=i4({css:await U.text(),baseUrl:w,proxyOrigin:this.wrapperOrigin(Q)}),q.delete("etag"),q.delete("last-modified"),q.set("cache-control","no-store");else M=Buffer.from(await U.arrayBuffer());if(X.writeHead(U.status,o9(q)),Z.method==="HEAD")X.end();else X.end(M)}async handleHttpRequest(Z,X){let Q=new URL(Z.url??"/","http://localhost");if(!Q.pathname.startsWith("/browser-kit/"))return!1;let K=this.sessionForRequest(Z);if(!K)return X.writeHead(404,{"content-type":"text/plain"}),X.end("Browser-kit session not found"),!0;if(K.lastUsedAt=Date.now(),Q.pathname==="/browser-kit/wrapper"){if(Q.searchParams.get("session")!==K.id||Z.method!=="GET"&&Z.method!=="HEAD")return X.writeHead(403),X.end(),!0;let Y=n9(K,K.currentUrl);if(X.writeHead(200,{"content-type":"text/html; charset=utf-8","cache-control":"no-store","content-security-policy":`default-src 'self'; script-src 'self' 'unsafe-inline'; worker-src 'self'; style-src 'unsafe-inline'; frame-src 'self'; connect-src 'self'; frame-ancestors ${K.frontendOrigin}`,"access-control-allow-origin":K.frontendOrigin,vary:"Origin"}),Z.method==="HEAD")X.end();else X.end(Y);return!0}if(Q.pathname==="/browser-kit/sw.js")return X.writeHead(200,{"content-type":"text/javascript; charset=utf-8","service-worker-allowed":"/","cache-control":"no-store"}),X.end(p4()),!0;if(Q.pathname==="/browser-kit/navigate"){let Y=Q.searchParams.get("url");if(!Y)return X.writeHead(400),X.end(),!0;return K.currentUrl=Z8(Y),X.writeHead(307,{location:`${this.wrapperOrigin(K)}${K1}${K.currentUrl}`,"cache-control":"no-store"}),X.end(),!0}if(Q.pathname.startsWith(K1))return await this.proxy(Z,X,K,Q),!0;return X.writeHead(404),X.end(),!0}handleUpgrade(Z,X,Q){let K=new URL(Z.url??"/","http://localhost");if(!K.pathname.startsWith(K1))return!1;if(!this.sessionForRequest(Z))return X.destroy(),!0;let J=K.pathname.slice(K1.length)+K.search+K.hash;if(!/^wss?:\/\//i.test(J))return X.destroy(),!0;return this.socketServer.handleUpgrade(Z,X,Q,(H)=>{let w;try{let U=new URL(J),q={origin:U.origin},h=this.cookieHeader(U.hostname);if(h)q.cookie=h;w=new c1(J,{headers:q})}catch{H.close(1011,"bad target");return}let B=[];w.binaryType="arraybuffer",w.on("open",()=>{for(let U of B)w.send(U);B.length=0}),H.on("message",(U)=>{if(w.readyState===c1.OPEN)w.send(U);else B.push(U)}),w.on("message",(U)=>{if(H.readyState===c1.OPEN)H.send(U)}),H.on("close",()=>w.close()),H.on("error",()=>w.close()),w.on("close",(U,q)=>{if(H.readyState===c1.OPEN)H.close(U>=1000&&U<=4999?U:1000,q.toString())}),w.on("error",()=>H.close(1011,"upstream error"))}),!0}}function t9(Z){if(!Z)return null;let X=Z.indexOf("/");if(X<=0)return null;return Z.slice(0,X)}function d1(Z){let X=[...Z.models];if(Z.adapterId!=="opencode"||X.length===0)return X;let Q=t9(Z.currentModelId)??(X.some((Y)=>Y.id.startsWith("opencode/"))?"opencode":null);if(!Q)return X;let K=X.filter((Y)=>Y.id===Z.currentModelId||Y.id.startsWith(`${Q}/`));return K.length>0?K:X}import{Readable as BZ,Writable as LZ}from"node:stream";import{ClientSideConnection as U8,ndJsonStream as F8}from"@agentclientprotocol/sdk";import v0 from"node:fs/promises";import Q0 from"node:path";class Y1 extends Error{constructor(Z){super(Z);this.name="PathTraversalError"}}class o4 extends Error{constructor(Z){super(Z);this.name="HiddenPathError"}}class n4 extends Error{constructor(Z){super(Z);this.name="RunFolderFileTooLargeError"}}class W1 extends Error{constructor(Z){super(Z);this.name="RunFolderBinaryFileError"}}var e9=new Set([".bzr",".cache",".claude",".config",".env",".git",".hg",".idea",".obsidian",".svn",".vscode","node_modules"]),Q8=1e6,ZZ=4096,XZ=new TextDecoder("utf-8",{fatal:!0});function QZ(Z){return Z.split(/[\\/]+/).filter((X)=>X.length>0)}function i1(Z){if(Q0.isAbsolute(Z))throw new Y1("Absolute paths are not allowed");for(let X of QZ(Z)){if(X===".")continue;if(X==="..")throw new Y1("Parent-directory traversal is not allowed");if(X.startsWith(".")||e9.has(X))throw new o4(`Path segment "${X}" is hidden or configuration data`)}}function KZ(Z){i1(Z);let X=Q0.normalize(Z||".");return X==="."?"":X}function WZ(Z,X,Q){let K=Q0.relative(Z,X);if(K===".."||K.startsWith(`..${Q0.sep}`)||Q0.isAbsolute(K))throw new Y1(`Path "${Q}" resolves outside the run folder`);if(K.length>0)i1(K);return K}async function r4(Z,X){i1(X);let Q=Q0.resolve(Z,X||"."),K;try{K=await v0.realpath(Q)}catch(Y){if(Y.code!=="ENOENT")throw Y;let J=Q0.dirname(Q),H=[Q0.basename(Q)];while(J!==Z&&J!==Q0.dirname(J))try{J=await v0.realpath(J);break}catch(w){if(w.code!=="ENOENT")throw w;H.unshift(Q0.basename(J)),J=Q0.dirname(J)}K=Q0.join(J,...H)}return WZ(Z,K,X),K}async function YZ(Z,X){let Q=await v0.realpath(Z);return r4(Q,X)}function JZ(Z){let X=Z.subarray(0,Math.min(Z.length,ZZ));if(X.length===0)return!1;let Q=0;for(let K of X){if(K===0)return!0;let Y=K===9||K===10||K===12||K===13;if(K<32&&!Y)Q+=1}return Q/X.length>0.3}async function a1(Z,X){let Q=await YZ(Z,X),K=await v0.stat(Q);if(!K.isFile())throw new W1(`Path "${X}" is not a text file`);if(K.size>Q8)throw new n4(`File "${X}" is too large to read (${K.size} bytes, max ${Q8} bytes)`);let Y=await v0.readFile(Q);if(JZ(Y))throw new W1(`File "${X}" appears to be binary, not text`);try{return XZ.decode(Y)}catch{throw new W1(`File "${X}" is not valid UTF-8 text`)}}function VZ(Z){if(Z.isDirectory())return"directory";if(Z.isFile())return"file";if(Z.isSymbolicLink())return"symlink";return"other"}function K8(Z){return Z.split(Q0.sep).join("/")}async function W8(Z,X=""){let Q=await v0.realpath(Z),K=KZ(X),Y=await r4(Q,K),J=await v0.readdir(Y,{withFileTypes:!0}),H=[];for(let w of J){let B=K?Q0.join(K,w.name):w.name;try{i1(B);let U=await r4(Q,B),q=await v0.stat(U);H.push({name:w.name,path:K8(B),type:VZ(w),size:w.isFile()?q.size:null})}catch{}}return H.sort((w,B)=>{if(w.type==="directory"&&B.type!=="directory")return-1;if(w.type!=="directory"&&B.type==="directory")return 1;return w.name.localeCompare(B.name)}),{path:K8(K),absolutePath:Y,entries:H}}var t4={fs:{readTextFile:!0,writeTextFile:!1},terminal:!1};function Y8(Z){return{readTextFile:async(X)=>{return{content:await a1(Z,X.path)}}}}import{spawn as jZ}from"node:child_process";function e4(Z){let X=jZ(Z.command,Z.args,{cwd:Z.cwd,env:Z.env,stdio:["pipe","pipe","pipe"],..._1(Z.command)});if(!X.stdin||!X.stdout||!X.stderr)throw Error("Failed to allocate stdio streams for ACP subprocess");let{stdin:Q,stdout:K,stderr:Y}=X,J=4096,H=[],w=0;Y.on("data",(N)=>{H.push(N),w+=N.length;while(w>J*2&&H.length>1){let b=H.shift();if(b)w-=b.length}});let B=()=>{let N=Buffer.concat(H).toString("utf8");return N.length>J?N.slice(-J):N},U=!1,q=!1,h,M,O=new Promise((N)=>{h=N}),f=new Promise((N)=>{M=N}),C=(N)=>{if(q)return;if(q=!0,h(N),!U)M(N)};return X.on("exit",(N,b)=>{C({code:N,signal:b,stderr:B()})}),X.on("error",(N)=>{let b=B(),$=N?.message??String(N);C({code:null,signal:null,stderr:b?`${$}
792
- ${b}`:$})}),{stdin:Q,stdout:K,stderr:Y,kill:(N="SIGTERM")=>{if(U)return;U=!0;try{X.kill(N)}catch{}},waitForExit:O,processCrashed:f}}var HZ=["mcp_ideawave_board_","ideawave_board_","ideawave-board_","ideawave-board.","ideawave.board."];function zZ(Z){let X=Z.toLowerCase();for(let Q of HZ)if(X.startsWith(Q))return Z.slice(Q.length);if(/^mcp[-_.]/i.test(Z))return Z.slice(4);return Z}function p1(Z){return zZ(Z.trim())}function Z2(Z){let X=p1(Z);if(!X)return"Tool";if(!/[-_.]/.test(X))return X.charAt(0).toUpperCase()+X.slice(1);let Q=X.replace(/[-_.]+/g," ").replace(/\s+/g," ").trim();if(!Q)return"Tool";return Q.charAt(0).toUpperCase()+Q.slice(1)}function X2(Z){let X=Z?.toLowerCase();if(X==="completed"||X==="complete"||X==="done"||X==="success"||X==="succeeded")return"completed";if(X==="failed"||X==="error"||X==="errored")return"failed";return"running"}function Q2(Z){if(typeof Z!=="string")return null;let X=Z.trim();return X?X:null}function J8(Z){if(typeof Z!=="string")return"Tool";let X=Z.trim();return X?X:"Tool"}function wZ(Z,X){if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let Q=Z;for(let K of X){let Y=Q[K];if(typeof Y==="string"&&Y.trim())return Y.trim()}return null}function K2(Z,X){let Q=Z.trim().toLowerCase();if(Q==="skill"||Q==="workflow"||Q==="tool"||Q==="invalid"){let K=wZ(X,["skillName","workflowName","toolName","name","title"]);if(K){let Y=Q==="skill"?" skill":Q==="workflow"?" workflow":"";return`${Z2(K)}${Y}`}}if(Q==="invalid")return"Tool call";return Z2(Z)}var UZ=33,V8=1600;function k0(Z){if(Z.length<=V8)return Z;return`${Z.slice(0,V8-22)}
793
- ... truncated`}function r1(Z){let X=Z.replace(/\r\n?/g,`
794
- `),Q=X.trim();if(Q.startsWith('"')&&Q.endsWith('"')||Q.startsWith("'")&&Q.endsWith("'"))try{let Y=JSON.parse(Q);if(typeof Y==="string")return Y.replace(/\r\n?/g,`
795
- `)}catch{return X}if(!X.includes("\\\""))return X;let K=X.replace(/\\r\\n/g,`
921
+ </html>`}class t0{sessions=new Map;socketServer=new f6({noServer:!0});sweepTimer;port=null;constructor(){this.sweepTimer=setInterval(()=>this.sweep(),60000),this.sweepTimer.unref?.()}setPort(X){this.port=X}wrapperOrigin(X){if(!this.port)throw Error("Browser kit is not ready");return`http://${X.wrapperHost}.localhost:${this.port}`}result(X){let $=this.wrapperOrigin(X);return{proxySessionId:X.id,wrapperUrl:`${$}/browser-kit/wrapper?session=${encodeURIComponent(X.id)}`,bridgeToken:X.bridgeToken,navigateUrlPrefix:`${$}/browser-kit/navigate?session=${encodeURIComponent(X.id)}&url=`}}async handleRpc(X,$,Z){if(Z.method==="open_proxy_session"){let Q=Z.params;if(typeof Q.browserNodeId!=="string"||typeof Q.url!=="string")throw Error("Browser proxy session input is invalid");let K=D$(Q.url),J=b6($),Y=[...this.sessions.values()].find((z)=>z.frontendSessionId===X&&z.browserNodeId===Q.browserNodeId);if(Y){if(Y.frontendOrigin!==J)throw Error("Browser proxy session origin changed unexpectedly");return Y.currentUrl=K,Y.lastUsedAt=Date.now(),this.result(Y)}let j={id:H$(),frontendSessionId:X,frontendOrigin:J,browserNodeId:Q.browserNodeId,wrapperHost:`iw-browser-${T6()}`,bridgeToken:N$(24).toString("base64url"),currentUrl:K,lastUsedAt:Date.now(),cookies:new Map};return this.sessions.set(j.id,j),this.result(j)}if(Z.method==="close_proxy_session"){let Q=Z.params;if(typeof Q.proxySessionId!=="string")throw Error("Browser proxy session input is invalid");let K=this.sessions.get(Q.proxySessionId);if(K&&K.frontendSessionId!==X)throw Error("Browser proxy session belongs to another frontend session");if(K)this.sessions.delete(K.id);return{closed:!0}}if(Z.method==="build_snapshot")throw Error("Browser-kit snapshots are not available yet");throw Error("Unsupported browser-kit RPC operation")}closeFrontendSession(X){for(let $ of this.sessions.values())if($.frontendSessionId===X)this.sessions.delete($.id)}async close(){clearInterval(this.sweepTimer),this.sessions.clear(),this.socketServer.close()}sweep(){let X=Date.now()-y6;for(let $ of this.sessions.values())if($.lastUsedAt<X)this.sessions.delete($.id)}sessionForRequest(X){let $=R6(X.headers.host);return[...this.sessions.values()].find((Z)=>$===`${Z.wrapperHost}.localhost`)??null}storeCookies(X,$,Z){for(let Q of $){let[K="",...J]=Q.split(";"),Y=K.indexOf("=");if(Y<0)continue;let j=K.slice(0,Y).trim(),z=K.slice(Y+1).trim(),W=Z.toLowerCase();for(let B of J){let L=B.indexOf("="),x=(L<0?B:B.slice(0,L)).trim().toLowerCase(),U=L<0?"":B.slice(L+1).trim();if(x==="domain"&&U)W=U.replace(/^\./,"").toLowerCase()}if(!X.cookies.has(W))X.cookies.set(W,new Map);let V=X.cookies.get(W);if(!V)continue;if(z===""||/(^|;)\s*max-age=0/i.test(Q))V.delete(j);else V.set(j,z)}}storeClientCookies(X,$){if(!$)return;for(let Z of $.split(";")){let Q=Z.trim(),K=Q.indexOf("=");if(K<1)continue;let J=Q.slice(0,K);if(!J.startsWith(x$))continue;let Y=J.slice(x$.length).split(".");if(Y.length!==2)continue;try{let j=Buffer.from(Y[0]??"","base64url").toString(),z=Buffer.from(Y[1]??"","base64url").toString(),W=JSON.parse(decodeURIComponent(Q.slice(K+1))),V=new URL(j).hostname.toLowerCase();if(!z||W.name!==z||typeof W.value!=="string")continue;if(!X.cookies.has(V))X.cookies.set(V,new Map);let B=X.cookies.get(V);if(!B)continue;if(W.deleted===!0)B.delete(z);else B.set(z,W.value)}catch{}}}cookieHeader(X,$){let Z=$.toLowerCase(),Q=[];for(let[K,J]of X.cookies)if(Z===K||Z.endsWith(`.${K}`))for(let[Y,j]of J)Q.push(`${Y}=${j}`);return Q.join("; ")}async proxy(X,$,Z,Q){let K=Q.pathname.slice(N0.length)+Q.search+Q.hash;if(!/^https?:\/\//i.test(K)){$.writeHead(400,{"content-type":"text/plain"}),$.end(`Bad proxy target: ${K}`);return}let J=await v6(X),Y=X.method??"GET",j=K,z=J,W=null;this.storeClientCookies(Z,X.headers.cookie);for(let D=0;;D+=1){let N=new URL(j),H=E6(X);for(let G of["host","connection","origin","referer","cookie","accept-encoding"])H.delete(G);let P=this.cookieHeader(Z,N.hostname);if(P)H.set("cookie",P);H.set("referer",`${N.origin}/`);let w={method:Y,headers:H,redirect:"manual",...Y!=="GET"&&Y!=="HEAD"&&z?{body:z,duplex:"half"}:{}};try{W=await fetch(j,w)}catch(G){$.writeHead(502,{"content-type":"text/plain"}),$.end(`Proxy fetch error for ${j}: ${G instanceof Error?G.message:String(G)}`);return}let O=W.headers.getSetCookie,C=typeof O==="function"?O.call(W.headers):[];if(C.length>0)this.storeCookies(Z,C,N.hostname);let M=W.headers.get("location");if(W.status>=300&&W.status<400&&M&&D<15){if(j=new URL(M,j).href,W.status===303||Y==="POST"&&(W.status===301||W.status===302))Y="GET",z=void 0;continue}break}if(!W)throw Error("Browser proxy received no response");Z.lastUsedAt=Date.now();let V=new Headers;W.headers.forEach((D,N)=>{if(!U$.has(N.toLowerCase()))V.set(N,D)}),V.set("access-control-allow-origin","*"),V.set("access-control-allow-credentials","true");for(let D of["location","content-location"]){let N=V.get(D);if(N)V.set(D,s(N,j,this.wrapperOrigin(Z)))}let B=V.get("refresh");if(B){let D=B.toLowerCase().indexOf("url=");if(D>=0)V.set("refresh",B.slice(0,D+4)+s(B.slice(D+4).trim(),j,this.wrapperOrigin(Z)))}let L=V.get("link");if(L){let D=L.replace(/<([^>]+)>/g,(N,H)=>`<${s(H,j,this.wrapperOrigin(Z))}>`).replace(/;\s*integrity\s*=\s*(?:"[^"]*"|'[^']*'|[^;,\s]+)/gi,"");V.set("link",D)}let x=(W.headers.get("content-type")??"").toLowerCase(),U;if(x.includes("text/html")){let D=H$();U=EX({html:await W.text(),sourceUrl:j,proxyOrigin:this.wrapperOrigin(Z),bridgeToken:Z.bridgeToken,revision:D,navigateUrlPrefix:`${this.wrapperOrigin(Z)}/browser-kit/navigate?session=${encodeURIComponent(Z.id)}&url=`}),V.delete("etag"),V.delete("last-modified"),V.set("cache-control","no-store"),V.append("set-cookie",`__browser_kit_origin=${encodeURIComponent(new URL(j).origin)}; Path=/; SameSite=Lax`)}else if(x.includes("text/css"))U=TX({css:await W.text(),baseUrl:j,proxyOrigin:this.wrapperOrigin(Z)}),V.delete("etag"),V.delete("last-modified"),V.set("cache-control","no-store");else U=Buffer.from(await W.arrayBuffer());if($.writeHead(W.status,h6(V)),X.method==="HEAD")$.end();else $.end(U)}async handleHttpRequest(X,$){let Z=new URL(X.url??"/","http://localhost"),Q=Z.pathname.startsWith("/browser-kit/"),K=this.sessionForRequest(X);if(!K){if(!Q)return!1;return $.writeHead(404,{"content-type":"text/plain"}),$.end("Browser-kit session not found"),!0}if(K.lastUsedAt=Date.now(),!Q){let J=null,j=X.headers.referer?.match(/\/browser-kit\/proxy\/(https?:\/\/[^/?#]+)/i);if(j?.[1])J=j[1];if(!J){let W=X.headers.cookie?.match(/(?:^|;\s*)__browser_kit_origin=([^;]+)/);if(W?.[1])try{J=decodeURIComponent(W[1])}catch{}}if(!J)J=new URL(K.currentUrl).origin;let z=`${J}${Z.pathname}${Z.search}`;return $.writeHead(307,{location:`${this.wrapperOrigin(K)}${N0}${z}`,"cache-control":"no-store"}),$.end(),!0}if(Z.pathname==="/browser-kit/wrapper"){if(Z.searchParams.get("session")!==K.id||X.method!=="GET"&&X.method!=="HEAD")return $.writeHead(403),$.end(),!0;let J=I6(K,K.currentUrl);if($.writeHead(200,{"content-type":"text/html; charset=utf-8","cache-control":"no-store","content-security-policy":`default-src 'self'; script-src 'self' 'unsafe-inline'; worker-src 'self'; style-src 'unsafe-inline'; frame-src 'self'; connect-src 'self'; frame-ancestors ${K.frontendOrigin}`,"access-control-allow-origin":K.frontendOrigin,vary:"Origin"}),X.method==="HEAD")$.end();else $.end(J);return!0}if(Z.pathname==="/browser-kit/sw.js")return $.writeHead(200,{"content-type":"text/javascript; charset=utf-8","service-worker-allowed":"/","cache-control":"no-store"}),$.end(vX()),!0;if(Z.pathname==="/browser-kit/navigate"){let J=Z.searchParams.get("url");if(!J)return $.writeHead(400),$.end(),!0;return K.currentUrl=D$(J),$.writeHead(307,{location:`${this.wrapperOrigin(K)}${N0}${K.currentUrl}`,"cache-control":"no-store"}),$.end(),!0}if(Z.pathname.startsWith(N0))return await this.proxy(X,$,K,Z),!0;return $.writeHead(404),$.end(),!0}handleUpgrade(X,$,Z){let Q=new URL(X.url??"/","http://localhost");if(!Q.pathname.startsWith(N0))return!1;let K=this.sessionForRequest(X);if(!K)return $.destroy(),!0;let J=Q.pathname.slice(N0.length)+Q.search+Q.hash;if(!/^wss?:\/\//i.test(J))return $.destroy(),!0;return this.socketServer.handleUpgrade(X,$,Z,(Y)=>{let j;try{let W=new URL(J),V={origin:W.origin},B=this.cookieHeader(K,W.hostname);if(B)V.cookie=B;j=new n0(J,{headers:V})}catch{Y.close(1011,"bad target");return}let z=[];j.binaryType="arraybuffer",j.on("open",()=>{for(let W of z)j.send(W);z.length=0}),Y.on("message",(W)=>{if(j.readyState===n0.OPEN)j.send(W);else z.push(W)}),j.on("message",(W)=>{if(Y.readyState===n0.OPEN)Y.send(W)}),Y.on("close",()=>j.close()),Y.on("error",()=>j.close()),j.on("close",(W,V)=>{if(Y.readyState===n0.OPEN)Y.close(W>=1000&&W<=4999?W:1000,V.toString())}),j.on("error",()=>Y.close(1011,"upstream error"))}),!0}}function S6(X){if(!X)return null;let $=X.indexOf("/");if($<=0)return null;return X.slice(0,$)}function r0(X){let $=[...X.models];if(X.adapterId!=="opencode"||$.length===0)return $;let Z=S6(X.currentModelId)??($.some((K)=>K.id.startsWith("opencode/"))?"opencode":null);if(!Z)return $;let Q=$.filter((K)=>K.id===X.currentModelId||K.id.startsWith(`${Z}/`));return Q.length>0?Q:$}import{Readable as X3,Writable as $3}from"node:stream";import{ClientSideConnection as A$,ndJsonStream as C$}from"@agentclientprotocol/sdk";import e from"node:fs/promises";import S from"node:path";class A0 extends Error{constructor(X){super(X);this.name="PathTraversalError"}}class SX extends Error{constructor(X){super(X);this.name="HiddenPathError"}}class gX extends Error{constructor(X){super(X);this.name="RunFolderFileTooLargeError"}}class _0 extends Error{constructor(X){super(X);this.name="RunFolderBinaryFileError"}}var g6=new Set([".bzr",".cache",".claude",".config",".env",".git",".hg",".idea",".obsidian",".svn",".vscode","node_modules"]),w$=1e6,m6=4096,c6=new TextDecoder("utf-8",{fatal:!0});function l6(X){return X.split(/[\\/]+/).filter(($)=>$.length>0)}function s0(X){if(S.isAbsolute(X))throw new A0("Absolute paths are not allowed");for(let $ of l6(X)){if($===".")continue;if($==="..")throw new A0("Parent-directory traversal is not allowed");if($.startsWith(".")||g6.has($))throw new SX(`Path segment "${$}" is hidden or configuration data`)}}function p6(X){s0(X);let $=S.normalize(X||".");return $==="."?"":$}function u6(X,$,Z){let Q=S.relative(X,$);if(Q===".."||Q.startsWith(`..${S.sep}`)||S.isAbsolute(Q))throw new A0(`Path "${Z}" resolves outside the run folder`);if(Q.length>0)s0(Q);return Q}async function IX(X,$){s0($);let Z=S.resolve(X,$||"."),Q;try{Q=await e.realpath(Z)}catch(K){if(K.code!=="ENOENT")throw K;let J=S.dirname(Z),Y=[S.basename(Z)];while(J!==X&&J!==S.dirname(J))try{J=await e.realpath(J);break}catch(j){if(j.code!=="ENOENT")throw j;Y.unshift(S.basename(J)),J=S.dirname(J)}Q=S.join(J,...Y)}return u6(X,Q,$),Q}async function a6(X,$){let Z=await e.realpath(X);return IX(Z,$)}function d6(X){let $=X.subarray(0,Math.min(X.length,m6));if($.length===0)return!1;let Z=0;for(let Q of $){if(Q===0)return!0;let K=Q===9||Q===10||Q===12||Q===13;if(Q<32&&!K)Z+=1}return Z/$.length>0.3}async function e0(X,$){let Z=await a6(X,$),Q=await e.stat(Z);if(!Q.isFile())throw new _0(`Path "${$}" is not a text file`);if(Q.size>w$)throw new gX(`File "${$}" is too large to read (${Q.size} bytes, max ${w$} bytes)`);let K=await e.readFile(Z);if(d6(K))throw new _0(`File "${$}" appears to be binary, not text`);try{return c6.decode(K)}catch{throw new _0(`File "${$}" is not valid UTF-8 text`)}}function i6(X){if(X.isDirectory())return"directory";if(X.isFile())return"file";if(X.isSymbolicLink())return"symlink";return"other"}function B$(X){return X.split(S.sep).join("/")}async function M$(X,$=""){let Z=await e.realpath(X),Q=p6($),K=await IX(Z,Q),J=await e.readdir(K,{withFileTypes:!0}),Y=[];for(let j of J){let z=Q?S.join(Q,j.name):j.name;try{s0(z);let W=await IX(Z,z),V=await e.stat(W);Y.push({name:j.name,path:B$(z),type:i6(j),size:j.isFile()?V.size:null})}catch{}}return Y.sort((j,z)=>{if(j.type==="directory"&&z.type!=="directory")return-1;if(j.type!=="directory"&&z.type==="directory")return 1;return j.name.localeCompare(z.name)}),{path:B$(Q),absolutePath:K,entries:Y}}var mX={fs:{readTextFile:!0,writeTextFile:!1},terminal:!1};function L$(X){return{readTextFile:async($)=>{return{content:await e0(X,$.path)}}}}import{spawn as o6}from"node:child_process";function cX(X){let $=o6(X.command,X.args,{cwd:X.cwd,env:X.env,stdio:["pipe","pipe","pipe"],...p0(X.command)});if(!$.stdin||!$.stdout||!$.stderr)throw Error("Failed to allocate stdio streams for ACP subprocess");let{stdin:Z,stdout:Q,stderr:K}=$,J=4096,Y=[],j=0;K.on("data",(N)=>{Y.push(N),j+=N.length;while(j>J*2&&Y.length>1){let H=Y.shift();if(H)j-=H.length}});let z=()=>{let N=Buffer.concat(Y).toString("utf8");return N.length>J?N.slice(-J):N},W=!1,V=!1,B,L,x=new Promise((N)=>{B=N}),U=new Promise((N)=>{L=N}),D=(N)=>{if(V)return;if(V=!0,B(N),!W)L(N)};return $.on("exit",(N,H)=>{D({code:N,signal:H,stderr:z()})}),$.on("error",(N)=>{let H=z(),P=N?.message??String(N);D({code:null,signal:null,stderr:H?`${P}
922
+ ${H}`:P})}),{stdin:Z,stdout:Q,stderr:K,kill:(N="SIGTERM")=>{if(W)return;W=!0;try{$.kill(N)}catch{}},waitForExit:x,processCrashed:U}}var n6=["mcp_ideawave_board_","ideawave_board_","ideawave-board_","ideawave-board.","ideawave.board."];function t6(X){let $=X.toLowerCase();for(let Z of n6)if($.startsWith(Z))return X.slice(Z.length);if(/^mcp[-_.]/i.test(X))return X.slice(4);return X}function XX(X){return t6(X.trim())}function lX(X){let $=XX(X);if(!$)return"Tool";if(!/[-_.]/.test($))return $.charAt(0).toUpperCase()+$.slice(1);let Z=$.replace(/[-_.]+/g," ").replace(/\s+/g," ").trim();if(!Z)return"Tool";return Z.charAt(0).toUpperCase()+Z.slice(1)}function pX(X){let $=X?.toLowerCase();if($==="completed"||$==="complete"||$==="done"||$==="success"||$==="succeeded")return"completed";if($==="failed"||$==="error"||$==="errored")return"failed";return"running"}function uX(X){if(typeof X!=="string")return null;let $=X.trim();return $?$:null}function P$(X){if(typeof X!=="string")return"Tool";let $=X.trim();return $?$:"Tool"}function r6(X,$){if(!X||typeof X!=="object"||Array.isArray(X))return null;let Z=X;for(let Q of $){let K=Z[Q];if(typeof K==="string"&&K.trim())return K.trim()}return null}function aX(X,$){let Z=X.trim().toLowerCase();if(Z==="skill"||Z==="workflow"||Z==="tool"||Z==="invalid"){let Q=r6($,["skillName","workflowName","toolName","name","title"]);if(Q){let K=Z==="skill"?" skill":Z==="workflow"?" workflow":"";return`${lX(Q)}${K}`}}if(Z==="invalid")return"Tool call";return lX(X)}var s6=33,F$=1600;function j0(X){if(X.length<=F$)return X;return`${X.slice(0,F$-22)}
923
+ ... truncated`}function ZX(X){let $=X.replace(/\r\n?/g,`
924
+ `),Z=$.trim();if(Z.startsWith('"')&&Z.endsWith('"')||Z.startsWith("'")&&Z.endsWith("'"))try{let K=JSON.parse(Z);if(typeof K==="string")return K.replace(/\r\n?/g,`
925
+ `)}catch{return $}if(!$.includes("\\\""))return $;let Q=$.replace(/\\r\\n/g,`
796
926
  `).replace(/\\n/g,`
797
927
  `).replace(/\\r/g,`
798
- `).replace(/\\t/g,"\t").replace(/\\"/g,'"');try{let Y=JSON.parse(K);if(Y!==null&&typeof Y==="object")return K}catch{return X}return X}function x0(Z){if(Z===void 0||Z===null)return null;if(typeof Z==="string"){let X=r1(Z).trim();return X?k0(X):null}if(typeof Z==="number"||typeof Z==="boolean"||typeof Z==="bigint")return String(Z);try{return k0(JSON.stringify(Z,null,2))}catch{return k0(r1(String(Z)))}}function FZ(Z){if(!Z||typeof Z!=="object")return null;let X=Z;if(X.type==="text"&&typeof X.text==="string")return r1(X.text);if(X.type==="image")return"[image]";if(X.type==="resource")return"[resource]";if(X.type==="content"){let Q=X.content;if(Q&&typeof Q==="object"){let K=Q;if(K.type==="text"&&typeof K.text==="string")return r1(K.text);if(K.type==="image")return"[image]";if(K.type==="resource")return"[resource]"}}if(X.type==="diff")return`Diff: ${typeof X.path==="string"?X.path:"unknown file"}`;if(X.type==="terminal")return`Terminal: ${typeof X.terminalId==="string"?X.terminalId:"terminal"}`;return x0(Z)}function s1(Z){if(!Array.isArray(Z))return null;let X=Z.map(FZ).filter((Q)=>Boolean(Q?.trim()));if(X.length===0)return null;return k0(X.join(`
928
+ `).replace(/\\t/g,"\t").replace(/\\"/g,'"');try{let K=JSON.parse(Q);if(K!==null&&typeof K==="object")return Q}catch{return $}return $}function o(X){if(X===void 0||X===null)return null;if(typeof X==="string"){let $=ZX(X).trim();return $?j0($):null}if(typeof X==="number"||typeof X==="boolean"||typeof X==="bigint")return String(X);try{return j0(JSON.stringify(X,null,2))}catch{return j0(ZX(String(X)))}}function e6(X){if(!X||typeof X!=="object")return null;let $=X;if($.type==="text"&&typeof $.text==="string")return ZX($.text);if($.type==="image")return"[image]";if($.type==="resource")return"[resource]";if($.type==="content"){let Z=$.content;if(Z&&typeof Z==="object"){let Q=Z;if(Q.type==="text"&&typeof Q.text==="string")return ZX(Q.text);if(Q.type==="image")return"[image]";if(Q.type==="resource")return"[resource]"}}if($.type==="diff")return`Diff: ${typeof $.path==="string"?$.path:"unknown file"}`;if($.type==="terminal")return`Terminal: ${typeof $.terminalId==="string"?$.terminalId:"terminal"}`;return o(X)}function $X(X){if(!Array.isArray(X))return null;let $=X.map(e6).filter((Z)=>Boolean(Z?.trim()));if($.length===0)return null;return j0($.join(`
799
929
 
800
- `))}function W2(Z){if(!Z||typeof Z!=="object"||Array.isArray(Z))return x0(Z);let X=Z,Q=s1(X.content);if(Q)return Q;for(let J of["output","result","text","message"]){let H=x0(X[J]);if(H)return H}let K=x0(X.stdout),Y=x0(X.stderr);if(K||Y)return k0([K?`stdout:
801
- ${K}`:null,Y?`stderr:
802
- ${Y}`:null].filter(Boolean).join(`
930
+ `))}function dX(X){if(!X||typeof X!=="object"||Array.isArray(X))return o(X);let $=X,Z=$X($.content);if(Z)return Z;for(let J of["output","result","text","message"]){let Y=o($[J]);if(Y)return Y}let Q=o($.stdout),K=o($.stderr);if(Q||K)return j0([Q?`stdout:
931
+ ${Q}`:null,K?`stderr:
932
+ ${K}`:null].filter(Boolean).join(`
803
933
 
804
- `));return x0(Z)}function j8(Z,X){if(!X)return Z;if(!Z)return X;if(Z===X||Z.endsWith(X))return Z;if(X.startsWith(Z))return X;return k0(`${Z}
934
+ `));return o(X)}function O$(X,$){if(!$)return X;if(!X)return $;if(X===$||X.endsWith($))return X;if($.startsWith(X))return $;return j0(`${X}
805
935
 
806
- ${X}`)}function Y2(Z){if(!Array.isArray(Z))return null;let X=Z.flatMap((Q)=>{if(!Q||typeof Q!=="object")return[];let K=Q;if(typeof K.path!=="string"||!K.path.trim())return[];let Y=typeof K.line==="number"?`:${K.line}`:"";return[`${K.path}${Y}`]});return X.length>0?X.slice(0,5):null}function H8(Z){let{ctx:X,appendText:Q,appendToolActivity:K}=Z,Y=Z.flushIntervalMs??UZ,J="",H="",w=0,B=null,U={},q=new Map,h=(D)=>{if(q.set(D.toolCallId,D),!K)return;K({boardId:X.boardId,cardId:X.cardId,runId:X.runId,entry:D}).catch((x)=>{console.warn("[streamAdapter] appendToolActivity failed",x)})},M=(D)=>{let x=`${X.runId}:thought`,E=q.get(x);if(!E||E.status!=="running")return;h({...E,status:"completed",completedAt:E.completedAt??D})},O=(D)=>{for(let x of q.values()){if(x.status!=="running"||x.rawTitle.toLowerCase()!=="toolsearch")continue;h({...x,status:"completed",completedAt:x.completedAt??D})}},f=(D)=>{for(let x of Array.from(q.values())){if(x.status!=="running")continue;if(x.kind==="thought"||x.rawTitle==="agent_thought")continue;h({...x,status:"completed",completedAt:x.completedAt??D})}},C="",N=0,b=null,$=null,v=(D)=>{if(D===C)return;C=D,N=Date.now(),Q({boardId:X.boardId,cardId:X.cardId,runId:X.runId,text:D}).catch((x)=>{console.warn("[streamAdapter] appendText failed",x)})},G=()=>{if(b!==null)clearTimeout(b),b=null;if($!==null){let D=$;$=null,v(D)}},_=(D)=>{let x=Date.now()-N;if(x>=Y&&b===null){v(D);return}if($=D,b===null){let E=Math.max(0,Y-x);b=setTimeout(()=>{b=null,G()},E)}};return{onSessionUpdate:async(D)=>{let x=D.update;switch(U[x.sessionUpdate]=(U[x.sessionUpdate]??0)+1,x.sessionUpdate){case"agent_message_chunk":{let E=new Date().toISOString();if(M(E),x.content.type==="text")J+=x.content.text,_(J);else{let k=`agent_message_chunk:${x.content.type}`;U[k]=(U[k]??0)+1}return}case"agent_thought_chunk":{if(x.content.type!=="text")return;H+=x.content.text;let E=new Date().toISOString(),k=`${X.runId}:thought`,l=q.get(k);h({toolCallId:k,rawTitle:"agent_thought",title:"Thought",kind:"thought",status:"running",startedAt:l?.startedAt??E,completedAt:null,contentPreview:k0(H.trim())});return}case"user_message_chunk":return;case"tool_call":{w+=1;let E=J8(x.title),k=X2(x.status),l=new Date().toISOString();M(l),O(l),h({toolCallId:x.toolCallId,rawTitle:E,title:K2(E,x.rawInput),kind:Q2(x.kind),status:k,startedAt:l,completedAt:k==="running"?null:l,inputPreview:x0(x.rawInput),outputPreview:W2(x.rawOutput),contentPreview:s1(x.content),locations:Y2(x.locations)});return}case"tool_call_update":{let E=q.get(x.toolCallId);if(!E){let c=J8(x.title),X0=X2(x.status),r=new Date().toISOString();h({toolCallId:x.toolCallId,rawTitle:c,title:K2(c,x.rawInput),kind:Q2(x.kind),status:X0,startedAt:r,completedAt:X0==="running"?null:r,inputPreview:x0(x.rawInput),outputPreview:W2(x.rawOutput),contentPreview:s1(x.content),locations:Y2(x.locations)});return}let k=x.status===void 0||x.status===null?E.status:X2(x.status),l=typeof x.title==="string"&&x.title.trim().length>0?x.title:E.rawTitle,L0=typeof x.title==="string"&&x.title.trim().length>0,y0=k==="running"?E.completedAt:E.completedAt??new Date().toISOString(),I=x.content===void 0?E.contentPreview:j8(E.contentPreview,s1(x.content)),p=x.rawOutput===void 0?E.outputPreview:j8(E.outputPreview,W2(x.rawOutput));h({...E,rawTitle:l,title:L0?K2(l,x.rawInput):E.title,kind:x.kind===void 0?E.kind:Q2(x.kind),status:k,completedAt:y0,inputPreview:x.rawInput===void 0?E.inputPreview:x0(x.rawInput),outputPreview:p,contentPreview:I,locations:x.locations===void 0?E.locations:Y2(x.locations)});return}case"plan":B=x.entries;return;case"available_commands_update":return;case"current_mode_update":return;default:return}},getFinalText:()=>J,getToolCallCount:()=>w,getLatestPlan:()=>B,getUpdateTypeCounts:()=>({...U}),flush:(D)=>{let x=new Date().toISOString();if(M(x),D?.completeOpenToolCalls)f(x);G()}}}var J1=1,z8=-32000;function w8(Z){if(Z.awaitingInput)return!1;return Z.nowMs-Z.lastUpdateMs>=Z.windowMs}function B8(Z){if(!Z||typeof Z!=="object")return!1;return Z.code===z8}var qZ=60000,xZ=qZ,PZ=5000;function fZ(Z){let X=Math.max(1,Math.round(Z/1000));return`Runtime has not responded for ${X} ${X===1?"second":"seconds"}. Retry the agent run.`}function L8(){return{name:"ideawave-cli",title:"IdeaWave CLI",version:"0.0.65".trim()?"0.0.65":"dev"}}function q8(Z){if(Z===J1)return;throw new T(`Unsupported ACP protocol version ${Z}; expected ${J1}`)}function x8(Z){return BZ.toWeb(Z)}function P8(Z){return LZ.toWeb(Z)}function J2(Z){return Z!==null&&typeof Z==="object"}function yZ(Z){if(!Array.isArray(Z))return[];let X=[];for(let Q of Z){if(!J2(Q))continue;if(typeof Q.group==="string"&&Array.isArray(Q.options)){let K=typeof Q.name==="string"?Q.name:Q.group;for(let Y of Q.options){if(!J2(Y))continue;if(typeof Y.value!=="string"||typeof Y.name!=="string")continue;X.push({value:Y.value,name:Y.name,description:typeof Y.description==="string"?Y.description:null,group:Q.group,groupName:K})}continue}if(typeof Q.value!=="string"||typeof Q.name!=="string")continue;X.push({value:Q.value,name:Q.name,description:typeof Q.description==="string"?Q.description:null,group:null,groupName:null})}return X}function OZ(Z){if(!J2(Z))return null;if(typeof Z.id!=="string"||typeof Z.name!=="string")return null;let X=typeof Z.category==="string"?Z.category:null,Q=typeof Z.description==="string"?Z.description:null;if(Z.type==="select"){let K=typeof Z.currentValue==="string"?Z.currentValue:null;return{id:Z.id,name:Z.name,category:X,description:Q,type:"select",currentValue:K,options:yZ(Z.options)}}if(Z.type==="boolean"){let K=typeof Z.currentValue==="boolean"?Z.currentValue:typeof Z.value==="boolean"?Z.value:null;return{id:Z.id,name:Z.name,category:X,description:Q,type:"boolean",currentValue:K,options:[]}}return null}function V2(Z){let X=(Z.configOptions??[]).map(OZ).filter((w)=>w!==null),Q=X.find((w)=>w.type==="select"&&w.category==="model")??X.find((w)=>w.type==="select"&&w.id==="model")??null,K=Q?.options.map((w)=>({id:w.value,name:w.name,description:w.description??null})),Y=bZ(Z.models),J=K&&K.length>0?K:Y&&Y.length>0?Y:null,H=(typeof Q?.currentValue==="string"?Q.currentValue:null)??vZ(Z.models)??null;return{models:J,currentModelId:H,configOptions:X,modelConfigId:Q?.id??null}}function bZ(Z){if(!Z||!Array.isArray(Z.availableModels))return null;let X=[];for(let Q of Z.availableModels){if(typeof Q.modelId!=="string")continue;X.push({id:Q.modelId,name:typeof Q.name==="string"?Q.name:null,description:typeof Q.description==="string"?Q.description:null})}return X.length>0?X:null}function vZ(Z){return typeof Z?.currentModelId==="string"?Z.currentModelId:null}function RZ(Z,X){let Q=[];if(Z.trim())Q.push({type:"text",text:Z});for(let K of X)if(K.content.trim())Q.push({type:"text",text:K.content});return Q}function CZ(Z){if(typeof Z.value==="boolean")return{sessionId:Z.sessionId,configId:Z.configId,type:"boolean",value:Z.value};return{sessionId:Z.sessionId,configId:Z.configId,value:Z.value}}function hZ(Z,X){let Q=V2({configOptions:X.configOptions});return{models:Q.models??Z.models,currentModelId:Q.currentModelId??Z.currentModelId,configOptions:Q.configOptions,modelConfigId:Q.modelConfigId??Z.modelConfigId}}function f8(Z,X){if(Z==="default")return null;if(!X||X.length===0)return Z;let Q=X.find((U)=>U.id===Z);if(Q)return Q.id;let K=Z.toLowerCase(),Y=K.includes("opus")?"opus":K.includes("sonnet")?"sonnet":K.includes("haiku")?"haiku":null;if(!Y)return Z;let J=(U)=>`${U.id} ${U.name??""} ${U.description??""}`.toLowerCase(),H=X.filter((U)=>J(U).includes(Y));if(H.length===0)return Z;let B=(K.includes("1m")?H.find((U)=>J(U).includes("1m")):void 0)??H[0];return B?B.id:Z}async function o1(Z){try{let X=await Z.conn.setSessionConfigOption(CZ({sessionId:Z.sessionId,configId:Z.configId,value:Z.value}));return hZ(Z.metadata,X)}catch(X){return console.warn(`[acp] setSessionConfigOption(${Z.label}) failed; using agent default.`,X instanceof Error?X.message:X),Z.metadata}}async function j2(Z){let X=e4(Z.spawn),Q=[],K=0,Y=4096;X.stderr.on("data",(I)=>{Q.push(I),K+=I.length;while(K>Y*2&&Q.length>1){let p=Q.shift();if(p)K-=p.length}});let J=()=>{let I=Buffer.concat(Q).toString("utf8");return I.length>Y?I.slice(-Y):I},H=Y8(Z.spawn.cwd),w={current:null},B={current:null},U={at:Date.now()},q=null,h=P8(X.stdin),M=x8(X.stdout),O=F8(h,M),C=new U8((I)=>({requestPermission:async(p)=>{let c=p.options,X0=c?.find((r)=>r.kind==="allow_once")??c?.find((r)=>r.kind==="allow_always");if(X0)return{outcome:{outcome:"selected",optionId:X0.optionId}};return{outcome:{outcome:"cancelled"}}},sessionUpdate:async(p)=>{U.at=Date.now();let c=B.current;if(c){let r=p.update.sessionUpdate;if(c.updateCount+=1,c.updateCount===1||c.lastUpdateType!==r||r==="tool_call"||r==="tool_call_update")m("acp.session_update",{runId:c.runId,cardId:c.cardId,sessionId:q,updateType:r,updateCount:c.updateCount,elapsedMs:Date.now()-c.startedAt});c.lastUpdateType=r}let X0=w.current;if(X0)await X0.onSessionUpdate(p)},readTextFile:H.readTextFile}),O),N=()=>X.kill();if(Z.signal)Z.signal.addEventListener("abort",N);let b=()=>{if(Z.signal)Z.signal.removeEventListener("abort",N)},$=async(I,p)=>{if(b(),X.kill(),B8(I))throw new c0(I.message??"Authentication required",p);if(I instanceof Error&&I.message==="ACP connection closed"){if(Z.signal?.aborted)throw new T("ACP session cancelled: abort signal received");let c=await Promise.race([X.processCrashed,X.waitForExit,new Promise((X0)=>setTimeout(()=>X0({stderr:""}),500))]);throw new T(`Runtime process exited before completion: ${c.stderr?.trim()??""}`)}throw I},v;try{v=await C.initialize({protocolVersion:J1,clientCapabilities:t4,clientInfo:L8()})}catch(I){throw await $(I,[]),Error("unreachable")}try{q8(v.protocolVersion)}catch(I){throw b(),X.kill(),I}let G=v.authMethods?.map((I)=>I.id)??[],_;try{_=await C.newSession({cwd:Z.spawn.cwd,mcpServers:Z.mcpServers??[]})}catch(I){throw await $(I,G),Error("unreachable")}let D=_.sessionId;q=D;let x=V2(_),E=Z.modelId??null,k=E?f8(E,x.models):null;if(k&&k!==x.currentModelId)if(x.modelConfigId)x=await o1({conn:C,sessionId:D,configId:x.modelConfigId,value:k,metadata:x,label:`${x.modelConfigId}=${k}`});else console.warn(`[acp] runtime did not advertise a model config option for ${k}; using agent default.`);for(let[I,p]of Object.entries(Z.configValues??{}).sort(([c],[X0])=>c.localeCompare(X0))){if(I===x.modelConfigId)continue;if(!x.configOptions.some((c)=>c.id===I))continue;x=await o1({conn:C,sessionId:D,configId:I,value:p,metadata:x,label:`${I}=${String(p)}`})}b();let l=!1,L0=async()=>{if(l)return;l=!0,X.kill(),await Promise.race([X.waitForExit,new Promise((I)=>setTimeout(I,2000))])},y0=!1;return X.processCrashed.then(()=>{y0=!0}),{sessionId:D,availableModels:x.models,currentModelId:x.currentModelId,availableConfigOptions:x.configOptions,isAlive:()=>!l&&!y0,dispose:L0,prompt:(I)=>MZ({proc:X,conn:C,sessionId:D,activeAdapter:w,activeTrace:B,lastUpdate:U,collectStderrTail:J},I)}}async function MZ(Z,X){let{proc:Q,conn:K,sessionId:Y,activeAdapter:J,activeTrace:H,lastUpdate:w}=Z,B=Date.now(),U=X.heartbeatMs??xZ,q=fZ(U),h={boardId:X.boardId,cardId:X.cardId,runId:X.runId},M=H8({ctx:h,appendText:X.appendText,appendToolActivity:X.appendToolActivity});J.current=M,H.current={runId:X.runId,cardId:X.cardId,startedAt:B,updateCount:0,lastUpdateType:null},w.at=Date.now(),m("acp.prompt_started",{runId:X.runId,cardId:X.cardId,sessionId:Y,heartbeatWindowMs:U});let O=!1,f=null,C=()=>Q.kill();X.signal.addEventListener("abort",C);try{let N=async()=>{let G=Math.min(PZ,Math.max(50,Math.floor(U/2)));f=setInterval(()=>{let D=X.isAwaitingInput?.()??!1;if(D){w.at=Date.now();return}if(w8({nowMs:Date.now(),lastUpdateMs:w.at,windowMs:U,awaitingInput:D}))O=!0,m("acp.inactivity_timeout",{runId:X.runId,cardId:X.cardId,sessionId:Y,windowMs:U,silentForMs:Date.now()-w.at}),K.cancel({sessionId:Y}).catch(()=>{return}),Q.kill()},G);let _=RZ(X.prompt.systemPrompt,X.prompt.messages);await K.prompt({sessionId:Y,prompt:_}),m("acp.prompt_resolved",{runId:X.runId,cardId:X.cardId,sessionId:Y,elapsedMs:Date.now()-B}),M.flush({completeOpenToolCalls:!0})},b=Q.waitForExit.then((G)=>({kind:"exited",exit:G})),$=N().then(()=>({kind:"ok"})).catch(async(G)=>{if(G instanceof Error&&G.message==="ACP connection closed")return{kind:"crashed",exit:await Promise.race([Q.processCrashed,Q.waitForExit])};throw G}),v;try{v=await Promise.race([$,Q.processCrashed.then((G)=>({kind:"crashed",exit:G})),b])}catch(G){if(O)throw new U0(q);throw G}if(O)throw new U0(q);if(v.kind==="crashed")throw new T(`Runtime process exited before completion: ${v.exit.stderr.trim()}`);if(v.kind==="exited"){if(X.signal.aborted)throw new T("ACP session cancelled: abort signal received");if(O)throw new U0(q);throw new T(`Runtime process exited unexpectedly: ${v.exit.stderr.trim()}`)}return{modelReported:"unknown",finalText:M.getFinalText(),toolCallsExecuted:M.getToolCallCount(),stderrTail:Z.collectStderrTail(),updateTypeCounts:M.getUpdateTypeCounts()}}finally{if(m("acp.prompt_finished",{runId:X.runId,cardId:X.cardId,sessionId:Y,elapsedMs:Date.now()-B,timedOut:O,updateCount:H.current?.updateCount??0}),f!==null)clearInterval(f);X.signal.removeEventListener("abort",C),M.flush({completeOpenToolCalls:!0}),J.current=null,H.current=null}}var NZ=30000;async function y8(Z){let X=e4(Z.spawn),Q=P8(X.stdin),K=x8(X.stdout),Y=F8(Q,K),H=new U8((U)=>({requestPermission:async()=>({outcome:{outcome:"cancelled"}}),sessionUpdate:async()=>{return},readTextFile:async()=>({content:""})}),Y),w=()=>X.kill();if(Z.signal)Z.signal.addEventListener("abort",w);let B=null;try{let U=(async()=>{let h=await H.initialize({protocolVersion:J1,clientCapabilities:t4,clientInfo:L8()});q8(h.protocolVersion);let M=h.authMethods?.map((v)=>v.id)??[],O;try{O=await H.newSession({cwd:Z.spawn.cwd,mcpServers:[]})}catch(v){if(B8(v))throw new c0(v.message??"Authentication required",M);throw v}let f=V2(O),C=Z.modelId??null,N=C?f8(C,f.models):null;if(N&&N!==f.currentModelId)if(f.modelConfigId)f=await o1({conn:H,sessionId:O.sessionId,configId:f.modelConfigId,value:N,metadata:f,label:`${f.modelConfigId}=${N}`});else console.warn(`[acp] runtime did not advertise a model config option for ${N}; discovering agent default models.`);for(let[v,G]of Object.entries(Z.configValues??{}).sort(([_],[D])=>_.localeCompare(D))){if(v===f.modelConfigId)continue;if(!f.configOptions.some((_)=>_.id===v))continue;f=await o1({conn:H,sessionId:O.sessionId,configId:v,value:G,metadata:f,label:`${v}=${String(G)}`})}let b=f.models??[],$=f.currentModelId;return H.cancel({sessionId:O.sessionId}).catch(()=>{return}),{models:b,configOptions:f.configOptions,currentModelId:$}})(),q=new Promise((h,M)=>{B=setTimeout(()=>{M(new U0)},NZ)});return await Promise.race([U,q])}catch(U){if(U instanceof Error&&U.message==="ACP connection closed"){if(Z.signal?.aborted)throw new T("ACP model discovery cancelled: abort signal received");throw new T("Runtime process exited during model discovery.")}throw U}finally{if(B)clearTimeout(B);if(Z.signal)Z.signal.removeEventListener("abort",w);X.kill()}}import DZ from"node:fs/promises";import n1 from"node:os";async function O8(Z){let X={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},Q;try{Q=await DZ.readFile(Z,"utf-8")}catch(K){if(K.code==="ENOENT")return structuredClone(X);throw K}return E1.parse(JSON.parse(Q))}function H2(Z,X,Q){return{...Z.defaultConfigValues??{},...X?.configValues??{},...Q?.configValues??{}}}async function R0(Z){let X=Z.configPath?await O8(Z.configPath):await W0(),Q=Z.cardId?X.cardOverrides[Z.cardId]:void 0;if(Q?.runtimeConfigId){let Y=X.runtimes.find((J)=>J.id===Q.runtimeConfigId);if(Y)return{entry:Y,adapter:F0(Y),runFolder:Q.runFolder??Y.runFolder??n1.homedir(),modelId:Q.modelId??Y.defaultModelId??null,configValues:H2(Y,void 0,Q)}}let K=X.boardOverrides[Z.boardId];if(K?.runtimeConfigId){let Y=X.runtimes.find((J)=>J.id===K.runtimeConfigId);if(Y)return{entry:Y,adapter:F0(Y),runFolder:K.runFolder??Y.runFolder??n1.homedir(),modelId:K.modelId??Y.defaultModelId??null,configValues:H2(Y,K)}}if(X.globalDefaultConfigId){let Y=X.runtimes.find((J)=>J.id===X.globalDefaultConfigId);if(Y)return{entry:Y,adapter:F0(Y),runFolder:Q?.runFolder??K?.runFolder??Y.runFolder??n1.homedir(),modelId:Q?.modelId??K?.modelId??Y.defaultModelId??null,configValues:H2(Y,K,Q)}}throw new E0}async function b8(Z,X={}){let K=(X.configPath?await O8(X.configPath):await W0()).runtimes.find((Y)=>Y.id===Z);if(!K)return null;return{entry:K,adapter:F0(K),runFolder:K.runFolder??n1.homedir(),modelId:X.modelId??K.defaultModelId??null,configValues:{...K.defaultConfigValues??{},...X.configValues??{}}}}var v8=new Map;function z2(Z,X){if(!Z)return;v8.set(Z,X)}function R8(Z){if(!Z)return!1;return v8.get(Z)??!1}var _0=new Map,w2=new Set;function F2(Z){_0.get(Z)?.controller.abort()}function C8(Z){for(let[X,Q]of _0){if(Q.frontendSessionId!==Z)continue;Q.controller.abort(),_0.delete(X)}}function h8(){for(let Z of _0.values())Z.controller.abort();_0.clear()}function U2(Z,X){if(X?.aborted)return!0;return Z instanceof Error&&/abort signal received|session cancelled/i.test(Z.message)}function M8(Z,X,Q,K){if((!X.availableModels||X.availableModels.length===0)&&X.availableConfigOptions.length===0)return;j0((Y)=>{let J=Y.runtimes.find((H)=>H.id===Z);if(J){if(X.availableModels&&X.availableModels.length>0)J.discoveredModels=d1({adapterId:Q,models:X.availableModels,currentModelId:X.currentModelId??K});if(X.availableConfigOptions.length>0)J.discoveredConfigOptions=X.availableConfigOptions}}).catch(()=>{return})}function $Z(Z,X){return`${Z}
936
+ ${$}`)}function iX(X){if(!Array.isArray(X))return null;let $=X.flatMap((Z)=>{if(!Z||typeof Z!=="object")return[];let Q=Z;if(typeof Q.path!=="string"||!Q.path.trim())return[];let K=typeof Q.line==="number"?`:${Q.line}`:"";return[`${Q.path}${K}`]});return $.length>0?$.slice(0,5):null}function k$(X){let{ctx:$,appendText:Z,appendToolActivity:Q}=X,K=X.flushIntervalMs??s6,J="",Y="",j=0,z=null,W={},V=new Map,B=(M)=>{if(V.set(M.toolCallId,M),!Q)return;Q({boardId:$.boardId,cardId:$.cardId,runId:$.runId,entry:M}).catch((G)=>{console.warn("[streamAdapter] appendToolActivity failed",G)})},L=(M)=>{let G=`${$.runId}:thought`,k=V.get(G);if(!k||k.status!=="running")return;B({...k,status:"completed",completedAt:k.completedAt??M})},x=(M)=>{for(let G of V.values()){if(G.status!=="running"||G.rawTitle.toLowerCase()!=="toolsearch")continue;B({...G,status:"completed",completedAt:G.completedAt??M})}},U=(M)=>{for(let G of Array.from(V.values())){if(G.status!=="running")continue;if(G.kind==="thought"||G.rawTitle==="agent_thought")continue;B({...G,status:"completed",completedAt:G.completedAt??M})}},D="",N=0,H=null,P=null,w=(M)=>{if(M===D)return;D=M,N=Date.now(),Z({boardId:$.boardId,cardId:$.cardId,runId:$.runId,text:M}).catch((G)=>{console.warn("[streamAdapter] appendText failed",G)})},O=()=>{if(H!==null)clearTimeout(H),H=null;if(P!==null){let M=P;P=null,w(M)}},C=(M)=>{let G=Date.now()-N;if(G>=K&&H===null){w(M);return}if(P=M,H===null){let k=Math.max(0,K-G);H=setTimeout(()=>{H=null,O()},k)}};return{onSessionUpdate:async(M)=>{let G=M.update;switch(W[G.sessionUpdate]=(W[G.sessionUpdate]??0)+1,G.sessionUpdate){case"agent_message_chunk":{let k=new Date().toISOString();if(L(k),G.content.type==="text")J+=G.content.text,C(J);else{let _=`agent_message_chunk:${G.content.type}`;W[_]=(W[_]??0)+1}return}case"agent_thought_chunk":{if(G.content.type!=="text")return;Y+=G.content.text;let k=new Date().toISOString(),_=`${$.runId}:thought`,b=V.get(_);B({toolCallId:_,rawTitle:"agent_thought",title:"Thought",kind:"thought",status:"running",startedAt:b?.startedAt??k,completedAt:null,contentPreview:j0(Y.trim())});return}case"user_message_chunk":return;case"tool_call":{j+=1;let k=P$(G.title),_=pX(G.status),b=new Date().toISOString();L(b),x(b),B({toolCallId:G.toolCallId,rawTitle:k,title:aX(k,G.rawInput),kind:uX(G.kind),status:_,startedAt:b,completedAt:_==="running"?null:b,inputPreview:o(G.rawInput),outputPreview:dX(G.rawOutput),contentPreview:$X(G.content),locations:iX(G.locations)});return}case"tool_call_update":{let k=V.get(G.toolCallId);if(!k){let R=P$(G.title),I=pX(G.status),h=new Date().toISOString();B({toolCallId:G.toolCallId,rawTitle:R,title:aX(R,G.rawInput),kind:uX(G.kind),status:I,startedAt:h,completedAt:I==="running"?null:h,inputPreview:o(G.rawInput),outputPreview:dX(G.rawOutput),contentPreview:$X(G.content),locations:iX(G.locations)});return}let _=G.status===void 0||G.status===null?k.status:pX(G.status),b=typeof G.title==="string"&&G.title.trim().length>0?G.title:k.rawTitle,d=typeof G.title==="string"&&G.title.trim().length>0,n=_==="running"?k.completedAt:k.completedAt??new Date().toISOString(),A=G.content===void 0?k.contentPreview:O$(k.contentPreview,$X(G.content)),v=G.rawOutput===void 0?k.outputPreview:O$(k.outputPreview,dX(G.rawOutput));B({...k,rawTitle:b,title:d?aX(b,G.rawInput):k.title,kind:G.kind===void 0?k.kind:uX(G.kind),status:_,completedAt:n,inputPreview:G.rawInput===void 0?k.inputPreview:o(G.rawInput),outputPreview:v,contentPreview:A,locations:G.locations===void 0?k.locations:iX(G.locations)});return}case"plan":z=G.entries;return;case"available_commands_update":return;case"current_mode_update":return;default:return}},getFinalText:()=>J,getToolCallCount:()=>j,getLatestPlan:()=>z,getUpdateTypeCounts:()=>({...W}),flush:(M)=>{let G=new Date().toISOString();if(L(G),M?.completeOpenToolCalls)U(G);O()}}}var C0=1,q$=-32000;function _$(X){if(X.awaitingInput)return!1;return X.nowMs-X.lastUpdateMs>=X.windowMs}function f$(X){if(!X||typeof X!=="object")return!1;return X.code===q$}var Z3=60000,Q3=Z3,K3=5000;function J3(X){let $=Math.max(1,Math.round(X/1000));return`Runtime has not responded for ${$} ${$===1?"second":"seconds"}. Retry the agent run.`}function y$(){return{name:"ideawave-cli",title:"IdeaWave CLI",version:"0.0.67".trim()?"0.0.67":"dev"}}function R$(X){if(X===C0)return;throw new f(`Unsupported ACP protocol version ${X}; expected ${C0}`)}function b$(X){return X3.toWeb(X)}function T$(X){return $3.toWeb(X)}function oX(X){return X!==null&&typeof X==="object"}function Y3(X){if(!Array.isArray(X))return[];let $=[];for(let Z of X){if(!oX(Z))continue;if(typeof Z.group==="string"&&Array.isArray(Z.options)){let Q=typeof Z.name==="string"?Z.name:Z.group;for(let K of Z.options){if(!oX(K))continue;if(typeof K.value!=="string"||typeof K.name!=="string")continue;$.push({value:K.value,name:K.name,description:typeof K.description==="string"?K.description:null,group:Z.group,groupName:Q})}continue}if(typeof Z.value!=="string"||typeof Z.name!=="string")continue;$.push({value:Z.value,name:Z.name,description:typeof Z.description==="string"?Z.description:null,group:null,groupName:null})}return $}function W3(X){if(!oX(X))return null;if(typeof X.id!=="string"||typeof X.name!=="string")return null;let $=typeof X.category==="string"?X.category:null,Z=typeof X.description==="string"?X.description:null;if(X.type==="select"){let Q=typeof X.currentValue==="string"?X.currentValue:null;return{id:X.id,name:X.name,category:$,description:Z,type:"select",currentValue:Q,options:Y3(X.options)}}if(X.type==="boolean"){let Q=typeof X.currentValue==="boolean"?X.currentValue:typeof X.value==="boolean"?X.value:null;return{id:X.id,name:X.name,category:$,description:Z,type:"boolean",currentValue:Q,options:[]}}return null}function nX(X){let $=(X.configOptions??[]).map(W3).filter((j)=>j!==null),Z=$.find((j)=>j.type==="select"&&j.category==="model")??$.find((j)=>j.type==="select"&&j.id==="model")??null,Q=Z?.options.map((j)=>({id:j.value,name:j.name,description:j.description??null})),K=j3(X.models),J=Q&&Q.length>0?Q:K&&K.length>0?K:null,Y=(typeof Z?.currentValue==="string"?Z.currentValue:null)??G3(X.models)??null;return{models:J,currentModelId:Y,configOptions:$,modelConfigId:Z?.id??null}}function j3(X){if(!X||!Array.isArray(X.availableModels))return null;let $=[];for(let Z of X.availableModels){if(typeof Z.modelId!=="string")continue;$.push({id:Z.modelId,name:typeof Z.name==="string"?Z.name:null,description:typeof Z.description==="string"?Z.description:null})}return $.length>0?$:null}function G3(X){return typeof X?.currentModelId==="string"?X.currentModelId:null}function V3(X,$){let Z=[];if(X.trim())Z.push({type:"text",text:X});for(let Q of $)if(Q.content.trim())Z.push({type:"text",text:Q.content});return Z}function z3(X){if(typeof X.value==="boolean")return{sessionId:X.sessionId,configId:X.configId,type:"boolean",value:X.value};return{sessionId:X.sessionId,configId:X.configId,value:X.value}}function U3(X,$){let Z=nX({configOptions:$.configOptions});return{models:Z.models??X.models,currentModelId:Z.currentModelId??X.currentModelId,configOptions:Z.configOptions,modelConfigId:Z.modelConfigId??X.modelConfigId}}function E$(X,$){if(X==="default")return null;if(!$||$.length===0)return X;let Z=$.find((W)=>W.id===X);if(Z)return Z.id;let Q=X.toLowerCase(),K=Q.includes("opus")?"opus":Q.includes("sonnet")?"sonnet":Q.includes("haiku")?"haiku":null;if(!K)return X;let J=(W)=>`${W.id} ${W.name??""} ${W.description??""}`.toLowerCase(),Y=$.filter((W)=>J(W).includes(K));if(Y.length===0)return X;let z=(Q.includes("1m")?Y.find((W)=>J(W).includes("1m")):void 0)??Y[0];return z?z.id:X}async function QX(X){try{let $=await X.conn.setSessionConfigOption(z3({sessionId:X.sessionId,configId:X.configId,value:X.value}));return U3(X.metadata,$)}catch($){return console.warn(`[acp] setSessionConfigOption(${X.label}) failed; using agent default.`,$ instanceof Error?$.message:$),X.metadata}}async function tX(X){let $=cX(X.spawn),Z=[],Q=0,K=4096;$.stderr.on("data",(A)=>{Z.push(A),Q+=A.length;while(Q>K*2&&Z.length>1){let v=Z.shift();if(v)Q-=v.length}});let J=()=>{let A=Buffer.concat(Z).toString("utf8");return A.length>K?A.slice(-K):A},Y=L$(X.spawn.cwd),j={current:null},z={current:null},W={at:Date.now()},V=null,B=T$($.stdin),L=b$($.stdout),x=C$(B,L),D=new A$((A)=>({requestPermission:async(v)=>{let R=v.options,I=R?.find((h)=>h.kind==="allow_once")??R?.find((h)=>h.kind==="allow_always");if(I)return{outcome:{outcome:"selected",optionId:I.optionId}};return{outcome:{outcome:"cancelled"}}},sessionUpdate:async(v)=>{W.at=Date.now();let R=z.current;if(R){let h=v.update.sessionUpdate;if(R.updateCount+=1,R.updateCount===1||R.lastUpdateType!==h||h==="tool_call"||h==="tool_call_update")q("acp.session_update",{runId:R.runId,cardId:R.cardId,sessionId:V,updateType:h,updateCount:R.updateCount,elapsedMs:Date.now()-R.startedAt});R.lastUpdateType=h}let I=j.current;if(I)await I.onSessionUpdate(v)},readTextFile:Y.readTextFile}),x),N=()=>$.kill();if(X.signal)X.signal.addEventListener("abort",N);let H=()=>{if(X.signal)X.signal.removeEventListener("abort",N)},P=async(A,v)=>{if(H(),$.kill(),f$(A))throw new H0(A.message??"Authentication required",v);if(A instanceof Error&&A.message==="ACP connection closed"){if(X.signal?.aborted)throw new f("ACP session cancelled: abort signal received");let R=await Promise.race([$.processCrashed,$.waitForExit,new Promise((I)=>setTimeout(()=>I({stderr:""}),500))]);throw new f(`Runtime process exited before completion: ${R.stderr?.trim()??""}`)}throw A},w;try{w=await D.initialize({protocolVersion:C0,clientCapabilities:mX,clientInfo:y$()})}catch(A){throw await P(A,[]),Error("unreachable")}try{R$(w.protocolVersion)}catch(A){throw H(),$.kill(),A}let O=w.authMethods?.map((A)=>A.id)??[],C;try{C=await D.newSession({cwd:X.spawn.cwd,mcpServers:X.mcpServers??[]})}catch(A){throw await P(A,O),Error("unreachable")}let M=C.sessionId;V=M;let G=nX(C),k=X.modelId??null,_=k?E$(k,G.models):null;if(_&&_!==G.currentModelId)if(G.modelConfigId)G=await QX({conn:D,sessionId:M,configId:G.modelConfigId,value:_,metadata:G,label:`${G.modelConfigId}=${_}`});else console.warn(`[acp] runtime did not advertise a model config option for ${_}; using agent default.`);for(let[A,v]of Object.entries(X.configValues??{}).sort(([R],[I])=>R.localeCompare(I))){if(A===G.modelConfigId)continue;if(!G.configOptions.some((R)=>R.id===A))continue;G=await QX({conn:D,sessionId:M,configId:A,value:v,metadata:G,label:`${A}=${String(v)}`})}H();let b=!1,d=async()=>{if(b)return;b=!0,$.kill(),await Promise.race([$.waitForExit,new Promise((A)=>setTimeout(A,2000))])},n=!1;return $.processCrashed.then(()=>{n=!0}),{sessionId:M,availableModels:G.models,currentModelId:G.currentModelId,availableConfigOptions:G.configOptions,isAlive:()=>!b&&!n,dispose:d,prompt:(A)=>H3({proc:$,conn:D,sessionId:M,activeAdapter:j,activeTrace:z,lastUpdate:W,collectStderrTail:J},A)}}async function H3(X,$){let{proc:Z,conn:Q,sessionId:K,activeAdapter:J,activeTrace:Y,lastUpdate:j}=X,z=Date.now(),W=$.heartbeatMs??Q3,V=J3(W),B={boardId:$.boardId,cardId:$.cardId,runId:$.runId},L=k$({ctx:B,appendText:$.appendText,appendToolActivity:$.appendToolActivity});J.current=L,Y.current={runId:$.runId,cardId:$.cardId,startedAt:z,updateCount:0,lastUpdateType:null},j.at=Date.now(),q("acp.prompt_started",{runId:$.runId,cardId:$.cardId,sessionId:K,heartbeatWindowMs:W});let x=!1,U=null,D=()=>Z.kill();$.signal.addEventListener("abort",D);try{let N=async()=>{let O=Math.min(K3,Math.max(50,Math.floor(W/2)));U=setInterval(()=>{let M=$.isAwaitingInput?.()??!1;if(M){j.at=Date.now();return}if(_$({nowMs:Date.now(),lastUpdateMs:j.at,windowMs:W,awaitingInput:M}))x=!0,q("acp.inactivity_timeout",{runId:$.runId,cardId:$.cardId,sessionId:K,windowMs:W,silentForMs:Date.now()-j.at}),Q.cancel({sessionId:K}).catch(()=>{return}),Z.kill()},O);let C=V3($.prompt.systemPrompt,$.prompt.messages);await Q.prompt({sessionId:K,prompt:C}),q("acp.prompt_resolved",{runId:$.runId,cardId:$.cardId,sessionId:K,elapsedMs:Date.now()-z}),L.flush({completeOpenToolCalls:!0})},H=Z.waitForExit.then((O)=>({kind:"exited",exit:O})),P=N().then(()=>({kind:"ok"})).catch(async(O)=>{if(O instanceof Error&&O.message==="ACP connection closed")return{kind:"crashed",exit:await Promise.race([Z.processCrashed,Z.waitForExit])};throw O}),w;try{w=await Promise.race([P,Z.processCrashed.then((O)=>({kind:"crashed",exit:O})),H])}catch(O){if(x)throw new u(V);throw O}if(x)throw new u(V);if(w.kind==="crashed")throw new f(`Runtime process exited before completion: ${w.exit.stderr.trim()}`);if(w.kind==="exited"){if($.signal.aborted)throw new f("ACP session cancelled: abort signal received");if(x)throw new u(V);throw new f(`Runtime process exited unexpectedly: ${w.exit.stderr.trim()}`)}return{modelReported:"unknown",finalText:L.getFinalText(),toolCallsExecuted:L.getToolCallCount(),stderrTail:X.collectStderrTail(),updateTypeCounts:L.getUpdateTypeCounts()}}finally{if(q("acp.prompt_finished",{runId:$.runId,cardId:$.cardId,sessionId:K,elapsedMs:Date.now()-z,timedOut:x,updateCount:Y.current?.updateCount??0}),U!==null)clearInterval(U);$.signal.removeEventListener("abort",D),L.flush({completeOpenToolCalls:!0}),J.current=null,Y.current=null}}var x3=30000;async function v$(X){let $=cX(X.spawn),Z=T$($.stdin),Q=b$($.stdout),K=C$(Z,Q),Y=new A$((W)=>({requestPermission:async()=>({outcome:{outcome:"cancelled"}}),sessionUpdate:async()=>{return},readTextFile:async()=>({content:""})}),K),j=()=>$.kill();if(X.signal)X.signal.addEventListener("abort",j);let z=null;try{let W=(async()=>{let B=await Y.initialize({protocolVersion:C0,clientCapabilities:mX,clientInfo:y$()});R$(B.protocolVersion);let L=B.authMethods?.map((w)=>w.id)??[],x;try{x=await Y.newSession({cwd:X.spawn.cwd,mcpServers:[]})}catch(w){if(f$(w))throw new H0(w.message??"Authentication required",L);throw w}let U=nX(x),D=X.modelId??null,N=D?E$(D,U.models):null;if(N&&N!==U.currentModelId)if(U.modelConfigId)U=await QX({conn:Y,sessionId:x.sessionId,configId:U.modelConfigId,value:N,metadata:U,label:`${U.modelConfigId}=${N}`});else console.warn(`[acp] runtime did not advertise a model config option for ${N}; discovering agent default models.`);for(let[w,O]of Object.entries(X.configValues??{}).sort(([C],[M])=>C.localeCompare(M))){if(w===U.modelConfigId)continue;if(!U.configOptions.some((C)=>C.id===w))continue;U=await QX({conn:Y,sessionId:x.sessionId,configId:w,value:O,metadata:U,label:`${w}=${String(O)}`})}let H=U.models??[],P=U.currentModelId;return Y.cancel({sessionId:x.sessionId}).catch(()=>{return}),{models:H,configOptions:U.configOptions,currentModelId:P}})(),V=new Promise((B,L)=>{z=setTimeout(()=>{L(new u)},x3)});return await Promise.race([W,V])}catch(W){if(W instanceof Error&&W.message==="ACP connection closed"){if(X.signal?.aborted)throw new f("ACP model discovery cancelled: abort signal received");throw new f("Runtime process exited during model discovery.")}throw W}finally{if(z)clearTimeout(z);if(X.signal)X.signal.removeEventListener("abort",j);$.kill()}}import D3 from"node:fs/promises";import KX from"node:os";async function h$(X){let $={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},Z;try{Z=await D3.readFile(X,"utf-8")}catch(Q){if(Q.code==="ENOENT")return structuredClone($);throw Q}return m0.parse(JSON.parse(Z))}function rX(X,$,Z){return{...X.defaultConfigValues??{},...$?.configValues??{},...Z?.configValues??{}}}async function X0(X){let $=X.configPath?await h$(X.configPath):await m(),Z=X.cardId?$.cardOverrides[X.cardId]:void 0;if(Z?.runtimeConfigId){let K=$.runtimes.find((J)=>J.id===Z.runtimeConfigId);if(K)return{entry:K,adapter:a(K),runFolder:Z.runFolder??K.runFolder??KX.homedir(),modelId:Z.modelId??K.defaultModelId??null,configValues:rX(K,void 0,Z)}}let Q=$.boardOverrides[X.boardId];if(Q?.runtimeConfigId){let K=$.runtimes.find((J)=>J.id===Q.runtimeConfigId);if(K)return{entry:K,adapter:a(K),runFolder:Q.runFolder??K.runFolder??KX.homedir(),modelId:Q.modelId??K.defaultModelId??null,configValues:rX(K,Q)}}if($.globalDefaultConfigId){let K=$.runtimes.find((J)=>J.id===$.globalDefaultConfigId);if(K)return{entry:K,adapter:a(K),runFolder:Z?.runFolder??Q?.runFolder??K.runFolder??KX.homedir(),modelId:Z?.modelId??Q?.modelId??K.defaultModelId??null,configValues:rX(K,Q,Z)}}throw new Y0}async function I$(X,$={}){let Q=($.configPath?await h$($.configPath):await m()).runtimes.find((K)=>K.id===X);if(!Q)return null;return{entry:Q,adapter:a(Q),runFolder:Q.runFolder??KX.homedir(),modelId:$.modelId??Q.defaultModelId??null,configValues:{...Q.defaultConfigValues??{},...$.configValues??{}}}}var S$=new Map;function sX(X,$){if(!X)return;S$.set(X,$)}function g$(X){if(!X)return!1;return S$.get(X)??!1}var G0=new Map,eX=new Set;function $1(X){G0.get(X)?.controller.abort()}function m$(X){for(let[$,Z]of G0){if(Z.frontendSessionId!==X)continue;Z.controller.abort(),G0.delete($)}}function c$(){for(let X of G0.values())X.controller.abort();G0.clear()}function X1(X,$){if($?.aborted)return!0;return X instanceof Error&&/abort signal received|session cancelled/i.test(X.message)}function l$(X,$,Z,Q){if((!$.availableModels||$.availableModels.length===0)&&$.availableConfigOptions.length===0)return;p((K)=>{let J=K.runtimes.find((Y)=>Y.id===X);if(J){if($.availableModels&&$.availableModels.length>0)J.discoveredModels=r0({adapterId:Z,models:$.availableModels,currentModelId:$.currentModelId??Q});if($.availableConfigOptions.length>0)J.discoveredConfigOptions=$.availableConfigOptions}}).catch(()=>{return})}function N3(X,$){return`${X}
807
937
 
808
938
  Runtime run folder:
809
- - Effective run folder: ${X}
939
+ - Effective run folder: ${$}
810
940
  - When the user says "my folder", "current folder", or "run folder", they mean this selected runtime folder.
811
941
  - Use list_run_folder and read_run_folder_file for run-folder inspection. Do not use attached context-card tools for this unless the user asks about attached board context.
812
- - Filesystem access is read-only and limited to this folder. Hidden/config folders and outside-folder paths are unavailable.`}async function N8(Z,X){let Q=Date.now(),K=new AbortController;_0.set(Z.runId,{controller:K,frontendSessionId:Z.frontendSessionId}),w2.add(Z.cardId),m("cli.run_started",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId});let Y=h4(Z.userId,Z.frontendSessionId,Z.cardId),J=!1,H=null;try{let B=(Z.runtimeConfigIdHint?await b8(Z.runtimeConfigIdHint,{modelId:Z.modelHint??null}):null)??await R0({boardId:Z.boardId,cardId:Z.cardId}),U=await B.adapter.resolveSpawnConfig(B.entry),q=Z.toolSurface??"full",h=B.adapter.supportsImages===!0;H=U;let M=D4({userId:Z.userId,frontendSessionId:Z.frontendSessionId,boardId:Z.boardId,toolSurface:q,imagesSupported:h,cardId:Z.cardId,runFolder:B.runFolder}),O=M?[M]:[];z2(Z.cardId,h);let f=Z.modelHint??B.modelId,C=N4({adapterId:B.adapter.id,configId:B.entry.id,modelId:f,configValues:B.configValues,mcpUrl:M?.url??null,runFolder:B.runFolder,toolSurface:q});m("cli.session_acquire_started",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId});let N=await D1({key:Y,frontendSessionId:Z.frontendSessionId,fingerprint:C,open:()=>j2({spawn:{...U,cwd:B.runFolder},mcpServers:O,modelId:f,configValues:B.configValues,signal:K.signal})});m("cli.session_acquired",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId,elapsedMs:Date.now()-Q}),M8(B.entry.id,N,B.adapter.id,f);let b;try{let $=0,v="";m("cli.prompt_started",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q}),b=await N.prompt({runId:Z.runId,boardId:Z.boardId,cardId:Z.cardId,prompt:{systemPrompt:$Z(Z.systemPrompt,B.runFolder),messages:Z.promptMessages.map((G)=>({role:G.role,content:G.content}))},signal:K.signal,appendText:async({text:G})=>{if($+=1,$===1)m("cli.first_partial_text_forwarded",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,textLength:G.length});X({type:"partial_text",runId:Z.runId,cardId:Z.cardId,text:G})},appendToolActivity:async({entry:G})=>{let _=`${G.toolCallId}:${G.status}`;if(_!==v)v=_,m("cli.tool_activity_forwarded",{runId:Z.runId,cardId:Z.cardId,toolCallId:G.toolCallId,toolStatus:G.status,elapsedMs:Date.now()-Q});X({type:"tool_activity",runId:Z.runId,cardId:Z.cardId,activity:G})}})}catch($){if(!N.isAlive()||$ instanceof T||$ instanceof U0)J=!0;throw $}X({type:"run_settled",runId:Z.runId,cardId:Z.cardId,result:{assistantContent:b.finalText,model:b.modelReported??null,latencyMs:Date.now()-Q,errorText:null,partialText:null}}),m("cli.run_settled",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,hasError:!1})}catch(w){let B=w instanceof Error?w.message:"Agent run failed";if(w instanceof T&&H&&!U2(w,K.signal))T4(H,B);if(!U2(w,K.signal))console.error(`[ideawave-cli] run ${Z.runId} failed:`,B);X({type:"run_settled",runId:Z.runId,cardId:Z.cardId,result:{assistantContent:"",model:null,latencyMs:Date.now()-Q,errorText:B,partialText:null}}),m("cli.run_settled",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,hasError:!0,errorName:w instanceof Error?w.name:"unknown"})}finally{M4(Y,J),_0.delete(Z.runId),w2.delete(Z.cardId),m("cli.run_released",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,sessionDead:J})}}async function D8(Z){if(w2.has(Z.cardId))return{status:"skipped"};let X=h4(Z.userId,Z.frontendSessionId,Z.cardId),Q=null;try{let K=await R0({boardId:Z.boardId,cardId:Z.cardId}),Y=await K.adapter.resolveSpawnConfig(K.entry);Q=Y;let J=D4({userId:Z.userId,frontendSessionId:Z.frontendSessionId,boardId:Z.boardId,cardId:Z.cardId,runFolder:K.runFolder}),H=J?[J]:[];z2(Z.cardId,K.adapter.supportsImages===!0);let w=N4({adapterId:K.adapter.id,configId:K.entry.id,modelId:K.modelId,configValues:K.configValues,mcpUrl:J?.url??null,runFolder:K.runFolder}),B=new AbortController,U=await D1({key:X,frontendSessionId:Z.frontendSessionId,fingerprint:w,open:()=>j2({spawn:{...Y,cwd:K.runFolder},mcpServers:H,modelId:K.modelId,configValues:K.configValues,signal:B.signal})});return M8(K.entry.id,U,K.adapter.id,K.modelId),M4(X,!1),console.log(`[ideawave-cli] warmed runtime for card ${Z.cardId}`),{status:"ready"}}catch(K){if(K instanceof E0)return{status:"skipped"};let Y=K instanceof Error?K.message:String(K);if(K instanceof T&&Q&&!U2(K))T4(Q,Y);if(K instanceof T&&/(not ready|installing|warming|retry in a moment)/i.test(Y))return{status:"retryable",error:Y};return console.warn(`[ideawave-cli] warmup failed for card ${Z.cardId}:`,Y),{status:"failed",error:Y}}}import{spawn as AZ}from"node:child_process";import{randomUUID as A8}from"node:crypto";import{access as uZ,mkdir as u8}from"node:fs/promises";import{createRequire as cZ}from"node:module";import{homedir as q2,platform as c8}from"node:os";import{dirname as lZ,join as h0}from"node:path";import{randomBytes as E8,timingSafeEqual as GZ}from"node:crypto";import{lookup as EZ}from"node:dns/promises";import m8 from"node:http";import mZ from"node:https";import kZ from"node:net";import{isIP as $8}from"node:net";var g8=12582912;function gZ(Z){let X=Z.split(".").map(Number);return X.length===4&&X.every((Q)=>Number.isInteger(Q)&&Q>=0&&Q<=255)?X:null}function H0(Z,X,Q=0,K=255){return Z[0]===X&&(Z[1]??0)>=Q&&(Z[1]??0)<=K}function B2(Z){let X=$8(Z);if(X===4){let Y=gZ(Z);if(!Y)return!1;if(H0(Y,0))return!1;if(H0(Y,10))return!1;if(H0(Y,100,64,127))return!1;if(H0(Y,127))return!1;if(H0(Y,169,254,254))return!1;if(H0(Y,172,16,31))return!1;if(H0(Y,192,0,0))return!1;if(H0(Y,192,168,168))return!1;if(H0(Y,198,18,19))return!1;if(H0(Y,198,51,51)&&Y[2]===100)return!1;if(H0(Y,203,0,0)&&Y[2]===113)return!1;if((Y[0]??0)>=224)return!1;return!0}if(X!==6)return!1;let Q=Z.toLowerCase().split("%")[0]??"";if(Q==="::"||Q==="::1")return!1;if(Q.startsWith("::"))return!1;if(Q.startsWith("fc")||Q.startsWith("fd"))return!1;if(/^fe[89a-f]/.test(Q))return!1;if(Q.startsWith("ff"))return!1;let K=Number.parseInt(Q.split(":")[0]??"",16);if(!Number.isFinite(K)||K<8192||K>16383)return!1;if(Q.startsWith("2002:"))return!1;if(Q.startsWith("3fff:"))return!1;if(Q==="2001::"||Q.startsWith("2001:0:"))return!1;if(Q.startsWith("2001:db8:"))return!1;if(Q.startsWith("2001:2:"))return!1;if(Q.startsWith("2001:10:"))return!1;if(Q.startsWith("2001:20:"))return!1;return!0}function C0(Z){let X;try{X=new URL(Z)}catch{throw Error("Browser URL is invalid")}if(X.protocol!=="http:"&&X.protocol!=="https:")throw Error("Only HTTP(S) browser URLs are allowed");if(X.username||X.password)throw Error("Browser URLs containing credentials are not allowed");let Q=X.hostname.replace(/^\[|\]$/g,"");if($8(Q)&&!B2(Q))throw Error("Browser destination is not on a public network");return X.hash="",X}function G8(Z){return(X,Q,K)=>{if(Q.all){K(null,[Z]);return}K(null,Z.address,Z.family)}}var k8=30000;async function I8(Z){return(await EZ(Z,{all:!0,verbatim:!0})).flatMap((Q)=>Q.family===4||Q.family===6?[{address:Q.address,family:Q.family}]:[])}async function _8(Z,X=I8){let Q=await X(Z);if(Q.length===0)throw Error("Browser destination did not resolve");if(Q.some((K)=>!B2(K.address)))throw Error("Browser destination resolves to a non-public network");return Q.find((K)=>K.family===4)??Q[0]}function T8(Z){return Array.isArray(Z)?Z[0]:Z}function _Z(Z,X){let Q=Buffer.from(Z),K=Buffer.from(X);return Q.byteLength===K.byteLength&&GZ(Q,K)}function S8(Z){let X={...Z},Q=T8(Z.connection)?.split(",").map((K)=>K.trim().toLowerCase()).filter(Boolean);for(let K of[...Q??[],"connection","proxy-authenticate","proxy-authorization","proxy-connection","keep-alive","te","trailer","transfer-encoding","upgrade"])delete X[K];return X}function SZ(Z){let X;try{X=new URL(`http://${Z}`)}catch{throw Error("Browser proxy CONNECT target is invalid")}let Q=Number(X.port||"443");if(!X.hostname||X.username||X.password||X.pathname!=="/"||X.search||X.hash||!Number.isInteger(Q)||Q<1||Q>65535)throw Error("Browser proxy CONNECT target is invalid");return{hostname:X.hostname.replace(/^\[|\]$/g,""),port:Q}}function IZ(Z){return new Promise((X,Q)=>{let K=(J)=>{Z.off("listening",Y),Q(J)},Y=()=>{Z.off("error",K);let J=Z.address();if(!J||typeof J==="string"){Q(Error("Headless browser proxy did not bind a TCP port"));return}X(J.port)};Z.once("error",K),Z.once("listening",Y),Z.listen(0,"127.0.0.1")})}function TZ(Z,X){let Q=()=>{if(!Z.destroyed)Z.destroy()},K=()=>{if(!X.destroyed)X.destroy()};Z.on("error",K),Z.once("close",K),X.on("error",Q),X.once("close",Q)}class L2{resolver;username=`ideawave-${E8(12).toString("hex")}`;password=E8(24).toString("base64url");sockets=new Set;server=null;port=null;constructor(Z=I8){this.resolver=Z}get serverUrl(){if(!this.port)throw Error("Headless browser proxy is not running");return`http://127.0.0.1:${this.port}`}authorized(Z){let X=`Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`;return _Z(T8(Z.headers["proxy-authorization"])??"",X)}rejectAuthentication(Z){Z.writeHead(407,{"content-type":"text/plain; charset=utf-8","proxy-authenticate":'Basic realm="IdeaWave browser"'}),Z.end("Proxy authentication required")}async handleHttp(Z,X){if(!this.authorized(Z)){this.rejectAuthentication(X);return}let Q;try{Q=C0(Z.url??"")}catch(K){X.writeHead(400,{"content-type":"text/plain; charset=utf-8"}),X.end(K instanceof Error?K.message:"Invalid target");return}try{let K=await _8(Q.hostname,this.resolver),J=(Q.protocol==="https:"?mZ:m8).request(Q,{method:Z.method,headers:S8(Z.headers),lookup:G8(K)});J.setTimeout(k8,()=>{J.destroy(Error("Browser request timed out"))}),J.once("response",(H)=>{X.writeHead(H.statusCode??502,S8(H.headers)),H.pipe(X)}),J.once("error",(H)=>{if(X.headersSent)X.destroy(H);else X.writeHead(502,{"content-type":"text/plain; charset=utf-8"}),X.end("Browser request failed")}),Z.pipe(J)}catch(K){X.writeHead(403,{"content-type":"text/plain; charset=utf-8"}),X.end(K instanceof Error?K.message:"Browser destination blocked")}}async handleConnect(Z,X,Q){if(!this.authorized(Z)){X.end(`HTTP/1.1 407 Proxy Authentication Required\r
813
- Proxy-Authenticate: Basic realm="IdeaWave browser"\r
814
- Connection: close\r
815
- \r
816
- `);return}try{let K=SZ(Z.url??""),Y=await _8(K.hostname,this.resolver),J=kZ.connect({host:Y.address,family:Y.family,port:K.port});this.sockets.add(J),TZ(X,J),J.setTimeout(k8,()=>J.destroy()),J.once("connect",()=>{if(X.write(`HTTP/1.1 200 Connection Established\r
817
- \r
818
- `),Q.byteLength>0)J.write(Q);X.pipe(J),J.pipe(X)}),J.once("close",()=>this.sockets.delete(J))}catch(K){X.end(`HTTP/1.1 403 Forbidden\r
819
- Content-Type: text/plain; charset=utf-8\r
820
- Connection: close\r
821
- \r
822
- ${K instanceof Error?K.message:"Browser destination blocked"}`)}}async start(){if(this.server)return;let Z=m8.createServer((X,Q)=>{this.handleHttp(X,Q).catch((K)=>{if(Q.headersSent)Q.destroy(K);else Q.writeHead(500),Q.end()})});Z.on("connect",(X,Q,K)=>{this.handleConnect(X,Q,K).catch(()=>Q.destroy())}),Z.on("connection",(X)=>{this.sockets.add(X),X.on("error",()=>X.destroy()),X.once("close",()=>this.sockets.delete(X))}),this.port=await IZ(Z),this.server=Z}async close(){let Z=this.server;this.server=null,this.port=null;for(let X of this.sockets)X.destroy();if(this.sockets.clear(),!Z)return;await new Promise((X)=>Z.close(()=>X()))}}var l8=8,dZ={width:720,height:442},iZ=320,aZ=180,d8=2048,pZ=45000,sZ=12582912,i8=300;function a8(Z,X,Q){return Math.min(Q,Math.max(X,Math.round(Z)))}function rZ(){if(c8()==="darwin")return h0(q2(),"Library","Application Support","IdeaWave","browser");if(c8()==="win32")return h0(process.env.LOCALAPPDATA??h0(q2(),"AppData","Local"),"IdeaWave","browser");return h0(process.env.XDG_CONFIG_HOME??h0(q2(),".config"),"ideawave","browser")}function oZ(Z=rZ()){return{profile:h0(Z,"profile"),browsers:h0(Z,"engines")}}async function nZ(Z){let Q=cZ(import.meta.url).resolve("playwright-core/package.json"),K=h0(lZ(Q),"cli.js");await new Promise((Y,J)=>{let H=AZ(process.execPath,[K,"install","chromium","--no-shell"],{stdio:"inherit",env:{...process.env,PLAYWRIGHT_BROWSERS_PATH:Z}});H.once("error",J),H.once("exit",(w)=>{if(w===0)Y();else J(Error(`Chromium installation exited with code ${w??"unknown"}`))})})}function tZ(Z){return{headless:!0,viewport:dZ,acceptDownloads:!1,serviceWorkers:"allow",proxy:{server:Z.serverUrl,username:Z.username,password:Z.password},args:["--disable-quic","--disable-session-crashed-bubble","--hide-crash-restore-bubble","--no-first-run","--proxy-bypass-list=<-loopback>","--force-webrtc-ip-handling-policy=disable_non_proxied_udp"]}}async function x2(Z){let X=[...Z.values()].map((Q)=>Q.handle);Z.clear(),await Promise.all(X.map((Q)=>Q.dispose().catch(()=>{return})))}async function eZ(Z){let X=[],Q=Z;while(Q?.parentFrame()){let Y=await(await Q.frameElement()).evaluate((J)=>{if(J.id)return`#${globalThis.CSS?.escape?globalThis.CSS.escape(J.id):J.id.replace(/[^a-zA-Z0-9_-]/g,(U)=>`\\${U}`)}`;let H=[],w=J;while(w&&w!==w.ownerDocument.documentElement&&H.length<8){let B=w.localName||"*",U=w.parentElement;if(U){let q=[...U.children].filter((h)=>h.localName===w?.localName);if(q.length>1)B+=`:nth-of-type(${q.indexOf(w)+1})`}H.unshift(B),w=U}return H.join(" > ")});X.unshift(Y||"iframe"),Q=Q.parentFrame()}return X}async function p8(Z){return Z.evaluate((X)=>{let Q=null;if(X.id)Q=`#${globalThis.CSS?.escape?globalThis.CSS.escape(X.id):X.id.replace(/[^a-zA-Z0-9_-]/g,(H)=>`\\${H}`)}`;else{let J=[],H=X;while(H&&H!==H.ownerDocument.documentElement&&J.length<8){let w=H.localName||"*",B=H.parentElement;if(B){let U=[...B.children].filter((q)=>q.localName===H?.localName);if(U.length>1)w+=`:nth-of-type(${U.indexOf(H)+1})`}J.unshift(w),H=B}Q=J.join(" > ")||null}let K=(X.innerText||X.textContent||"").replace(/\s+/g," ").trim().slice(0,500),Y={tag:X.localName,text:K,selector:Q};if(X instanceof HTMLAnchorElement)Y.href=X.href;if(X instanceof HTMLInputElement)Y.inputType=X.type,Y.value=X.type==="password"?"":X.value.slice(0,500);if(X instanceof HTMLButtonElement||X instanceof HTMLInputElement||X instanceof HTMLSelectElement||X instanceof HTMLTextAreaElement)Y.disabled=X.disabled;return Y})}class s8{page;onClose;revision=A8();refs=new Map;refCounter=0;eventListeners=new Set;frameListeners=new Set;cdp=null;stateTimer=null;closed=!1;constructor(Z,X){this.page=Z;this.onClose=X}async initialize(Z){this.page.setDefaultNavigationTimeout(pZ),this.page.setDefaultTimeout(12000),this.page.on("framenavigated",(X)=>{if(X!==this.page.mainFrame()||!/^https?:/.test(X.url()))return;this.revision=A8(),x2(this.refs),this.emitSoon()}),this.page.on("domcontentloaded",()=>this.emitSoon()),this.page.on("load",()=>this.emitSoon()),this.page.on("download",(X)=>void X.cancel()),this.page.on("popup",(X)=>{(async()=>{await X.waitForLoadState("domcontentloaded",{timeout:5000}).catch(()=>{return});let Q=X.url();if(await X.close().catch(()=>{return}),/^https?:/.test(Q))await this.navigate(Q)})().catch(()=>{return})}),this.cdp=await this.page.context().newCDPSession(this.page),this.cdp.on("Page.screencastFrame",(X)=>{let Q=Buffer.from(X.data,"base64");for(let K of this.frameListeners)K(Q);this.cdp?.send("Page.screencastFrameAck",{sessionId:X.sessionId})}),await this.cdp.send("Page.startScreencast",{format:"jpeg",quality:75,everyNthFrame:2}),await this.navigate(Z)}get currentRevision(){return this.revision}get currentUrl(){return this.page.url()}onEvent(Z){return this.eventListeners.add(Z),this.state().then((X)=>Z({event:"state",payload:X})).catch(()=>{return}),()=>this.eventListeners.delete(Z)}onFrame(Z){return this.frameListeners.add(Z),this.page.screenshot({type:"jpeg",quality:75}).then((X)=>Z(Buffer.from(X))).catch(()=>{return}),()=>this.frameListeners.delete(Z)}emit(Z){for(let X of this.eventListeners)X(Z)}emitSoon(){if(this.stateTimer||this.closed)return;this.stateTimer=setTimeout(()=>{this.stateTimer=null,this.state().then((Z)=>this.emit({event:"state",payload:Z})).catch(()=>{return})},50)}async metrics(){return this.page.evaluate(()=>{let{documentElement:Z,body:X}=document;return{scrollX:window.scrollX,scrollY:window.scrollY,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,documentWidth:Math.max(Z?.scrollWidth??0,X?.scrollWidth??0),documentHeight:Math.max(Z?.scrollHeight??0,X?.scrollHeight??0)}})}async state(){let Z=this.page.url(),[X,Q,K]=await Promise.all([this.page.title().catch(()=>Z),this.page.evaluate(()=>{return document.querySelector('link[rel~="icon"]')?.href||null}).catch(()=>null),this.metrics()]);return{sourceUrl:Z,title:X||Z,faviconUrl:Q,localFaviconUrl:null,revision:this.revision,metrics:K,frozen:!1}}async navigate(Z){let X=C0(Z).href;return this.emit({event:"navigating",payload:{sourceUrl:this.page.url(),revision:this.revision}}),await this.page.goto(X,{waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async refresh(){return this.emit({event:"navigating",payload:{sourceUrl:this.page.url(),revision:this.revision}}),await this.page.reload({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async goBack(){return await this.page.goBack({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async goForward(){return await this.page.goForward({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async setViewport(Z,X){await this.page.setViewportSize({width:a8(Z,iZ,d8),height:a8(X,aZ,d8)}),this.emitSoon()}async input(Z){for(let X of Z)if(X.type==="pointer"){if(await this.page.mouse.move(X.x,X.y),X.phase==="down")await this.page.mouse.down({button:X.button??"left"});else if(X.phase==="up")await this.page.mouse.up({button:X.button??"left"})}else if(X.type==="wheel")await this.page.mouse.wheel(X.deltaX,X.deltaY);else if(X.type==="key")if(X.phase==="down")await this.page.keyboard.down(X.key);else await this.page.keyboard.up(X.key);else await this.page.keyboard.insertText(X.text);this.emitSoon()}async framesWithPaths(){let Z=this.page.frames().slice(0,24);return Promise.all(Z.map(async(X)=>({frame:X,path:await eZ(X)})))}refFor(Z,X){for(let[K,Y]of this.refs)if(Y.handle===Z)return K;let Q=`${this.revision}:e${++this.refCounter}`;return this.refs.set(Q,{handle:Z,framePath:X}),Q}async resolveTarget(Z){if("ref"in Z&&Z.ref){if(!Z.ref.startsWith(`${this.revision}:`))throw Error("STALE_BROWSER_REF: inspect the browser again");let Y=this.refs.get(Z.ref);if(!Y)throw Error("STALE_BROWSER_REF: inspect the browser again");return Y}let X="framePath"in Z?Z.framePath??[]:[],Q=(await this.framesWithPaths()).find((Y)=>JSON.stringify(Y.path)===JSON.stringify(X));if(!Q)throw Error("Browser frame was not found");let K=null;if("selector"in Z&&Z.selector)K=await Q.frame.$(Z.selector);if(!K&&"textQuote"in Z&&Z.textQuote?.exact)K=await Q.frame.getByText(Z.textQuote.exact,{exact:!1}).first().elementHandle();if(!K)throw Error("Browser element was not found");return{handle:K,framePath:Q.path}}async locate(Z){let X=await this.resolveTarget(Z),Q=await X.handle.boundingBox();if(!Q)throw Error("STALE_BROWSER_REF: browser element is detached");let K=await X.handle.evaluate((J)=>{let H=J.getBoundingClientRect(),w=(J.textContent??"").replace(/\s+/g," ").trim().slice(0,2000);return{rect:{x:H.x,y:H.y,width:H.width,height:H.height},scrollX:J.ownerDocument.defaultView?.scrollX??0,scrollY:J.ownerDocument.defaultView?.scrollY??0,text:w}}),Y=await p8(X.handle);return{revision:this.revision,ref:this.refFor(X.handle,X.framePath),selector:Y.selector,textQuote:K.text?{exact:K.text}:null,framePath:X.framePath,frame:K.rect,viewport:Q,document:{x:K.rect.x+K.scrollX,y:K.rect.y+K.scrollY,width:K.rect.width,height:K.rect.height}}}async click(Z){return await(await this.resolveTarget(Z)).handle.click(),this.emitSoon(),{ok:!0,revision:this.revision}}async highlight(Z,X){let Q=await this.resolveTarget(Z);return await Q.handle.evaluate((K,Y)=>{let J=K;J.dataset.ideawaveBrowserHighlight="true",J.style.outline=`3px solid ${Y}`,J.style.outlineOffset="2px"},X),this.locate({ref:this.refFor(Q.handle,Q.framePath)})}async scroll(Z){await this.page.evaluate((Q)=>{window.scrollTo({left:typeof Q.left==="number"?Q.left:window.scrollX,top:typeof Q.top==="number"?Q.top:window.scrollY+(Q.deltaY??0)})},Z);let X=await this.metrics();return this.emitSoon(),{ok:!0,metrics:X,revision:this.revision}}async find(Z,X=!1){let Q=!1;for(let K of this.page.frames().slice(0,24))if(Q=await K.evaluate(({value:Y,backwards:J})=>window.find(Y,!1,J,!0,!1,!0,!1),{value:Z.slice(0,500),backwards:X}).catch(()=>!1),Q)break;return{found:Q,query:Z,revision:this.revision}}async selection(){for(let{frame:Z,path:X}of await this.framesWithPaths()){let Q=await Z.evaluateHandle(()=>{let Y=window.getSelection();if(!Y||Y.isCollapsed||!Y.anchorNode)return null;return Y.anchorNode.nodeType===Node.ELEMENT_NODE?Y.anchorNode:Y.anchorNode.parentElement}),K=Q.asElement();if(!K){await Q.dispose();continue}return this.locate({ref:this.refFor(K,X)})}throw Error("No page selection is available")}async inspect(){await this.page.waitForLoadState("domcontentloaded",{timeout:12000}).catch(()=>{return}),await x2(this.refs),this.refCounter=0;let Z=[],X=[],Q=[],K=[];for(let{frame:H,path:w}of await this.framesWithPaths()){let B=await H.locator("body").innerText({timeout:1500}).catch(()=>"");if(B.trim())K.push(B.replace(/\s+/g," ").trim());for(let[U,q,h]of[["h1,h2,h3,h4,h5,h6",Z,200],["a[href]",X,i8],["button,input,select,textarea,[role=button]",Q,i8]]){if(q.length>=h)continue;let M=(await H.$$(U)).slice(0,h-q.length);for(let O of M){let f=O;if(!await f.isVisible().catch(()=>!1)){await f.dispose();continue}let C=await p8(f);q.push({ref:this.refFor(f,w),...C,framePath:w})}}}let Y=K.join(`
823
- `),J=await this.state();return{sourceUrl:J.sourceUrl,title:J.title,mode:"live",revision:this.revision,untrustedContent:!0,visibleText:Y.slice(0,25000),truncated:Y.length>25000,headings:Z,links:X,controls:Q,metrics:J.metrics}}async snapshotHtml(){return this.page.evaluate(()=>{let Z=document.documentElement.cloneNode(!0),X=document.documentElement.querySelectorAll("*"),Q=Z.querySelectorAll("*");for(let K=0;K<X.length;K+=1){let Y=X[K],J=Q[K];if(!Y||!J)continue;if(Y instanceof HTMLInputElement&&J instanceof HTMLInputElement){if(Y.type==="password")J.removeAttribute("value");else J.setAttribute("value",Y.value);if(Y.checked)J.setAttribute("checked","");else J.removeAttribute("checked")}else if(Y instanceof HTMLTextAreaElement&&J instanceof HTMLTextAreaElement)J.textContent=Y.value;else if(Y instanceof HTMLOptionElement&&J instanceof HTMLOptionElement)if(Y.selected)J.setAttribute("selected","");else J.removeAttribute("selected");else if(Y instanceof HTMLImageElement&&J instanceof HTMLImageElement&&Y.currentSrc)J.setAttribute("src",Y.currentSrc),J.removeAttribute("srcset")}return`<!doctype html>${Z.outerHTML}`})}async fetchResource(Z,X=sZ){let Q=C0(Z).href,K=await this.page.context().request.get(Q,{failOnStatusCode:!1,maxRedirects:5,timeout:30000}),Y=Number(K.headers()["content-length"]??0);if(Number.isFinite(Y)&&Y>X)throw Error("Browser proxy response exceeds the size limit");let J=Buffer.from(await K.body());if(J.byteLength>X)throw Error("Browser proxy response exceeds the size limit");return{url:K.url(),status:K.status(),headers:K.headers(),body:J}}async command(Z){switch(Z.type){case"inspect":return this.inspect();case"locate":return this.locate(Z.target);case"click":return this.click(Z.target);case"scroll":return this.scroll({deltaY:typeof Z.deltaY==="number"?Z.deltaY:void 0,left:typeof Z.left==="number"?Z.left:void 0,top:typeof Z.top==="number"?Z.top:void 0});case"find":return this.find(String(Z.query??""),Z.direction==="backward");case"refresh":return this.refresh();case"navigate":return this.navigate(String(Z.url??""));case"back":return this.goBack();case"forward":return this.goForward();case"highlight":return this.highlight(Z.target,String(Z.color??"#FDE047"));case"selection":return this.selection();case"snapshot":return{sourceUrl:this.page.url(),title:await this.page.title(),revision:this.revision};default:throw Error("Unsupported browser command")}}async close(){if(this.closed)return;if(this.closed=!0,this.stateTimer)clearTimeout(this.stateTimer);this.stateTimer=null,await x2(this.refs),await this.cdp?.send("Page.stopScreencast").catch(()=>{return}),await this.cdp?.detach().catch(()=>{return}),await this.page.close({runBeforeUnload:!1}).catch(()=>{return}),this.eventListeners.clear(),this.frameListeners.clear(),this.onClose()}}class V1{onStatus;networkProxy;context=null;startPromise=null;pages=new Set;status={phase:"idle"};constructor(Z,X){this.onStatus=Z;this.networkProxy=X??new L2}setStatus(Z){this.status=Z,this.onStatus?.(Z)}getStatus(){return this.status}async startContext(){this.setStatus({phase:"starting",message:"Starting local Chrome…"});let Z=oZ();await Promise.all([u8(Z.profile,{recursive:!0}),u8(Z.browsers,{recursive:!0}),this.networkProxy.start()]),process.env.PLAYWRIGHT_BROWSERS_PATH=Z.browsers;let{chromium:X}=await import("playwright-core"),Q=tZ(this.networkProxy),K=null;if(await uZ(X.executablePath()).then(()=>!0,()=>!1))try{K=await X.launchPersistentContext(Z.profile,{...Q,channel:"chromium"})}catch{K=null}if(!K)try{K=await X.launchPersistentContext(Z.profile,{...Q,channel:"chrome"})}catch{K=null}if(!K)this.setStatus({phase:"downloading",message:"Downloading the IdeaWave Chromium engine…"}),await nZ(Z.browsers),K=await X.launchPersistentContext(Z.profile,{...Q,channel:"chromium"});await K.route("**/*",async(w)=>{let B=w.request().url();try{let U=new URL(B);if(U.protocol==="http:"||U.protocol==="https:")C0(B);else if(U.protocol!=="data:"&&U.protocol!=="blob:"){await w.abort("blockedbyclient");return}await w.continue()}catch{await w.abort("blockedbyclient")}});let J=K.pages();await Promise.all(J.slice(1).map((w)=>w.close({runBeforeUnload:!1}).catch(()=>{return})));let H=J[0];if(H&&H.url()!=="about:blank")await H.goto("about:blank").catch(()=>{return});return this.context=K,this.setStatus({phase:"ready"}),K}ensureContext(){if(this.context)return Promise.resolve(this.context);if(this.startPromise)return this.startPromise;return this.startPromise=this.startContext().catch((Z)=>{throw this.setStatus({phase:"failed",message:Z instanceof Error?Z.message:String(Z)}),this.startPromise=null,Z}),this.startPromise}async createPage(Z){if(this.pages.size>=l8)throw Error(`IdeaWave supports at most ${l8} simultaneous live browser cards`);let X=await this.ensureContext(),Q=X.pages().find((Y)=>Y.url()==="about:blank"&&![...this.pages].some((J)=>J.page===Y));Q??=await X.newPage();let K=new s8(Q,()=>this.pages.delete(K));this.pages.add(K);try{return await K.initialize(Z),K}catch(Y){throw await K.close(),Y}}async close(){let Z=[...this.pages];this.pages.clear(),await Promise.all(Z.map((Q)=>Q.close()));let X=this.context;this.context=null,this.startPromise=null,await X?.close().catch(()=>{return}),await this.networkProxy.close(),this.setStatus({phase:"idle"})}}import{randomBytes as S2,randomUUID as GQ}from"node:crypto";import*as B4 from"css-tree";var ZX=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]),u="�",V;(function(Z){Z[Z.EOF=-1]="EOF",Z[Z.NULL=0]="NULL",Z[Z.TABULATION=9]="TABULATION",Z[Z.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",Z[Z.LINE_FEED=10]="LINE_FEED",Z[Z.FORM_FEED=12]="FORM_FEED",Z[Z.SPACE=32]="SPACE",Z[Z.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",Z[Z.QUOTATION_MARK=34]="QUOTATION_MARK",Z[Z.AMPERSAND=38]="AMPERSAND",Z[Z.APOSTROPHE=39]="APOSTROPHE",Z[Z.HYPHEN_MINUS=45]="HYPHEN_MINUS",Z[Z.SOLIDUS=47]="SOLIDUS",Z[Z.DIGIT_0=48]="DIGIT_0",Z[Z.DIGIT_9=57]="DIGIT_9",Z[Z.SEMICOLON=59]="SEMICOLON",Z[Z.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",Z[Z.EQUALS_SIGN=61]="EQUALS_SIGN",Z[Z.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",Z[Z.QUESTION_MARK=63]="QUESTION_MARK",Z[Z.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",Z[Z.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",Z[Z.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",Z[Z.GRAVE_ACCENT=96]="GRAVE_ACCENT",Z[Z.LATIN_SMALL_A=97]="LATIN_SMALL_A",Z[Z.LATIN_SMALL_Z=122]="LATIN_SMALL_Z"})(V||(V={}));var e={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function t1(Z){return Z>=55296&&Z<=57343}function r8(Z){return Z>=56320&&Z<=57343}function o8(Z,X){return(Z-55296)*1024+9216+X}function e1(Z){return Z!==32&&Z!==10&&Z!==13&&Z!==9&&Z!==12&&Z>=1&&Z<=31||Z>=127&&Z<=159}function Z4(Z){return Z>=64976&&Z<=65007||ZX.has(Z)}var L;(function(Z){Z.controlCharacterInInputStream="control-character-in-input-stream",Z.noncharacterInInputStream="noncharacter-in-input-stream",Z.surrogateInInputStream="surrogate-in-input-stream",Z.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",Z.endTagWithAttributes="end-tag-with-attributes",Z.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",Z.unexpectedSolidusInTag="unexpected-solidus-in-tag",Z.unexpectedNullCharacter="unexpected-null-character",Z.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",Z.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",Z.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",Z.missingEndTagName="missing-end-tag-name",Z.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",Z.unknownNamedCharacterReference="unknown-named-character-reference",Z.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",Z.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",Z.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",Z.eofBeforeTagName="eof-before-tag-name",Z.eofInTag="eof-in-tag",Z.missingAttributeValue="missing-attribute-value",Z.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",Z.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",Z.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",Z.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",Z.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",Z.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",Z.missingDoctypePublicIdentifier="missing-doctype-public-identifier",Z.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",Z.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",Z.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",Z.cdataInHtmlContent="cdata-in-html-content",Z.incorrectlyOpenedComment="incorrectly-opened-comment",Z.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",Z.eofInDoctype="eof-in-doctype",Z.nestedComment="nested-comment",Z.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",Z.eofInComment="eof-in-comment",Z.incorrectlyClosedComment="incorrectly-closed-comment",Z.eofInCdata="eof-in-cdata",Z.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",Z.nullCharacterReference="null-character-reference",Z.surrogateCharacterReference="surrogate-character-reference",Z.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",Z.controlCharacterReference="control-character-reference",Z.noncharacterCharacterReference="noncharacter-character-reference",Z.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",Z.missingDoctypeName="missing-doctype-name",Z.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",Z.duplicateAttribute="duplicate-attribute",Z.nonConformingDoctype="non-conforming-doctype",Z.missingDoctype="missing-doctype",Z.misplacedDoctype="misplaced-doctype",Z.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",Z.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",Z.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",Z.openElementsLeftAfterEof="open-elements-left-after-eof",Z.abandonedHeadElementChild="abandoned-head-element-child",Z.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",Z.nestedNoscriptInHead="nested-noscript-in-head",Z.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(L||(L={}));var QX=65536;class P2{constructor(Z){this.handler=Z,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=QX,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+Number(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(Z,X){let{line:Q,col:K,offset:Y}=this,J=K+X,H=Y+X;return{code:Z,startLine:Q,endLine:Q,startCol:J,endCol:J,startOffset:H,endOffset:H}}_err(Z){if(this.handler.onParseError&&this.lastErrOffset!==this.offset)this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(Z,0))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(Z){if(this.pos!==this.html.length-1){let X=this.html.charCodeAt(this.pos+1);if(r8(X))return this.pos++,this._addGap(),o8(Z,X)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,V.EOF;return this._err(L.surrogateInInputStream),Z}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){if(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(Z,X){if(this.html.length>0)this.html+=Z;else this.html=Z;this.endOfChunkHit=!1,this.lastChunkWritten=X}insertHtmlAtCurrentPos(Z){this.html=this.html.substring(0,this.pos+1)+Z+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(Z,X){if(this.pos+Z.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(X)return this.html.startsWith(Z,this.pos);for(let Q=0;Q<Z.length;Q++)if((this.html.charCodeAt(this.pos+Q)|32)!==Z.charCodeAt(Q))return!1;return!0}peek(Z){let X=this.pos+Z;if(X>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,V.EOF;let Q=this.html.charCodeAt(X);return Q===V.CARRIAGE_RETURN?V.LINE_FEED:Q}advance(){if(this.pos++,this.isEol)this.isEol=!1,this.line++,this.lineStartPos=this.pos;if(this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,V.EOF;let Z=this.html.charCodeAt(this.pos);if(Z===V.CARRIAGE_RETURN)return this.isEol=!0,this.skipNextNewLine=!0,V.LINE_FEED;if(Z===V.LINE_FEED){if(this.isEol=!0,this.skipNextNewLine)return this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()}if(this.skipNextNewLine=!1,t1(Z))Z=this._processSurrogate(Z);if(!(this.handler.onParseError===null||Z>31&&Z<127||Z===V.LINE_FEED||Z===V.CARRIAGE_RETURN||Z>159&&Z<64976))this._checkForProblematicCharacters(Z);return Z}_checkForProblematicCharacters(Z){if(e1(Z))this._err(L.controlCharacterInInputStream);else if(Z4(Z))this._err(L.noncharacterInInputStream)}retreat(Z){this.pos-=Z;while(this.pos<this.lastGapPos)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=!1}}var S;(function(Z){Z[Z.CHARACTER=0]="CHARACTER",Z[Z.NULL_CHARACTER=1]="NULL_CHARACTER",Z[Z.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",Z[Z.START_TAG=3]="START_TAG",Z[Z.END_TAG=4]="END_TAG",Z[Z.COMMENT=5]="COMMENT",Z[Z.DOCTYPE=6]="DOCTYPE",Z[Z.EOF=7]="EOF",Z[Z.HIBERNATION=8]="HIBERNATION"})(S||(S={}));function X4(Z,X){for(let Q=Z.attrs.length-1;Q>=0;Q--)if(Z.attrs[Q].name===X)return Z.attrs[Q].value;return null}var WX=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 n8(Z){if(Z>=55296&&Z<=57343||Z>1114111)return 65533;return WX.get(Z)??Z}function t8(Z){let X=atob(Z),Q=X.length&-2,K=new Uint16Array(Q/2);for(let Y=0,J=0;Y<Q;Y+=2){let H=X.charCodeAt(Y),w=X.charCodeAt(Y+1);K[J++]=H|w<<8}return K}var f2=t8("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/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");var o;(function(Z){Z[Z.VALUE_LENGTH=49152]="VALUE_LENGTH",Z[Z.FLAG13=8192]="FLAG13",Z[Z.BRANCH_LENGTH=8064]="BRANCH_LENGTH",Z[Z.JUMP_TABLE=127]="JUMP_TABLE"})(o||(o={}));var d;(function(Z){Z[Z.NUM=35]="NUM",Z[Z.SEMI=59]="SEMI",Z[Z.EQUALS=61]="EQUALS",Z[Z.ZERO=48]="ZERO",Z[Z.NINE=57]="NINE",Z[Z.LOWER_A=97]="LOWER_A",Z[Z.LOWER_F=102]="LOWER_F",Z[Z.LOWER_X=120]="LOWER_X",Z[Z.LOWER_Z=122]="LOWER_Z",Z[Z.UPPER_A=65]="UPPER_A",Z[Z.UPPER_F=70]="UPPER_F",Z[Z.UPPER_Z=90]="UPPER_Z"})(d||(d={}));var e8=32;function y2(Z){return Z>=d.ZERO&&Z<=d.NINE}function YX(Z){return Z>=d.UPPER_A&&Z<=d.UPPER_F||Z>=d.LOWER_A&&Z<=d.LOWER_F}function JX(Z){return Z>=d.UPPER_A&&Z<=d.UPPER_Z||Z>=d.LOWER_A&&Z<=d.LOWER_Z||y2(Z)}function VX(Z){return Z===d.EQUALS||JX(Z)}var s;(function(Z){Z[Z.EntityStart=0]="EntityStart",Z[Z.NumericStart=1]="NumericStart",Z[Z.NumericDecimal=2]="NumericDecimal",Z[Z.NumericHex=3]="NumericHex",Z[Z.NamedEntity=4]="NamedEntity"})(s||(s={}));var B0;(function(Z){Z[Z.Legacy=0]="Legacy",Z[Z.Strict=1]="Strict",Z[Z.Attribute=2]="Attribute"})(B0||(B0={}));class O2{decodeTree;emitCodePoint;errors;constructor(Z,X,Q){this.decodeTree=Z,this.emitCodePoint=X,this.errors=Q}state=s.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=B0.Strict;runConsumed=0;startEntity(Z){this.decodeMode=Z,this.state=s.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(Z,X){switch(this.state){case s.EntityStart:{if(Z.charCodeAt(X)===d.NUM)return this.state=s.NumericStart,this.consumed+=1,this.stateNumericStart(Z,X+1);return this.state=s.NamedEntity,this.stateNamedEntity(Z,X)}case s.NumericStart:return this.stateNumericStart(Z,X);case s.NumericDecimal:return this.stateNumericDecimal(Z,X);case s.NumericHex:return this.stateNumericHex(Z,X);case s.NamedEntity:return this.stateNamedEntity(Z,X)}}stateNumericStart(Z,X){if(X>=Z.length)return-1;if((Z.charCodeAt(X)|e8)===d.LOWER_X)return this.state=s.NumericHex,this.consumed+=1,this.stateNumericHex(Z,X+1);return this.state=s.NumericDecimal,this.stateNumericDecimal(Z,X)}stateNumericHex(Z,X){while(X<Z.length){let Q=Z.charCodeAt(X);if(y2(Q)||YX(Q)){let K=Q<=d.NINE?Q-d.ZERO:(Q|e8)-d.LOWER_A+10;this.result=this.result*16+K,this.consumed++,X++}else return this.emitNumericEntity(Q,3)}return-1}stateNumericDecimal(Z,X){while(X<Z.length){let Q=Z.charCodeAt(X);if(y2(Q))this.result=this.result*10+(Q-d.ZERO),this.consumed++,X++;else return this.emitNumericEntity(Q,2)}return-1}emitNumericEntity(Z,X){if(this.consumed<=X)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(Z===d.SEMI)this.consumed+=1;else if(this.decodeMode===B0.Strict)return 0;if(this.emitCodePoint(n8(this.result),this.consumed),this.errors){if(Z!==d.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(Z,X){let{decodeTree:Q}=this,K=Q[this.treeIndex],Y=(K&o.VALUE_LENGTH)>>14;while(X<Z.length){if(Y===0&&(K&o.FLAG13)!==0){let H=(K&o.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let w=K&o.JUMP_TABLE;if(Z.charCodeAt(X)!==w)return this.result===0?0:this.emitNotTerminatedNamedEntity();X++,this.excess++,this.runConsumed++}while(this.runConsumed<H){if(X>=Z.length)return-1;let w=this.runConsumed-1,B=Q[this.treeIndex+1+(w>>1)],U=w%2===0?B&255:B>>8&255;if(Z.charCodeAt(X)!==U)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();X++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(H>>1),K=Q[this.treeIndex],Y=(K&o.VALUE_LENGTH)>>14}if(X>=Z.length)break;let J=Z.charCodeAt(X);if(J===d.SEMI&&Y!==0&&(K&o.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,Y,this.consumed+this.excess);if(this.treeIndex=jX(Q,K,this.treeIndex+Math.max(1,Y),J),this.treeIndex<0)return this.result===0||this.decodeMode===B0.Attribute&&(Y===0||VX(J))?0:this.emitNotTerminatedNamedEntity();if(K=Q[this.treeIndex],Y=(K&o.VALUE_LENGTH)>>14,Y!==0){if(J===d.SEMI)return this.emitNamedEntityData(this.treeIndex,Y,this.consumed+this.excess);if(this.decodeMode!==B0.Strict&&(K&o.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}X++,this.excess++}return-1}emitNotTerminatedNamedEntity(){let{result:Z,decodeTree:X}=this,Q=(X[Z]&o.VALUE_LENGTH)>>14;return this.emitNamedEntityData(Z,Q,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(Z,X,Q){let{decodeTree:K}=this;if(this.emitCodePoint(X===1?K[Z]&~(o.VALUE_LENGTH|o.FLAG13):K[Z+1],Q),X===3)this.emitCodePoint(K[Z+2],Q);return Q}end(){switch(this.state){case s.NamedEntity:return this.result!==0&&(this.decodeMode!==B0.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case s.NumericDecimal:return this.emitNumericEntity(0,2);case s.NumericHex:return this.emitNumericEntity(0,3);case s.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case s.EntityStart:return 0}}}function jX(Z,X,Q,K){let Y=(X&o.BRANCH_LENGTH)>>7,J=X&o.JUMP_TABLE;if(Y===0)return J!==0&&K===J?Q:-1;if(J){let U=K-J;return U<0||U>=Y?-1:Z[Q+U]-1}let H=Y+1>>1,w=0,B=Y-1;while(w<=B){let U=w+B>>>1,q=U>>1,M=Z[Q+q]>>(U&1)*8&255;if(M<K)w=U+1;else if(M>K)B=U-1;else return Z[Q+H+U]}return-1}var P;(function(Z){Z.HTML="http://www.w3.org/1999/xhtml",Z.MATHML="http://www.w3.org/1998/Math/MathML",Z.SVG="http://www.w3.org/2000/svg",Z.XLINK="http://www.w3.org/1999/xlink",Z.XML="http://www.w3.org/XML/1998/namespace",Z.XMLNS="http://www.w3.org/2000/xmlns/"})(P||(P={}));var P0;(function(Z){Z.TYPE="type",Z.ACTION="action",Z.ENCODING="encoding",Z.PROMPT="prompt",Z.NAME="name",Z.COLOR="color",Z.FACE="face",Z.SIZE="size"})(P0||(P0={}));var Z0;(function(Z){Z.NO_QUIRKS="no-quirks",Z.QUIRKS="quirks",Z.LIMITED_QUIRKS="limited-quirks"})(Z0||(Z0={}));var F;(function(Z){Z.A="a",Z.ADDRESS="address",Z.ANNOTATION_XML="annotation-xml",Z.APPLET="applet",Z.AREA="area",Z.ARTICLE="article",Z.ASIDE="aside",Z.B="b",Z.BASE="base",Z.BASEFONT="basefont",Z.BGSOUND="bgsound",Z.BIG="big",Z.BLOCKQUOTE="blockquote",Z.BODY="body",Z.BR="br",Z.BUTTON="button",Z.CAPTION="caption",Z.CENTER="center",Z.CODE="code",Z.COL="col",Z.COLGROUP="colgroup",Z.DD="dd",Z.DESC="desc",Z.DETAILS="details",Z.DIALOG="dialog",Z.DIR="dir",Z.DIV="div",Z.DL="dl",Z.DT="dt",Z.EM="em",Z.EMBED="embed",Z.FIELDSET="fieldset",Z.FIGCAPTION="figcaption",Z.FIGURE="figure",Z.FONT="font",Z.FOOTER="footer",Z.FOREIGN_OBJECT="foreignObject",Z.FORM="form",Z.FRAME="frame",Z.FRAMESET="frameset",Z.H1="h1",Z.H2="h2",Z.H3="h3",Z.H4="h4",Z.H5="h5",Z.H6="h6",Z.HEAD="head",Z.HEADER="header",Z.HGROUP="hgroup",Z.HR="hr",Z.HTML="html",Z.I="i",Z.IMG="img",Z.IMAGE="image",Z.INPUT="input",Z.IFRAME="iframe",Z.KEYGEN="keygen",Z.LABEL="label",Z.LI="li",Z.LINK="link",Z.LISTING="listing",Z.MAIN="main",Z.MALIGNMARK="malignmark",Z.MARQUEE="marquee",Z.MATH="math",Z.MENU="menu",Z.META="meta",Z.MGLYPH="mglyph",Z.MI="mi",Z.MO="mo",Z.MN="mn",Z.MS="ms",Z.MTEXT="mtext",Z.NAV="nav",Z.NOBR="nobr",Z.NOFRAMES="noframes",Z.NOEMBED="noembed",Z.NOSCRIPT="noscript",Z.OBJECT="object",Z.OL="ol",Z.OPTGROUP="optgroup",Z.OPTION="option",Z.P="p",Z.PARAM="param",Z.PLAINTEXT="plaintext",Z.PRE="pre",Z.RB="rb",Z.RP="rp",Z.RT="rt",Z.RTC="rtc",Z.RUBY="ruby",Z.S="s",Z.SCRIPT="script",Z.SEARCH="search",Z.SECTION="section",Z.SELECT="select",Z.SOURCE="source",Z.SMALL="small",Z.SPAN="span",Z.STRIKE="strike",Z.STRONG="strong",Z.STYLE="style",Z.SUB="sub",Z.SUMMARY="summary",Z.SUP="sup",Z.TABLE="table",Z.TBODY="tbody",Z.TEMPLATE="template",Z.TEXTAREA="textarea",Z.TFOOT="tfoot",Z.TD="td",Z.TH="th",Z.THEAD="thead",Z.TITLE="title",Z.TR="tr",Z.TRACK="track",Z.TT="tt",Z.U="u",Z.UL="ul",Z.SVG="svg",Z.VAR="var",Z.WBR="wbr",Z.XMP="xmp"})(F||(F={}));var W;(function(Z){Z[Z.UNKNOWN=0]="UNKNOWN",Z[Z.A=1]="A",Z[Z.ADDRESS=2]="ADDRESS",Z[Z.ANNOTATION_XML=3]="ANNOTATION_XML",Z[Z.APPLET=4]="APPLET",Z[Z.AREA=5]="AREA",Z[Z.ARTICLE=6]="ARTICLE",Z[Z.ASIDE=7]="ASIDE",Z[Z.B=8]="B",Z[Z.BASE=9]="BASE",Z[Z.BASEFONT=10]="BASEFONT",Z[Z.BGSOUND=11]="BGSOUND",Z[Z.BIG=12]="BIG",Z[Z.BLOCKQUOTE=13]="BLOCKQUOTE",Z[Z.BODY=14]="BODY",Z[Z.BR=15]="BR",Z[Z.BUTTON=16]="BUTTON",Z[Z.CAPTION=17]="CAPTION",Z[Z.CENTER=18]="CENTER",Z[Z.CODE=19]="CODE",Z[Z.COL=20]="COL",Z[Z.COLGROUP=21]="COLGROUP",Z[Z.DD=22]="DD",Z[Z.DESC=23]="DESC",Z[Z.DETAILS=24]="DETAILS",Z[Z.DIALOG=25]="DIALOG",Z[Z.DIR=26]="DIR",Z[Z.DIV=27]="DIV",Z[Z.DL=28]="DL",Z[Z.DT=29]="DT",Z[Z.EM=30]="EM",Z[Z.EMBED=31]="EMBED",Z[Z.FIELDSET=32]="FIELDSET",Z[Z.FIGCAPTION=33]="FIGCAPTION",Z[Z.FIGURE=34]="FIGURE",Z[Z.FONT=35]="FONT",Z[Z.FOOTER=36]="FOOTER",Z[Z.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",Z[Z.FORM=38]="FORM",Z[Z.FRAME=39]="FRAME",Z[Z.FRAMESET=40]="FRAMESET",Z[Z.H1=41]="H1",Z[Z.H2=42]="H2",Z[Z.H3=43]="H3",Z[Z.H4=44]="H4",Z[Z.H5=45]="H5",Z[Z.H6=46]="H6",Z[Z.HEAD=47]="HEAD",Z[Z.HEADER=48]="HEADER",Z[Z.HGROUP=49]="HGROUP",Z[Z.HR=50]="HR",Z[Z.HTML=51]="HTML",Z[Z.I=52]="I",Z[Z.IMG=53]="IMG",Z[Z.IMAGE=54]="IMAGE",Z[Z.INPUT=55]="INPUT",Z[Z.IFRAME=56]="IFRAME",Z[Z.KEYGEN=57]="KEYGEN",Z[Z.LABEL=58]="LABEL",Z[Z.LI=59]="LI",Z[Z.LINK=60]="LINK",Z[Z.LISTING=61]="LISTING",Z[Z.MAIN=62]="MAIN",Z[Z.MALIGNMARK=63]="MALIGNMARK",Z[Z.MARQUEE=64]="MARQUEE",Z[Z.MATH=65]="MATH",Z[Z.MENU=66]="MENU",Z[Z.META=67]="META",Z[Z.MGLYPH=68]="MGLYPH",Z[Z.MI=69]="MI",Z[Z.MO=70]="MO",Z[Z.MN=71]="MN",Z[Z.MS=72]="MS",Z[Z.MTEXT=73]="MTEXT",Z[Z.NAV=74]="NAV",Z[Z.NOBR=75]="NOBR",Z[Z.NOFRAMES=76]="NOFRAMES",Z[Z.NOEMBED=77]="NOEMBED",Z[Z.NOSCRIPT=78]="NOSCRIPT",Z[Z.OBJECT=79]="OBJECT",Z[Z.OL=80]="OL",Z[Z.OPTGROUP=81]="OPTGROUP",Z[Z.OPTION=82]="OPTION",Z[Z.P=83]="P",Z[Z.PARAM=84]="PARAM",Z[Z.PLAINTEXT=85]="PLAINTEXT",Z[Z.PRE=86]="PRE",Z[Z.RB=87]="RB",Z[Z.RP=88]="RP",Z[Z.RT=89]="RT",Z[Z.RTC=90]="RTC",Z[Z.RUBY=91]="RUBY",Z[Z.S=92]="S",Z[Z.SCRIPT=93]="SCRIPT",Z[Z.SEARCH=94]="SEARCH",Z[Z.SECTION=95]="SECTION",Z[Z.SELECT=96]="SELECT",Z[Z.SOURCE=97]="SOURCE",Z[Z.SMALL=98]="SMALL",Z[Z.SPAN=99]="SPAN",Z[Z.STRIKE=100]="STRIKE",Z[Z.STRONG=101]="STRONG",Z[Z.STYLE=102]="STYLE",Z[Z.SUB=103]="SUB",Z[Z.SUMMARY=104]="SUMMARY",Z[Z.SUP=105]="SUP",Z[Z.TABLE=106]="TABLE",Z[Z.TBODY=107]="TBODY",Z[Z.TEMPLATE=108]="TEMPLATE",Z[Z.TEXTAREA=109]="TEXTAREA",Z[Z.TFOOT=110]="TFOOT",Z[Z.TD=111]="TD",Z[Z.TH=112]="TH",Z[Z.THEAD=113]="THEAD",Z[Z.TITLE=114]="TITLE",Z[Z.TR=115]="TR",Z[Z.TRACK=116]="TRACK",Z[Z.TT=117]="TT",Z[Z.U=118]="U",Z[Z.UL=119]="UL",Z[Z.SVG=120]="SVG",Z[Z.VAR=121]="VAR",Z[Z.WBR=122]="WBR",Z[Z.XMP=123]="XMP"})(W||(W={}));var HX=new Map([[F.A,W.A],[F.ADDRESS,W.ADDRESS],[F.ANNOTATION_XML,W.ANNOTATION_XML],[F.APPLET,W.APPLET],[F.AREA,W.AREA],[F.ARTICLE,W.ARTICLE],[F.ASIDE,W.ASIDE],[F.B,W.B],[F.BASE,W.BASE],[F.BASEFONT,W.BASEFONT],[F.BGSOUND,W.BGSOUND],[F.BIG,W.BIG],[F.BLOCKQUOTE,W.BLOCKQUOTE],[F.BODY,W.BODY],[F.BR,W.BR],[F.BUTTON,W.BUTTON],[F.CAPTION,W.CAPTION],[F.CENTER,W.CENTER],[F.CODE,W.CODE],[F.COL,W.COL],[F.COLGROUP,W.COLGROUP],[F.DD,W.DD],[F.DESC,W.DESC],[F.DETAILS,W.DETAILS],[F.DIALOG,W.DIALOG],[F.DIR,W.DIR],[F.DIV,W.DIV],[F.DL,W.DL],[F.DT,W.DT],[F.EM,W.EM],[F.EMBED,W.EMBED],[F.FIELDSET,W.FIELDSET],[F.FIGCAPTION,W.FIGCAPTION],[F.FIGURE,W.FIGURE],[F.FONT,W.FONT],[F.FOOTER,W.FOOTER],[F.FOREIGN_OBJECT,W.FOREIGN_OBJECT],[F.FORM,W.FORM],[F.FRAME,W.FRAME],[F.FRAMESET,W.FRAMESET],[F.H1,W.H1],[F.H2,W.H2],[F.H3,W.H3],[F.H4,W.H4],[F.H5,W.H5],[F.H6,W.H6],[F.HEAD,W.HEAD],[F.HEADER,W.HEADER],[F.HGROUP,W.HGROUP],[F.HR,W.HR],[F.HTML,W.HTML],[F.I,W.I],[F.IMG,W.IMG],[F.IMAGE,W.IMAGE],[F.INPUT,W.INPUT],[F.IFRAME,W.IFRAME],[F.KEYGEN,W.KEYGEN],[F.LABEL,W.LABEL],[F.LI,W.LI],[F.LINK,W.LINK],[F.LISTING,W.LISTING],[F.MAIN,W.MAIN],[F.MALIGNMARK,W.MALIGNMARK],[F.MARQUEE,W.MARQUEE],[F.MATH,W.MATH],[F.MENU,W.MENU],[F.META,W.META],[F.MGLYPH,W.MGLYPH],[F.MI,W.MI],[F.MO,W.MO],[F.MN,W.MN],[F.MS,W.MS],[F.MTEXT,W.MTEXT],[F.NAV,W.NAV],[F.NOBR,W.NOBR],[F.NOFRAMES,W.NOFRAMES],[F.NOEMBED,W.NOEMBED],[F.NOSCRIPT,W.NOSCRIPT],[F.OBJECT,W.OBJECT],[F.OL,W.OL],[F.OPTGROUP,W.OPTGROUP],[F.OPTION,W.OPTION],[F.P,W.P],[F.PARAM,W.PARAM],[F.PLAINTEXT,W.PLAINTEXT],[F.PRE,W.PRE],[F.RB,W.RB],[F.RP,W.RP],[F.RT,W.RT],[F.RTC,W.RTC],[F.RUBY,W.RUBY],[F.S,W.S],[F.SCRIPT,W.SCRIPT],[F.SEARCH,W.SEARCH],[F.SECTION,W.SECTION],[F.SELECT,W.SELECT],[F.SOURCE,W.SOURCE],[F.SMALL,W.SMALL],[F.SPAN,W.SPAN],[F.STRIKE,W.STRIKE],[F.STRONG,W.STRONG],[F.STYLE,W.STYLE],[F.SUB,W.SUB],[F.SUMMARY,W.SUMMARY],[F.SUP,W.SUP],[F.TABLE,W.TABLE],[F.TBODY,W.TBODY],[F.TEMPLATE,W.TEMPLATE],[F.TEXTAREA,W.TEXTAREA],[F.TFOOT,W.TFOOT],[F.TD,W.TD],[F.TH,W.TH],[F.THEAD,W.THEAD],[F.TITLE,W.TITLE],[F.TR,W.TR],[F.TRACK,W.TRACK],[F.TT,W.TT],[F.U,W.U],[F.UL,W.UL],[F.SVG,W.SVG],[F.VAR,W.VAR],[F.WBR,W.WBR],[F.XMP,W.XMP]]);function S0(Z){var X;return(X=HX.get(Z))!==null&&X!==void 0?X:W.UNKNOWN}var y=W,Z3={[P.HTML]:new Set([y.ADDRESS,y.APPLET,y.AREA,y.ARTICLE,y.ASIDE,y.BASE,y.BASEFONT,y.BGSOUND,y.BLOCKQUOTE,y.BODY,y.BR,y.BUTTON,y.CAPTION,y.CENTER,y.COL,y.COLGROUP,y.DD,y.DETAILS,y.DIR,y.DIV,y.DL,y.DT,y.EMBED,y.FIELDSET,y.FIGCAPTION,y.FIGURE,y.FOOTER,y.FORM,y.FRAME,y.FRAMESET,y.H1,y.H2,y.H3,y.H4,y.H5,y.H6,y.HEAD,y.HEADER,y.HGROUP,y.HR,y.HTML,y.IFRAME,y.IMG,y.INPUT,y.LI,y.LINK,y.LISTING,y.MAIN,y.MARQUEE,y.MENU,y.META,y.NAV,y.NOEMBED,y.NOFRAMES,y.NOSCRIPT,y.OBJECT,y.OL,y.P,y.PARAM,y.PLAINTEXT,y.PRE,y.SCRIPT,y.SECTION,y.SELECT,y.SOURCE,y.STYLE,y.SUMMARY,y.TABLE,y.TBODY,y.TD,y.TEMPLATE,y.TEXTAREA,y.TFOOT,y.TH,y.THEAD,y.TITLE,y.TR,y.TRACK,y.UL,y.WBR,y.XMP]),[P.MATHML]:new Set([y.MI,y.MO,y.MN,y.MS,y.MTEXT,y.ANNOTATION_XML]),[P.SVG]:new Set([y.TITLE,y.FOREIGN_OBJECT,y.DESC]),[P.XLINK]:new Set,[P.XML]:new Set,[P.XMLNS]:new Set},j1=new Set([y.H1,y.H2,y.H3,y.H4,y.H5,y.H6]),zX=new Set([F.STYLE,F.SCRIPT,F.XMP,F.IFRAME,F.NOEMBED,F.NOFRAMES,F.PLAINTEXT]);function X3(Z,X){return zX.has(Z)||X&&Z===F.NOSCRIPT}var j;(function(Z){Z[Z.DATA=0]="DATA",Z[Z.RCDATA=1]="RCDATA",Z[Z.RAWTEXT=2]="RAWTEXT",Z[Z.SCRIPT_DATA=3]="SCRIPT_DATA",Z[Z.PLAINTEXT=4]="PLAINTEXT",Z[Z.TAG_OPEN=5]="TAG_OPEN",Z[Z.END_TAG_OPEN=6]="END_TAG_OPEN",Z[Z.TAG_NAME=7]="TAG_NAME",Z[Z.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",Z[Z.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",Z[Z.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",Z[Z.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",Z[Z.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",Z[Z.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",Z[Z.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",Z[Z.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",Z[Z.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",Z[Z.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",Z[Z.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",Z[Z.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",Z[Z.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",Z[Z.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",Z[Z.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",Z[Z.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",Z[Z.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",Z[Z.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",Z[Z.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",Z[Z.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",Z[Z.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",Z[Z.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",Z[Z.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",Z[Z.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",Z[Z.BOGUS_COMMENT=40]="BOGUS_COMMENT",Z[Z.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",Z[Z.COMMENT_START=42]="COMMENT_START",Z[Z.COMMENT_START_DASH=43]="COMMENT_START_DASH",Z[Z.COMMENT=44]="COMMENT",Z[Z.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",Z[Z.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",Z[Z.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",Z[Z.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",Z[Z.COMMENT_END_DASH=49]="COMMENT_END_DASH",Z[Z.COMMENT_END=50]="COMMENT_END",Z[Z.COMMENT_END_BANG=51]="COMMENT_END_BANG",Z[Z.DOCTYPE=52]="DOCTYPE",Z[Z.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",Z[Z.DOCTYPE_NAME=54]="DOCTYPE_NAME",Z[Z.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",Z[Z.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",Z[Z.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",Z[Z.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",Z[Z.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",Z[Z.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",Z[Z.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",Z[Z.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",Z[Z.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",Z[Z.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",Z[Z.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",Z[Z.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",Z[Z.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",Z[Z.CDATA_SECTION=68]="CDATA_SECTION",Z[Z.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",Z[Z.CDATA_SECTION_END=70]="CDATA_SECTION_END",Z[Z.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",Z[Z.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(j||(j={}));var n={DATA:j.DATA,RCDATA:j.RCDATA,RAWTEXT:j.RAWTEXT,SCRIPT_DATA:j.SCRIPT_DATA,PLAINTEXT:j.PLAINTEXT,CDATA_SECTION:j.CDATA_SECTION};function UX(Z){return Z>=V.DIGIT_0&&Z<=V.DIGIT_9}function H1(Z){return Z>=V.LATIN_CAPITAL_A&&Z<=V.LATIN_CAPITAL_Z}function FX(Z){return Z>=V.LATIN_SMALL_A&&Z<=V.LATIN_SMALL_Z}function M0(Z){return FX(Z)||H1(Z)}function Q3(Z){return M0(Z)||UX(Z)}function Q4(Z){return Z+32}function W3(Z){return Z===V.SPACE||Z===V.LINE_FEED||Z===V.TABULATION||Z===V.FORM_FEED}function K3(Z){return W3(Z)||Z===V.SOLIDUS||Z===V.GREATER_THAN_SIGN}function BX(Z){if(Z===V.NULL)return L.nullCharacterReference;else if(Z>1114111)return L.characterReferenceOutsideUnicodeRange;else if(t1(Z))return L.surrogateCharacterReference;else if(Z4(Z))return L.noncharacterCharacterReference;else if(e1(Z)||Z===V.CARRIAGE_RETURN)return L.controlCharacterReference;return null}class K4{constructor(Z,X){this.options=Z,this.handler=X,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,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 P2(X),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new O2(f2,(Q,K)=>{this.preprocessor.pos=this.entityStartPos+K-1,this._flushCodePointConsumedAsCharacterReference(Q)},X.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(L.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:(Q)=>{this._err(L.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+Q)},validateNumericCharacterReference:(Q)=>{let K=BX(Q);if(K)this._err(K,1)}}:void 0)}_err(Z,X=0){var Q,K;(K=(Q=this.handler).onParseError)===null||K===void 0||K.call(Q,this.preprocessor.getError(Z,X))}getCurrentLocation(Z){if(!this.options.sourceCodeLocationInfo)return null;return{startLine:this.preprocessor.line,startCol:this.preprocessor.col-Z,startOffset:this.preprocessor.offset-Z,endLine:-1,endCol:-1,endOffset:-1}}_runParsingLoop(){if(this.inLoop)return;this.inLoop=!0;while(this.active&&!this.paused){this.consumedAfterSnapshot=0;let Z=this._consume();if(!this._ensureHibernation())this._callState(Z)}this.inLoop=!1}pause(){this.paused=!0}resume(Z){if(!this.paused)throw Error("Parser was already resumed");if(this.paused=!1,this.inLoop)return;if(this._runParsingLoop(),!this.paused)Z===null||Z===void 0||Z()}write(Z,X,Q){if(this.active=!0,this.preprocessor.write(Z,X),this._runParsingLoop(),!this.paused)Q===null||Q===void 0||Q()}insertHtmlAtCurrentPos(Z){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(Z),this._runParsingLoop()}_ensureHibernation(){if(this.preprocessor.endOfChunkHit)return this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0;return!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(Z){this.consumedAfterSnapshot+=Z;for(let X=0;X<Z;X++)this.preprocessor.advance()}_consumeSequenceIfMatch(Z,X){if(this.preprocessor.startsWith(Z,X))return this._advanceBy(Z.length-1),!0;return!1}_createStartTagToken(){this.currentToken={type:S.START_TAG,tagName:"",tagID:W.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(1)}}_createEndTagToken(){this.currentToken={type:S.END_TAG,tagName:"",tagID:W.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(2)}}_createCommentToken(Z){this.currentToken={type:S.COMMENT,data:"",location:this.getCurrentLocation(Z)}}_createDoctypeToken(Z){this.currentToken={type:S.DOCTYPE,name:Z,forceQuirks:!1,publicId:null,systemId:null,location:this.currentLocation}}_createCharacterToken(Z,X){this.currentCharacterToken={type:Z,chars:X,location:this.currentLocation}}_createAttr(Z){this.currentAttr={name:Z,value:""},this.currentLocation=this.getCurrentLocation(0)}_leaveAttrName(){var Z,X;let Q=this.currentToken;if(X4(Q,this.currentAttr.name)===null){if(Q.attrs.push(this.currentAttr),Q.location&&this.currentLocation){let K=(Z=(X=Q.location).attrs)!==null&&Z!==void 0?Z:X.attrs=Object.create(null);K[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue()}}else this._err(L.duplicateAttribute)}_leaveAttrValue(){if(this.currentLocation)this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset}prepareToken(Z){if(this._emitCurrentCharacterToken(Z.location),this.currentToken=null,Z.location)Z.location.endLine=this.preprocessor.line,Z.location.endCol=this.preprocessor.col+1,Z.location.endOffset=this.preprocessor.offset+1;this.currentLocation=this.getCurrentLocation(-1)}emitCurrentTagToken(){let Z=this.currentToken;if(this.prepareToken(Z),Z.tagID=S0(Z.tagName),Z.type===S.START_TAG)this.lastStartTagName=Z.tagName,this.handler.onStartTag(Z);else{if(Z.attrs.length>0)this._err(L.endTagWithAttributes);if(Z.selfClosing)this._err(L.endTagWithTrailingSolidus);this.handler.onEndTag(Z)}this.preprocessor.dropParsedChunk()}emitCurrentComment(Z){this.prepareToken(Z),this.handler.onComment(Z),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(Z){this.prepareToken(Z),this.handler.onDoctype(Z),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(Z){if(this.currentCharacterToken){if(Z&&this.currentCharacterToken.location)this.currentCharacterToken.location.endLine=Z.startLine,this.currentCharacterToken.location.endCol=Z.startCol,this.currentCharacterToken.location.endOffset=Z.startOffset;switch(this.currentCharacterToken.type){case S.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case S.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case S.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){let Z=this.getCurrentLocation(0);if(Z)Z.endLine=Z.startLine,Z.endCol=Z.startCol,Z.endOffset=Z.startOffset;this._emitCurrentCharacterToken(Z),this.handler.onEof({type:S.EOF,location:Z}),this.active=!1}_appendCharToCurrentCharacterToken(Z,X){if(this.currentCharacterToken)if(this.currentCharacterToken.type===Z){this.currentCharacterToken.chars+=X;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(Z,X)}_emitCodePoint(Z){let X=W3(Z)?S.WHITESPACE_CHARACTER:Z===V.NULL?S.NULL_CHARACTER:S.CHARACTER;this._appendCharToCurrentCharacterToken(X,Z<65536?String.fromCharCode(Z):String.fromCodePoint(Z))}_emitChars(Z){this._appendCharToCurrentCharacterToken(S.CHARACTER,Z)}_startCharacterReference(){this.returnState=this.state,this.state=j.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?B0.Attribute:B0.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===j.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(Z){if(this._isCharacterReferenceInAttribute())this.currentAttr.value+=String.fromCodePoint(Z);else this._emitCodePoint(Z)}_callState(Z){switch(this.state){case j.DATA:{this._stateData(Z);break}case j.RCDATA:{this._stateRcdata(Z);break}case j.RAWTEXT:{this._stateRawtext(Z);break}case j.SCRIPT_DATA:{this._stateScriptData(Z);break}case j.PLAINTEXT:{this._statePlaintext(Z);break}case j.TAG_OPEN:{this._stateTagOpen(Z);break}case j.END_TAG_OPEN:{this._stateEndTagOpen(Z);break}case j.TAG_NAME:{this._stateTagName(Z);break}case j.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(Z);break}case j.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(Z);break}case j.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(Z);break}case j.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(Z);break}case j.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(Z);break}case j.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(Z);break}case j.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(Z);break}case j.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(Z);break}case j.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(Z);break}case j.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(Z);break}case j.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(Z);break}case j.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(Z);break}case j.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(Z);break}case j.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(Z);break}case j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(Z);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(Z);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(Z);break}case j.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(Z);break}case j.ATTRIBUTE_NAME:{this._stateAttributeName(Z);break}case j.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(Z);break}case j.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(Z);break}case j.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(Z);break}case j.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(Z);break}case j.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(Z);break}case j.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(Z);break}case j.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(Z);break}case j.BOGUS_COMMENT:{this._stateBogusComment(Z);break}case j.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(Z);break}case j.COMMENT_START:{this._stateCommentStart(Z);break}case j.COMMENT_START_DASH:{this._stateCommentStartDash(Z);break}case j.COMMENT:{this._stateComment(Z);break}case j.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(Z);break}case j.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(Z);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(Z);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(Z);break}case j.COMMENT_END_DASH:{this._stateCommentEndDash(Z);break}case j.COMMENT_END:{this._stateCommentEnd(Z);break}case j.COMMENT_END_BANG:{this._stateCommentEndBang(Z);break}case j.DOCTYPE:{this._stateDoctype(Z);break}case j.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(Z);break}case j.DOCTYPE_NAME:{this._stateDoctypeName(Z);break}case j.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(Z);break}case j.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(Z);break}case j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(Z);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(Z);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(Z);break}case j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(Z);break}case j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(Z);break}case j.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(Z);break}case j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(Z);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(Z);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(Z);break}case j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(Z);break}case j.BOGUS_DOCTYPE:{this._stateBogusDoctype(Z);break}case j.CDATA_SECTION:{this._stateCdataSection(Z);break}case j.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(Z);break}case j.CDATA_SECTION_END:{this._stateCdataSectionEnd(Z);break}case j.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case j.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(Z);break}default:throw Error("Unknown state")}}_stateData(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=j.TAG_OPEN;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitCodePoint(Z);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateRcdata(Z){switch(Z){case V.AMPERSAND:{this._startCharacterReference();break}case V.LESS_THAN_SIGN:{this.state=j.RCDATA_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateRawtext(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=j.RAWTEXT_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptData(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_statePlaintext(Z){switch(Z){case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateTagOpen(Z){if(M0(Z))this._createStartTagToken(),this.state=j.TAG_NAME,this._stateTagName(Z);else switch(Z){case V.EXCLAMATION_MARK:{this.state=j.MARKUP_DECLARATION_OPEN;break}case V.SOLIDUS:{this.state=j.END_TAG_OPEN;break}case V.QUESTION_MARK:{this._err(L.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=j.BOGUS_COMMENT,this._stateBogusComment(Z);break}case V.EOF:{this._err(L.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(L.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=j.DATA,this._stateData(Z)}}_stateEndTagOpen(Z){if(M0(Z))this._createEndTagToken(),this.state=j.TAG_NAME,this._stateTagName(Z);else switch(Z){case V.GREATER_THAN_SIGN:{this._err(L.missingEndTagName),this.state=j.DATA;break}case V.EOF:{this._err(L.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(L.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(Z)}}_stateTagName(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BEFORE_ATTRIBUTE_NAME;break}case V.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.tagName+=u;break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:X.tagName+=String.fromCodePoint(H1(Z)?Q4(Z):Z)}}_stateRcdataLessThanSign(Z){if(Z===V.SOLIDUS)this.state=j.RCDATA_END_TAG_OPEN;else this._emitChars("<"),this.state=j.RCDATA,this._stateRcdata(Z)}_stateRcdataEndTagOpen(Z){if(M0(Z))this.state=j.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(Z);else this._emitChars("</"),this.state=j.RCDATA,this._stateRcdata(Z)}handleSpecialEndTag(Z){if(!this.preprocessor.startsWith(this.lastStartTagName,!1))return!this._ensureHibernation();this._createEndTagToken();let X=this.currentToken;switch(X.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=j.BEFORE_ATTRIBUTE_NAME,!1;case V.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=j.SELF_CLOSING_START_TAG,!1;case V.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=j.DATA,!1;default:return!this._ensureHibernation()}}_stateRcdataEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=j.RCDATA,this._stateRcdata(Z)}_stateRawtextLessThanSign(Z){if(Z===V.SOLIDUS)this.state=j.RAWTEXT_END_TAG_OPEN;else this._emitChars("<"),this.state=j.RAWTEXT,this._stateRawtext(Z)}_stateRawtextEndTagOpen(Z){if(M0(Z))this.state=j.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(Z);else this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(Z)}_stateRawtextEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(Z)}_stateScriptDataLessThanSign(Z){switch(Z){case V.SOLIDUS:{this.state=j.SCRIPT_DATA_END_TAG_OPEN;break}case V.EXCLAMATION_MARK:{this.state=j.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}}_stateScriptDataEndTagOpen(Z){if(M0(Z))this.state=j.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(Z);else this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscapeStart(Z){if(Z===V.HYPHEN_MINUS)this.state=j.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-");else this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscapeStartDash(Z){if(Z===V.HYPHEN_MINUS)this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");else this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscaped(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptDataEscapedDash(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataEscapedDashDash(Z){switch(Z){case V.HYPHEN_MINUS:{this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataEscapedLessThanSign(Z){if(Z===V.SOLIDUS)this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;else if(M0(Z))this._emitChars("<"),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(Z);else this._emitChars("<"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataEscapedEndTagOpen(Z){if(M0(Z))this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(Z);else this._emitChars("</"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataEscapedEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataDoubleEscapeStart(Z){if(this.preprocessor.startsWith(e.SCRIPT,!1)&&K3(this.preprocessor.peek(e.SCRIPT.length))){this._emitCodePoint(Z);for(let X=0;X<e.SCRIPT.length;X++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED}else if(!this._ensureHibernation())this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataDoubleEscaped(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedDash(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedDashDash(Z){switch(Z){case V.HYPHEN_MINUS:{this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedLessThanSign(Z){if(Z===V.SOLIDUS)this.state=j.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/");else this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(Z)}_stateScriptDataDoubleEscapeEnd(Z){if(this.preprocessor.startsWith(e.SCRIPT,!1)&&K3(this.preprocessor.peek(e.SCRIPT.length))){this._emitCodePoint(Z);for(let X=0;X<e.SCRIPT.length;X++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_ESCAPED}else if(!this._ensureHibernation())this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(Z)}_stateBeforeAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.SOLIDUS:case V.GREATER_THAN_SIGN:case V.EOF:{this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(Z);break}case V.EQUALS_SIGN:{this._err(L.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=j.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(Z)}}_stateAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:case V.SOLIDUS:case V.GREATER_THAN_SIGN:case V.EOF:{this._leaveAttrName(),this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(Z);break}case V.EQUALS_SIGN:{this._leaveAttrName(),this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case V.QUOTATION_MARK:case V.APOSTROPHE:case V.LESS_THAN_SIGN:{this._err(L.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(Z);break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.currentAttr.name+=u;break}default:this.currentAttr.name+=String.fromCodePoint(H1(Z)?Q4(Z):Z)}}_stateAfterAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case V.EQUALS_SIGN:{this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(Z)}}_stateBeforeAttributeValue(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{this.state=j.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this.state=j.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingAttributeValue),this.state=j.DATA,this.emitCurrentTagToken();break}default:this.state=j.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(Z)}}_stateAttributeValueDoubleQuoted(Z){switch(Z){case V.QUOTATION_MARK:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.currentAttr.value+=u;break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAttributeValueSingleQuoted(Z){switch(Z){case V.APOSTROPHE:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.currentAttr.value+=u;break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAttributeValueUnquoted(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.currentAttr.value+=u;break}case V.QUOTATION_MARK:case V.APOSTROPHE:case V.LESS_THAN_SIGN:case V.EQUALS_SIGN:case V.GRAVE_ACCENT:{this._err(L.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(Z);break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAfterAttributeValueQuoted(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case V.SOLIDUS:{this._leaveAttrValue(),this.state=j.SELF_CLOSING_START_TAG;break}case V.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this._err(L.missingWhitespaceBetweenAttributes),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(Z)}}_stateSelfClosingStartTag(Z){switch(Z){case V.GREATER_THAN_SIGN:{let X=this.currentToken;X.selfClosing=!0,this.state=j.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this._err(L.unexpectedSolidusInTag),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(Z)}}_stateBogusComment(Z){let X=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(X);break}case V.EOF:{this.emitCurrentComment(X),this._emitEOFToken();break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.data+=u;break}default:X.data+=String.fromCodePoint(Z)}}_stateMarkupDeclarationOpen(Z){if(this._consumeSequenceIfMatch(e.DASH_DASH,!0))this._createCommentToken(e.DASH_DASH.length+1),this.state=j.COMMENT_START;else if(this._consumeSequenceIfMatch(e.DOCTYPE,!1))this.currentLocation=this.getCurrentLocation(e.DOCTYPE.length+1),this.state=j.DOCTYPE;else if(this._consumeSequenceIfMatch(e.CDATA_START,!0))if(this.inForeignNode)this.state=j.CDATA_SECTION;else this._err(L.cdataInHtmlContent),this._createCommentToken(e.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=j.BOGUS_COMMENT;else if(!this._ensureHibernation())this._err(L.incorrectlyOpenedComment),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(Z)}_stateCommentStart(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.COMMENT_START_DASH;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptClosingOfEmptyComment),this.state=j.DATA;let X=this.currentToken;this.emitCurrentComment(X);break}default:this.state=j.COMMENT,this._stateComment(Z)}}_stateCommentStartDash(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptClosingOfEmptyComment),this.state=j.DATA,this.emitCurrentComment(X);break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="-",this.state=j.COMMENT,this._stateComment(Z)}}_stateComment(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=j.COMMENT_END_DASH;break}case V.LESS_THAN_SIGN:{X.data+="<",this.state=j.COMMENT_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.data+=u;break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+=String.fromCodePoint(Z)}}_stateCommentLessThanSign(Z){let X=this.currentToken;switch(Z){case V.EXCLAMATION_MARK:{X.data+="!",this.state=j.COMMENT_LESS_THAN_SIGN_BANG;break}case V.LESS_THAN_SIGN:{X.data+="<";break}default:this.state=j.COMMENT,this._stateComment(Z)}}_stateCommentLessThanSignBang(Z){if(Z===V.HYPHEN_MINUS)this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH;else this.state=j.COMMENT,this._stateComment(Z)}_stateCommentLessThanSignBangDash(Z){if(Z===V.HYPHEN_MINUS)this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;else this.state=j.COMMENT_END_DASH,this._stateCommentEndDash(Z)}_stateCommentLessThanSignBangDashDash(Z){if(Z!==V.GREATER_THAN_SIGN&&Z!==V.EOF)this._err(L.nestedComment);this.state=j.COMMENT_END,this._stateCommentEnd(Z)}_stateCommentEndDash(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="-",this.state=j.COMMENT,this._stateComment(Z)}}_stateCommentEnd(Z){let X=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(X);break}case V.EXCLAMATION_MARK:{this.state=j.COMMENT_END_BANG;break}case V.HYPHEN_MINUS:{X.data+="-";break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="--",this.state=j.COMMENT,this._stateComment(Z)}}_stateCommentEndBang(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{X.data+="--!",this.state=j.COMMENT_END_DASH;break}case V.GREATER_THAN_SIGN:{this._err(L.incorrectlyClosedComment),this.state=j.DATA,this.emitCurrentComment(X);break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="--!",this.state=j.COMMENT,this._stateComment(Z)}}_stateDoctype(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(Z);break}case V.EOF:{this._err(L.eofInDoctype),this._createDoctypeToken(null);let X=this.currentToken;X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingWhitespaceBeforeDoctypeName),this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(Z)}}_stateBeforeDoctypeName(Z){if(H1(Z))this._createDoctypeToken(String.fromCharCode(Q4(Z))),this.state=j.DOCTYPE_NAME;else switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.NULL:{this._err(L.unexpectedNullCharacter),this._createDoctypeToken(u),this.state=j.DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypeName),this._createDoctypeToken(null);let X=this.currentToken;X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.EOF:{this._err(L.eofInDoctype),this._createDoctypeToken(null);let X=this.currentToken;X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(Z)),this.state=j.DOCTYPE_NAME}}_stateDoctypeName(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.AFTER_DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.name+=u;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.name+=String.fromCodePoint(H1(Z)?Q4(Z):Z)}}_stateAfterDoctypeName(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:if(this._consumeSequenceIfMatch(e.PUBLIC,!1))this.state=j.AFTER_DOCTYPE_PUBLIC_KEYWORD;else if(this._consumeSequenceIfMatch(e.SYSTEM,!1))this.state=j.AFTER_DOCTYPE_SYSTEM_KEYWORD;else if(!this._ensureHibernation())this._err(L.invalidCharacterSequenceAfterDoctypeName),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateAfterDoctypePublicKeyword(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.QUOTATION_MARK:{this._err(L.missingWhitespaceAfterDoctypePublicKeyword),X.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(L.missingWhitespaceAfterDoctypePublicKeyword),X.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypePublicIdentifier),X.forceQuirks=!0,this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypePublicIdentifier),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBeforeDoctypePublicIdentifier(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{X.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{X.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypePublicIdentifier),X.forceQuirks=!0,this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypePublicIdentifier),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateDoctypePublicIdentifierDoubleQuoted(Z){let X=this.currentToken;switch(Z){case V.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.publicId+=u;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptDoctypePublicIdentifier),X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.publicId+=String.fromCodePoint(Z)}}_stateDoctypePublicIdentifierSingleQuoted(Z){let X=this.currentToken;switch(Z){case V.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.publicId+=u;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptDoctypePublicIdentifier),X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.publicId+=String.fromCodePoint(Z)}}_stateAfterDoctypePublicIdentifier(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.QUOTATION_MARK:{this._err(L.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(L.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBetweenDoctypePublicAndSystemIdentifiers(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.QUOTATION_MARK:{X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateAfterDoctypeSystemKeyword(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.QUOTATION_MARK:{this._err(L.missingWhitespaceAfterDoctypeSystemKeyword),X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(L.missingWhitespaceAfterDoctypeSystemKeyword),X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBeforeDoctypeSystemIdentifier(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateDoctypeSystemIdentifierDoubleQuoted(Z){let X=this.currentToken;switch(Z){case V.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.systemId+=u;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptDoctypeSystemIdentifier),X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.systemId+=String.fromCodePoint(Z)}}_stateDoctypeSystemIdentifierSingleQuoted(Z){let X=this.currentToken;switch(Z){case V.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.systemId+=u;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptDoctypeSystemIdentifier),X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.systemId+=String.fromCodePoint(Z)}}_stateAfterDoctypeSystemIdentifier(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBogusDoctype(Z){let X=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.NULL:{this._err(L.unexpectedNullCharacter);break}case V.EOF:{this.emitCurrentDoctype(X),this._emitEOFToken();break}default:}}_stateCdataSection(Z){switch(Z){case V.RIGHT_SQUARE_BRACKET:{this.state=j.CDATA_SECTION_BRACKET;break}case V.EOF:{this._err(L.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateCdataSectionBracket(Z){if(Z===V.RIGHT_SQUARE_BRACKET)this.state=j.CDATA_SECTION_END;else this._emitChars("]"),this.state=j.CDATA_SECTION,this._stateCdataSection(Z)}_stateCdataSectionEnd(Z){switch(Z){case V.GREATER_THAN_SIGN:{this.state=j.DATA;break}case V.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=j.CDATA_SECTION,this._stateCdataSection(Z)}}_stateCharacterReference(){let Z=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(Z<0)if(this.preprocessor.lastChunkWritten)Z=this.entityDecoder.end();else{this.active=!1,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=!0;return}if(Z===0)this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(V.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&Q3(this.preprocessor.peek(1))?j.AMBIGUOUS_AMPERSAND:this.returnState;else this.state=this.returnState}_stateAmbiguousAmpersand(Z){if(Q3(Z))this._flushCodePointConsumedAsCharacterReference(Z);else{if(Z===V.SEMICOLON)this._err(L.unknownNamedCharacterReference);this.state=this.returnState,this._callState(Z)}}}var j3=new Set([W.DD,W.DT,W.LI,W.OPTGROUP,W.OPTION,W.P,W.RB,W.RP,W.RT,W.RTC]),Y3=new Set([...j3,W.CAPTION,W.COLGROUP,W.TBODY,W.TD,W.TFOOT,W.TH,W.THEAD,W.TR]),W4=new Set([W.APPLET,W.CAPTION,W.HTML,W.MARQUEE,W.OBJECT,W.TABLE,W.TD,W.TEMPLATE,W.TH]),LX=new Set([...W4,W.OL,W.UL]),qX=new Set([...W4,W.BUTTON]),J3=new Set([W.ANNOTATION_XML,W.MI,W.MN,W.MO,W.MS,W.MTEXT]),V3=new Set([W.DESC,W.FOREIGN_OBJECT,W.TITLE]),xX=new Set([W.TR,W.TEMPLATE,W.HTML]),PX=new Set([W.TBODY,W.TFOOT,W.THEAD,W.TEMPLATE,W.HTML]),fX=new Set([W.TABLE,W.TEMPLATE,W.HTML]),yX=new Set([W.TD,W.TH]);class b2{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(Z,X,Q){this.treeAdapter=X,this.handler=Q,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=W.UNKNOWN,this.current=Z}_indexOf(Z){return this.items.lastIndexOf(Z,this.stackTop)}_isInTemplate(){return this.currentTagId===W.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===P.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(Z,X){if(this.stackTop++,this.items[this.stackTop]=Z,this.current=Z,this.tagIDs[this.stackTop]=X,this.currentTagId=X,this._isInTemplate())this.tmplCount++;this.handler.onItemPush(Z,X,!0)}pop(){let Z=this.current;if(this.tmplCount>0&&this._isInTemplate())this.tmplCount--;this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(Z,!0)}replace(Z,X){let Q=this._indexOf(Z);if(this.items[Q]=X,Q===this.stackTop)this.current=X}insertAfter(Z,X,Q){let K=this._indexOf(Z)+1;if(this.items.splice(K,0,X),this.tagIDs.splice(K,0,Q),this.stackTop++,K===this.stackTop)this._updateCurrentElement();if(this.current&&this.currentTagId!==void 0)this.handler.onItemPush(this.current,this.currentTagId,K===this.stackTop)}popUntilTagNamePopped(Z){let X=this.stackTop+1;do X=this.tagIDs.lastIndexOf(Z,X-1);while(X>0&&this.treeAdapter.getNamespaceURI(this.items[X])!==P.HTML);this.shortenToLength(Math.max(X,0))}shortenToLength(Z){while(this.stackTop>=Z){let X=this.current;if(this.tmplCount>0&&this._isInTemplate())this.tmplCount-=1;this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(X,this.stackTop<Z)}}popUntilElementPopped(Z){let X=this._indexOf(Z);this.shortenToLength(Math.max(X,0))}popUntilPopped(Z,X){let Q=this._indexOfTagNames(Z,X);this.shortenToLength(Math.max(Q,0))}popUntilNumberedHeaderPopped(){this.popUntilPopped(j1,P.HTML)}popUntilTableCellPopped(){this.popUntilPopped(yX,P.HTML)}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1)}_indexOfTagNames(Z,X){for(let Q=this.stackTop;Q>=0;Q--)if(Z.has(this.tagIDs[Q])&&this.treeAdapter.getNamespaceURI(this.items[Q])===X)return Q;return-1}clearBackTo(Z,X){let Q=this._indexOfTagNames(Z,X);this.shortenToLength(Q+1)}clearBackToTableContext(){this.clearBackTo(fX,P.HTML)}clearBackToTableBodyContext(){this.clearBackTo(PX,P.HTML)}clearBackToTableRowContext(){this.clearBackTo(xX,P.HTML)}remove(Z){let X=this._indexOf(Z);if(X>=0)if(X===this.stackTop)this.pop();else this.items.splice(X,1),this.tagIDs.splice(X,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(Z,!1)}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===W.BODY?this.items[1]:null}contains(Z){return this._indexOf(Z)>-1}getCommonAncestor(Z){let X=this._indexOf(Z)-1;return X>=0?this.items[X]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===W.HTML}hasInDynamicScope(Z,X){for(let Q=this.stackTop;Q>=0;Q--){let K=this.tagIDs[Q];switch(this.treeAdapter.getNamespaceURI(this.items[Q])){case P.HTML:{if(K===Z)return!0;if(X.has(K))return!1;break}case P.SVG:{if(V3.has(K))return!1;break}case P.MATHML:{if(J3.has(K))return!1;break}}}return!0}hasInScope(Z){return this.hasInDynamicScope(Z,W4)}hasInListItemScope(Z){return this.hasInDynamicScope(Z,LX)}hasInButtonScope(Z){return this.hasInDynamicScope(Z,qX)}hasNumberedHeaderInScope(){for(let Z=this.stackTop;Z>=0;Z--){let X=this.tagIDs[Z];switch(this.treeAdapter.getNamespaceURI(this.items[Z])){case P.HTML:{if(j1.has(X))return!0;if(W4.has(X))return!1;break}case P.SVG:{if(V3.has(X))return!1;break}case P.MATHML:{if(J3.has(X))return!1;break}}}return!0}hasInTableScope(Z){for(let X=this.stackTop;X>=0;X--){if(this.treeAdapter.getNamespaceURI(this.items[X])!==P.HTML)continue;switch(this.tagIDs[X]){case Z:return!0;case W.TABLE:case W.HTML:return!1}}return!0}hasTableBodyContextInTableScope(){for(let Z=this.stackTop;Z>=0;Z--){if(this.treeAdapter.getNamespaceURI(this.items[Z])!==P.HTML)continue;switch(this.tagIDs[Z]){case W.TBODY:case W.THEAD:case W.TFOOT:return!0;case W.TABLE:case W.HTML:return!1}}return!0}hasInSelectScope(Z){for(let X=this.stackTop;X>=0;X--){if(this.treeAdapter.getNamespaceURI(this.items[X])!==P.HTML)continue;switch(this.tagIDs[X]){case Z:return!0;case W.OPTION:case W.OPTGROUP:break;default:return!1}}return!0}generateImpliedEndTags(){while(this.currentTagId!==void 0&&j3.has(this.currentTagId))this.pop()}generateImpliedEndTagsThoroughly(){while(this.currentTagId!==void 0&&Y3.has(this.currentTagId))this.pop()}generateImpliedEndTagsWithExclusion(Z){while(this.currentTagId!==void 0&&this.currentTagId!==Z&&Y3.has(this.currentTagId))this.pop()}}var z0;(function(Z){Z[Z.Marker=0]="Marker",Z[Z.Element=1]="Element"})(z0||(z0={}));var H3={type:z0.Marker};class v2{constructor(Z){this.treeAdapter=Z,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(Z,X){let Q=[],K=X.length,Y=this.treeAdapter.getTagName(Z),J=this.treeAdapter.getNamespaceURI(Z);for(let H=0;H<this.entries.length;H++){let w=this.entries[H];if(w.type===z0.Marker)break;let{element:B}=w;if(this.treeAdapter.getTagName(B)===Y&&this.treeAdapter.getNamespaceURI(B)===J){let U=this.treeAdapter.getAttrList(B);if(U.length===K)Q.push({idx:H,attrs:U})}}return Q}_ensureNoahArkCondition(Z){if(this.entries.length<3)return;let X=this.treeAdapter.getAttrList(Z),Q=this._getNoahArkConditionCandidates(Z,X);if(Q.length<3)return;let K=new Map(X.map((J)=>[J.name,J.value])),Y=0;for(let J=0;J<Q.length;J++){let H=Q[J];if(H.attrs.every((w)=>K.get(w.name)===w.value)){if(Y+=1,Y>=3)this.entries.splice(H.idx,1)}}}insertMarker(){this.entries.unshift(H3)}pushElement(Z,X){this._ensureNoahArkCondition(Z),this.entries.unshift({type:z0.Element,element:Z,token:X})}insertElementAfterBookmark(Z,X){let Q=this.entries.indexOf(this.bookmark);this.entries.splice(Q,0,{type:z0.Element,element:Z,token:X})}removeEntry(Z){let X=this.entries.indexOf(Z);if(X!==-1)this.entries.splice(X,1)}clearToLastMarker(){let Z=this.entries.indexOf(H3);if(Z===-1)this.entries.length=0;else this.entries.splice(0,Z+1)}getElementEntryInScopeWithTagName(Z){let X=this.entries.find((Q)=>Q.type===z0.Marker||this.treeAdapter.getTagName(Q.element)===Z);return X&&X.type===z0.Element?X:null}getElementEntry(Z){return this.entries.find((X)=>X.type===z0.Element&&X.element===Z)}}var J0={createDocument(){return{nodeName:"#document",mode:Z0.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(Z,X,Q){return{nodeName:Z,tagName:Z,attrs:Q,namespaceURI:X,childNodes:[],parentNode:null}},createCommentNode(Z){return{nodeName:"#comment",data:Z,parentNode:null}},createTextNode(Z){return{nodeName:"#text",value:Z,parentNode:null}},appendChild(Z,X){Z.childNodes.push(X),X.parentNode=Z},insertBefore(Z,X,Q){let K=Z.childNodes.indexOf(Q);Z.childNodes.splice(K,0,X),X.parentNode=Z},setTemplateContent(Z,X){Z.content=X},getTemplateContent(Z){return Z.content},setDocumentType(Z,X,Q,K){let Y=Z.childNodes.find((J)=>J.nodeName==="#documentType");if(Y)Y.name=X,Y.publicId=Q,Y.systemId=K;else{let J={nodeName:"#documentType",name:X,publicId:Q,systemId:K,parentNode:null};J0.appendChild(Z,J)}},setDocumentMode(Z,X){Z.mode=X},getDocumentMode(Z){return Z.mode},detachNode(Z){if(Z.parentNode){let X=Z.parentNode.childNodes.indexOf(Z);Z.parentNode.childNodes.splice(X,1),Z.parentNode=null}},insertText(Z,X){if(Z.childNodes.length>0){let Q=Z.childNodes[Z.childNodes.length-1];if(J0.isTextNode(Q)){Q.value+=X;return}}J0.appendChild(Z,J0.createTextNode(X))},insertTextBefore(Z,X,Q){let K=Z.childNodes[Z.childNodes.indexOf(Q)-1];if(K&&J0.isTextNode(K))K.value+=X;else J0.insertBefore(Z,J0.createTextNode(X),Q)},adoptAttributes(Z,X){let Q=new Set(Z.attrs.map((K)=>K.name));for(let K=0;K<X.length;K++)if(!Q.has(X[K].name))Z.attrs.push(X[K])},getFirstChild(Z){return Z.childNodes[0]},getChildNodes(Z){return Z.childNodes},getParentNode(Z){return Z.parentNode},getAttrList(Z){return Z.attrs},getTagName(Z){return Z.tagName},getNamespaceURI(Z){return Z.namespaceURI},getTextNodeContent(Z){return Z.value},getCommentNodeContent(Z){return Z.data},getDocumentTypeNodeName(Z){return Z.name},getDocumentTypeNodePublicId(Z){return Z.publicId},getDocumentTypeNodeSystemId(Z){return Z.systemId},isTextNode(Z){return Z.nodeName==="#text"},isCommentNode(Z){return Z.nodeName==="#comment"},isDocumentTypeNode(Z){return Z.nodeName==="#documentType"},isElementNode(Z){return Object.prototype.hasOwnProperty.call(Z,"tagName")},setNodeSourceCodeLocation(Z,X){Z.sourceCodeLocation=X},getNodeSourceCodeLocation(Z){return Z.sourceCodeLocation},updateNodeSourceCodeLocation(Z,X){Z.sourceCodeLocation={...Z.sourceCodeLocation,...X}}};var w3="html",OX="about:legacy-compat",bX="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",U3=["+//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//"],vX=[...U3,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],RX=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),F3=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],CX=[...F3,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function z3(Z,X){return X.some((Q)=>Z.startsWith(Q))}function B3(Z){return Z.name===w3&&Z.publicId===null&&(Z.systemId===null||Z.systemId===OX)}function L3(Z){if(Z.name!==w3)return Z0.QUIRKS;let{systemId:X}=Z;if(X&&X.toLowerCase()===bX)return Z0.QUIRKS;let{publicId:Q}=Z;if(Q!==null){if(Q=Q.toLowerCase(),RX.has(Q))return Z0.QUIRKS;let K=X===null?vX:U3;if(z3(Q,K))return Z0.QUIRKS;if(K=X===null?F3:CX,z3(Q,K))return Z0.LIMITED_QUIRKS}return Z0.NO_QUIRKS}var q3={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},MX="definitionurl",NX="definitionURL",DX=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((Z)=>[Z.toLowerCase(),Z])),$X=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:P.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:P.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:P.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:P.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:P.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:P.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:P.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:P.XML}],["xml:space",{prefix:"xml",name:"space",namespace:P.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:P.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:P.XMLNS}]]),gX=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((Z)=>[Z.toLowerCase(),Z])),GX=new Set([W.B,W.BIG,W.BLOCKQUOTE,W.BODY,W.BR,W.CENTER,W.CODE,W.DD,W.DIV,W.DL,W.DT,W.EM,W.EMBED,W.H1,W.H2,W.H3,W.H4,W.H5,W.H6,W.HEAD,W.HR,W.I,W.IMG,W.LI,W.LISTING,W.MENU,W.META,W.NOBR,W.OL,W.P,W.PRE,W.RUBY,W.S,W.SMALL,W.SPAN,W.STRONG,W.STRIKE,W.SUB,W.SUP,W.TABLE,W.TT,W.U,W.UL,W.VAR]);function x3(Z){let X=Z.tagID;return X===W.FONT&&Z.attrs.some(({name:K})=>K===P0.COLOR||K===P0.SIZE||K===P0.FACE)||GX.has(X)}function R2(Z){for(let X=0;X<Z.attrs.length;X++)if(Z.attrs[X].name===MX){Z.attrs[X].name=NX;break}}function C2(Z){for(let X=0;X<Z.attrs.length;X++){let Q=DX.get(Z.attrs[X].name);if(Q!=null)Z.attrs[X].name=Q}}function Y4(Z){for(let X=0;X<Z.attrs.length;X++){let Q=$X.get(Z.attrs[X].name);if(Q)Z.attrs[X].prefix=Q.prefix,Z.attrs[X].name=Q.name,Z.attrs[X].namespace=Q.namespace}}function P3(Z){let X=gX.get(Z.tagName);if(X!=null)Z.tagName=X,Z.tagID=S0(Z.tagName)}function EX(Z,X){return X===P.MATHML&&(Z===W.MI||Z===W.MO||Z===W.MN||Z===W.MS||Z===W.MTEXT)}function mX(Z,X,Q){if(X===P.MATHML&&Z===W.ANNOTATION_XML){for(let K=0;K<Q.length;K++)if(Q[K].name===P0.ENCODING){let Y=Q[K].value.toLowerCase();return Y===q3.TEXT_HTML||Y===q3.APPLICATION_XML}}return X===P.SVG&&(Z===W.FOREIGN_OBJECT||Z===W.DESC||Z===W.TITLE)}function f3(Z,X,Q,K){return(!K||K===P.HTML)&&mX(Z,X,Q)||(!K||K===P.MATHML)&&EX(Z,X)}var kX="hidden",_X=8,SX=3,z;(function(Z){Z[Z.INITIAL=0]="INITIAL",Z[Z.BEFORE_HTML=1]="BEFORE_HTML",Z[Z.BEFORE_HEAD=2]="BEFORE_HEAD",Z[Z.IN_HEAD=3]="IN_HEAD",Z[Z.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",Z[Z.AFTER_HEAD=5]="AFTER_HEAD",Z[Z.IN_BODY=6]="IN_BODY",Z[Z.TEXT=7]="TEXT",Z[Z.IN_TABLE=8]="IN_TABLE",Z[Z.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",Z[Z.IN_CAPTION=10]="IN_CAPTION",Z[Z.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",Z[Z.IN_TABLE_BODY=12]="IN_TABLE_BODY",Z[Z.IN_ROW=13]="IN_ROW",Z[Z.IN_CELL=14]="IN_CELL",Z[Z.IN_SELECT=15]="IN_SELECT",Z[Z.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",Z[Z.IN_TEMPLATE=17]="IN_TEMPLATE",Z[Z.AFTER_BODY=18]="AFTER_BODY",Z[Z.IN_FRAMESET=19]="IN_FRAMESET",Z[Z.AFTER_FRAMESET=20]="AFTER_FRAMESET",Z[Z.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",Z[Z.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET"})(z||(z={}));var IX={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},R3=new Set([W.TABLE,W.TBODY,W.TFOOT,W.THEAD,W.TR]),O3={scriptingEnabled:!0,sourceCodeLocationInfo:!1,treeAdapter:J0,onParseError:null};class H4{constructor(Z,X,Q=null,K=null){if(this.fragmentContext=Q,this.scriptHandler=K,this.currentToken=null,this.stopped=!1,this.insertionMode=z.INITIAL,this.originalInsertionMode=z.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=!1,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1,this.options={...O3,...Z},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError)this.options.sourceCodeLocationInfo=!0;this.document=X!==null&&X!==void 0?X:this.treeAdapter.createDocument(),this.tokenizer=new K4(this.options,this),this.activeFormattingElements=new v2(this.treeAdapter),this.fragmentContextID=Q?S0(this.treeAdapter.getTagName(Q)):W.UNKNOWN,this._setContextModes(Q!==null&&Q!==void 0?Q:this.document,this.fragmentContextID),this.openElements=new b2(this.document,this.treeAdapter,this)}static parse(Z,X){let Q=new this(X);return Q.tokenizer.write(Z,!0),Q.document}static getFragmentParser(Z,X){let Q={...O3,...X};Z!==null&&Z!==void 0||(Z=Q.treeAdapter.createElement(F.TEMPLATE,P.HTML,[]));let K=Q.treeAdapter.createElement("documentmock",P.HTML,[]),Y=new this(Q,K,Z);if(Y.fragmentContextID===W.TEMPLATE)Y.tmplInsertionModeStack.unshift(z.IN_TEMPLATE);return Y._initTokenizerForFragmentParsing(),Y._insertFakeRootElement(),Y._resetInsertionMode(),Y._findFormInFragmentContext(),Y}getFragment(){let Z=this.treeAdapter.getFirstChild(this.document),X=this.treeAdapter.createDocumentFragment();return this._adoptNodes(Z,X),X}_err(Z,X,Q){var K;if(!this.onParseError)return;let Y=(K=Z.location)!==null&&K!==void 0?K:IX,J={code:X,startLine:Y.startLine,startCol:Y.startCol,startOffset:Y.startOffset,endLine:Q?Y.startLine:Y.endLine,endCol:Q?Y.startCol:Y.endCol,endOffset:Q?Y.startOffset:Y.endOffset};this.onParseError(J)}onItemPush(Z,X,Q){var K,Y;if((Y=(K=this.treeAdapter).onItemPush)===null||Y===void 0||Y.call(K,Z),Q&&this.openElements.stackTop>0)this._setContextModes(Z,X)}onItemPop(Z,X){var Q,K;if(this.options.sourceCodeLocationInfo)this._setEndLocation(Z,this.currentToken);if((K=(Q=this.treeAdapter).onItemPop)===null||K===void 0||K.call(Q,Z,this.openElements.current),X){let Y,J;if(this.openElements.stackTop===0&&this.fragmentContext)Y=this.fragmentContext,J=this.fragmentContextID;else({current:Y,currentTagId:J}=this.openElements);this._setContextModes(Y,J)}}_setContextModes(Z,X){let Q=Z===this.document||Z&&this.treeAdapter.getNamespaceURI(Z)===P.HTML;this.currentNotInHTML=!Q,this.tokenizer.inForeignNode=!Q&&Z!==void 0&&X!==void 0&&!this._isIntegrationPoint(X,Z)}_switchToTextParsing(Z,X){this._insertElement(Z,P.HTML),this.tokenizer.state=X,this.originalInsertionMode=this.insertionMode,this.insertionMode=z.TEXT}switchToPlaintextParsing(){this.insertionMode=z.TEXT,this.originalInsertionMode=z.IN_BODY,this.tokenizer.state=n.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let Z=this.fragmentContext;while(Z){if(this.treeAdapter.getTagName(Z)===F.FORM){this.formElement=Z;break}Z=this.treeAdapter.getParentNode(Z)}}_initTokenizerForFragmentParsing(){if(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==P.HTML)return;switch(this.fragmentContextID){case W.TITLE:case W.TEXTAREA:{this.tokenizer.state=n.RCDATA;break}case W.STYLE:case W.XMP:case W.IFRAME:case W.NOEMBED:case W.NOFRAMES:case W.NOSCRIPT:{this.tokenizer.state=n.RAWTEXT;break}case W.SCRIPT:{this.tokenizer.state=n.SCRIPT_DATA;break}case W.PLAINTEXT:{this.tokenizer.state=n.PLAINTEXT;break}default:}}_setDocumentType(Z){let X=Z.name||"",Q=Z.publicId||"",K=Z.systemId||"";if(this.treeAdapter.setDocumentType(this.document,X,Q,K),Z.location){let J=this.treeAdapter.getChildNodes(this.document).find((H)=>this.treeAdapter.isDocumentTypeNode(H));if(J)this.treeAdapter.setNodeSourceCodeLocation(J,Z.location)}}_attachElementToTree(Z,X){if(this.options.sourceCodeLocationInfo){let Q=X&&{...X,startTag:X};this.treeAdapter.setNodeSourceCodeLocation(Z,Q)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(Z);else{let Q=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(Q!==null&&Q!==void 0?Q:this.document,Z)}}_appendElement(Z,X){let Q=this.treeAdapter.createElement(Z.tagName,X,Z.attrs);this._attachElementToTree(Q,Z.location)}_insertElement(Z,X){let Q=this.treeAdapter.createElement(Z.tagName,X,Z.attrs);this._attachElementToTree(Q,Z.location),this.openElements.push(Q,Z.tagID)}_insertFakeElement(Z,X){let Q=this.treeAdapter.createElement(Z,P.HTML,[]);this._attachElementToTree(Q,null),this.openElements.push(Q,X)}_insertTemplate(Z){let X=this.treeAdapter.createElement(Z.tagName,P.HTML,Z.attrs),Q=this.treeAdapter.createDocumentFragment();if(this.treeAdapter.setTemplateContent(X,Q),this._attachElementToTree(X,Z.location),this.openElements.push(X,Z.tagID),this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Q,null)}_insertFakeRootElement(){let Z=this.treeAdapter.createElement(F.HTML,P.HTML,[]);if(this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Z,null);this.treeAdapter.appendChild(this.openElements.current,Z),this.openElements.push(Z,W.HTML)}_appendCommentNode(Z,X){let Q=this.treeAdapter.createCommentNode(Z.data);if(this.treeAdapter.appendChild(X,Q),this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Q,Z.location)}_insertCharacters(Z){let X,Q;if(this._shouldFosterParentOnInsertion())if({parent:X,beforeElement:Q}=this._findFosterParentingLocation(),Q)this.treeAdapter.insertTextBefore(X,Z.chars,Q);else this.treeAdapter.insertText(X,Z.chars);else X=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(X,Z.chars);if(!Z.location)return;let K=this.treeAdapter.getChildNodes(X),Y=Q?K.lastIndexOf(Q):K.length,J=K[Y-1];if(this.treeAdapter.getNodeSourceCodeLocation(J)){let{endLine:w,endCol:B,endOffset:U}=Z.location;this.treeAdapter.updateNodeSourceCodeLocation(J,{endLine:w,endCol:B,endOffset:U})}else if(this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(J,Z.location)}_adoptNodes(Z,X){for(let Q=this.treeAdapter.getFirstChild(Z);Q;Q=this.treeAdapter.getFirstChild(Z))this.treeAdapter.detachNode(Q),this.treeAdapter.appendChild(X,Q)}_setEndLocation(Z,X){if(this.treeAdapter.getNodeSourceCodeLocation(Z)&&X.location){let Q=X.location,K=this.treeAdapter.getTagName(Z),Y=X.type===S.END_TAG&&K===X.tagName?{endTag:{...Q},endLine:Q.endLine,endCol:Q.endCol,endOffset:Q.endOffset}:{endLine:Q.startLine,endCol:Q.startCol,endOffset:Q.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(Z,Y)}}shouldProcessStartTagTokenInForeignContent(Z){if(!this.currentNotInHTML)return!1;let X,Q;if(this.openElements.stackTop===0&&this.fragmentContext)X=this.fragmentContext,Q=this.fragmentContextID;else({current:X,currentTagId:Q}=this.openElements);if(Z.tagID===W.SVG&&this.treeAdapter.getTagName(X)===F.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(X)===P.MATHML)return!1;return this.tokenizer.inForeignNode||(Z.tagID===W.MGLYPH||Z.tagID===W.MALIGNMARK)&&Q!==void 0&&!this._isIntegrationPoint(Q,X,P.HTML)}_processToken(Z){switch(Z.type){case S.CHARACTER:{this.onCharacter(Z);break}case S.NULL_CHARACTER:{this.onNullCharacter(Z);break}case S.COMMENT:{this.onComment(Z);break}case S.DOCTYPE:{this.onDoctype(Z);break}case S.START_TAG:{this._processStartTag(Z);break}case S.END_TAG:{this.onEndTag(Z);break}case S.EOF:{this.onEof(Z);break}case S.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(Z);break}}}_isIntegrationPoint(Z,X,Q){let K=this.treeAdapter.getNamespaceURI(X),Y=this.treeAdapter.getAttrList(X);return f3(Z,K,Y,Q)}_reconstructActiveFormattingElements(){let Z=this.activeFormattingElements.entries.length;if(Z){let X=this.activeFormattingElements.entries.findIndex((K)=>K.type===z0.Marker||this.openElements.contains(K.element)),Q=X===-1?Z-1:X-1;for(let K=Q;K>=0;K--){let Y=this.activeFormattingElements.entries[K];this._insertElement(Y.token,this.treeAdapter.getNamespaceURI(Y.element)),Y.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=z.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(W.P),this.openElements.popUntilTagNamePopped(W.P)}_resetInsertionMode(){for(let Z=this.openElements.stackTop;Z>=0;Z--)switch(Z===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[Z]){case W.TR:{this.insertionMode=z.IN_ROW;return}case W.TBODY:case W.THEAD:case W.TFOOT:{this.insertionMode=z.IN_TABLE_BODY;return}case W.CAPTION:{this.insertionMode=z.IN_CAPTION;return}case W.COLGROUP:{this.insertionMode=z.IN_COLUMN_GROUP;return}case W.TABLE:{this.insertionMode=z.IN_TABLE;return}case W.BODY:{this.insertionMode=z.IN_BODY;return}case W.FRAMESET:{this.insertionMode=z.IN_FRAMESET;return}case W.SELECT:{this._resetInsertionModeForSelect(Z);return}case W.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case W.HTML:{this.insertionMode=this.headElement?z.AFTER_HEAD:z.BEFORE_HEAD;return}case W.TD:case W.TH:{if(Z>0){this.insertionMode=z.IN_CELL;return}break}case W.HEAD:{if(Z>0){this.insertionMode=z.IN_HEAD;return}break}}this.insertionMode=z.IN_BODY}_resetInsertionModeForSelect(Z){if(Z>0)for(let X=Z-1;X>0;X--){let Q=this.openElements.tagIDs[X];if(Q===W.TEMPLATE)break;else if(Q===W.TABLE){this.insertionMode=z.IN_SELECT_IN_TABLE;return}}this.insertionMode=z.IN_SELECT}_isElementCausesFosterParenting(Z){return R3.has(Z)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let Z=this.openElements.stackTop;Z>=0;Z--){let X=this.openElements.items[Z];switch(this.openElements.tagIDs[Z]){case W.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(X)===P.HTML)return{parent:this.treeAdapter.getTemplateContent(X),beforeElement:null};break}case W.TABLE:{let Q=this.treeAdapter.getParentNode(X);if(Q)return{parent:Q,beforeElement:X};return{parent:this.openElements.items[Z-1],beforeElement:null}}default:}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(Z){let X=this._findFosterParentingLocation();if(X.beforeElement)this.treeAdapter.insertBefore(X.parent,Z,X.beforeElement);else this.treeAdapter.appendChild(X.parent,Z)}_isSpecialElement(Z,X){let Q=this.treeAdapter.getNamespaceURI(Z);return Z3[Q].has(X)}onCharacter(Z){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){BQ(this,Z);return}switch(this.insertionMode){case z.INITIAL:{z1(this,Z);break}case z.BEFORE_HTML:{U1(this,Z);break}case z.BEFORE_HEAD:{F1(this,Z);break}case z.IN_HEAD:{B1(this,Z);break}case z.IN_HEAD_NO_SCRIPT:{L1(this,Z);break}case z.AFTER_HEAD:{q1(this,Z);break}case z.IN_BODY:case z.IN_CAPTION:case z.IN_CELL:case z.IN_TEMPLATE:{h3(this,Z);break}case z.TEXT:case z.IN_SELECT:case z.IN_SELECT_IN_TABLE:{this._insertCharacters(Z);break}case z.IN_TABLE:case z.IN_TABLE_BODY:case z.IN_ROW:{h2(this,Z);break}case z.IN_TABLE_TEXT:{G3(this,Z);break}case z.IN_COLUMN_GROUP:{V4(this,Z);break}case z.AFTER_BODY:{j4(this,Z);break}case z.AFTER_AFTER_BODY:{J4(this,Z);break}default:}}onNullCharacter(Z){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){FQ(this,Z);return}switch(this.insertionMode){case z.INITIAL:{z1(this,Z);break}case z.BEFORE_HTML:{U1(this,Z);break}case z.BEFORE_HEAD:{F1(this,Z);break}case z.IN_HEAD:{B1(this,Z);break}case z.IN_HEAD_NO_SCRIPT:{L1(this,Z);break}case z.AFTER_HEAD:{q1(this,Z);break}case z.TEXT:{this._insertCharacters(Z);break}case z.IN_TABLE:case z.IN_TABLE_BODY:case z.IN_ROW:{h2(this,Z);break}case z.IN_COLUMN_GROUP:{V4(this,Z);break}case z.AFTER_BODY:{j4(this,Z);break}case z.AFTER_AFTER_BODY:{J4(this,Z);break}default:}}onComment(Z){if(this.skipNextNewLine=!1,this.currentNotInHTML){M2(this,Z);return}switch(this.insertionMode){case z.INITIAL:case z.BEFORE_HTML:case z.BEFORE_HEAD:case z.IN_HEAD:case z.IN_HEAD_NO_SCRIPT:case z.AFTER_HEAD:case z.IN_BODY:case z.IN_TABLE:case z.IN_CAPTION:case z.IN_COLUMN_GROUP:case z.IN_TABLE_BODY:case z.IN_ROW:case z.IN_CELL:case z.IN_SELECT:case z.IN_SELECT_IN_TABLE:case z.IN_TEMPLATE:case z.IN_FRAMESET:case z.AFTER_FRAMESET:{M2(this,Z);break}case z.IN_TABLE_TEXT:{w1(this,Z);break}case z.AFTER_BODY:{iX(this,Z);break}case z.AFTER_AFTER_BODY:case z.AFTER_AFTER_FRAMESET:{aX(this,Z);break}default:}}onDoctype(Z){switch(this.skipNextNewLine=!1,this.insertionMode){case z.INITIAL:{pX(this,Z);break}case z.BEFORE_HEAD:case z.IN_HEAD:case z.IN_HEAD_NO_SCRIPT:case z.AFTER_HEAD:{this._err(Z,L.misplacedDoctype);break}case z.IN_TABLE_TEXT:{w1(this,Z);break}default:}}onStartTag(Z){if(this.skipNextNewLine=!1,this.currentToken=Z,this._processStartTag(Z),Z.selfClosing&&!Z.ackSelfClosing)this._err(Z,L.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(Z){if(this.shouldProcessStartTagTokenInForeignContent(Z))LQ(this,Z);else this._startTagOutsideForeignContent(Z)}_startTagOutsideForeignContent(Z){switch(this.insertionMode){case z.INITIAL:{z1(this,Z);break}case z.BEFORE_HTML:{sX(this,Z);break}case z.BEFORE_HEAD:{oX(this,Z);break}case z.IN_HEAD:{w0(this,Z);break}case z.IN_HEAD_NO_SCRIPT:{eX(this,Z);break}case z.AFTER_HEAD:{X5(this,Z);break}case z.IN_BODY:{t(this,Z);break}case z.IN_TABLE:{a0(this,Z);break}case z.IN_TABLE_TEXT:{w1(this,Z);break}case z.IN_CAPTION:{n5(this,Z);break}case z.IN_COLUMN_GROUP:{g2(this,Z);break}case z.IN_TABLE_BODY:{U4(this,Z);break}case z.IN_ROW:{F4(this,Z);break}case z.IN_CELL:{ZQ(this,Z);break}case z.IN_SELECT:{k3(this,Z);break}case z.IN_SELECT_IN_TABLE:{QQ(this,Z);break}case z.IN_TEMPLATE:{WQ(this,Z);break}case z.AFTER_BODY:{JQ(this,Z);break}case z.IN_FRAMESET:{VQ(this,Z);break}case z.AFTER_FRAMESET:{HQ(this,Z);break}case z.AFTER_AFTER_BODY:{wQ(this,Z);break}case z.AFTER_AFTER_FRAMESET:{UQ(this,Z);break}default:}}onEndTag(Z){if(this.skipNextNewLine=!1,this.currentToken=Z,this.currentNotInHTML)qQ(this,Z);else this._endTagOutsideForeignContent(Z)}_endTagOutsideForeignContent(Z){switch(this.insertionMode){case z.INITIAL:{z1(this,Z);break}case z.BEFORE_HTML:{rX(this,Z);break}case z.BEFORE_HEAD:{nX(this,Z);break}case z.IN_HEAD:{tX(this,Z);break}case z.IN_HEAD_NO_SCRIPT:{Z5(this,Z);break}case z.AFTER_HEAD:{Q5(this,Z);break}case z.IN_BODY:{w4(this,Z);break}case z.TEXT:{u5(this,Z);break}case z.IN_TABLE:{x1(this,Z);break}case z.IN_TABLE_TEXT:{w1(this,Z);break}case z.IN_CAPTION:{t5(this,Z);break}case z.IN_COLUMN_GROUP:{e5(this,Z);break}case z.IN_TABLE_BODY:{N2(this,Z);break}case z.IN_ROW:{m3(this,Z);break}case z.IN_CELL:{XQ(this,Z);break}case z.IN_SELECT:{_3(this,Z);break}case z.IN_SELECT_IN_TABLE:{KQ(this,Z);break}case z.IN_TEMPLATE:{YQ(this,Z);break}case z.AFTER_BODY:{I3(this,Z);break}case z.IN_FRAMESET:{jQ(this,Z);break}case z.AFTER_FRAMESET:{zQ(this,Z);break}case z.AFTER_AFTER_BODY:{J4(this,Z);break}default:}}onEof(Z){switch(this.insertionMode){case z.INITIAL:{z1(this,Z);break}case z.BEFORE_HTML:{U1(this,Z);break}case z.BEFORE_HEAD:{F1(this,Z);break}case z.IN_HEAD:{B1(this,Z);break}case z.IN_HEAD_NO_SCRIPT:{L1(this,Z);break}case z.AFTER_HEAD:{q1(this,Z);break}case z.IN_BODY:case z.IN_TABLE:case z.IN_CAPTION:case z.IN_COLUMN_GROUP:case z.IN_TABLE_BODY:case z.IN_ROW:case z.IN_CELL:case z.IN_SELECT:case z.IN_SELECT_IN_TABLE:{$3(this,Z);break}case z.TEXT:{c5(this,Z);break}case z.IN_TABLE_TEXT:{w1(this,Z);break}case z.IN_TEMPLATE:{S3(this,Z);break}case z.AFTER_BODY:case z.IN_FRAMESET:case z.AFTER_FRAMESET:case z.AFTER_AFTER_BODY:case z.AFTER_AFTER_FRAMESET:{$2(this,Z);break}default:}}onWhitespaceCharacter(Z){if(this.skipNextNewLine){if(this.skipNextNewLine=!1,Z.chars.charCodeAt(0)===V.LINE_FEED){if(Z.chars.length===1)return;Z.chars=Z.chars.substr(1)}}if(this.tokenizer.inForeignNode){this._insertCharacters(Z);return}switch(this.insertionMode){case z.IN_HEAD:case z.IN_HEAD_NO_SCRIPT:case z.AFTER_HEAD:case z.TEXT:case z.IN_COLUMN_GROUP:case z.IN_SELECT:case z.IN_SELECT_IN_TABLE:case z.IN_FRAMESET:case z.AFTER_FRAMESET:{this._insertCharacters(Z);break}case z.IN_BODY:case z.IN_CAPTION:case z.IN_CELL:case z.IN_TEMPLATE:case z.AFTER_BODY:case z.AFTER_AFTER_BODY:case z.AFTER_AFTER_FRAMESET:{C3(this,Z);break}case z.IN_TABLE:case z.IN_TABLE_BODY:case z.IN_ROW:{h2(this,Z);break}case z.IN_TABLE_TEXT:{g3(this,Z);break}default:}}}function TX(Z,X){let Q=Z.activeFormattingElements.getElementEntryInScopeWithTagName(X.tagName);if(Q){if(!Z.openElements.contains(Q.element))Z.activeFormattingElements.removeEntry(Q),Q=null;else if(!Z.openElements.hasInScope(X.tagID))Q=null}else D3(Z,X);return Q}function AX(Z,X){let Q=null,K=Z.openElements.stackTop;for(;K>=0;K--){let Y=Z.openElements.items[K];if(Y===X.element)break;if(Z._isSpecialElement(Y,Z.openElements.tagIDs[K]))Q=Y}if(!Q)Z.openElements.shortenToLength(Math.max(K,0)),Z.activeFormattingElements.removeEntry(X);return Q}function uX(Z,X,Q){let K=X,Y=Z.openElements.getCommonAncestor(X);for(let J=0,H=Y;H!==Q;J++,H=Y){Y=Z.openElements.getCommonAncestor(H);let w=Z.activeFormattingElements.getElementEntry(H),B=w&&J>=SX;if(!w||B){if(B)Z.activeFormattingElements.removeEntry(w);Z.openElements.remove(H)}else{if(H=cX(Z,w),K===X)Z.activeFormattingElements.bookmark=w;Z.treeAdapter.detachNode(K),Z.treeAdapter.appendChild(H,K),K=H}}return K}function cX(Z,X){let Q=Z.treeAdapter.getNamespaceURI(X.element),K=Z.treeAdapter.createElement(X.token.tagName,Q,X.token.attrs);return Z.openElements.replace(X.element,K),X.element=K,K}function lX(Z,X,Q){let K=Z.treeAdapter.getTagName(X),Y=S0(K);if(Z._isElementCausesFosterParenting(Y))Z._fosterParentElement(Q);else{let J=Z.treeAdapter.getNamespaceURI(X);if(Y===W.TEMPLATE&&J===P.HTML)X=Z.treeAdapter.getTemplateContent(X);Z.treeAdapter.appendChild(X,Q)}}function dX(Z,X,Q){let K=Z.treeAdapter.getNamespaceURI(Q.element),{token:Y}=Q,J=Z.treeAdapter.createElement(Y.tagName,K,Y.attrs);Z._adoptNodes(X,J),Z.treeAdapter.appendChild(X,J),Z.activeFormattingElements.insertElementAfterBookmark(J,Y),Z.activeFormattingElements.removeEntry(Q),Z.openElements.remove(Q.element),Z.openElements.insertAfter(X,J,Y.tagID)}function D2(Z,X){for(let Q=0;Q<_X;Q++){let K=TX(Z,X);if(!K)break;let Y=AX(Z,K);if(!Y)break;Z.activeFormattingElements.bookmark=K;let J=uX(Z,Y,K.element),H=Z.openElements.getCommonAncestor(K.element);if(Z.treeAdapter.detachNode(J),H)lX(Z,H,J);dX(Z,Y,K)}}function M2(Z,X){Z._appendCommentNode(X,Z.openElements.currentTmplContentOrNode)}function iX(Z,X){Z._appendCommentNode(X,Z.openElements.items[0])}function aX(Z,X){Z._appendCommentNode(X,Z.document)}function $2(Z,X){if(Z.stopped=!0,X.location){let Q=Z.fragmentContext?0:2;for(let K=Z.openElements.stackTop;K>=Q;K--)Z._setEndLocation(Z.openElements.items[K],X);if(!Z.fragmentContext&&Z.openElements.stackTop>=0){let K=Z.openElements.items[0],Y=Z.treeAdapter.getNodeSourceCodeLocation(K);if(Y&&!Y.endTag){if(Z._setEndLocation(K,X),Z.openElements.stackTop>=1){let J=Z.openElements.items[1],H=Z.treeAdapter.getNodeSourceCodeLocation(J);if(H&&!H.endTag)Z._setEndLocation(J,X)}}}}}function pX(Z,X){Z._setDocumentType(X);let Q=X.forceQuirks?Z0.QUIRKS:L3(X);if(!B3(X))Z._err(X,L.nonConformingDoctype);Z.treeAdapter.setDocumentMode(Z.document,Q),Z.insertionMode=z.BEFORE_HTML}function z1(Z,X){Z._err(X,L.missingDoctype,!0),Z.treeAdapter.setDocumentMode(Z.document,Z0.QUIRKS),Z.insertionMode=z.BEFORE_HTML,Z._processToken(X)}function sX(Z,X){if(X.tagID===W.HTML)Z._insertElement(X,P.HTML),Z.insertionMode=z.BEFORE_HEAD;else U1(Z,X)}function rX(Z,X){let Q=X.tagID;if(Q===W.HTML||Q===W.HEAD||Q===W.BODY||Q===W.BR)U1(Z,X)}function U1(Z,X){Z._insertFakeRootElement(),Z.insertionMode=z.BEFORE_HEAD,Z._processToken(X)}function oX(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.HEAD:{Z._insertElement(X,P.HTML),Z.headElement=Z.openElements.current,Z.insertionMode=z.IN_HEAD;break}default:F1(Z,X)}}function nX(Z,X){let Q=X.tagID;if(Q===W.HEAD||Q===W.BODY||Q===W.HTML||Q===W.BR)F1(Z,X);else Z._err(X,L.endTagWithoutMatchingOpenElement)}function F1(Z,X){Z._insertFakeElement(F.HEAD,W.HEAD),Z.headElement=Z.openElements.current,Z.insertionMode=z.IN_HEAD,Z._processToken(X)}function w0(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.BASE:case W.BASEFONT:case W.BGSOUND:case W.LINK:case W.META:{Z._appendElement(X,P.HTML),X.ackSelfClosing=!0;break}case W.TITLE:{Z._switchToTextParsing(X,n.RCDATA);break}case W.NOSCRIPT:{if(Z.options.scriptingEnabled)Z._switchToTextParsing(X,n.RAWTEXT);else Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_HEAD_NO_SCRIPT;break}case W.NOFRAMES:case W.STYLE:{Z._switchToTextParsing(X,n.RAWTEXT);break}case W.SCRIPT:{Z._switchToTextParsing(X,n.SCRIPT_DATA);break}case W.TEMPLATE:{Z._insertTemplate(X),Z.activeFormattingElements.insertMarker(),Z.framesetOk=!1,Z.insertionMode=z.IN_TEMPLATE,Z.tmplInsertionModeStack.unshift(z.IN_TEMPLATE);break}case W.HEAD:{Z._err(X,L.misplacedStartTagForHeadElement);break}default:B1(Z,X)}}function tX(Z,X){switch(X.tagID){case W.HEAD:{Z.openElements.pop(),Z.insertionMode=z.AFTER_HEAD;break}case W.BODY:case W.BR:case W.HTML:{B1(Z,X);break}case W.TEMPLATE:{I0(Z,X);break}default:Z._err(X,L.endTagWithoutMatchingOpenElement)}}function I0(Z,X){if(Z.openElements.tmplCount>0){if(Z.openElements.generateImpliedEndTagsThoroughly(),Z.openElements.currentTagId!==W.TEMPLATE)Z._err(X,L.closingOfElementWithOpenChildElements);Z.openElements.popUntilTagNamePopped(W.TEMPLATE),Z.activeFormattingElements.clearToLastMarker(),Z.tmplInsertionModeStack.shift(),Z._resetInsertionMode()}else Z._err(X,L.endTagWithoutMatchingOpenElement)}function B1(Z,X){Z.openElements.pop(),Z.insertionMode=z.AFTER_HEAD,Z._processToken(X)}function eX(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.BASEFONT:case W.BGSOUND:case W.HEAD:case W.LINK:case W.META:case W.NOFRAMES:case W.STYLE:{w0(Z,X);break}case W.NOSCRIPT:{Z._err(X,L.nestedNoscriptInHead);break}default:L1(Z,X)}}function Z5(Z,X){switch(X.tagID){case W.NOSCRIPT:{Z.openElements.pop(),Z.insertionMode=z.IN_HEAD;break}case W.BR:{L1(Z,X);break}default:Z._err(X,L.endTagWithoutMatchingOpenElement)}}function L1(Z,X){let Q=X.type===S.EOF?L.openElementsLeftAfterEof:L.disallowedContentInNoscriptInHead;Z._err(X,Q),Z.openElements.pop(),Z.insertionMode=z.IN_HEAD,Z._processToken(X)}function X5(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.BODY:{Z._insertElement(X,P.HTML),Z.framesetOk=!1,Z.insertionMode=z.IN_BODY;break}case W.FRAMESET:{Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_FRAMESET;break}case W.BASE:case W.BASEFONT:case W.BGSOUND:case W.LINK:case W.META:case W.NOFRAMES:case W.SCRIPT:case W.STYLE:case W.TEMPLATE:case W.TITLE:{Z._err(X,L.abandonedHeadElementChild),Z.openElements.push(Z.headElement,W.HEAD),w0(Z,X),Z.openElements.remove(Z.headElement);break}case W.HEAD:{Z._err(X,L.misplacedStartTagForHeadElement);break}default:q1(Z,X)}}function Q5(Z,X){switch(X.tagID){case W.BODY:case W.HTML:case W.BR:{q1(Z,X);break}case W.TEMPLATE:{I0(Z,X);break}default:Z._err(X,L.endTagWithoutMatchingOpenElement)}}function q1(Z,X){Z._insertFakeElement(F.BODY,W.BODY),Z.insertionMode=z.IN_BODY,z4(Z,X)}function z4(Z,X){switch(X.type){case S.CHARACTER:{h3(Z,X);break}case S.WHITESPACE_CHARACTER:{C3(Z,X);break}case S.COMMENT:{M2(Z,X);break}case S.START_TAG:{t(Z,X);break}case S.END_TAG:{w4(Z,X);break}case S.EOF:{$3(Z,X);break}default:}}function C3(Z,X){Z._reconstructActiveFormattingElements(),Z._insertCharacters(X)}function h3(Z,X){Z._reconstructActiveFormattingElements(),Z._insertCharacters(X),Z.framesetOk=!1}function K5(Z,X){if(Z.openElements.tmplCount===0)Z.treeAdapter.adoptAttributes(Z.openElements.items[0],X.attrs)}function W5(Z,X){let Q=Z.openElements.tryPeekProperlyNestedBodyElement();if(Q&&Z.openElements.tmplCount===0)Z.framesetOk=!1,Z.treeAdapter.adoptAttributes(Q,X.attrs)}function Y5(Z,X){let Q=Z.openElements.tryPeekProperlyNestedBodyElement();if(Z.framesetOk&&Q)Z.treeAdapter.detachNode(Q),Z.openElements.popAllUpToHtmlElement(),Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_FRAMESET}function J5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML)}function V5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();if(Z.openElements.currentTagId!==void 0&&j1.has(Z.openElements.currentTagId))Z.openElements.pop();Z._insertElement(X,P.HTML)}function j5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML),Z.skipNextNewLine=!0,Z.framesetOk=!1}function H5(Z,X){let Q=Z.openElements.tmplCount>0;if(!Z.formElement||Q){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();if(Z._insertElement(X,P.HTML),!Q)Z.formElement=Z.openElements.current}}function z5(Z,X){Z.framesetOk=!1;let Q=X.tagID;for(let K=Z.openElements.stackTop;K>=0;K--){let Y=Z.openElements.tagIDs[K];if(Q===W.LI&&Y===W.LI||(Q===W.DD||Q===W.DT)&&(Y===W.DD||Y===W.DT)){Z.openElements.generateImpliedEndTagsWithExclusion(Y),Z.openElements.popUntilTagNamePopped(Y);break}if(Y!==W.ADDRESS&&Y!==W.DIV&&Y!==W.P&&Z._isSpecialElement(Z.openElements.items[K],Y))break}if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML)}function w5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML),Z.tokenizer.state=n.PLAINTEXT}function U5(Z,X){if(Z.openElements.hasInScope(W.BUTTON))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(W.BUTTON);Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.framesetOk=!1}function F5(Z,X){let Q=Z.activeFormattingElements.getElementEntryInScopeWithTagName(F.A);if(Q)D2(Z,X),Z.openElements.remove(Q.element),Z.activeFormattingElements.removeEntry(Q);Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,X)}function B5(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,X)}function L5(Z,X){if(Z._reconstructActiveFormattingElements(),Z.openElements.hasInScope(W.NOBR))D2(Z,X),Z._reconstructActiveFormattingElements();Z._insertElement(X,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,X)}function q5(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.activeFormattingElements.insertMarker(),Z.framesetOk=!1}function x5(Z,X){if(Z.treeAdapter.getDocumentMode(Z.document)!==Z0.QUIRKS&&Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML),Z.framesetOk=!1,Z.insertionMode=z.IN_TABLE}function M3(Z,X){Z._reconstructActiveFormattingElements(),Z._appendElement(X,P.HTML),Z.framesetOk=!1,X.ackSelfClosing=!0}function N3(Z){let X=X4(Z,P0.TYPE);return X!=null&&X.toLowerCase()===kX}function P5(Z,X){if(Z._reconstructActiveFormattingElements(),Z._appendElement(X,P.HTML),!N3(X))Z.framesetOk=!1;X.ackSelfClosing=!0}function f5(Z,X){Z._appendElement(X,P.HTML),X.ackSelfClosing=!0}function y5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._appendElement(X,P.HTML),Z.framesetOk=!1,X.ackSelfClosing=!0}function O5(Z,X){X.tagName=F.IMG,X.tagID=W.IMG,M3(Z,X)}function b5(Z,X){Z._insertElement(X,P.HTML),Z.skipNextNewLine=!0,Z.tokenizer.state=n.RCDATA,Z.originalInsertionMode=Z.insertionMode,Z.framesetOk=!1,Z.insertionMode=z.TEXT}function v5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._reconstructActiveFormattingElements(),Z.framesetOk=!1,Z._switchToTextParsing(X,n.RAWTEXT)}function R5(Z,X){Z.framesetOk=!1,Z._switchToTextParsing(X,n.RAWTEXT)}function b3(Z,X){Z._switchToTextParsing(X,n.RAWTEXT)}function C5(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.framesetOk=!1,Z.insertionMode=Z.insertionMode===z.IN_TABLE||Z.insertionMode===z.IN_CAPTION||Z.insertionMode===z.IN_TABLE_BODY||Z.insertionMode===z.IN_ROW||Z.insertionMode===z.IN_CELL?z.IN_SELECT_IN_TABLE:z.IN_SELECT}function h5(Z,X){if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML)}function M5(Z,X){if(Z.openElements.hasInScope(W.RUBY))Z.openElements.generateImpliedEndTags();Z._insertElement(X,P.HTML)}function N5(Z,X){if(Z.openElements.hasInScope(W.RUBY))Z.openElements.generateImpliedEndTagsWithExclusion(W.RTC);Z._insertElement(X,P.HTML)}function D5(Z,X){if(Z._reconstructActiveFormattingElements(),R2(X),Y4(X),X.selfClosing)Z._appendElement(X,P.MATHML);else Z._insertElement(X,P.MATHML);X.ackSelfClosing=!0}function $5(Z,X){if(Z._reconstructActiveFormattingElements(),C2(X),Y4(X),X.selfClosing)Z._appendElement(X,P.SVG);else Z._insertElement(X,P.SVG);X.ackSelfClosing=!0}function v3(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML)}function t(Z,X){switch(X.tagID){case W.I:case W.S:case W.B:case W.U:case W.EM:case W.TT:case W.BIG:case W.CODE:case W.FONT:case W.SMALL:case W.STRIKE:case W.STRONG:{B5(Z,X);break}case W.A:{F5(Z,X);break}case W.H1:case W.H2:case W.H3:case W.H4:case W.H5:case W.H6:{V5(Z,X);break}case W.P:case W.DL:case W.OL:case W.UL:case W.DIV:case W.DIR:case W.NAV:case W.MAIN:case W.MENU:case W.ASIDE:case W.CENTER:case W.FIGURE:case W.FOOTER:case W.HEADER:case W.HGROUP:case W.DIALOG:case W.DETAILS:case W.ADDRESS:case W.ARTICLE:case W.SEARCH:case W.SECTION:case W.SUMMARY:case W.FIELDSET:case W.BLOCKQUOTE:case W.FIGCAPTION:{J5(Z,X);break}case W.LI:case W.DD:case W.DT:{z5(Z,X);break}case W.BR:case W.IMG:case W.WBR:case W.AREA:case W.EMBED:case W.KEYGEN:{M3(Z,X);break}case W.HR:{y5(Z,X);break}case W.RB:case W.RTC:{M5(Z,X);break}case W.RT:case W.RP:{N5(Z,X);break}case W.PRE:case W.LISTING:{j5(Z,X);break}case W.XMP:{v5(Z,X);break}case W.SVG:{$5(Z,X);break}case W.HTML:{K5(Z,X);break}case W.BASE:case W.LINK:case W.META:case W.STYLE:case W.TITLE:case W.SCRIPT:case W.BGSOUND:case W.BASEFONT:case W.TEMPLATE:{w0(Z,X);break}case W.BODY:{W5(Z,X);break}case W.FORM:{H5(Z,X);break}case W.NOBR:{L5(Z,X);break}case W.MATH:{D5(Z,X);break}case W.TABLE:{x5(Z,X);break}case W.INPUT:{P5(Z,X);break}case W.PARAM:case W.TRACK:case W.SOURCE:{f5(Z,X);break}case W.IMAGE:{O5(Z,X);break}case W.BUTTON:{U5(Z,X);break}case W.APPLET:case W.OBJECT:case W.MARQUEE:{q5(Z,X);break}case W.IFRAME:{R5(Z,X);break}case W.SELECT:{C5(Z,X);break}case W.OPTION:case W.OPTGROUP:{h5(Z,X);break}case W.NOEMBED:case W.NOFRAMES:{b3(Z,X);break}case W.FRAMESET:{Y5(Z,X);break}case W.TEXTAREA:{b5(Z,X);break}case W.NOSCRIPT:{if(Z.options.scriptingEnabled)b3(Z,X);else v3(Z,X);break}case W.PLAINTEXT:{w5(Z,X);break}case W.COL:case W.TH:case W.TD:case W.TR:case W.HEAD:case W.FRAME:case W.TBODY:case W.TFOOT:case W.THEAD:case W.CAPTION:case W.COLGROUP:break;default:v3(Z,X)}}function g5(Z,X){if(Z.openElements.hasInScope(W.BODY)){if(Z.insertionMode=z.AFTER_BODY,Z.options.sourceCodeLocationInfo){let Q=Z.openElements.tryPeekProperlyNestedBodyElement();if(Q)Z._setEndLocation(Q,X)}}}function G5(Z,X){if(Z.openElements.hasInScope(W.BODY))Z.insertionMode=z.AFTER_BODY,I3(Z,X)}function E5(Z,X){let Q=X.tagID;if(Z.openElements.hasInScope(Q))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(Q)}function m5(Z){let X=Z.openElements.tmplCount>0,{formElement:Q}=Z;if(!X)Z.formElement=null;if((Q||X)&&Z.openElements.hasInScope(W.FORM)){if(Z.openElements.generateImpliedEndTags(),X)Z.openElements.popUntilTagNamePopped(W.FORM);else if(Q)Z.openElements.remove(Q)}}function k5(Z){if(!Z.openElements.hasInButtonScope(W.P))Z._insertFakeElement(F.P,W.P);Z._closePElement()}function _5(Z){if(Z.openElements.hasInListItemScope(W.LI))Z.openElements.generateImpliedEndTagsWithExclusion(W.LI),Z.openElements.popUntilTagNamePopped(W.LI)}function S5(Z,X){let Q=X.tagID;if(Z.openElements.hasInScope(Q))Z.openElements.generateImpliedEndTagsWithExclusion(Q),Z.openElements.popUntilTagNamePopped(Q)}function I5(Z){if(Z.openElements.hasNumberedHeaderInScope())Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilNumberedHeaderPopped()}function T5(Z,X){let Q=X.tagID;if(Z.openElements.hasInScope(Q))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(Q),Z.activeFormattingElements.clearToLastMarker()}function A5(Z){Z._reconstructActiveFormattingElements(),Z._insertFakeElement(F.BR,W.BR),Z.openElements.pop(),Z.framesetOk=!1}function D3(Z,X){let{tagName:Q,tagID:K}=X;for(let Y=Z.openElements.stackTop;Y>0;Y--){let J=Z.openElements.items[Y],H=Z.openElements.tagIDs[Y];if(K===H&&(K!==W.UNKNOWN||Z.treeAdapter.getTagName(J)===Q)){if(Z.openElements.generateImpliedEndTagsWithExclusion(K),Z.openElements.stackTop>=Y)Z.openElements.shortenToLength(Y);break}if(Z._isSpecialElement(J,H))break}}function w4(Z,X){switch(X.tagID){case W.A:case W.B:case W.I:case W.S:case W.U:case W.EM:case W.TT:case W.BIG:case W.CODE:case W.FONT:case W.NOBR:case W.SMALL:case W.STRIKE:case W.STRONG:{D2(Z,X);break}case W.P:{k5(Z);break}case W.DL:case W.UL:case W.OL:case W.DIR:case W.DIV:case W.NAV:case W.PRE:case W.MAIN:case W.MENU:case W.ASIDE:case W.BUTTON:case W.CENTER:case W.FIGURE:case W.FOOTER:case W.HEADER:case W.HGROUP:case W.DIALOG:case W.ADDRESS:case W.ARTICLE:case W.DETAILS:case W.SEARCH:case W.SECTION:case W.SUMMARY:case W.LISTING:case W.FIELDSET:case W.BLOCKQUOTE:case W.FIGCAPTION:{E5(Z,X);break}case W.LI:{_5(Z);break}case W.DD:case W.DT:{S5(Z,X);break}case W.H1:case W.H2:case W.H3:case W.H4:case W.H5:case W.H6:{I5(Z);break}case W.BR:{A5(Z);break}case W.BODY:{g5(Z,X);break}case W.HTML:{G5(Z,X);break}case W.FORM:{m5(Z);break}case W.APPLET:case W.OBJECT:case W.MARQUEE:{T5(Z,X);break}case W.TEMPLATE:{I0(Z,X);break}default:D3(Z,X)}}function $3(Z,X){if(Z.tmplInsertionModeStack.length>0)S3(Z,X);else $2(Z,X)}function u5(Z,X){var Q;if(X.tagID===W.SCRIPT)(Q=Z.scriptHandler)===null||Q===void 0||Q.call(Z,Z.openElements.current);Z.openElements.pop(),Z.insertionMode=Z.originalInsertionMode}function c5(Z,X){Z._err(X,L.eofInElementThatCanContainOnlyText),Z.openElements.pop(),Z.insertionMode=Z.originalInsertionMode,Z.onEof(X)}function h2(Z,X){if(Z.openElements.currentTagId!==void 0&&R3.has(Z.openElements.currentTagId))switch(Z.pendingCharacterTokens.length=0,Z.hasNonWhitespacePendingCharacterToken=!1,Z.originalInsertionMode=Z.insertionMode,Z.insertionMode=z.IN_TABLE_TEXT,X.type){case S.CHARACTER:{G3(Z,X);break}case S.WHITESPACE_CHARACTER:{g3(Z,X);break}}else P1(Z,X)}function l5(Z,X){Z.openElements.clearBackToTableContext(),Z.activeFormattingElements.insertMarker(),Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_CAPTION}function d5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_COLUMN_GROUP}function i5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertFakeElement(F.COLGROUP,W.COLGROUP),Z.insertionMode=z.IN_COLUMN_GROUP,g2(Z,X)}function a5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_TABLE_BODY}function p5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertFakeElement(F.TBODY,W.TBODY),Z.insertionMode=z.IN_TABLE_BODY,U4(Z,X)}function s5(Z,X){if(Z.openElements.hasInTableScope(W.TABLE))Z.openElements.popUntilTagNamePopped(W.TABLE),Z._resetInsertionMode(),Z._processStartTag(X)}function r5(Z,X){if(N3(X))Z._appendElement(X,P.HTML);else P1(Z,X);X.ackSelfClosing=!0}function o5(Z,X){if(!Z.formElement&&Z.openElements.tmplCount===0)Z._insertElement(X,P.HTML),Z.formElement=Z.openElements.current,Z.openElements.pop()}function a0(Z,X){switch(X.tagID){case W.TD:case W.TH:case W.TR:{p5(Z,X);break}case W.STYLE:case W.SCRIPT:case W.TEMPLATE:{w0(Z,X);break}case W.COL:{i5(Z,X);break}case W.FORM:{o5(Z,X);break}case W.TABLE:{s5(Z,X);break}case W.TBODY:case W.TFOOT:case W.THEAD:{a5(Z,X);break}case W.INPUT:{r5(Z,X);break}case W.CAPTION:{l5(Z,X);break}case W.COLGROUP:{d5(Z,X);break}default:P1(Z,X)}}function x1(Z,X){switch(X.tagID){case W.TABLE:{if(Z.openElements.hasInTableScope(W.TABLE))Z.openElements.popUntilTagNamePopped(W.TABLE),Z._resetInsertionMode();break}case W.TEMPLATE:{I0(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:case W.TBODY:case W.TD:case W.TFOOT:case W.TH:case W.THEAD:case W.TR:break;default:P1(Z,X)}}function P1(Z,X){let Q=Z.fosterParentingEnabled;Z.fosterParentingEnabled=!0,z4(Z,X),Z.fosterParentingEnabled=Q}function g3(Z,X){Z.pendingCharacterTokens.push(X)}function G3(Z,X){Z.pendingCharacterTokens.push(X),Z.hasNonWhitespacePendingCharacterToken=!0}function w1(Z,X){let Q=0;if(Z.hasNonWhitespacePendingCharacterToken)for(;Q<Z.pendingCharacterTokens.length;Q++)P1(Z,Z.pendingCharacterTokens[Q]);else for(;Q<Z.pendingCharacterTokens.length;Q++)Z._insertCharacters(Z.pendingCharacterTokens[Q]);Z.insertionMode=Z.originalInsertionMode,Z._processToken(X)}var E3=new Set([W.CAPTION,W.COL,W.COLGROUP,W.TBODY,W.TD,W.TFOOT,W.TH,W.THEAD,W.TR]);function n5(Z,X){let Q=X.tagID;if(E3.has(Q)){if(Z.openElements.hasInTableScope(W.CAPTION))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(W.CAPTION),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=z.IN_TABLE,a0(Z,X)}else t(Z,X)}function t5(Z,X){let Q=X.tagID;switch(Q){case W.CAPTION:case W.TABLE:{if(Z.openElements.hasInTableScope(W.CAPTION)){if(Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(W.CAPTION),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=z.IN_TABLE,Q===W.TABLE)x1(Z,X)}break}case W.BODY:case W.COL:case W.COLGROUP:case W.HTML:case W.TBODY:case W.TD:case W.TFOOT:case W.TH:case W.THEAD:case W.TR:break;default:w4(Z,X)}}function g2(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.COL:{Z._appendElement(X,P.HTML),X.ackSelfClosing=!0;break}case W.TEMPLATE:{w0(Z,X);break}default:V4(Z,X)}}function e5(Z,X){switch(X.tagID){case W.COLGROUP:{if(Z.openElements.currentTagId===W.COLGROUP)Z.openElements.pop(),Z.insertionMode=z.IN_TABLE;break}case W.TEMPLATE:{I0(Z,X);break}case W.COL:break;default:V4(Z,X)}}function V4(Z,X){if(Z.openElements.currentTagId===W.COLGROUP)Z.openElements.pop(),Z.insertionMode=z.IN_TABLE,Z._processToken(X)}function U4(Z,X){switch(X.tagID){case W.TR:{Z.openElements.clearBackToTableBodyContext(),Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_ROW;break}case W.TH:case W.TD:{Z.openElements.clearBackToTableBodyContext(),Z._insertFakeElement(F.TR,W.TR),Z.insertionMode=z.IN_ROW,F4(Z,X);break}case W.CAPTION:case W.COL:case W.COLGROUP:case W.TBODY:case W.TFOOT:case W.THEAD:{if(Z.openElements.hasTableBodyContextInTableScope())Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE,a0(Z,X);break}default:a0(Z,X)}}function N2(Z,X){let Q=X.tagID;switch(X.tagID){case W.TBODY:case W.TFOOT:case W.THEAD:{if(Z.openElements.hasInTableScope(Q))Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE;break}case W.TABLE:{if(Z.openElements.hasTableBodyContextInTableScope())Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE,x1(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:case W.TD:case W.TH:case W.TR:break;default:x1(Z,X)}}function F4(Z,X){switch(X.tagID){case W.TH:case W.TD:{Z.openElements.clearBackToTableRowContext(),Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_CELL,Z.activeFormattingElements.insertMarker();break}case W.CAPTION:case W.COL:case W.COLGROUP:case W.TBODY:case W.TFOOT:case W.THEAD:case W.TR:{if(Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE_BODY,U4(Z,X);break}default:a0(Z,X)}}function m3(Z,X){switch(X.tagID){case W.TR:{if(Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE_BODY;break}case W.TABLE:{if(Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE_BODY,N2(Z,X);break}case W.TBODY:case W.TFOOT:case W.THEAD:{if(Z.openElements.hasInTableScope(X.tagID)||Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE_BODY,N2(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:case W.TD:case W.TH:break;default:x1(Z,X)}}function ZQ(Z,X){let Q=X.tagID;if(E3.has(Q)){if(Z.openElements.hasInTableScope(W.TD)||Z.openElements.hasInTableScope(W.TH))Z._closeTableCell(),F4(Z,X)}else t(Z,X)}function XQ(Z,X){let Q=X.tagID;switch(Q){case W.TD:case W.TH:{if(Z.openElements.hasInTableScope(Q))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(Q),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=z.IN_ROW;break}case W.TABLE:case W.TBODY:case W.TFOOT:case W.THEAD:case W.TR:{if(Z.openElements.hasInTableScope(Q))Z._closeTableCell(),m3(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:break;default:w4(Z,X)}}function k3(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.OPTION:{if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();Z._insertElement(X,P.HTML);break}case W.OPTGROUP:{if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();if(Z.openElements.currentTagId===W.OPTGROUP)Z.openElements.pop();Z._insertElement(X,P.HTML);break}case W.HR:{if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();if(Z.openElements.currentTagId===W.OPTGROUP)Z.openElements.pop();Z._appendElement(X,P.HTML),X.ackSelfClosing=!0;break}case W.INPUT:case W.KEYGEN:case W.TEXTAREA:case W.SELECT:{if(Z.openElements.hasInSelectScope(W.SELECT)){if(Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode(),X.tagID!==W.SELECT)Z._processStartTag(X)}break}case W.SCRIPT:case W.TEMPLATE:{w0(Z,X);break}default:}}function _3(Z,X){switch(X.tagID){case W.OPTGROUP:{if(Z.openElements.stackTop>0&&Z.openElements.currentTagId===W.OPTION&&Z.openElements.tagIDs[Z.openElements.stackTop-1]===W.OPTGROUP)Z.openElements.pop();if(Z.openElements.currentTagId===W.OPTGROUP)Z.openElements.pop();break}case W.OPTION:{if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();break}case W.SELECT:{if(Z.openElements.hasInSelectScope(W.SELECT))Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode();break}case W.TEMPLATE:{I0(Z,X);break}default:}}function QQ(Z,X){let Q=X.tagID;if(Q===W.CAPTION||Q===W.TABLE||Q===W.TBODY||Q===W.TFOOT||Q===W.THEAD||Q===W.TR||Q===W.TD||Q===W.TH)Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode(),Z._processStartTag(X);else k3(Z,X)}function KQ(Z,X){let Q=X.tagID;if(Q===W.CAPTION||Q===W.TABLE||Q===W.TBODY||Q===W.TFOOT||Q===W.THEAD||Q===W.TR||Q===W.TD||Q===W.TH){if(Z.openElements.hasInTableScope(Q))Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode(),Z.onEndTag(X)}else _3(Z,X)}function WQ(Z,X){switch(X.tagID){case W.BASE:case W.BASEFONT:case W.BGSOUND:case W.LINK:case W.META:case W.NOFRAMES:case W.SCRIPT:case W.STYLE:case W.TEMPLATE:case W.TITLE:{w0(Z,X);break}case W.CAPTION:case W.COLGROUP:case W.TBODY:case W.TFOOT:case W.THEAD:{Z.tmplInsertionModeStack[0]=z.IN_TABLE,Z.insertionMode=z.IN_TABLE,a0(Z,X);break}case W.COL:{Z.tmplInsertionModeStack[0]=z.IN_COLUMN_GROUP,Z.insertionMode=z.IN_COLUMN_GROUP,g2(Z,X);break}case W.TR:{Z.tmplInsertionModeStack[0]=z.IN_TABLE_BODY,Z.insertionMode=z.IN_TABLE_BODY,U4(Z,X);break}case W.TD:case W.TH:{Z.tmplInsertionModeStack[0]=z.IN_ROW,Z.insertionMode=z.IN_ROW,F4(Z,X);break}default:Z.tmplInsertionModeStack[0]=z.IN_BODY,Z.insertionMode=z.IN_BODY,t(Z,X)}}function YQ(Z,X){if(X.tagID===W.TEMPLATE)I0(Z,X)}function S3(Z,X){if(Z.openElements.tmplCount>0)Z.openElements.popUntilTagNamePopped(W.TEMPLATE),Z.activeFormattingElements.clearToLastMarker(),Z.tmplInsertionModeStack.shift(),Z._resetInsertionMode(),Z.onEof(X);else $2(Z,X)}function JQ(Z,X){if(X.tagID===W.HTML)t(Z,X);else j4(Z,X)}function I3(Z,X){var Q;if(X.tagID===W.HTML){if(!Z.fragmentContext)Z.insertionMode=z.AFTER_AFTER_BODY;if(Z.options.sourceCodeLocationInfo&&Z.openElements.tagIDs[0]===W.HTML){Z._setEndLocation(Z.openElements.items[0],X);let K=Z.openElements.items[1];if(K&&!((Q=Z.treeAdapter.getNodeSourceCodeLocation(K))===null||Q===void 0?void 0:Q.endTag))Z._setEndLocation(K,X)}}else j4(Z,X)}function j4(Z,X){Z.insertionMode=z.IN_BODY,z4(Z,X)}function VQ(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.FRAMESET:{Z._insertElement(X,P.HTML);break}case W.FRAME:{Z._appendElement(X,P.HTML),X.ackSelfClosing=!0;break}case W.NOFRAMES:{w0(Z,X);break}default:}}function jQ(Z,X){if(X.tagID===W.FRAMESET&&!Z.openElements.isRootHtmlElementCurrent()){if(Z.openElements.pop(),!Z.fragmentContext&&Z.openElements.currentTagId!==W.FRAMESET)Z.insertionMode=z.AFTER_FRAMESET}}function HQ(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.NOFRAMES:{w0(Z,X);break}default:}}function zQ(Z,X){if(X.tagID===W.HTML)Z.insertionMode=z.AFTER_AFTER_FRAMESET}function wQ(Z,X){if(X.tagID===W.HTML)t(Z,X);else J4(Z,X)}function J4(Z,X){Z.insertionMode=z.IN_BODY,z4(Z,X)}function UQ(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.NOFRAMES:{w0(Z,X);break}default:}}function FQ(Z,X){X.chars=u,Z._insertCharacters(X)}function BQ(Z,X){Z._insertCharacters(X),Z.framesetOk=!1}function T3(Z){while(Z.treeAdapter.getNamespaceURI(Z.openElements.current)!==P.HTML&&Z.openElements.currentTagId!==void 0&&!Z._isIntegrationPoint(Z.openElements.currentTagId,Z.openElements.current))Z.openElements.pop()}function LQ(Z,X){if(x3(X))T3(Z),Z._startTagOutsideForeignContent(X);else{let Q=Z._getAdjustedCurrentElement(),K=Z.treeAdapter.getNamespaceURI(Q);if(K===P.MATHML)R2(X);else if(K===P.SVG)P3(X),C2(X);if(Y4(X),X.selfClosing)Z._appendElement(X,K);else Z._insertElement(X,K);X.ackSelfClosing=!0}}function qQ(Z,X){if(X.tagID===W.P||X.tagID===W.BR){T3(Z),Z._endTagOutsideForeignContent(X);return}for(let Q=Z.openElements.stackTop;Q>0;Q--){let K=Z.openElements.items[Q];if(Z.treeAdapter.getNamespaceURI(K)===P.HTML){Z._endTagOutsideForeignContent(X);break}let Y=Z.treeAdapter.getTagName(K);if(Y.toLowerCase()===X.tagName){X.tagName=Y,Z.openElements.shortenToLength(Q);break}}}var cV=typeof String.prototype.codePointAt==="function"?(Z,X)=>Z.codePointAt(X):(Z,X)=>(Z.charCodeAt(X)&64512)===55296?(Z.charCodeAt(X)-55296)*1024+Z.charCodeAt(X+1)-56320+65536:Z.charCodeAt(X);function A3(Z,X){return function(K){let Y,J=0,H="";while(Y=Z.exec(K)){if(J!==Y.index)H+=K.substring(J,Y.index);H+=X.get(Y[0].charCodeAt(0)),J=Y.index+1}return H+K.substring(J)}}var u3=A3(/["&\u00A0]/g,new Map([[34,"&quot;"],[38,"&amp;"],[160,"&nbsp;"]])),c3=A3(/[&<>\u00A0]/g,new Map([[38,"&amp;"],[60,"&lt;"],[62,"&gt;"],[160,"&nbsp;"]]));var xQ=new Set([F.AREA,F.BASE,F.BASEFONT,F.BGSOUND,F.BR,F.COL,F.EMBED,F.FRAME,F.HR,F.IMG,F.INPUT,F.KEYGEN,F.LINK,F.META,F.PARAM,F.SOURCE,F.TRACK,F.WBR]);function l3(Z,X){return X.treeAdapter.isElementNode(Z)&&X.treeAdapter.getNamespaceURI(Z)===P.HTML&&xQ.has(X.treeAdapter.getTagName(Z))}var PQ={treeAdapter:J0,scriptingEnabled:!0};function p0(Z,X){let Q={...PQ,...X};if(l3(Z,Q))return"";return d3(Z,Q)}function d3(Z,X){let Q="",K=X.treeAdapter.isElementNode(Z)&&X.treeAdapter.getTagName(Z)===F.TEMPLATE&&X.treeAdapter.getNamespaceURI(Z)===P.HTML?X.treeAdapter.getTemplateContent(Z):Z,Y=X.treeAdapter.getChildNodes(K);if(Y)for(let J of Y)Q+=fQ(J,X);return Q}function fQ(Z,X){if(X.treeAdapter.isElementNode(Z))return yQ(Z,X);if(X.treeAdapter.isTextNode(Z))return bQ(Z,X);if(X.treeAdapter.isCommentNode(Z))return vQ(Z,X);if(X.treeAdapter.isDocumentTypeNode(Z))return RQ(Z,X);return""}function yQ(Z,X){let Q=X.treeAdapter.getTagName(Z);return`<${Q}${OQ(Z,X)}>${l3(Z,X)?"":`${d3(Z,X)}</${Q}>`}`}function OQ(Z,{treeAdapter:X}){let Q="";for(let K of X.getAttrList(Z)){if(Q+=" ",K.namespace)switch(K.namespace){case P.XML:{Q+=`xml:${K.name}`;break}case P.XMLNS:{if(K.name!=="xmlns")Q+="xmlns:";Q+=K.name;break}case P.XLINK:{Q+=`xlink:${K.name}`;break}default:Q+=`${K.prefix}:${K.name}`}else Q+=K.name;Q+=`="${u3(K.value)}"`}return Q}function bQ(Z,X){let{treeAdapter:Q}=X,K=Q.getTextNodeContent(Z),Y=Q.getParentNode(Z),J=Y&&Q.isElementNode(Y)&&Q.getTagName(Y);return J&&Q.getNamespaceURI(Y)===P.HTML&&X3(J,X.scriptingEnabled)?K:c3(K)}function vQ(Z,{treeAdapter:X}){return`<!--${X.getCommentNodeContent(Z)}-->`}function RQ(Z,{treeAdapter:X}){return`<!DOCTYPE ${X.getDocumentTypeNodeName(Z)}>`}function f1(Z,X){return H4.parse(Z,X)}import{z as R}from"zod";import*as s0 from"css-tree";var y1=20971520,CQ=new Set(["script","form","iframe","frame","frameset","object","embed","portal","base","audio","video","source","track","noscript","animate","animatemotion","animatetransform","discard","set"]),hQ=new Set(["action","cite","data","formaction","href","ping","poster","src","srcset","xlink:href"]),G2=/^data:(?:image\/(?:png|jpe?g|gif|webp|avif|bmp|x-icon)|font\/[a-z0-9.+-]+|application\/(?:font-[a-z0-9.+-]+|vnd\.ms-fontobject|x-font-[a-z0-9.+-]+));/i,MQ=new Set(["date","datetime-local","email","month","number","password","search","tel","text","time","url","week"]);function NQ(Z){return"tagName"in Z}function i3(Z,X){return Z.attrs.find((Q)=>Q.name.toLowerCase()===X.toLowerCase())?.value??null}function N0(Z,X,Q){let K=Z.attrs.find((Y)=>Y.name.toLowerCase()===X.toLowerCase());if(K)K.value=Q;else Z.attrs.push({name:X,value:Q})}function a3(Z){try{let X=s0.parse(Z,{context:"stylesheet",parseCustomProperty:!0,positions:!1});return s0.walk(X,{enter(Q,K,Y){if(Q.type==="Atrule"&&Q.name.toLowerCase()==="import"){Y.remove(K);return}if(Q.type==="Declaration"){let J=Q.property.toLowerCase();if(J==="behavior"||J==="-moz-binding")Y.remove(K);return}if(Q.type==="Url"&&!G2.test(Q.value)){Q.value="data:,";return}if(Q.type==="String"&&this.function&&["image-set","-webkit-image-set","src"].includes(this.function.name.toLowerCase())&&!G2.test(Q.value))Q.value="data:,"}}),s0.generate(X)}catch{return""}}function DQ(Z){return a3(`x{${Z}}`).replace(/^x\{/,"").replace(/\}$/,"")}function $Q(Z){Z.attrs=Z.attrs.flatMap((Q)=>{let K=Q.name.toLowerCase();if(K.startsWith("on")||K==="srcdoc"||K==="nonce")return[];if(K==="style"){let Y=DQ(Q.value);return Y?[{...Q,value:Y}]:[]}if(hQ.has(K)){if(K==="src"&&G2.test(Q.value))return[Q];if(K==="href"&&Q.value.startsWith("#"))return[Q];return[]}if(K==="target"||K==="download"||K==="http-equiv")return[];return[Q]});let X=Z.tagName.toLowerCase();if(X==="textarea"||X==="input"&&MQ.has((i3(Z,"type")??"text").toLowerCase()))N0(Z,"readonly",""),N0(Z,"aria-readonly","true"),N0(Z,"tabindex","-1");else if(X==="button"||X==="select"||X==="input")N0(Z,"disabled",""),N0(Z,"aria-disabled","true"),N0(Z,"tabindex","-1");if(i3(Z,"contenteditable")!==null)N0(Z,"contenteditable","false"),N0(Z,"tabindex","-1");if(Z.tagName==="style"&&Z.childNodes){for(let Q of Z.childNodes)if("value"in Q&&typeof Q.value==="string")Q.value=a3(Q.value)}}function p3(Z){let X=[];for(let Q of Z.childNodes){if(NQ(Q)){let K=Q.tagName.toLowerCase();if(CQ.has(K))continue;if(K==="meta"&&Q.attrs.some((Y)=>Y.name.toLowerCase()==="http-equiv"&&Y.value.toLowerCase()!=="content-type"))continue;if(K==="link")continue;$Q(Q),p3(Q)}X.push(Q)}Z.childNodes=X}function s3(Z){if(Buffer.byteLength(Z,"utf8")>y1)throw Error("Browser snapshot exceeds the 20 MiB limit");let X=f1(Z);p3(X);let Q=p0(X);if(Buffer.byteLength(Q,"utf8")>y1)throw Error("Sanitized browser snapshot exceeds the 20 MiB limit");return Q}import*as r0 from"css-tree";function gQ(Z,X){if(!Z||Z.startsWith("#"))return Z;try{let Q=new URL(Z,X);if(Q.protocol!=="http:"&&Q.protocol!=="https:")return null;if(Q.username||Q.password)return null;return Q.href}catch{return null}}function r3(Z){try{let X=r0.parse(Z.css,{context:"stylesheet",parseCustomProperty:!0,positions:!1});return r0.walk(X,{enter(Q,K,Y){if(Q.type==="Atrule"&&Q.name.toLowerCase()==="import"){if(K&&Y)Y.remove(K);return}if(Q.type==="Declaration"){let H=Q.property.toLowerCase();if(H==="behavior"||H==="-moz-binding"){if(K&&Y)Y.remove(K)}return}if(Q.type!=="Url")return;let J=gQ(Q.value,Z.baseUrl);if(J&&!J.startsWith("#"))Q.value=Z.resourceUrl(J);else if(!J)Q.value="data:,"}}),r0.generate(X)}catch{return""}}var EQ=1200000,mQ=200,o3=8,kQ=65536,n3="ideawave-frame",_Q=R.object({browserNodeId:R.string().uuid(),url:R.string().max(4000)}).strict(),SQ=R.object({proxySessionId:R.string().uuid()}).strict(),IQ=R.object({proxySessionId:R.string().uuid(),revision:R.string().min(1).max(200),html:R.string().max(y1).optional()}).strict(),TQ=R.object({exact:R.string().min(1).max(2000),prefix:R.string().max(500).optional(),suffix:R.string().max(500).optional()}).strict(),E2=R.union([R.object({ref:R.string().min(1).max(200)}).strict(),R.object({selector:R.string().min(1).max(2000).nullable(),textQuote:TQ.nullable().optional(),framePath:R.array(R.string().max(1000)).max(12).optional()}).strict().refine((Z)=>Boolean(Z.selector||Z.textQuote),{message:"A selector or text quote is required"})]),AQ=R.discriminatedUnion("type",[R.object({type:R.literal("inspect")}).strict(),R.object({type:R.literal("locate"),target:E2}).strict(),R.object({type:R.literal("click"),target:E2}).strict(),R.object({type:R.literal("scroll"),deltaY:R.number().finite().min(-1e5).max(1e5).optional(),left:R.number().finite().min(0).max(1e7).optional(),top:R.number().finite().min(0).max(1e7).optional()}).strict(),R.object({type:R.literal("find"),query:R.string().max(500),direction:R.enum(["forward","backward"]).optional()}).strict(),R.object({type:R.literal("refresh")}).strict(),R.object({type:R.literal("back")}).strict(),R.object({type:R.literal("forward")}).strict(),R.object({type:R.literal("navigate"),url:R.string().max(4000)}).strict(),R.object({type:R.literal("highlight"),target:E2,color:R.string().regex(/^#[0-9a-fA-F]{6}$/)}).strict(),R.object({type:R.literal("selection")}).strict(),R.object({type:R.literal("snapshot")}).strict()]),uQ=R.object({type:R.literal("pointer"),phase:R.enum(["move","down","up"]),x:R.number().finite().min(0).max(2048),y:R.number().finite().min(0).max(2048),button:R.enum(["left","middle","right"]).optional(),buttons:R.number().int().min(0).max(31).optional()}).strict(),cQ=R.object({events:R.array(R.discriminatedUnion("type",[uQ,R.object({type:R.literal("wheel"),deltaX:R.number().finite().min(-1e5).max(1e5),deltaY:R.number().finite().min(-1e5).max(1e5)}).strict(),R.object({type:R.literal("key"),phase:R.enum(["down","up"]),key:R.string().min(1).max(64)}).strict(),R.object({type:R.literal("text"),text:R.string().max(5000)}).strict()])).max(64)}).strict(),lQ=R.object({width:R.number().finite().min(1).max(16384),height:R.number().finite().min(1).max(16384)}).strict();function dQ(){return S2(18).toString("hex")}function iQ(Z){if(!Z)return"";if(Z.startsWith("["))return Z.slice(1,Z.indexOf("]"));return Z.split(":")[0]?.toLowerCase()??""}function t3(Z){return typeof Z==="string"?Z:void 0}function aQ(Z){let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:"||X.username||X.password)throw Error("Browser proxy frontend origin is invalid");return X.origin}function pQ(Z){return Z.replace(/[&<>"']/g,(X)=>{if(X==="&")return"&amp;";if(X==="<")return"&lt;";if(X===">")return"&gt;";if(X==='"')return"&quot;";return"&#39;"})}function m2(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function sQ(Z){let X=m2(Z.bridgeToken),Q=m2(Z.frontendOrigin),Y=`session=${encodeURIComponent(Z.sessionId)}&token=${encodeURIComponent(Z.bridgeToken)}`,J=pQ(Z.cspNonce);return`<!doctype html><html><head><meta charset="utf-8"><meta name="color-scheme" content="light"><style nonce="${J}">*{box-sizing:border-box}html,body,#surface,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden}body{background:#fff}#surface{position:relative;outline:0;touch-action:none;user-select:none}#view{display:block;object-fit:fill;pointer-events:none}#status{position:absolute;inset:auto 12px 12px;padding:8px 10px;border:1px solid #fecaca;border-radius:8px;background:rgba(255,255,255,.96);color:#b91c1c;font:12px system-ui;box-shadow:0 8px 24px rgba(15,23,42,.12)}#status[hidden]{display:none}</style></head><body><div id="surface" tabindex="0" role="application" aria-label="Live browser page"><img id="view" draggable="false" alt="" src="/browser/stream?${Y}"><div id="status" hidden></div></div><script nonce="${J}">(()=>{"use strict";const TOKEN=${X};const FRONTEND_ORIGIN=${Q};const SESSION=${m2(Z.sessionId)};const surface=document.getElementById("surface");const view=document.getElementById("view");const status=document.getElementById("status");let metrics={viewportWidth:720,viewportHeight:442};let queue=[];let flushPending=false;let inputChain=Promise.resolve();const endpoint=(path)=>path+"?session="+encodeURIComponent(SESSION);const headers={"content-type":"application/json","x-ideawave-browser-token":TOKEN};const post=async(path,body)=>{const response=await fetch(endpoint(path),{method:"POST",headers,body:JSON.stringify(body),credentials:"omit",cache:"no-store"});if(!response.ok)throw new Error((await response.text())||"Browser command failed");const type=response.headers.get("content-type")||"";return type.includes("application/json")?response.json():null};const sendParent=(event,payload,requestId)=>window.parent.postMessage({type:"ideawave-browser-event",token:TOKEN,event,payload,...(requestId?{requestId}:{})},FRONTEND_ORIGIN);const showError=(message)=>{status.textContent=String(message);status.hidden=false};const flush=()=>{flushPending=false;const batch=queue.splice(0,64);if(batch.length)inputChain=inputChain.then(()=>post("/browser/input",{events:batch})).catch(showError);if(queue.length){flushPending=true;requestAnimationFrame(flush)}};const enqueue=(event)=>{queue.push(event);if(flushPending)return;flushPending=true;requestAnimationFrame(flush)};const point=(event)=>{const rect=surface.getBoundingClientRect();return{x:Math.max(0,Math.min(metrics.viewportWidth,(event.clientX-rect.left)*metrics.viewportWidth/Math.max(1,rect.width))),y:Math.max(0,Math.min(metrics.viewportHeight,(event.clientY-rect.top)*metrics.viewportHeight/Math.max(1,rect.height)))}};const button=(value)=>value===1?"middle":value===2?"right":"left";for(const name of ["pointermove","pointerdown","pointerup"]){surface.addEventListener(name,event=>{if(name==="pointerdown"){surface.focus({preventScroll:true});surface.setPointerCapture(event.pointerId)}const p=point(event);enqueue({type:"pointer",phase:name.slice(7),x:p.x,y:p.y,button:button(event.button),buttons:event.buttons});event.preventDefault()})}surface.addEventListener("wheel",event=>{enqueue({type:"wheel",deltaX:event.deltaX,deltaY:event.deltaY});event.preventDefault()},{passive:false});surface.addEventListener("keydown",event=>{if(event.isComposing)return;enqueue({type:"key",phase:"down",key:event.key});event.preventDefault()});surface.addEventListener("keyup",event=>{if(event.isComposing)return;enqueue({type:"key",phase:"up",key:event.key});event.preventDefault()});surface.addEventListener("compositionend",event=>{if(event.data)enqueue({type:"text",text:event.data})});surface.addEventListener("paste",event=>{const text=event.clipboardData&&event.clipboardData.getData("text/plain");if(text){enqueue({type:"text",text:text.slice(0,5000)});event.preventDefault()}});surface.addEventListener("contextmenu",event=>event.preventDefault());const resize=new ResizeObserver(entries=>{const rect=entries[0]&&entries[0].contentRect;if(rect)void post("/browser/viewport",{width:rect.width,height:rect.height}).catch(showError)});resize.observe(surface);const events=new EventSource("/browser/events?${Y}");events.onmessage=event=>{try{const message=JSON.parse(event.data);if(message.event==="state"&&message.payload&&message.payload.metrics)metrics=message.payload.metrics;if(message.event==="error")showError(message.payload&&message.payload.message||"Browser page error");else status.hidden=true;sendParent(message.event,message.payload)}catch(error){showError(error instanceof Error?error.message:String(error))}};events.onerror=()=>showError("Live browser stream disconnected");window.addEventListener("message",event=>{const message=event.data;if(event.source!==window.parent||event.origin!==FRONTEND_ORIGIN||!message||message.type!=="ideawave-browser-command"||message.token!==TOKEN)return;Promise.resolve(post("/browser/command",message.command||{})).then(result=>sendParent("response",{ok:true,result},message.requestId),error=>sendParent("response",{ok:false,error:error instanceof Error?error.message:String(error)},message.requestId))});window.addEventListener("beforeunload",()=>{events.close();resize.disconnect()})})();</script></body></html>`}function X7(Z){return(Z["content-type"]??"application/octet-stream").split(";")[0]?.trim().toLowerCase()??"application/octet-stream"}function rQ(Z){return"tagName"in Z}function k2(Z,X){return Z.attrs.find((Q)=>Q.name.toLowerCase()===X)?.value??null}function e3(Z,X,Q){let K=Z.attrs.find((Y)=>Y.name.toLowerCase()===X);if(K)K.value=Q;else Z.attrs.push({name:X,value:Q})}function Z7(Z){let X=X7(Z.headers);if(!(/^image\/(?:png|jpeg|gif|webp|avif|bmp|x-icon)$/.test(X)||/^(?:font\/|application\/(?:font-|vnd\.ms-fontobject|x-font-))/.test(X)))return null;return`data:${X};base64,${Buffer.from(Z.body).toString("base64")}`}async function _2(Z){let X=[],Q=0;for await(let K of Z){let Y=Buffer.isBuffer(K)?K:Buffer.from(K);if(Q+=Y.byteLength,Q>kQ)throw Error("Browser request is too large");X.push(Y)}return JSON.parse(Buffer.concat(X).toString("utf8"))}class I2{sessions=new Map;port=null;sweepTimer;runtime;constructor(Z){this.runtime=Z??new V1,this.sweepTimer=setInterval(()=>this.sweep(),60000),this.sweepTimer.unref?.()}setPort(Z){this.port=Z}origin(Z){if(!this.port)throw Error("Browser proxy is not ready");return`http://${Z}.localhost:${this.port}`}wrapperOrigin(Z){return this.origin(Z.wrapperHost)}result(Z){let X=this.wrapperOrigin(Z);return{proxySessionId:Z.id,wrapperUrl:`${X}/browser/wrapper?session=${encodeURIComponent(Z.id)}`,bridgeToken:Z.bridgeToken,navigateUrlPrefix:`${X}/browser/command?session=${encodeURIComponent(Z.id)}&url=`}}async handleRpc(Z,X,Q){switch(Q.method){case"open_proxy_session":{let K=_Q.parse(Q.params),Y=C0(K.url).href,J=aQ(X),H=[...this.sessions.values()].find((U)=>U.frontendSessionId===Z&&U.browserNodeId===K.browserNodeId);if(H){if(H.frontendOrigin!==J)throw Error("Browser proxy session origin changed unexpectedly");if(H.lastUsedAt=Date.now(),H.remote.currentUrl!==Y)await H.remote.navigate(Y);return this.result(H)}let w=await this.runtime.createPage(Y),B={id:GQ(),frontendSessionId:Z,frontendOrigin:J,browserNodeId:K.browserNodeId,wrapperHost:`iw-browser-${dQ()}`,bridgeToken:S2(24).toString("base64url"),remote:w,lastUsedAt:Date.now()};return this.sessions.set(B.id,B),this.result(B)}case"close_proxy_session":{let K=SQ.parse(Q.params),Y=this.sessions.get(K.proxySessionId);if(Y&&Y.frontendSessionId!==Z)throw Error("Browser proxy session belongs to another frontend session");if(Y)await this.closeSession(Y);return{closed:!0}}case"build_snapshot":{let K=IQ.parse(Q.params),Y=this.ownedSession(Z,K.proxySessionId);if(Y.remote.currentRevision!==K.revision)throw Error("STALE_BROWSER_REF: inspect the browser again before freezing");return this.buildSnapshot(Y,K.revision)}}}async closeSession(Z){if(this.sessions.get(Z.id)===Z)this.sessions.delete(Z.id);await Z.remote.close()}closeFrontendSession(Z){for(let X of[...this.sessions.values()])if(X.frontendSessionId===Z)this.closeSession(X)}async close(){clearInterval(this.sweepTimer);let Z=[...this.sessions.values()];this.sessions.clear(),await Promise.all(Z.map((X)=>X.remote.close())),await this.runtime.close()}ownedSession(Z,X){let Q=this.sessions.get(X);if(!Q||Q.frontendSessionId!==Z)throw Error("Browser proxy session is unavailable");return Q.lastUsedAt=Date.now(),Q}sweep(){let Z=Date.now()-EQ;for(let X of[...this.sessions.values()])if(X.lastUsedAt<Z)this.closeSession(X)}requestAuthorized(Z,X){return t3(Z.headers.origin)===this.wrapperOrigin(X)&&t3(Z.headers["x-ideawave-browser-token"])===X.bridgeToken}async handleHttpRequest(Z,X){let Q=new URL(Z.url??"/","http://localhost");if(!Q.pathname.startsWith("/browser/"))return!1;let K=Q.searchParams.get("session"),Y=K?this.sessions.get(K):null;if(!Y)return X.writeHead(404),X.end(),!0;if(Y.lastUsedAt=Date.now(),iQ(Z.headers.host)!==`${Y.wrapperHost}.localhost`)return X.writeHead(403),X.end(),!0;try{if(Q.pathname==="/browser/wrapper"){if(Z.method!=="GET"&&Z.method!=="HEAD")return X.writeHead(405),X.end(),!0;return this.sendViewer(X,Y,Z.method==="HEAD"),!0}if(Q.searchParams.get("token")===Y.bridgeToken){if(Q.pathname==="/browser/stream")return this.sendFrameStream(X,Y,Z.method==="HEAD"),!0;if(Q.pathname==="/browser/events")return this.sendEventStream(X,Y,Z.method==="HEAD"),!0}if(Z.method!=="POST"||!this.requestAuthorized(Z,Y))return X.writeHead(403),X.end(),!0;if(Q.pathname==="/browser/input"){let J=cQ.parse(await _2(Z));return await Y.remote.input(J.events),this.sendJson(X,{ok:!0}),!0}if(Q.pathname==="/browser/viewport"){let J=lQ.parse(await _2(Z));return await Y.remote.setViewport(J.width,J.height),this.sendJson(X,{ok:!0}),!0}if(Q.pathname==="/browser/command"){let J=AQ.parse(await _2(Z));return this.sendJson(X,await Y.remote.command(J)),!0}return X.writeHead(404),X.end(),!0}catch(J){let H=J instanceof Error?J.message:"Browser operation failed";if(X.headersSent)X.destroy(J instanceof Error?J:void 0);else X.writeHead(400,{"content-type":"text/plain; charset=utf-8"}),X.end(H);return!0}}sendViewer(Z,X,Q){let K=S2(18).toString("base64url"),Y=sQ({bridgeToken:X.bridgeToken,cspNonce:K,frontendOrigin:X.frontendOrigin,sessionId:X.id}),J=Buffer.from(Y),H=["default-src 'none'","img-src 'self'",`style-src 'nonce-${K}'`,`script-src 'nonce-${K}'`,"connect-src 'self'","base-uri 'none'","form-action 'none'",`frame-ancestors ${X.frontendOrigin}`].join("; ");Z.writeHead(200,{"access-control-allow-origin":X.frontendOrigin,"cache-control":"no-store","content-length":String(J.byteLength),"content-security-policy":H,"content-type":"text/html; charset=utf-8","cross-origin-resource-policy":"cross-origin","referrer-policy":"no-referrer","x-content-type-options":"nosniff"}),Z.end(Q?void 0:J)}sendFrameStream(Z,X,Q){if(Z.writeHead(200,{"cache-control":"no-store","content-type":`multipart/x-mixed-replace; boundary=${n3}`,"x-content-type-options":"nosniff"}),Q){Z.end();return}let K=!1,Y=X.remote.onFrame((J)=>{if(K||Z.destroyed)return;X.lastUsedAt=Date.now(),K=!Z.write(Buffer.concat([Buffer.from(`--${n3}\r
824
- Content-Type: image/jpeg\r
825
- Content-Length: ${J.byteLength}\r
826
- \r
827
- `),J,Buffer.from(`\r
828
- `)]))});Z.on("drain",()=>{K=!1}),Z.once("close",Y)}sendEventStream(Z,X,Q){if(Z.writeHead(200,{"cache-control":"no-cache, no-store",connection:"keep-alive","content-type":"text/event-stream; charset=utf-8","x-accel-buffering":"no"}),Q){Z.end();return}let K=(H)=>{if(!Z.destroyed)X.lastUsedAt=Date.now(),Z.write(`data: ${JSON.stringify(H)}
829
-
830
- `)},Y=X.remote.onEvent(K),J=setInterval(()=>{if(!Z.destroyed)X.lastUsedAt=Date.now(),Z.write(`: ping
831
-
832
- `)},15000);J.unref?.(),Z.once("close",()=>{clearInterval(J),Y()})}sendJson(Z,X){let Q=Buffer.from(JSON.stringify(X));Z.writeHead(200,{"cache-control":"no-store","content-length":String(Q.byteLength),"content-type":"application/json; charset=utf-8","x-content-type-options":"nosniff"}),Z.end(Q)}async snapshotUpstream(Z,X,Q){if(Q.remaining<=0)return null;return Q.remaining-=1,Q.resourceCount+=1,Z.remote.fetchResource(X,g8)}async inlineCss(Z,X,Q,K){let Y=new Set;try{let w=B4.parse(X,{context:"stylesheet",parseCustomProperty:!0});B4.walk(w,(B)=>{if(B.type!=="Url")return;try{Y.add(new URL(B.value,Q).href)}catch{}})}catch{return""}let J=new Map,H=[...Y].slice(0,K.remaining);for(let w=0;w<H.length;w+=o3)await Promise.all(H.slice(w,w+o3).map(async(B)=>{try{let U=await this.snapshotUpstream(Z,B,K),q=U?Z7(U):null;if(q)J.set(B,q)}catch{}}));return r3({css:X,baseUrl:Q,resourceUrl:(w)=>J.get(w)??"data:"})}async inlineSnapshotTree(Z,X,Q,K){let Y=[];for(let J of X.childNodes){if(rQ(J)){let H=J.tagName.toLowerCase();if(H==="link"&&(k2(J,"rel")??"").toLowerCase().includes("stylesheet")){let w=k2(J,"href");if(w)try{let B=new URL(w,K).href,U=await this.snapshotUpstream(Z,B,Q);if(!U)continue;if(X7(U.headers)==="text/css")J.tagName="style",J.nodeName="style",J.attrs=[],J.childNodes=[{nodeName:"#text",value:await this.inlineCss(Z,Buffer.from(U.body).toString("utf8"),U.url,Q),parentNode:J}]}catch{continue}}if(H==="style"){for(let w of J.childNodes)if("value"in w&&typeof w.value==="string")w.value=await this.inlineCss(Z,w.value,K,Q)}if(H==="img"){let w=k2(J,"src");if(w&&!w.startsWith("data:"))try{let B=new URL(w,K).href,U=await this.snapshotUpstream(Z,B,Q);e3(J,"src",U&&Z7(U)||"data:")}catch{e3(J,"src","data:")}}await this.inlineSnapshotTree(Z,J,Q,K)}Y.push(J)}X.childNodes=Y}async buildSnapshot(Z,X){let Q=await Z.remote.snapshotHtml();if(Buffer.byteLength(Q,"utf8")>y1)throw Error("Browser snapshot exceeds the 20 MiB limit");let K=Z.remote.currentUrl,Y=f1(Q),J={remaining:mQ,resourceCount:0};await this.inlineSnapshotTree(Z,Y,J,K);let H=p0(Y),w=s3(H),B=H.match(/<title[^>]*>([^<]*)<\/title>/i)?.[1]?.trim()??"";return{html:w,sourceUrl:K,title:B,revision:X,byteLength:Buffer.byteLength(w,"utf8"),resourceCount:J.resourceCount,createdAt:new Date().toISOString()}}}import{chromium as HK}from"playwright-core";import{spawn as oQ}from"node:child_process";import{existsSync as O1,readFileSync as nQ}from"node:fs";import{createRequire as Q7}from"node:module";import L4 from"node:os";import a from"node:path";var D0={phase:"checking"},o0=null,T2=0,tQ=60000,eQ=["install","--only-shell","chromium"];class b1 extends Error{constructor(){super("The lightweight screenshot engine is being installed in the background. Live browsing remains available; retry the screenshot shortly.");this.name="CaptureEngineInstallingError"}}class K7 extends Error{constructor(Z){super(Z?`The screenshot engine could not be installed: ${Z}`:"The screenshot engine is unavailable. Retry after checking network access and disk space.");this.name="CaptureEngineUnavailableError"}}function ZK(Z){return Z.phase==="failed"?new K7(Z.error):new b1}function n0(){return{...D0}}function XK(Z){let X=Z.exists??O1;for(let[Q,K]of[[Z.override,"explicit"],[Z.managedShell,"headless-shell"],[Z.system,"system-chromium"]])if(Q&&X(Q))return{path:Q,engine:K};return null}function W7(Z,X){let Q=[],K=X.IDEAWAVE_CAPTURE_EXECUTABLE_PATH??X.IDEAWAVE_CHROMIUM_PATH;if(K)Q.push(K);if(Z==="win32"){let Y=X.ProgramFiles??"C:\\Program Files",J=X["ProgramFiles(x86)"]??"C:\\Program Files (x86)";if(Q.push(a.win32.join(Y,"Google\\Chrome\\Application\\chrome.exe"),a.win32.join(J,"Google\\Chrome\\Application\\chrome.exe")),X.LOCALAPPDATA)Q.push(a.win32.join(X.LOCALAPPDATA,"Google\\Chrome\\Application\\chrome.exe"));Q.push(a.win32.join(J,"Microsoft\\Edge\\Application\\msedge.exe"),a.win32.join(Y,"Microsoft\\Edge\\Application\\msedge.exe"))}else if(Z==="darwin")Q.push("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Chromium.app/Contents/MacOS/Chromium","google-chrome","chromium");else Q.push("google-chrome","google-chrome-stable","chromium","chromium-browser","msedge");return Q}function QK(Z){let X=(process.env.PATH??"").split(a.delimiter),Q=process.platform==="win32"?[".exe",".cmd",".bat",""]:[""];for(let K of X){if(!K)continue;for(let Y of Q){let J=a.join(K,`${Z}${Y}`);if(O1(J))return J}}return null}function KK(){let Z=new Set([process.env.IDEAWAVE_CAPTURE_EXECUTABLE_PATH,process.env.IDEAWAVE_CHROMIUM_PATH]);for(let X of W7(process.platform,process.env)){if(Z.has(X))continue;if(a.isAbsolute(X)){if(O1(X))return X}else{let Q=QK(X);if(Q)return Q}}return null}function WK(){try{let Z=Q7(import.meta.url);return a.dirname(Z.resolve("playwright-core/package.json"))}catch{return null}}function YK(Z){let X=process.env.PLAYWRIGHT_BROWSERS_PATH?.trim();if(X==="0")return a.join(Z,".local-browsers");if(X)return X.startsWith("~")?a.join(L4.homedir(),X.slice(1)):a.resolve(X);if(process.platform==="win32")return a.join(process.env.LOCALAPPDATA??a.join(L4.homedir(),"AppData","Local"),"ms-playwright");if(process.platform==="darwin")return a.join(L4.homedir(),"Library","Caches","ms-playwright");return a.join(L4.homedir(),".cache","ms-playwright")}function JK(){if(process.platform==="win32")return"win64";if(process.platform==="darwin")return process.arch==="arm64"?"mac-arm64":"mac-x64";return process.arch==="arm64"?"linux-arm64":"linux64"}function A2(){let Z=WK();if(!Z)return null;try{let Q=JSON.parse(nQ(a.join(Z,"browsers.json"),"utf8")).browsers?.find((w)=>w.name==="chromium-headless-shell");if(!Q?.revision)return null;let K=JK(),Y=Q.revisionOverrides?.[K]??Q.revision,J=a.join(YK(Z),`chromium_headless_shell-${Y}`),H=process.platform==="win32"?["chrome-headless-shell-win64/chrome-headless-shell.exe","chrome-headless-shell-win32/chrome-headless-shell.exe"]:process.platform==="darwin"?[`chrome-headless-shell-${K}/chrome-headless-shell`,"chrome-headless-shell-mac-x64/chrome-headless-shell","chrome-headless-shell-mac-arm64/chrome-headless-shell"]:[`chrome-headless-shell-${K}/chrome-headless-shell`,"chrome-headless-shell-linux64/chrome-headless-shell"];for(let w of H){let B=a.join(J,...w.split("/"));if(O1(B))return B}}catch{return null}return null}function VK(){let Z=process.env.IDEAWAVE_CAPTURE_EXECUTABLE_PATH??process.env.IDEAWAVE_CHROMIUM_PATH;return Z&&O1(Z)?Z:null}function Y7(){return XK({override:VK(),managedShell:A2(),system:KK()})}function jK(){let X=Q7(import.meta.url).resolve("playwright-core/package.json"),Q=a.join(a.dirname(X),"cli.js");return new Promise((K,Y)=>{let J=oQ(process.execPath,[Q,...eQ],{stdio:"ignore",windowsHide:!0});J.once("error",Y),J.once("exit",(H)=>{if(H===0)K();else Y(Error(`Playwright headless-shell installer exited with code ${H}`))})})}function u2(Z){let X=A2();if(X)return D0={phase:"ready",engine:"headless-shell",executablePath:X},Promise.resolve(n0());if(o0)return o0;if(T2>0&&Date.now()-T2<tQ)return Promise.resolve(n0());return D0=Z?{phase:"ready",engine:Z.engine,executablePath:Z.path,installingManagedShell:!0}:{phase:"installing",installingManagedShell:!0},o0=(async()=>{try{await jK();let Q=A2();if(!Q)throw Error("Headless Shell finished installing but its executable was not found");D0={phase:"ready",engine:"headless-shell",executablePath:Q}}catch(Q){T2=Date.now(),D0=Z?{phase:"ready",engine:Z.engine,executablePath:Z.path,error:Q instanceof Error?Q.message:String(Q)}:{phase:"failed",error:Q instanceof Error?Q.message:String(Q)}}finally{o0=null}return n0()})(),o0}function J7(){let Z=Y7();if(Z?.engine==="explicit"||Z?.engine==="headless-shell")return D0={phase:"ready",engine:Z.engine,executablePath:Z.path},Promise.resolve(n0());return u2(Z)}async function V7(){let Z=Y7();if(Z){if(D0={phase:"ready",engine:Z.engine,executablePath:Z.path,...Z.engine==="system-chromium"&&o0?{installingManagedShell:!0}:{}},Z.engine==="system-chromium")u2(Z);return Z.path}throw u2(null),ZK(D0)}var zK=60000,wK=16,T0=null,q4=null,t0=null,c2=Promise.resolve(),x4=0,l2=0,UK=0;class P4 extends Error{constructor(){super("The capture queue is busy; retry shortly.");this.name="CaptureQueueFullError"}}function d2(){if(t0)clearTimeout(t0);t0=null}async function i2(){d2();let Z=T0;if(T0=null,q4=null,Z)await Z.close().catch(()=>{return})}function FK(Z=zK){d2(),t0=setTimeout(()=>{if(t0=null,l2===0&&x4===0)i2()},Z),t0.unref?.()}async function BK(){let Z=await V7();if(T0?.isConnected()&&q4===Z)return T0;await i2();let X=await HK.launch({headless:!0,executablePath:Z,handleSIGHUP:!1,handleSIGINT:!1,handleSIGTERM:!1});return UK+=1,T0=X,q4=Z,X.on("disconnected",()=>{if(T0===X)T0=null,q4=null}),X}function j7(Z,X){if(x4>=wK)return Promise.reject(new P4);x4+=1;let Q,K,Y=new Promise((J,H)=>{Q=J,K=H});return c2=c2.then(async()=>{x4-=1,l2+=1,d2();let J=null,H;try{J=await(await BK()).newContext(Z.context);let B=await J.newPage();H={ok:!0,value:await X(B)}}catch(w){H={ok:!1,error:w}}finally{if(J)await J.close().catch(()=>{return});l2-=1,FK()}if(H.ok)Q(H.value);else K(H.error)}),Y}async function H7(){await c2.catch(()=>{return}),await i2()}import{randomUUID as vK}from"node:crypto";import{createServer as RK}from"node:http";import{WebSocket as P7,WebSocketServer as CK}from"ws";var a2="/cli-bridge",z7="/ping";function p2(Z=43275,X=43277){let Q=[];for(let K=Z;K<=X;K+=1)Q.push(K);return Q}function w7(Z=p2(),X="127.0.0.1",Q="/cli-bridge"){return Z.map((K)=>`ws://${X}:${K}${Q}`)}var LK=800;function U7({candidates:Z,createWebSocket:X,timeoutMs:Q=LK,maxConcurrent:K=1,staggerMs:Y=0,setTimeoutFn:J=setTimeout,clearTimeoutFn:H=clearTimeout}){return new Promise((w,B)=>{let U=0,q=!1,h=null,M=new Map,O=Math.max(1,Math.floor(K)),f=()=>{if(h===null)return;H(h),h=null},C=(D)=>{let{socket:x,listeners:E,timer:k}=D;x.removeEventListener("open",E.open),x.removeEventListener("message",E.message),x.removeEventListener("error",E.error),x.removeEventListener("close",E.close),H(k),M.delete(x)},N=(D)=>{f();for(let x of Array.from(M.values()))if(C(x),x.socket!==D)try{x.socket.close()}catch{}},b=()=>{if(q)return;if(U<Z.length)return;if(M.size>0)return;if(h!==null)return;q=!0,B(Error("No IdeaWave CLI bridge is reachable"))},$=(D)=>{if(q)return;if(U>=Z.length){b();return}if(M.size>=O)return;if(D<=0){f(),_();return}if(h!==null)return;h=J(()=>{h=null,_()},D)},v=()=>{if(q)return;if(M.size>=O)return;if(M.size===0||Y<=0||O===1){$(0);return}$(Y)},G=(D)=>{if(q)return;let x=M.get(D);if(!x)return;C(x);try{D.close()}catch{}v(),b()};function _(){if(q)return;if(M.size>=O)return;let D=Z[U];if(U+=1,!D){b();return}let x;try{x=X(D)}catch{v(),b();return}let E={open:()=>{if(q||!M.has(x))return;x.send(G1({type:"bridge_probe",protocolVersion:1}))},message:(l)=>{if(q||!M.has(x))return;if(g1(String(l?.data??""))?.type!=="bridge_probe_ack")return;q=!0,N(x),w({url:D,socket:x})},error:()=>G(x),close:()=>G(x)};x.addEventListener("open",E.open),x.addEventListener("message",E.message),x.addEventListener("error",E.error),x.addEventListener("close",E.close);let k=J(()=>G(x),Q);M.set(x,{url:D,socket:x,listeners:E,timer:k}),v()}_()})}import{randomBytes as qK}from"node:crypto";import{mkdir as xK,writeFile as PK}from"node:fs/promises";import fK from"node:os";import F7 from"node:path";var yK=30000,OK=1024;function B7(Z){let X;try{X=new URL(Z)}catch{return!1}if(X.protocol!=="http:"&&X.protocol!=="https:")return!1;let Q=X.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Q==="localhost"||Q==="127.0.0.1"||Q==="::1")return!0;let Y=Q==="ideawave.app"||Q.endsWith(".ideawave.app");return X.protocol==="https:"&&Y&&X.pathname.startsWith("/static_boards/")}async function bK(Z,X){let Q=F7.join(fK.tmpdir(),"ideawave-screenshots");await xK(Q,{recursive:!0});let K=F7.join(Q,`board-${Date.now()}-${qK(4).toString("hex")}.png`);return await PK(K,Z),{path:K,engine:X}}async function L7(Z){let X=Z.timeoutMs??yK;return j7({context:{viewport:{width:Z.width,height:Z.height},deviceScaleFactor:1}},async(Q)=>{Q.setDefaultTimeout(X),Q.setDefaultNavigationTimeout(X);let K=await Q.goto(Z.url,{waitUntil:"networkidle",timeout:X});if(!K?.ok())throw Error(`Static board responded with HTTP ${K?.status()??"unknown"}; request a fresh one-time token before retrying`);await Q.locator('[data-ideawave-static-board-ready="true"]').waitFor({state:"attached",timeout:X}),await Q.evaluate(async()=>{if(document.fonts?.ready)await document.fonts.ready});let Y=await Q.screenshot({type:"png",animations:"disabled",caret:"hide",scale:"css"});if(Y.byteLength<OK)throw Error("Headless Shell returned an empty screenshot");return bK(Buffer.from(Y),n0().engine??"system-chromium")})}var hK=0,MK=30000,NK=15000,DK="/screenshot",$K=65536,f7="http://127.0.0.1",y4="IDEAWAVE_CLI_ALLOW_RAILWAY_PR_PREVIEWS";async function y7(Z=w7(),X=(Q)=>new P7(Q,{headers:{origin:f7}})){try{let{url:Q,socket:K}=await U7({candidates:Z,createWebSocket:X});try{K.close()}catch{}return Q}catch{return null}}var gK=new Set(["https://ideawave-app-production.up.railway.app"]);function GK(Z){return Z==="ideawave.app"||Z.endsWith(".ideawave.app")}function EK(Z){return Z==="1"||Z?.toLowerCase()==="true"}function mK(Z){return/^ideawave-app-ideawave-app-pr-\d+\.up\.railway\.app$/i.test(Z)}function kK(){let Z=process.env.IDEAWAVE_CLI_ALLOWED_ORIGINS;if(!Z)return _K;let X=new Set;for(let Q of Z.split(",")){let K=Q.trim();if(!K)continue;try{X.add(new URL(K).origin)}catch{}}return X}var _K=new Set;function s2(Z){if(!Z)return!1;let X;try{X=new URL(Z)}catch{return!1}if(gK.has(X.origin))return!0;if(kK().has(X.origin))return!0;if(X.protocol==="https:"&&EK(process.env[y4])&&mK(X.hostname))return!0;if(X.protocol==="https:"&&GK(X.hostname))return!0;if(X.protocol!=="http:"&&X.protocol!=="https:")return!1;return X.hostname==="localhost"||X.hostname==="127.0.0.1"||X.hostname==="::1"}function e0(Z,X){if(Z.readyState!==P7.OPEN)return;try{Z.send(G1(X))}catch{}}function SK(Z){if(typeof Z==="string")return Z;if(Buffer.isBuffer(Z))return Z.toString("utf8");if(Array.isArray(Z))return Buffer.concat(Z).toString("utf8");return Buffer.from(Z).toString("utf8")}function f4(Z){if(typeof Z==="string")return Z;if(Array.isArray(Z))return Z[0]??null;return null}function q7(Z,X,Q){Z.write(`HTTP/1.1 ${X} ${Q}\r
942
+ - Filesystem access is read-only and limited to this folder. Hidden/config folders and outside-folder paths are unavailable.`}async function p$(X,$){let Z=Date.now(),Q=new AbortController;G0.set(X.runId,{controller:Q,frontendSessionId:X.frontendSessionId}),eX.add(X.cardId),q("cli.run_started",{runId:X.runId,cardId:X.cardId,frontendSessionId:X.frontendSessionId});let K=DX(X.userId,X.frontendSessionId,X.cardId),J=!1,Y=null;try{let z=(X.runtimeConfigIdHint?await I$(X.runtimeConfigIdHint,{modelId:X.modelHint??null}):null)??await X0({boardId:X.boardId,cardId:X.cardId}),W=await z.adapter.resolveSpawnConfig(z.entry),V=X.toolSurface??"full",B=z.adapter.supportsImages===!0;Y=W;let L=BX({userId:X.userId,frontendSessionId:X.frontendSessionId,boardId:X.boardId,toolSurface:V,imagesSupported:B,cardId:X.cardId,runFolder:z.runFolder}),x=L?[L]:[];sX(X.cardId,B);let U=X.modelHint??z.modelId,D=wX({adapterId:z.adapter.id,configId:z.entry.id,modelId:U,configValues:z.configValues,mcpUrl:L?.url??null,runFolder:z.runFolder,toolSurface:V});q("cli.session_acquire_started",{runId:X.runId,cardId:X.cardId,frontendSessionId:X.frontendSessionId});let N=await h0({key:K,frontendSessionId:X.frontendSessionId,fingerprint:D,open:()=>tX({spawn:{...W,cwd:z.runFolder},mcpServers:x,modelId:U,configValues:z.configValues,signal:Q.signal})});q("cli.session_acquired",{runId:X.runId,cardId:X.cardId,frontendSessionId:X.frontendSessionId,elapsedMs:Date.now()-Z}),l$(z.entry.id,N,z.adapter.id,U);let H;try{let P=0,w="";q("cli.prompt_started",{runId:X.runId,cardId:X.cardId,elapsedMs:Date.now()-Z}),H=await N.prompt({runId:X.runId,boardId:X.boardId,cardId:X.cardId,prompt:{systemPrompt:N3(X.systemPrompt,z.runFolder),messages:X.promptMessages.map((O)=>({role:O.role,content:O.content}))},signal:Q.signal,appendText:async({text:O})=>{if(P+=1,P===1)q("cli.first_partial_text_forwarded",{runId:X.runId,cardId:X.cardId,elapsedMs:Date.now()-Z,textLength:O.length});$({type:"partial_text",runId:X.runId,cardId:X.cardId,text:O})},appendToolActivity:async({entry:O})=>{let C=`${O.toolCallId}:${O.status}`;if(C!==w)w=C,q("cli.tool_activity_forwarded",{runId:X.runId,cardId:X.cardId,toolCallId:O.toolCallId,toolStatus:O.status,elapsedMs:Date.now()-Z});$({type:"tool_activity",runId:X.runId,cardId:X.cardId,activity:O})}})}catch(P){if(!N.isAlive()||P instanceof f||P instanceof u)J=!0;throw P}$({type:"run_settled",runId:X.runId,cardId:X.cardId,result:{assistantContent:H.finalText,model:H.modelReported??null,latencyMs:Date.now()-Z,errorText:null,partialText:null}}),q("cli.run_settled",{runId:X.runId,cardId:X.cardId,elapsedMs:Date.now()-Z,hasError:!1})}catch(j){let z=j instanceof Error?j.message:"Agent run failed";if(j instanceof f&&Y&&!X1(j,Q.signal))CX(Y,z);if(!X1(j,Q.signal))console.error(`[ideawave-cli] run ${X.runId} failed:`,z);$({type:"run_settled",runId:X.runId,cardId:X.cardId,result:{assistantContent:"",model:null,latencyMs:Date.now()-Z,errorText:z,partialText:null}}),q("cli.run_settled",{runId:X.runId,cardId:X.cardId,elapsedMs:Date.now()-Z,hasError:!0,errorName:j instanceof Error?j.name:"unknown"})}finally{NX(K,J),G0.delete(X.runId),eX.delete(X.cardId),q("cli.run_released",{runId:X.runId,cardId:X.cardId,elapsedMs:Date.now()-Z,sessionDead:J})}}async function u$(X){if(eX.has(X.cardId))return{status:"skipped"};let $=DX(X.userId,X.frontendSessionId,X.cardId),Z=null;try{let Q=await X0({boardId:X.boardId,cardId:X.cardId}),K=await Q.adapter.resolveSpawnConfig(Q.entry);Z=K;let J=BX({userId:X.userId,frontendSessionId:X.frontendSessionId,boardId:X.boardId,cardId:X.cardId,runFolder:Q.runFolder}),Y=J?[J]:[];sX(X.cardId,Q.adapter.supportsImages===!0);let j=wX({adapterId:Q.adapter.id,configId:Q.entry.id,modelId:Q.modelId,configValues:Q.configValues,mcpUrl:J?.url??null,runFolder:Q.runFolder}),z=new AbortController,W=await h0({key:$,frontendSessionId:X.frontendSessionId,fingerprint:j,open:()=>tX({spawn:{...K,cwd:Q.runFolder},mcpServers:Y,modelId:Q.modelId,configValues:Q.configValues,signal:z.signal})});return l$(Q.entry.id,W,Q.adapter.id,Q.modelId),NX($,!1),console.log(`[ideawave-cli] warmed runtime for card ${X.cardId}`),{status:"ready"}}catch(Q){if(Q instanceof Y0)return{status:"skipped"};let K=Q instanceof Error?Q.message:String(Q);if(Q instanceof f&&Z&&!X1(Q))CX(Z,K);if(Q instanceof f&&/(not ready|installing|warming|retry in a moment)/i.test(K))return{status:"retryable",error:K};return console.warn(`[ideawave-cli] warmup failed for card ${X.cardId}:`,K),{status:"failed",error:K}}}import{chromium as y3}from"playwright-core";import{spawn as w3}from"node:child_process";import{existsSync as f0,readFileSync as B3}from"node:fs";import{createRequire as a$}from"node:module";import JX from"node:os";import E from"node:path";var $0={phase:"checking"},w0=null,Z1=0,M3=60000,L3=["install","--only-shell","chromium"];class y0 extends Error{constructor(){super("The lightweight screenshot engine is being installed in the background. Live browsing remains available; retry the screenshot shortly.");this.name="CaptureEngineInstallingError"}}class d$ extends Error{constructor(X){super(X?`The screenshot engine could not be installed: ${X}`:"The screenshot engine is unavailable. Retry after checking network access and disk space.");this.name="CaptureEngineUnavailableError"}}function P3(X){return X.phase==="failed"?new d$(X.error):new y0}function B0(){return{...$0}}function F3(X){let $=X.exists??f0;for(let[Z,Q]of[[X.override,"explicit"],[X.managedShell,"headless-shell"],[X.system,"system-chromium"]])if(Z&&$(Z))return{path:Z,engine:Q};return null}function i$(X,$){let Z=[],Q=$.IDEAWAVE_CAPTURE_EXECUTABLE_PATH??$.IDEAWAVE_CHROMIUM_PATH;if(Q)Z.push(Q);if(X==="win32"){let K=$.ProgramFiles??"C:\\Program Files",J=$["ProgramFiles(x86)"]??"C:\\Program Files (x86)";if(Z.push(E.win32.join(K,"Google\\Chrome\\Application\\chrome.exe"),E.win32.join(J,"Google\\Chrome\\Application\\chrome.exe")),$.LOCALAPPDATA)Z.push(E.win32.join($.LOCALAPPDATA,"Google\\Chrome\\Application\\chrome.exe"));Z.push(E.win32.join(J,"Microsoft\\Edge\\Application\\msedge.exe"),E.win32.join(K,"Microsoft\\Edge\\Application\\msedge.exe"))}else if(X==="darwin")Z.push("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Chromium.app/Contents/MacOS/Chromium","google-chrome","chromium");else Z.push("google-chrome","google-chrome-stable","chromium","chromium-browser","msedge");return Z}function O3(X){let $=(process.env.PATH??"").split(E.delimiter),Z=process.platform==="win32"?[".exe",".cmd",".bat",""]:[""];for(let Q of $){if(!Q)continue;for(let K of Z){let J=E.join(Q,`${X}${K}`);if(f0(J))return J}}return null}function k3(){let X=new Set([process.env.IDEAWAVE_CAPTURE_EXECUTABLE_PATH,process.env.IDEAWAVE_CHROMIUM_PATH]);for(let $ of i$(process.platform,process.env)){if(X.has($))continue;if(E.isAbsolute($)){if(f0($))return $}else{let Z=O3($);if(Z)return Z}}return null}function q3(){try{let X=a$(import.meta.url);return E.dirname(X.resolve("playwright-core/package.json"))}catch{return null}}function _3(X){let $=process.env.PLAYWRIGHT_BROWSERS_PATH?.trim();if($==="0")return E.join(X,".local-browsers");if($)return $.startsWith("~")?E.join(JX.homedir(),$.slice(1)):E.resolve($);if(process.platform==="win32")return E.join(process.env.LOCALAPPDATA??E.join(JX.homedir(),"AppData","Local"),"ms-playwright");if(process.platform==="darwin")return E.join(JX.homedir(),"Library","Caches","ms-playwright");return E.join(JX.homedir(),".cache","ms-playwright")}function A3(){if(process.platform==="win32")return"win64";if(process.platform==="darwin")return process.arch==="arm64"?"mac-arm64":"mac-x64";return process.arch==="arm64"?"linux-arm64":"linux64"}function Q1(){let X=q3();if(!X)return null;try{let Z=JSON.parse(B3(E.join(X,"browsers.json"),"utf8")).browsers?.find((j)=>j.name==="chromium-headless-shell");if(!Z?.revision)return null;let Q=A3(),K=Z.revisionOverrides?.[Q]??Z.revision,J=E.join(_3(X),`chromium_headless_shell-${K}`),Y=process.platform==="win32"?["chrome-headless-shell-win64/chrome-headless-shell.exe","chrome-headless-shell-win32/chrome-headless-shell.exe"]:process.platform==="darwin"?[`chrome-headless-shell-${Q}/chrome-headless-shell`,"chrome-headless-shell-mac-x64/chrome-headless-shell","chrome-headless-shell-mac-arm64/chrome-headless-shell"]:[`chrome-headless-shell-${Q}/chrome-headless-shell`,"chrome-headless-shell-linux64/chrome-headless-shell"];for(let j of Y){let z=E.join(J,...j.split("/"));if(f0(z))return z}}catch{return null}return null}function C3(){let X=process.env.IDEAWAVE_CAPTURE_EXECUTABLE_PATH??process.env.IDEAWAVE_CHROMIUM_PATH;return X&&f0(X)?X:null}function o$(){return F3({override:C3(),managedShell:Q1(),system:k3()})}function f3(){let $=a$(import.meta.url).resolve("playwright-core/package.json"),Z=E.join(E.dirname($),"cli.js");return new Promise((Q,K)=>{let J=w3(process.execPath,[Z,...L3],{stdio:"ignore",windowsHide:!0});J.once("error",K),J.once("exit",(Y)=>{if(Y===0)Q();else K(Error(`Playwright headless-shell installer exited with code ${Y}`))})})}function K1(X){let $=Q1();if($)return $0={phase:"ready",engine:"headless-shell",executablePath:$},Promise.resolve(B0());if(w0)return w0;if(Z1>0&&Date.now()-Z1<M3)return Promise.resolve(B0());return $0=X?{phase:"ready",engine:X.engine,executablePath:X.path,installingManagedShell:!0}:{phase:"installing",installingManagedShell:!0},w0=(async()=>{try{await f3();let Z=Q1();if(!Z)throw Error("Headless Shell finished installing but its executable was not found");$0={phase:"ready",engine:"headless-shell",executablePath:Z}}catch(Z){Z1=Date.now(),$0=X?{phase:"ready",engine:X.engine,executablePath:X.path,error:Z instanceof Error?Z.message:String(Z)}:{phase:"failed",error:Z instanceof Error?Z.message:String(Z)}}finally{w0=null}return B0()})(),w0}function n$(){let X=o$();if(X?.engine==="explicit"||X?.engine==="headless-shell")return $0={phase:"ready",engine:X.engine,executablePath:X.path},Promise.resolve(B0());return K1(X)}async function t$(){let X=o$();if(X){if($0={phase:"ready",engine:X.engine,executablePath:X.path,...X.engine==="system-chromium"&&w0?{installingManagedShell:!0}:{}},X.engine==="system-chromium")K1(X);return X.path}throw K1(null),P3($0)}var R3=60000,b3=16,V0=null,YX=null,M0=null,J1=Promise.resolve(),WX=0,Y1=0,T3=0;class jX extends Error{constructor(){super("The capture queue is busy; retry shortly.");this.name="CaptureQueueFullError"}}function W1(){if(M0)clearTimeout(M0);M0=null}async function j1(){W1();let X=V0;if(V0=null,YX=null,X)await X.close().catch(()=>{return})}function E3(X=R3){W1(),M0=setTimeout(()=>{if(M0=null,Y1===0&&WX===0)j1()},X),M0.unref?.()}async function v3(){let X=await t$();if(V0?.isConnected()&&YX===X)return V0;await j1();let $=await y3.launch({headless:!0,executablePath:X,handleSIGHUP:!1,handleSIGINT:!1,handleSIGTERM:!1});return T3+=1,V0=$,YX=X,$.on("disconnected",()=>{if(V0===$)V0=null,YX=null}),$}function r$(X,$){if(WX>=b3)return Promise.reject(new jX);WX+=1;let Z,Q,K=new Promise((J,Y)=>{Z=J,Q=Y});return J1=J1.then(async()=>{WX-=1,Y1+=1,W1();let J=null,Y;try{J=await(await v3()).newContext(X.context);let z=await J.newPage();Y={ok:!0,value:await $(z)}}catch(j){Y={ok:!1,error:j}}finally{if(J)await J.close().catch(()=>{return});Y1-=1,E3()}if(Y.ok)Z(Y.value);else Q(Y.error)}),K}async function s$(){await J1.catch(()=>{return}),await j1()}import{randomUUID as u3}from"node:crypto";import{createServer as a3}from"node:http";import{WebSocket as W2,WebSocketServer as d3}from"ws";var G1="/cli-bridge",e$="/ping";function V1(X=43275,$=43277){let Z=[];for(let Q=X;Q<=$;Q+=1)Z.push(Q);return Z}function X2(X=V1(),$="127.0.0.1",Z="/cli-bridge"){return X.map((Q)=>`ws://${$}:${Q}${Z}`)}var h3=800;function $2({candidates:X,createWebSocket:$,timeoutMs:Z=h3,maxConcurrent:Q=1,staggerMs:K=0,setTimeoutFn:J=setTimeout,clearTimeoutFn:Y=clearTimeout}){return new Promise((j,z)=>{let W=0,V=!1,B=null,L=new Map,x=Math.max(1,Math.floor(Q)),U=()=>{if(B===null)return;Y(B),B=null},D=(M)=>{let{socket:G,listeners:k,timer:_}=M;G.removeEventListener("open",k.open),G.removeEventListener("message",k.message),G.removeEventListener("error",k.error),G.removeEventListener("close",k.close),Y(_),L.delete(G)},N=(M)=>{U();for(let G of Array.from(L.values()))if(D(G),G.socket!==M)try{G.socket.close()}catch{}},H=()=>{if(V)return;if(W<X.length)return;if(L.size>0)return;if(B!==null)return;V=!0,z(Error("No IdeaWave CLI bridge is reachable"))},P=(M)=>{if(V)return;if(W>=X.length){H();return}if(L.size>=x)return;if(M<=0){U(),C();return}if(B!==null)return;B=J(()=>{B=null,C()},M)},w=()=>{if(V)return;if(L.size>=x)return;if(L.size===0||K<=0||x===1){P(0);return}P(K)},O=(M)=>{if(V)return;let G=L.get(M);if(!G)return;D(G);try{M.close()}catch{}w(),H()};function C(){if(V)return;if(L.size>=x)return;let M=X[W];if(W+=1,!M){H();return}let G;try{G=$(M)}catch{w(),H();return}let k={open:()=>{if(V||!L.has(G))return;G.send(g0({type:"bridge_probe",protocolVersion:1}))},message:(b)=>{if(V||!L.has(G))return;if(S0(String(b?.data??""))?.type!=="bridge_probe_ack")return;V=!0,N(G),j({url:M,socket:G})},error:()=>O(G),close:()=>O(G)};G.addEventListener("open",k.open),G.addEventListener("message",k.message),G.addEventListener("error",k.error),G.addEventListener("close",k.close);let _=J(()=>O(G),Z);L.set(G,{url:M,socket:G,listeners:k,timer:_}),w()}C()})}import{randomBytes as I3}from"node:crypto";import{mkdir as S3,writeFile as g3}from"node:fs/promises";import m3 from"node:os";import Z2 from"node:path";var c3=30000,l3=1024;function Q2(X){let $;try{$=new URL(X)}catch{return!1}if($.protocol!=="http:"&&$.protocol!=="https:")return!1;let Z=$.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Z==="localhost"||Z==="127.0.0.1"||Z==="::1")return!0;let K=Z==="ideawave.app"||Z.endsWith(".ideawave.app");return $.protocol==="https:"&&K&&$.pathname.startsWith("/static_boards/")}async function p3(X,$){let Z=Z2.join(m3.tmpdir(),"ideawave-screenshots");await S3(Z,{recursive:!0});let Q=Z2.join(Z,`board-${Date.now()}-${I3(4).toString("hex")}.png`);return await g3(Q,X),{path:Q,engine:$}}async function K2(X){let $=X.timeoutMs??c3;return r$({context:{viewport:{width:X.width,height:X.height},deviceScaleFactor:1}},async(Z)=>{Z.setDefaultTimeout($),Z.setDefaultNavigationTimeout($);let Q=await Z.goto(X.url,{waitUntil:"networkidle",timeout:$});if(!Q?.ok())throw Error(`Static board responded with HTTP ${Q?.status()??"unknown"}; request a fresh one-time token before retrying`);await Z.locator('[data-ideawave-static-board-ready="true"]').waitFor({state:"attached",timeout:$}),await Z.evaluate(async()=>{if(document.fonts?.ready)await document.fonts.ready});let K=await Z.screenshot({type:"png",animations:"disabled",caret:"hide",scale:"css"});if(K.byteLength<l3)throw Error("Headless Shell returned an empty screenshot");return p3(Buffer.from(K),B0().engine??"system-chromium")})}var i3=0,o3=30000,n3=15000,t3="/screenshot",r3=65536,j2="http://127.0.0.1",VX="IDEAWAVE_CLI_ALLOW_RAILWAY_PR_PREVIEWS";async function G2(X=X2(),$=(Z)=>new W2(Z,{headers:{origin:j2}})){try{let{url:Z,socket:Q}=await $2({candidates:X,createWebSocket:$});try{Q.close()}catch{}return Z}catch{return null}}var s3=new Set(["https://ideawave-app-production.up.railway.app"]);function e3(X){return X==="ideawave.app"||X.endsWith(".ideawave.app")}function XZ(X){return X==="1"||X?.toLowerCase()==="true"}function $Z(X){return/^ideawave-app-ideawave-app-pr-\d+\.up\.railway\.app$/i.test(X)}function ZZ(){let X=process.env.IDEAWAVE_CLI_ALLOWED_ORIGINS;if(!X)return QZ;let $=new Set;for(let Z of X.split(",")){let Q=Z.trim();if(!Q)continue;try{$.add(new URL(Q).origin)}catch{}}return $}var QZ=new Set;function z1(X){if(!X)return!1;let $;try{$=new URL(X)}catch{return!1}if(s3.has($.origin))return!0;if(ZZ().has($.origin))return!0;if($.protocol==="https:"&&XZ(process.env[VX])&&$Z($.hostname))return!0;if($.protocol==="https:"&&e3($.hostname))return!0;if($.protocol!=="http:"&&$.protocol!=="https:")return!1;return $.hostname==="localhost"||$.hostname==="127.0.0.1"||$.hostname==="::1"}function L0(X,$){if(X.readyState!==W2.OPEN)return;try{X.send(g0($))}catch{}}function KZ(X){if(typeof X==="string")return X;if(Buffer.isBuffer(X))return X.toString("utf8");if(Array.isArray(X))return Buffer.concat(X).toString("utf8");return Buffer.from(X).toString("utf8")}function GX(X){if(typeof X==="string")return X;if(Array.isArray(X))return X[0]??null;return null}function J2(X,$,Z){X.write(`HTTP/1.1 ${$} ${Z}\r
833
943
  Connection: close\r
834
- Content-Length: ${Buffer.byteLength(Q)}\r
944
+ Content-Length: ${Buffer.byteLength(Z)}\r
835
945
  \r
836
- ${Q}`),Z.destroy()}function IK(Z,X){return new Promise((Q,K)=>{let Y=(H)=>{Z.off("listening",J),K(H)},J=()=>{Z.off("error",Y);let H=Z.address();if(!H||typeof H==="string"){K(Error("Failed to read CLI bridge server address"));return}Q(H.port)};Z.once("error",Y),Z.once("listening",J),Z.listen(X,"127.0.0.1")})}function x7(Z){return new Promise((X,Q)=>{Z.close((K)=>{if(K)Q(K);else X()})})}async function O7(Z,X=p2()){let Q=new Map,K=new Map,Y=Z.maxMessageSize??hK,J=!1,H=(O)=>{let f=K.get(O);if(f)clearTimeout(f);K.delete(O)},w=(O)=>{K.delete(O);let{activeRunIds:f}=Z.registry.disconnect(O);Z.onDisconnect(O,f)},B=(O,f)=>{let C={type:"cli_status",connected:!0,runtime:Z.runtime,mcpReady:Z.mcpReady(),error:f,capabilities:Z.capabilities??[],cliVersion:Z.cliVersion,browserRuntime:Z.browserRuntimeStatus?.()};if(O){let N=Q.get(O);if(N)e0(N,C);return}for(let N of Q.values())e0(N,C)},U=(O,f)=>{let C=f.sessionId.trim(),N=f.userId.trim();if(!C||!N){e0(O,{type:"cli_status",connected:!1,runtime:Z.runtime,mcpReady:Z.mcpReady(),error:"Missing frontend session or user id"}),O.close();return}H(C);let b=Q.get(C);if(b&&b!==O)b.close();O.data.frontendSessionId=C,Q.set(C,O),Z.registry.register({frontendSessionId:C,userId:N,tools:f.tools,send:($)=>e0(O,$)}),B(C),Z.onToolMetadata?.(C)},q=(O,f)=>{let C=Z.registry.getUserId(O);if(!C)return;switch(f.type){case"bridge_ping":{let N=Q.get(O);if(N)e0(N,{type:"bridge_pong"});break}case"tool_metadata":Z.registry.setMetadata(O,f.tools),Z.onToolMetadata?.(O);break;case"tool_result":Z.registry.handleToolResult(O,f);break;case"run_turn":m("bridge.run_received",{runId:f.run.runId,cardId:f.run.cardId,frontendSessionId:O}),Z.registry.markRunActive(O,f.run.runId,f.run.cardId),Z.onRunTurn(O,{...f.run,frontendSessionId:O,userId:C});break;case"cancel_run":if(Z.registry.ownsRun(O,f.runId))Z.onCancelRun(O,f.runId);break;case"runtime_rpc":Z.onRuntimeRpc(O,f);break;case"browser_rpc":Z.onBrowserRpc?.(O,Q.get(O)?.data.frontendOrigin??"",f);break;case"warmup_run":Z.onWarmupRun(O,{...f,frontendSessionId:O},C);break;default:break}},h=(O,f)=>{let C=f4(O.headers.origin),N=s2(C),b={Vary:"Origin"};if(N&&C)b["Access-Control-Allow-Origin"]=C,b["Access-Control-Allow-Private-Network"]="true";if(O.method==="OPTIONS"){f.writeHead(204,{...b,"Access-Control-Allow-Methods":"GET, OPTIONS","Access-Control-Allow-Headers":"*","Access-Control-Max-Age":"600"}),f.end();return}if(O.method!=="GET"){f.writeHead(405,b),f.end();return}f.writeHead(200,{...b,"content-type":"application/json","cache-control":"no-store"}),f.end(JSON.stringify({ideawave:!0,runtime:Z.runtime,mcpReady:Z.mcpReady(),capabilities:Z.capabilities??[],cliVersion:Z.cliVersion,browserRuntime:Z.browserRuntimeStatus?.()}))},M=(O,f)=>{let C=f4(O.headers.origin),N=s2(C),b={Vary:"Origin"};if(N&&C)b["Access-Control-Allow-Origin"]=C,b["Access-Control-Allow-Private-Network"]="true";if(O.method==="OPTIONS"){f.writeHead(204,{...b,"Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"content-type","Access-Control-Max-Age":"600"}),f.end();return}if(!N){f.writeHead(403,b),f.end();return}if(O.method!=="POST"){f.writeHead(405,b),f.end();return}let $={...b,"content-type":"application/json"},v=(D,x)=>{f.writeHead(D,$),f.end(JSON.stringify(x))},G="",_=!1;O.on("data",(D)=>{if(G+=D.toString("utf8"),G.length>$K)_=!0,O.destroy()}),O.on("end",()=>{if(_){v(400,{ok:!1,error:"Request body too large"});return}let D;try{D=JSON.parse(G)}catch{v(400,{ok:!1,error:"Invalid JSON body"});return}let x=typeof D.url==="string"?D.url:"";if(!B7(x)){v(400,{ok:!1,error:"url must be an http(s) loopback or /static_boards/ page URL"});return}let E=(k,l)=>{let L0=typeof k==="number"?k:Number.NaN;if(!Number.isFinite(L0))return l;return Math.min(4000,Math.max(200,Math.round(L0)))};L7({url:x,width:E(D.width,1440),height:E(D.height,900)}).then((k)=>v(200,{ok:!0,path:k.path,engine:k.engine})).catch((k)=>{let l=k instanceof b1?503:k instanceof P4?429:500;v(l,{ok:!1,...k instanceof b1?{installing:!0}:{},error:k instanceof Error?k.message:String(k)})})})};for(let O of X){let f=RK((b,$)=>{(async()=>{let v=new URL(b.url??"/","http://127.0.0.1").pathname;if(v===z7){h(b,$);return}if(v===DK){M(b,$);return}if(await Z.onHttpRequest?.(b,$))return;$.writeHead(404,{"content-type":"text/plain"}),$.end("IdeaWave CLI bridge")})().catch((v)=>{if($.headersSent){$.destroy(v instanceof Error?v:void 0);return}$.writeHead(500,{"content-type":"text/plain"}),$.end("IdeaWave CLI bridge request failed")})}),C=new CK({noServer:!0,maxPayload:Y}),N=(b)=>{if(b.idleTimer)clearTimeout(b.idleTimer);b.idleTimer=setTimeout(()=>{b.close()},MK),b.idleTimer.unref?.()};C.on("connection",(b,$)=>{let v=b;v.data={id:vK(),frontendSessionId:null,frontendOrigin:new URL(f4($.headers.origin)??f7).origin},v.idleTimer=null,N(v),v.on("ping",()=>N(v)),v.on("pong",()=>N(v)),v.on("error",()=>{if(v.idleTimer)clearTimeout(v.idleTimer);v.close()}),v.on("message",(G)=>{N(v);let _=SK(G);if(Y>0&&_.length>Y)return;let D=g1(_);if(!D)return;let x=v.data.frontendSessionId;if(!x){if(D.type==="bridge_probe")e0(v,{type:"bridge_probe_ack",protocolVersion:D.protocolVersion});else if(D.type==="frontend_hello")U(v,D);return}q(x,D)}),v.on("close",()=>{if(v.idleTimer)clearTimeout(v.idleTimer);let G=v.data.frontendSessionId;if(!G)return;if(Q.get(G)!==v)return;if(Q.delete(G),H(G),J)return;K.set(G,setTimeout(()=>w(G),NK))})}),f.on("upgrade",(b,$,v)=>{let G=new URL(b.url??"/","http://127.0.0.1").pathname;if(Z.onHttpUpgrade?.(b,$,v))return;if(G!==a2){q7($,404,"Not Found");return}if(!s2(f4(b.headers.origin))){q7($,403,"Forbidden");return}C.handleUpgrade(b,$,v,(_)=>{C.emit("connection",_,b)})});try{let b=await IK(f,O);return{url:`ws://127.0.0.1:${b}${a2}`,port:b,sendStatus:B,close:async()=>{J=!0;for(let $ of K.values())clearTimeout($);K.clear();for(let $ of C.clients){let v=$;if(v.idleTimer)clearTimeout(v.idleTimer);v.close()}C.close(),await x7(f).catch(()=>{return})}}}catch(b){if(C.close(),await x7(f).catch(()=>{return}),b?.code==="EADDRINUSE")continue;throw b}}throw Error(`No free IdeaWave CLI bridge port found in ${X[0]}-${X.at(-1)}`)}import{lstat as tK,readFile as eK}from"node:fs/promises";import ZW from"node:os";import v1 from"node:path";import{Server as XW}from"@modelcontextprotocol/sdk/server/index.js";import{CallToolRequestSchema as QW,ListToolsRequestSchema as KW}from"@modelcontextprotocol/sdk/types.js";import{randomUUID as AK}from"node:crypto";import{createServer as uK}from"node:http";import{StreamableHTTPServerTransport as cK}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{isInitializeRequest as C7}from"@modelcontextprotocol/sdk/types.js";var b7=new Set(["127.0.0.1","localhost","[::1]","::1"]);function TK(Z){let X=Z.trim();if(X.length===0)return null;if(X.startsWith("[")){let J=X.indexOf("]");if(J===-1)return null;let H=X.slice(0,J+1),w=X.slice(J+1);if(w.length===0)return{host:H,port:null};if(!w.startsWith(":"))return null;let B=Number(w.slice(1));if(!Number.isInteger(B)||B<=0||B>65535)return null;return{host:H,port:B}}let Q=X.lastIndexOf(":");if(Q===-1)return{host:X,port:null};let K=X.slice(Q+1),Y=Number(K);if(!Number.isInteger(Y)||Y<=0||Y>65535)return{host:X,port:null};return{host:X.slice(0,Q),port:Y}}function v7(Z){return b7.has(Z)||b7.has(Z.toLowerCase())}function R7(Z,X){let Q=Z.headers.host;if(typeof Q!=="string")return{ok:!1,status:403,reason:"missing-host"};let K=TK(Q);if(!K)return{ok:!1,status:403,reason:"bad-host"};if(!v7(K.host))return{ok:!1,status:403,reason:"non-loopback-host"};if(K.port!==null&&K.port!==X)return{ok:!1,status:403,reason:"host-port-mismatch"};let Y=Z.headers.origin;if(typeof Y==="string"&&Y.length>0){if(Y!=="null"){let J;try{J=new URL(Y)}catch{return{ok:!1,status:403,reason:"bad-origin"}}if(!v7(J.hostname))return{ok:!1,status:403,reason:"non-loopback-origin"}}}return{ok:!0}}var h7="/mcp",lK=43274,N7=16777216,dK=1800000,iK=300000,M7=200,aK=-32700,$0=-32600,r2=-32603;function V0(Z,X,Q,K,Y){Z.statusCode=X,Z.setHeader("content-type","application/json"),Z.end(JSON.stringify({jsonrpc:"2.0",error:{code:Q,message:K,...Y?{data:Y}:{}},id:null}))}class o2 extends Error{constructor(){super("expected application/json");this.name="BadContentTypeError"}}class n2 extends Error{constructor(){super(`body exceeds ${N7} bytes`);this.name="BodyTooLargeError"}}async function pK(Z){if(Z.method&&Z.method!=="POST")return;let X=Z.headers["content-type"];if(typeof X==="string"&&X.trim().length>0){if(!X.toLowerCase().includes("application/json"))throw new o2}let Q=0,K=[];for await(let J of Z){let H=typeof J==="string"?Buffer.from(J):J;if(Q+=H.byteLength,Q>N7)throw new n2;K.push(H)}if(K.length===0)return;let Y=Buffer.concat(K).toString("utf8");if(Y.length===0)return;return JSON.parse(Y)}function sK(Z){if(Array.isArray(Z))return Z.some(C7);return C7(Z)}function rK(Z){if(typeof Z==="number")return Z;let X=process.env.IDEAWAVE_MCP_PORT;if(X&&X.trim().length>0){let Q=Number(X);if(Number.isInteger(Q)&&Q>=0&&Q<65536)return Q}return lK}async function oK(Z,X){let Q=(Y)=>new Promise((J,H)=>{let w=(U)=>{Z.off("listening",B),H(U)},B=()=>{Z.off("error",w),J()};Z.once("error",w),Z.once("listening",B),Z.listen(Y,"127.0.0.1")});try{await Q(X)}catch(Y){if(Y.code!=="EADDRINUSE"||X===0)throw Y;console.warn(`[mcp] port ${X} in use, falling back to an OS-assigned port; external CLIs will need to re-paste the install command from Settings → External agents`),await Q(0)}let K=Z.address();if(K==null||typeof K==="string")throw Error("[mcp] failed to read bound address");return K.port}function nK(Z,X){if(X&&typeof X==="object"&&!Array.isArray(X)){let K=X.params;if(K&&typeof K==="object"&&!Array.isArray(K)){let Y=K.clientInfo;if(Y&&typeof Y==="object"&&!Array.isArray(Y)){let J=Y.name;if(typeof J==="string"&&J.trim().length>0)return J.trim()}}}let Q=Z.headers["user-agent"];if(typeof Q==="string"&&Q.trim().length>0)return Q.trim();return null}async function D7(Z){let X=new Map,Q=0;function K(U){let q=X.get(U);if(q)q.lastActivity=Date.now()}async function Y(U,q){X.delete(U),await q.transport.close().catch(()=>{return})}async function J(){let U=null,q=1/0;for(let[h,M]of X)if(M.lastActivity<q)q=M.lastActivity,U=h;if(U!==null){let h=X.get(U);if(h)console.warn(`[mcp] session cap of ${M7} reached; evicting ${U}`),await Y(U,h)}}let H=setInterval(()=>{let U=Date.now()-dK;for(let[q,h]of X)if(h.lastActivity<U)console.log(`[mcp] sweeping idle session ${q}`),Y(q,h)},iK);H.unref?.();let w=uK((U,q)=>{(async()=>{let h;try{h=new URL(U.url??"/","http://127.0.0.1").pathname}catch{V0(q,400,$0,"bad-url");return}if(h!==h7){V0(q,404,$0,"not-found");return}let M=U.method??"POST";if(M!=="POST"&&M!=="GET"&&M!=="DELETE"){q.setHeader("Allow","GET, POST, DELETE"),V0(q,405,$0,"method-not-allowed");return}let O=R7(U,Q);if(!O.ok){V0(q,O.status,$0,"forbidden",{reason:O.reason});return}let f=U.headers["mcp-session-id"],C=typeof f==="string"?f:void 0;if(M==="GET"||M==="DELETE"){if(!C||!X.has(C)){V0(q,400,$0,"no-session",{hint:"Open a POST initialize first to receive an Mcp-Session-Id."});return}let $=X.get(C).transport;K(C);try{await $.handleRequest(U,q)}catch(v){if(console.error("[mcp] transport.handleRequest (GET/DELETE) threw",v),!q.headersSent)V0(q,500,r2,"internal")}return}let N;try{N=await pK(U)}catch($){if($ instanceof o2){V0(q,415,$0,"expected-application-json");return}if($ instanceof n2){V0(q,413,$0,"body-too-large");return}V0(q,400,aK,"invalid-json");return}let b;if(C&&X.has(C))b=X.get(C).transport,K(C);else if(!C&&N!==void 0&&sK(N)){let $=U.headers["x-ideawave-user-id"],v=typeof $==="string"&&$.trim().length>0?$.trim():null,G=U.headers["x-ideawave-frontend-session-id"],_=typeof G==="string"&&G.trim().length>0?G.trim():null,D=U.headers["x-ideawave-tool-surface"],x=typeof D==="string"&&D.trim()==="read"?"read":"full",E=U.headers["x-ideawave-images-supported"],k=typeof E==="string"&&E.trim()==="1",l=U.headers["x-ideawave-card-id"],L0=typeof l==="string"&&l.trim().length>0?l.trim():null,y0=U.headers["x-ideawave-board-id"],I=typeof y0==="string"&&y0.trim().length>0?y0.trim():null,p=U.headers["x-ideawave-run-folder"],c=typeof p==="string"&&p.trim().length>0?p.trim():null,X0=nK(U,N);if(X.size>=M7)await J();let r=null,G0=new cK({sessionIdGenerator:()=>AK(),onsessioninitialized:(u0)=>{r=u0,X.set(u0,{transport:G0,lastActivity:Date.now()})},onsessionclosed:(u0)=>{X.delete(u0)}});G0.onclose=()=>{if(G0.sessionId)X.delete(G0.sessionId)};try{await Z.buildServer({userId:v,frontendSessionId:_,boardId:I,toolSurface:x,imagesSupported:k,cardId:L0,runFolder:c,clientHint:X0}).connect(G0)}catch(u0){if(console.error("[mcp] buildServer/connect failed",u0),r)X.delete(r);await G0.close().catch(()=>{return}),V0(q,500,r2,"server-init-failed");return}b=G0}else{V0(q,400,$0,"no-session",{hint:"Non-initialize requests must include a valid Mcp-Session-Id header obtained from a prior initialize."});return}try{await b.handleRequest(U,q,N)}catch($){if(console.error("[mcp] transport.handleRequest threw",$),!q.headersSent)V0(q,500,r2,"internal")}})().catch((h)=>{console.error("[mcp] unhandled request handler error:",h)})});return Q=await oK(w,rK(Z.port)),{url:`http://127.0.0.1:${Q}${h7}`,port:Q,close:async()=>{clearInterval(H);for(let U of X.values())await U.transport.close().catch(()=>{return});X.clear(),await new Promise((U)=>w.close(()=>U()))}}}var WW={name:"ideawave-board",version:"1.0.0"},O4="list_run_folder",b4="read_run_folder_file",G7=new Set(["list_boards","get_board","screenshot_board","list_nodes","list_edges","inspect_node","list_context_sources","read_context_card","read_context_file","read_context_image","list_context_folder","get_board_wiki","search_board","get_card_messages","list_agent_cards","inspect_neighbors",O4,b4]),E7=new Set(["inspect_diagram"]),YW=[{name:O4,description:"List visible files and folders under the selected runtime run folder. Hidden/config folders are omitted.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Optional relative path inside the selected run folder. Defaults to the run-folder root."}},additionalProperties:!1}},{name:b4,description:"Read a text file inside the selected runtime run folder. Hidden/config paths and outside-folder paths are denied.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Relative path to a text file inside the selected run folder."}},required:["path"],additionalProperties:!1}}];function t2(Z){return{content:[{type:"text",text:Z}]}}function JW(Z){return t2(JSON.stringify(Z,null,2))}function $7(Z){return{...t2(Z),isError:!0}}async function VW(Z,X){if(!X||Z.isError)return Z;let Q=Z.content.find((J)=>J.type==="text");if(!Q)return Z;let K;try{let J=JSON.parse(Q.text);if(typeof J.path!=="string")return Z;K=v1.resolve(J.path)}catch{return Z}let Y=v1.resolve(v1.join(ZW.tmpdir(),"ideawave-screenshots"));if(v1.dirname(K)!==Y||!/^board-[a-z0-9-]+\.png$/i.test(v1.basename(K)))return Z;try{if(!(await tK(K)).isFile())return Z;let H=await eK(K);if(H.byteLength<1024||H.byteLength>26214400||!H.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])))return Z;return{...Z,content:[...Z.content,{type:"image",data:H.toString("base64"),mimeType:"image/png"}]}}catch{return Z}}function jW(Z,X,Q="full",K=!1){return Z.getMetadata(X).filter((Y)=>{let J=p1(Y.name);if(Q==="read"&&!G7.has(J))return!1;if(!K&&E7.has(J))return!1;return!0}).map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}))}function HW(Z,X,Q={}){let K=jW(Z,X,Q.toolSurface??"full",Q.imagesSupported??!1);return Q.includeRunFolderTools?[...K,...YW]:K}function g7(Z,X){if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let Q=Z[X];return typeof Q==="string"?Q:null}async function zW(Z,X,Q){if(Q&&Q.trim().length>0)return Q.trim();if(!Z||!X)throw Error("Run-folder tools require an active IdeaWave board and card.");return(await R0({boardId:Z,cardId:X})).runFolder}async function wW(Z){let X=await zW(Z.boardId,Z.cardId,Z.runFolder);if(Z.name===O4){let Q=g7(Z.args,"path")??"",K=await W8(X,Q);return JW(K)}if(Z.name===b4){let Q=g7(Z.args,"path");if(!Q)return $7("read_run_folder_file requires a path.");return t2(await a1(X,Q))}return $7(`Unknown local tool "${Z.name}"`)}function UW(Z,X,Q,K,Y,J="full",H=!1){let w=new XW(WW,{capabilities:{tools:{}}}),B=async()=>{if(H)return!0;if(R8(K))return!0;if(Q&&K)try{return(await R0({boardId:Q,cardId:K})).adapter.supportsImages===!0}catch{return!1}return!1};return w.setRequestHandler(KW,async()=>({tools:HW(Z,X,{includeRunFolderTools:Boolean(Y||Q&&K),toolSurface:J,imagesSupported:await B()})})),w.setRequestHandler(QW,async(U)=>{let{name:q,arguments:h}=U.params,M=p1(q),O=Date.now();m("mcp.tool_call_received",{frontendSessionId:X,cardId:K,toolName:M});try{if(M===O4||M===b4)return await wW({name:M,args:h,boardId:Q,cardId:K,runFolder:Y});if(J==="read"&&!G7.has(M))throw Error(`Tool "${q}" is not available in read-only mode`);if(E7.has(M)&&!await B())throw Error(`Tool "${q}" requires a runtime that supports image input`);let f=await Z.callTool(X,M,h??{},void 0,K??void 0);if(m("mcp.tool_result_returned",{frontendSessionId:X,cardId:K,toolName:M,elapsedMs:Date.now()-O}),f&&typeof f==="object"&&Array.isArray(f.content)){let C=f;return M==="screenshot_board"?await VW(C,await B()):C}return{content:[{type:"text",text:typeof f==="string"?f:JSON.stringify(f)}]}}catch(f){return m("mcp.tool_result_returned",{frontendSessionId:X,cardId:K,toolName:M,elapsedMs:Date.now()-O,hasError:!0}),{content:[{type:"text",text:f instanceof Error?f.message:"Tool call failed"}],isError:!0}}}),w}function m7(Z,X){return D7({buildServer:(Q)=>UW(Z,Q.frontendSessionId,Q.boardId,Q.cardId,Q.runFolder,Q.toolSurface,Q.imagesSupported),port:X})}import v4 from"node:fs/promises";import e2 from"node:os";import R4 from"node:path";function k7(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function FW(){let[Z,X]=await Promise.all([W0(),s6()]),Q=Z.globalDefaultConfigId?Z.runtimes.find((K)=>K.id===Z.globalDefaultConfigId)??null:null;return{runtimes:Z.runtimes,globalDefaultConfigId:Z.globalDefaultConfigId,globalDefaultEffective:Q?{runFolder:Q.runFolder??e2.homedir(),modelId:Q.defaultModelId??null,configValues:Q.defaultConfigValues??{}}:null,knownAdapters:d0().map((K)=>({id:K.id,displayName:K.displayName})),readiness:X}}async function BW(Z){try{let X=await R0({boardId:Z.boardId,cardId:Z.cardId});return{resolved:{configId:X.entry.id,adapterId:X.entry.kind==="registered"?X.entry.adapterId:null,displayName:X.entry.displayName,runFolder:X.runFolder,modelId:X.modelId,configValues:X.configValues}}}catch(X){if(X instanceof E0)return{resolved:null};throw X}}async function LW(Z){return j0((X)=>{let Q=X.runtimes.find((J)=>J.kind==="registered"&&J.adapterId===Z.adapterId);if(Q)return Q;let K=d0().find((J)=>J.id===Z.adapterId);if(!K)throw Error(`Unknown adapterId: ${Z.adapterId}`);let Y={id:k7(),kind:"registered",adapterId:Z.adapterId,displayName:K.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return X.runtimes.push(Y),Y})}async function qW(Z){return j0((X)=>{let Q={id:k7(),kind:"custom",displayName:Z.displayName,command:Z.command,args:Z.args,env:Z.env,runFolder:Z.runFolder,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return X.runtimes.push(Q),Q})}async function xW(Z){await j0((X)=>{if(X.runtimes=X.runtimes.filter((Q)=>Q.id!==Z.runtimeConfigId),X.globalDefaultConfigId===Z.runtimeConfigId)X.globalDefaultConfigId=null;for(let Q of Object.keys(X.boardOverrides))if(X.boardOverrides[Q].runtimeConfigId===Z.runtimeConfigId)delete X.boardOverrides[Q];for(let Q of Object.keys(X.cardOverrides))if(X.cardOverrides[Q].runtimeConfigId===Z.runtimeConfigId)delete X.cardOverrides[Q]})}async function PW(Z){await j0((X)=>{let Q=X.runtimes.find((K)=>K.id===Z.runtimeConfigId);if(!Q)throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);if(X.globalDefaultConfigId=Z.runtimeConfigId,Z.runFolder!==void 0)Q.runFolder=Z.runFolder;if(Z.modelId!==void 0)Q.defaultModelId=Z.modelId;if(Z.configValues!==void 0)Q.defaultConfigValues=Z.configValues})}async function fW(Z){Z.boardId,await j0((X)=>{if(Z.runtimeConfigId===null){delete X.cardOverrides[Z.cardId];return}if(!X.runtimes.some((Y)=>Y.id===Z.runtimeConfigId))throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);let K=X.cardOverrides[Z.cardId];X.cardOverrides[Z.cardId]={runtimeConfigId:Z.runtimeConfigId,runFolder:Z.runFolder!==void 0?Z.runFolder:K?.runFolder??null,modelId:Z.modelId!==void 0?Z.modelId:K?.modelId??null,configValues:Z.configValues!==void 0?Z.configValues:K?.configValues??{}}})}async function yW(Z){let Q=(await W0()).runtimes.find((H)=>H.id===Z.runtimeConfigId);if(!Q)throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);let K=F0(Q),Y=await K.resolveSpawnConfig(Q),J=Q.runFolder??e2.homedir();try{let H=await y8({spawn:{...Y,cwd:J},modelId:Z.modelId??Q.defaultModelId??null,configValues:Z.configValues??Q.defaultConfigValues??{}}),w=d1({adapterId:K.id,models:H.models,currentModelId:H.currentModelId}),B=new Date().toISOString();return await j0((U)=>{let q=U.runtimes.find((h)=>h.id===Z.runtimeConfigId);if(q)q.discoveredModels=w,q.discoveredConfigOptions=H.configOptions,q.discoveredAt=B}),{ok:!0,models:w,configOptions:H.configOptions,currentModelId:H.currentModelId}}catch(H){if(H instanceof c0)throw Error(`${H.message}${K.authHint?` ${K.authHint}`:""}`);if(H instanceof T||H instanceof U0)throw Error(H.message);throw H}}async function OW(Z){let X=e2.homedir(),Q=Z.path?.trim()?Z.path.trim():X,K=R4.resolve(Q),Y=!0;try{if(!(await v4.stat(K)).isDirectory())K=R4.dirname(K)}catch{Y=!1,K=X}let J=[];try{J=(await v4.readdir(K,{withFileTypes:!0})).filter((B)=>B.isDirectory()&&!B.name.startsWith(".")).map((B)=>({name:B.name,path:R4.join(K,B.name)})).sort((B,U)=>B.name.localeCompare(U.name))}catch{J=[]}let H=R4.dirname(K);return{path:K,parent:H===K?null:H,home:X,exists:Y,entries:J}}var _7={list:FW,getEffectiveForCard:BW,registerRegistered:LW,registerCustom:qW,unregister:xW,setUserDefault:PW,setCardOverride:fW,refreshModels:yW,browseFolder:OW};var bW=[{id:"claude-code",displayName:"Claude Code"},{id:"codex",displayName:"Codex"},{id:"copilot",displayName:"Copilot"},{id:"opencode",displayName:"OpenCode"}];function vW(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function S7(){try{let Z=await W0();if(Z.globalDefaultConfigId){if(Z.runtimes.some((Q)=>Q.id===Z.globalDefaultConfigId))return Z.globalDefaultConfigId}for(let X of bW){if((await r6(X.id))?.status!=="ready")continue;let K=null;if(await j0((Y)=>{if(Y.globalDefaultConfigId){if(Y.runtimes.some((w)=>w.id===Y.globalDefaultConfigId)){K=Y.globalDefaultConfigId;return}}let J=Y.runtimes.find((H)=>H.kind==="registered"&&H.adapterId===X.id);if(!J){let H={id:vW(),kind:"registered",adapterId:X.id,displayName:X.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};Y.runtimes.push(H),J=H}Y.globalDefaultConfigId=J.id,K=J.id}),K)return console.log(`[ideawave-cli] using agent runtime: ${X.displayName}`),K}return console.warn("[ideawave-cli] no agent runtime detected on PATH (tried claude, codex, gh copilot, opencode). Install one to run agents."),null}catch(Z){return console.warn("[ideawave-cli] runtime auto-seed failed",Z),null}}var RW=120000;function CW(){if(typeof crypto<"u"&&"randomUUID"in crypto)return`call_${crypto.randomUUID()}`;return`call_${Date.now()}_${Math.random().toString(16).slice(2)}`}class Z6{sessions=new Map;createCallId;toolCallTimeoutMs;constructor(Z={}){this.createCallId=Z.createCallId??CW,this.toolCallTimeoutMs=Z.toolCallTimeoutMs??RW}register(Z){let X=this.sessions.get(Z.frontendSessionId);if(X){if(X.userId!==Z.userId)this.rejectPending(X,"frontend session user changed"),X.activeRunIds.clear();this.sessions.set(Z.frontendSessionId,{frontendSessionId:Z.frontendSessionId,userId:Z.userId,tools:Z.tools,send:Z.send,pendingToolCalls:X.pendingToolCalls,activeRunIds:X.activeRunIds,activeRunCardIds:X.activeRunCardIds});return}this.sessions.set(Z.frontendSessionId,{frontendSessionId:Z.frontendSessionId,userId:Z.userId,tools:Z.tools,send:Z.send,pendingToolCalls:new Map,activeRunIds:new Set,activeRunCardIds:new Map})}disconnect(Z,X="frontend session disconnected"){let Q=this.sessions.get(Z);if(!Q)return{activeRunIds:[]};return this.sessions.delete(Z),this.rejectPending(Q,X),{activeRunIds:Array.from(Q.activeRunIds)}}sessionCount(){return this.sessions.size}has(Z){return this.sessions.has(Z)}getUserId(Z){return this.sessions.get(Z)?.userId??null}setMetadata(Z,X){let Q=this.sessions.get(Z);if(Q)Q.tools=X}getMetadata(Z){if(!Z)return[];return this.sessions.get(Z)?.tools??[]}sendToSession(Z,X){let Q=this.sessions.get(Z);if(!Q)return!1;return Q.send(X),!0}callTool(Z,X,Q,K,Y){if(!Z)return Promise.reject(Error("MCP tool call is missing a frontend session id"));let J=this.sessions.get(Z);if(!J)return Promise.reject(Error(`Frontend session ${Z} is not connected`));let H=this.createCallId();return new Promise((w,B)=>{let U=K??(Y?this.getActiveRunIdForCard(J,Y):this.getSoleActiveRunId(J)),q=Y??(U?J.activeRunCardIds.get(U):void 0),h=Date.now(),M=setTimeout(()=>{J.pendingToolCalls.delete(H),m("tool_queue.timeout",{frontendSessionId:Z,runId:U,cardId:q,callId:H,toolName:X,elapsedMs:Date.now()-h,queueDepth:J.pendingToolCalls.size}),B(Error(`Tool "${X}" timed out waiting for the frontend`))},this.toolCallTimeoutMs);J.pendingToolCalls.set(H,{resolve:w,reject:B,timer:M,name:X,runId:U??null,cardId:q??null,startedAt:h}),m("tool_queue.forwarded_to_browser",{frontendSessionId:Z,runId:U,cardId:q,callId:H,toolName:X,queueDepth:J.pendingToolCalls.size}),J.send({type:"tool_call",callId:H,name:X,args:Q,...U?{runId:U}:{},...q?{cardId:q}:{}})})}handleToolResult(Z,X){let Q=this.sessions.get(Z);if(!Q)return;let K=Q.pendingToolCalls.get(X.callId);if(!K)return;if(Q.pendingToolCalls.delete(X.callId),clearTimeout(K.timer),m("tool_queue.result_received",{frontendSessionId:Z,runId:K.runId,cardId:K.cardId,callId:X.callId,toolName:K.name,elapsedMs:Date.now()-K.startedAt,queueDepth:Q.pendingToolCalls.size,ok:X.ok}),X.ok){K.resolve(X.result);return}let Y=X.result;if(Y&&typeof Y==="object"&&Array.isArray(Y.content)){K.resolve({...Y,isError:!0});return}K.reject(Error(X.error??"Tool execution failed"))}markRunActive(Z,X,Q){let K=this.sessions.get(Z);if(!K)return;if(K.activeRunIds.add(X),Q)K.activeRunCardIds.set(X,Q)}markRunSettled(Z,X){let Q=this.sessions.get(Z);if(!Q)return;Q.activeRunIds.delete(X),Q.activeRunCardIds.delete(X)}ownsRun(Z,X){return this.sessions.get(Z)?.activeRunIds.has(X)??!1}rejectPending(Z,X){for(let Q of Z.pendingToolCalls.values())clearTimeout(Q.timer),m("tool_queue.rejected",{frontendSessionId:Z.frontendSessionId,runId:Q.runId,cardId:Q.cardId,toolName:Q.name,elapsedMs:Date.now()-Q.startedAt}),Q.reject(Error(X));Z.pendingToolCalls.clear()}getSoleActiveRunId(Z){return Z.activeRunIds.size===1?Z.activeRunIds.values().next().value:void 0}getActiveRunIdForCard(Z,X){let Q=[...Z.activeRunCardIds.entries()].filter(([K,Y])=>Z.activeRunIds.has(K)&&Y===X).map(([K])=>K);return Q.length===1?Q[0]:void 0}}function T7(){return"0.0.65".trim()?"0.0.65":"dev"}var hW=process.argv.slice(2),A7=[];for(let Z of hW){if(Z==="--dev"){process.env[y4]="1";continue}A7.push(Z)}var g0=A7[0],M1=process.env.APP_ENV==="development"||process.env[y4]==="1";if(g0==="--help"||g0==="-h"||g0==="help")console.log("ideawave — host the local bridge for a running ideawave.app session."),console.log(""),console.log("Usage:"),console.log(" ideawave Serve the browser bridge and MCP forwarder."),console.log(" ideawave --version Print the CLI version."),process.exit(0);if(g0==="--version"||g0==="-v"||g0==="version")console.log(T7()),process.exit(0);if(g0)console.error(`Unknown command: ${g0}`),console.error("Run `ideawave --help` for usage."),process.exit(1);var C1=new Z6,f0=null,u7=M1?{phase:"ready",message:"Local browser-kit proxy is ready"}:{phase:"idle"},K6=new I2(new V1((Z)=>{u7=Z,f0?.sendStatus()})),C4=new l1,X6=M1?C4:K6;function A0(Z,X){C1.sendToSession(Z,X)}async function MW(Z,X){try{let Q=_7[X.method],K=await Q(X.params);A0(Z,{type:"runtime_rpc_result",requestId:X.requestId,ok:!0,result:K})}catch(Q){A0(Z,{type:"runtime_rpc_result",requestId:X.requestId,ok:!1,error:Q instanceof Error?Q.message:String(Q)})}}var h1=!1,R1=null;async function Q6(){if(h1)return;if(R1)return R1;return R1=(async()=>{try{let Z=await m7(C1);z6({...Z,requestedPort:Z.port}),console.log(`[ideawave-cli] MCP endpoint for the agent: ${Z.url}`);try{await D6({onStatusChange:(X)=>{if(o6(),f0?.sendStatus(),X.status==="failed")console.warn(`[ideawave-cli] ACP bridge setup failed for ${X.packageName}: ${X.error??"unknown error"}`)}})}catch(X){console.warn("[ideawave-cli] ACP bridge setup skipped:",X instanceof Error?X.message:String(X))}await S7(),h1=!0,console.log("[ideawave-cli] ready — agent runs will drive the board."),f0?.sendStatus()}catch(Z){console.error("[ideawave-cli] failed to start agent host:",Z),f0?.sendStatus(void 0,Z instanceof Error?Z.message:String(Z))}finally{R1=null}})(),R1}if(process.env.APP_ENV!=="development"){let Z=await y7();if(Z)console.error(`[ideawave-cli] An IdeaWave CLI is already running at ${Z}.`),console.error("[ideawave-cli] Only one CLI per machine is supported — it already serves every browser tab. Exiting."),process.exit(0)}if(!M1)J7().then((Z)=>{if(Z.phase==="ready")console.log("[ideawave-cli] screenshot engine ready");else if(Z.phase==="failed")console.warn(`[ideawave-cli] screenshot engine setup failed: ${Z.error??"unknown error"}`)});f0=await O7({registry:C1,runtime:null,mcpReady:()=>h1,capabilities:M1?[F6]:["browser-proxy-v1",w6,U6],cliVersion:T7(),browserRuntimeStatus:()=>u7,onToolMetadata:(Z)=>{console.log(`[ideawave-cli] session ${Z} advertised ${C1.getMetadata(Z).length} tools`),Q6()},onRunTurn:(Z,X)=>{console.log(`[ideawave-cli] running agent turn for card ${X.cardId} (session ${Z})`),(async()=>{if(await Q6(),!h1){A0(Z,{type:"run_settled",runId:X.runId,cardId:X.cardId,result:{assistantContent:"",model:null,latencyMs:0,errorText:"IdeaWave CLI agent host is not ready",partialText:null}});return}await N8(X,(Q)=>A0(Z,Q))})().catch(()=>{return}).finally(()=>C1.markRunSettled(Z,X.runId))},onCancelRun:(Z,X)=>{F2(X)},onRuntimeRpc:(Z,X)=>{MW(Z,X)},onBrowserRpc:(Z,X,Q)=>{X6.handleRpc(Z,X,Q).then((K)=>{A0(Z,{type:"browser_rpc_result",requestId:Q.requestId,ok:!0,result:K})},(K)=>{A0(Z,{type:"browser_rpc_result",requestId:Q.requestId,ok:!1,error:K instanceof Error?K.message:String(K)})})},onHttpRequest:(Z,X)=>X6.handleHttpRequest(Z,X),onHttpUpgrade:(Z,X,Q)=>M1?C4.handleUpgrade(Z,X,Q):!1,onWarmupRun:(Z,X,Q)=>{(async()=>{if(await Q6(),!h1)return{status:"retryable",error:"agent host is not ready"};return D8({cardId:X.cardId,boardId:X.boardId,userId:Q,frontendSessionId:Z})})().then((K)=>{if(!X.warmupId)return;A0(Z,{type:"warmup_result",warmupId:X.warmupId,cardId:X.cardId,...K})})},onDisconnect:(Z,X)=>{X6.closeFrontendSession(Z),C8(Z);for(let Q of X)F2(Q);m("bridge.frontend_disconnected",{frontendSessionId:Z,activeRuns:X.length}),J6(Z).catch((Q)=>{console.warn(`[ideawave-cli] failed to evict sessions for ${Z}:`,Q instanceof Error?Q.message:String(Q))}),console.log(`[ideawave-cli] browser session ${Z} disconnected`)}});K6.setPort(f0.port);C4.setPort(f0.port);console.log(`[ideawave-cli] browser bridge listening on ${f0.url}`);console.log("[ideawave-cli] waiting for ideawave.app browser sessions…");var I7=!1;for(let Z of["SIGINT","SIGTERM"])process.once(Z,()=>{if(I7)return;I7=!0,h8(),(async()=>{await K6.close(),await C4.close(),await H7(),await f0?.close().catch(()=>{return}),process.exit(0)})()});
946
+ ${Z}`),X.destroy()}function JZ(X,$){return new Promise((Z,Q)=>{let K=(Y)=>{X.off("listening",J),Q(Y)},J=()=>{X.off("error",K);let Y=X.address();if(!Y||typeof Y==="string"){Q(Error("Failed to read CLI bridge server address"));return}Z(Y.port)};X.once("error",K),X.once("listening",J),X.listen($,"127.0.0.1")})}function Y2(X){return new Promise(($,Z)=>{X.close((Q)=>{if(Q)Z(Q);else $()})})}async function V2(X,$=V1()){let Z=new Map,Q=new Map,K=X.maxMessageSize??i3,J=!1,Y=(x)=>{let U=Q.get(x);if(U)clearTimeout(U);Q.delete(x)},j=(x)=>{Q.delete(x);let{activeRunIds:U}=X.registry.disconnect(x);X.onDisconnect(x,U)},z=(x,U)=>{let D={type:"cli_status",connected:!0,runtime:X.runtime,mcpReady:X.mcpReady(),error:U,capabilities:X.capabilities??[],cliVersion:X.cliVersion,browserRuntime:X.browserRuntimeStatus?.()};if(x){let N=Z.get(x);if(N)L0(N,D);return}for(let N of Z.values())L0(N,D)},W=(x,U)=>{let D=U.sessionId.trim(),N=U.userId.trim();if(!D||!N){L0(x,{type:"cli_status",connected:!1,runtime:X.runtime,mcpReady:X.mcpReady(),error:"Missing frontend session or user id"}),x.close();return}Y(D);let H=Z.get(D);if(H&&H!==x)H.close();x.data.frontendSessionId=D,Z.set(D,x),X.registry.register({frontendSessionId:D,userId:N,tools:U.tools,send:(P)=>L0(x,P)}),z(D),X.onToolMetadata?.(D)},V=(x,U)=>{let D=X.registry.getUserId(x);if(!D)return;switch(U.type){case"bridge_ping":{let N=Z.get(x);if(N)L0(N,{type:"bridge_pong"});break}case"tool_metadata":X.registry.setMetadata(x,U.tools),X.onToolMetadata?.(x);break;case"tool_result":X.registry.handleToolResult(x,U);break;case"run_turn":q("bridge.run_received",{runId:U.run.runId,cardId:U.run.cardId,frontendSessionId:x}),X.registry.markRunActive(x,U.run.runId,U.run.cardId),X.onRunTurn(x,{...U.run,frontendSessionId:x,userId:D});break;case"cancel_run":if(X.registry.ownsRun(x,U.runId))X.onCancelRun(x,U.runId);break;case"runtime_rpc":X.onRuntimeRpc(x,U);break;case"browser_rpc":X.onBrowserRpc?.(x,Z.get(x)?.data.frontendOrigin??"",U);break;case"warmup_run":X.onWarmupRun(x,{...U,frontendSessionId:x},D);break;default:break}},B=(x,U)=>{let D=GX(x.headers.origin),N=z1(D),H={Vary:"Origin"};if(N&&D)H["Access-Control-Allow-Origin"]=D,H["Access-Control-Allow-Private-Network"]="true";if(x.method==="OPTIONS"){U.writeHead(204,{...H,"Access-Control-Allow-Methods":"GET, OPTIONS","Access-Control-Allow-Headers":"*","Access-Control-Max-Age":"600"}),U.end();return}if(x.method!=="GET"){U.writeHead(405,H),U.end();return}U.writeHead(200,{...H,"content-type":"application/json","cache-control":"no-store"}),U.end(JSON.stringify({ideawave:!0,runtime:X.runtime,mcpReady:X.mcpReady(),capabilities:X.capabilities??[],cliVersion:X.cliVersion,browserRuntime:X.browserRuntimeStatus?.()}))},L=(x,U)=>{let D=GX(x.headers.origin),N=z1(D),H={Vary:"Origin"};if(N&&D)H["Access-Control-Allow-Origin"]=D,H["Access-Control-Allow-Private-Network"]="true";if(x.method==="OPTIONS"){U.writeHead(204,{...H,"Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"content-type","Access-Control-Max-Age":"600"}),U.end();return}if(!N){U.writeHead(403,H),U.end();return}if(x.method!=="POST"){U.writeHead(405,H),U.end();return}let P={...H,"content-type":"application/json"},w=(M,G)=>{U.writeHead(M,P),U.end(JSON.stringify(G))},O="",C=!1;x.on("data",(M)=>{if(O+=M.toString("utf8"),O.length>r3)C=!0,x.destroy()}),x.on("end",()=>{if(C){w(400,{ok:!1,error:"Request body too large"});return}let M;try{M=JSON.parse(O)}catch{w(400,{ok:!1,error:"Invalid JSON body"});return}let G=typeof M.url==="string"?M.url:"";if(!Q2(G)){w(400,{ok:!1,error:"url must be an http(s) loopback or /static_boards/ page URL"});return}let k=(_,b)=>{let d=typeof _==="number"?_:Number.NaN;if(!Number.isFinite(d))return b;return Math.min(4000,Math.max(200,Math.round(d)))};K2({url:G,width:k(M.width,1440),height:k(M.height,900)}).then((_)=>w(200,{ok:!0,path:_.path,engine:_.engine})).catch((_)=>{let b=_ instanceof y0?503:_ instanceof jX?429:500;w(b,{ok:!1,..._ instanceof y0?{installing:!0}:{},error:_ instanceof Error?_.message:String(_)})})})};for(let x of $){let U=a3((H,P)=>{(async()=>{let w=new URL(H.url??"/","http://127.0.0.1").pathname;if(w===e$){B(H,P);return}if(w===t3){L(H,P);return}if(await X.onHttpRequest?.(H,P))return;P.writeHead(404,{"content-type":"text/plain"}),P.end("IdeaWave CLI bridge")})().catch((w)=>{if(P.headersSent){P.destroy(w instanceof Error?w:void 0);return}P.writeHead(500,{"content-type":"text/plain"}),P.end("IdeaWave CLI bridge request failed")})}),D=new d3({noServer:!0,maxPayload:K}),N=(H)=>{if(H.idleTimer)clearTimeout(H.idleTimer);H.idleTimer=setTimeout(()=>{H.close()},o3),H.idleTimer.unref?.()};D.on("connection",(H,P)=>{let w=H;w.data={id:u3(),frontendSessionId:null,frontendOrigin:new URL(GX(P.headers.origin)??j2).origin},w.idleTimer=null,N(w),w.on("ping",()=>N(w)),w.on("pong",()=>N(w)),w.on("error",()=>{if(w.idleTimer)clearTimeout(w.idleTimer);w.close()}),w.on("message",(O)=>{N(w);let C=KZ(O);if(K>0&&C.length>K)return;let M=S0(C);if(!M)return;let G=w.data.frontendSessionId;if(!G){if(M.type==="bridge_probe")L0(w,{type:"bridge_probe_ack",protocolVersion:M.protocolVersion});else if(M.type==="frontend_hello")W(w,M);return}V(G,M)}),w.on("close",()=>{if(w.idleTimer)clearTimeout(w.idleTimer);let O=w.data.frontendSessionId;if(!O)return;if(Z.get(O)!==w)return;if(Z.delete(O),Y(O),J)return;Q.set(O,setTimeout(()=>j(O),n3))})}),U.on("upgrade",(H,P,w)=>{let O=new URL(H.url??"/","http://127.0.0.1").pathname;if(X.onHttpUpgrade?.(H,P,w))return;if(O!==G1){J2(P,404,"Not Found");return}if(!z1(GX(H.headers.origin))){J2(P,403,"Forbidden");return}D.handleUpgrade(H,P,w,(C)=>{D.emit("connection",C,H)})});try{let H=await JZ(U,x);return{url:`ws://127.0.0.1:${H}${G1}`,port:H,sendStatus:z,close:async()=>{J=!0;for(let P of Q.values())clearTimeout(P);Q.clear();for(let P of D.clients){let w=P;if(w.idleTimer)clearTimeout(w.idleTimer);w.close()}D.close(),await Y2(U).catch(()=>{return})}}}catch(H){if(D.close(),await Y2(U).catch(()=>{return}),H?.code==="EADDRINUSE")continue;throw H}}throw Error(`No free IdeaWave CLI bridge port found in ${$[0]}-${$.at(-1)}`)}import{lstat as MZ,readFile as LZ}from"node:fs/promises";import PZ from"node:os";import R0 from"node:path";import{Server as FZ}from"@modelcontextprotocol/sdk/server/index.js";import{CallToolRequestSchema as OZ,ListToolsRequestSchema as kZ}from"@modelcontextprotocol/sdk/types.js";import{randomUUID as WZ}from"node:crypto";import{createServer as jZ}from"node:http";import{StreamableHTTPServerTransport as GZ}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{isInitializeRequest as x2}from"@modelcontextprotocol/sdk/types.js";var z2=new Set(["127.0.0.1","localhost","[::1]","::1"]);function YZ(X){let $=X.trim();if($.length===0)return null;if($.startsWith("[")){let J=$.indexOf("]");if(J===-1)return null;let Y=$.slice(0,J+1),j=$.slice(J+1);if(j.length===0)return{host:Y,port:null};if(!j.startsWith(":"))return null;let z=Number(j.slice(1));if(!Number.isInteger(z)||z<=0||z>65535)return null;return{host:Y,port:z}}let Z=$.lastIndexOf(":");if(Z===-1)return{host:$,port:null};let Q=$.slice(Z+1),K=Number(Q);if(!Number.isInteger(K)||K<=0||K>65535)return{host:$,port:null};return{host:$.slice(0,Z),port:K}}function U2(X){return z2.has(X)||z2.has(X.toLowerCase())}function H2(X,$){let Z=X.headers.host;if(typeof Z!=="string")return{ok:!1,status:403,reason:"missing-host"};let Q=YZ(Z);if(!Q)return{ok:!1,status:403,reason:"bad-host"};if(!U2(Q.host))return{ok:!1,status:403,reason:"non-loopback-host"};if(Q.port!==null&&Q.port!==$)return{ok:!1,status:403,reason:"host-port-mismatch"};let K=X.headers.origin;if(typeof K==="string"&&K.length>0){if(K!=="null"){let J;try{J=new URL(K)}catch{return{ok:!1,status:403,reason:"bad-origin"}}if(!U2(J.hostname))return{ok:!1,status:403,reason:"non-loopback-origin"}}}return{ok:!0}}var D2="/mcp",VZ=43274,w2=16777216,zZ=1800000,UZ=300000,N2=200,HZ=-32700,Z0=-32600,U1=-32603;function l(X,$,Z,Q,K){X.statusCode=$,X.setHeader("content-type","application/json"),X.end(JSON.stringify({jsonrpc:"2.0",error:{code:Z,message:Q,...K?{data:K}:{}},id:null}))}class H1 extends Error{constructor(){super("expected application/json");this.name="BadContentTypeError"}}class x1 extends Error{constructor(){super(`body exceeds ${w2} bytes`);this.name="BodyTooLargeError"}}async function xZ(X){if(X.method&&X.method!=="POST")return;let $=X.headers["content-type"];if(typeof $==="string"&&$.trim().length>0){if(!$.toLowerCase().includes("application/json"))throw new H1}let Z=0,Q=[];for await(let J of X){let Y=typeof J==="string"?Buffer.from(J):J;if(Z+=Y.byteLength,Z>w2)throw new x1;Q.push(Y)}if(Q.length===0)return;let K=Buffer.concat(Q).toString("utf8");if(K.length===0)return;return JSON.parse(K)}function DZ(X){if(Array.isArray(X))return X.some(x2);return x2(X)}function NZ(X){if(typeof X==="number")return X;let $=process.env.IDEAWAVE_MCP_PORT;if($&&$.trim().length>0){let Z=Number($);if(Number.isInteger(Z)&&Z>=0&&Z<65536)return Z}return VZ}async function wZ(X,$){let Z=(K)=>new Promise((J,Y)=>{let j=(W)=>{X.off("listening",z),Y(W)},z=()=>{X.off("error",j),J()};X.once("error",j),X.once("listening",z),X.listen(K,"127.0.0.1")});try{await Z($)}catch(K){if(K.code!=="EADDRINUSE"||$===0)throw K;console.warn(`[mcp] port ${$} in use, falling back to an OS-assigned port; external CLIs will need to re-paste the install command from Settings → External agents`),await Z(0)}let Q=X.address();if(Q==null||typeof Q==="string")throw Error("[mcp] failed to read bound address");return Q.port}function BZ(X,$){if($&&typeof $==="object"&&!Array.isArray($)){let Q=$.params;if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let K=Q.clientInfo;if(K&&typeof K==="object"&&!Array.isArray(K)){let J=K.name;if(typeof J==="string"&&J.trim().length>0)return J.trim()}}}let Z=X.headers["user-agent"];if(typeof Z==="string"&&Z.trim().length>0)return Z.trim();return null}async function B2(X){let $=new Map,Z=0;function Q(W){let V=$.get(W);if(V)V.lastActivity=Date.now()}async function K(W,V){$.delete(W),await V.transport.close().catch(()=>{return})}async function J(){let W=null,V=1/0;for(let[B,L]of $)if(L.lastActivity<V)V=L.lastActivity,W=B;if(W!==null){let B=$.get(W);if(B)console.warn(`[mcp] session cap of ${N2} reached; evicting ${W}`),await K(W,B)}}let Y=setInterval(()=>{let W=Date.now()-zZ;for(let[V,B]of $)if(B.lastActivity<W)console.log(`[mcp] sweeping idle session ${V}`),K(V,B)},UZ);Y.unref?.();let j=jZ((W,V)=>{(async()=>{let B;try{B=new URL(W.url??"/","http://127.0.0.1").pathname}catch{l(V,400,Z0,"bad-url");return}if(B!==D2){l(V,404,Z0,"not-found");return}let L=W.method??"POST";if(L!=="POST"&&L!=="GET"&&L!=="DELETE"){V.setHeader("Allow","GET, POST, DELETE"),l(V,405,Z0,"method-not-allowed");return}let x=H2(W,Z);if(!x.ok){l(V,x.status,Z0,"forbidden",{reason:x.reason});return}let U=W.headers["mcp-session-id"],D=typeof U==="string"?U:void 0;if(L==="GET"||L==="DELETE"){if(!D||!$.has(D)){l(V,400,Z0,"no-session",{hint:"Open a POST initialize first to receive an Mcp-Session-Id."});return}let P=$.get(D).transport;Q(D);try{await P.handleRequest(W,V)}catch(w){if(console.error("[mcp] transport.handleRequest (GET/DELETE) threw",w),!V.headersSent)l(V,500,U1,"internal")}return}let N;try{N=await xZ(W)}catch(P){if(P instanceof H1){l(V,415,Z0,"expected-application-json");return}if(P instanceof x1){l(V,413,Z0,"body-too-large");return}l(V,400,HZ,"invalid-json");return}let H;if(D&&$.has(D))H=$.get(D).transport,Q(D);else if(!D&&N!==void 0&&DZ(N)){let P=W.headers["x-ideawave-user-id"],w=typeof P==="string"&&P.trim().length>0?P.trim():null,O=W.headers["x-ideawave-frontend-session-id"],C=typeof O==="string"&&O.trim().length>0?O.trim():null,M=W.headers["x-ideawave-tool-surface"],G=typeof M==="string"&&M.trim()==="read"?"read":"full",k=W.headers["x-ideawave-images-supported"],_=typeof k==="string"&&k.trim()==="1",b=W.headers["x-ideawave-card-id"],d=typeof b==="string"&&b.trim().length>0?b.trim():null,n=W.headers["x-ideawave-board-id"],A=typeof n==="string"&&n.trim().length>0?n.trim():null,v=W.headers["x-ideawave-run-folder"],R=typeof v==="string"&&v.trim().length>0?v.trim():null,I=BZ(W,N);if($.size>=N2)await J();let h=null,J0=new GZ({sessionIdGenerator:()=>WZ(),onsessioninitialized:(U0)=>{h=U0,$.set(U0,{transport:J0,lastActivity:Date.now()})},onsessionclosed:(U0)=>{$.delete(U0)}});J0.onclose=()=>{if(J0.sessionId)$.delete(J0.sessionId)};try{await X.buildServer({userId:w,frontendSessionId:C,boardId:A,toolSurface:G,imagesSupported:_,cardId:d,runFolder:R,clientHint:I}).connect(J0)}catch(U0){if(console.error("[mcp] buildServer/connect failed",U0),h)$.delete(h);await J0.close().catch(()=>{return}),l(V,500,U1,"server-init-failed");return}H=J0}else{l(V,400,Z0,"no-session",{hint:"Non-initialize requests must include a valid Mcp-Session-Id header obtained from a prior initialize."});return}try{await H.handleRequest(W,V,N)}catch(P){if(console.error("[mcp] transport.handleRequest threw",P),!V.headersSent)l(V,500,U1,"internal")}})().catch((B)=>{console.error("[mcp] unhandled request handler error:",B)})});return Z=await wZ(j,NZ(X.port)),{url:`http://127.0.0.1:${Z}${D2}`,port:Z,close:async()=>{clearInterval(Y);for(let W of $.values())await W.transport.close().catch(()=>{return});$.clear(),await new Promise((W)=>j.close(()=>W()))}}}var qZ={name:"ideawave-board",version:"1.0.0"},zX="list_run_folder",UX="read_run_folder_file",P2=new Set(["list_boards","get_board","screenshot_board","list_nodes","list_edges","inspect_node","list_context_sources","read_context_card","read_context_file","read_context_image","list_context_folder","get_board_wiki","search_board","get_card_messages","list_agent_cards","inspect_neighbors",zX,UX]),F2=new Set(["inspect_diagram"]),_Z=[{name:zX,description:"List visible files and folders under the selected runtime run folder. Hidden/config folders are omitted.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Optional relative path inside the selected run folder. Defaults to the run-folder root."}},additionalProperties:!1}},{name:UX,description:"Read a text file inside the selected runtime run folder. Hidden/config paths and outside-folder paths are denied.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Relative path to a text file inside the selected run folder."}},required:["path"],additionalProperties:!1}}];function D1(X){return{content:[{type:"text",text:X}]}}function AZ(X){return D1(JSON.stringify(X,null,2))}function M2(X){return{...D1(X),isError:!0}}async function CZ(X,$){if(!$||X.isError)return X;let Z=X.content.find((J)=>J.type==="text");if(!Z)return X;let Q;try{let J=JSON.parse(Z.text);if(typeof J.path!=="string")return X;Q=R0.resolve(J.path)}catch{return X}let K=R0.resolve(R0.join(PZ.tmpdir(),"ideawave-screenshots"));if(R0.dirname(Q)!==K||!/^board-[a-z0-9-]+\.png$/i.test(R0.basename(Q)))return X;try{if(!(await MZ(Q)).isFile())return X;let Y=await LZ(Q);if(Y.byteLength<1024||Y.byteLength>26214400||!Y.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])))return X;return{...X,content:[...X.content,{type:"image",data:Y.toString("base64"),mimeType:"image/png"}]}}catch{return X}}function fZ(X,$,Z="full",Q=!1){return X.getMetadata($).filter((K)=>{let J=XX(K.name);if(Z==="read"&&!P2.has(J))return!1;if(!Q&&F2.has(J))return!1;return!0}).map((K)=>({name:K.name,description:K.description,inputSchema:K.inputSchema}))}function yZ(X,$,Z={}){let Q=fZ(X,$,Z.toolSurface??"full",Z.imagesSupported??!1);return Z.includeRunFolderTools?[...Q,..._Z]:Q}function L2(X,$){if(!X||typeof X!=="object"||Array.isArray(X))return null;let Z=X[$];return typeof Z==="string"?Z:null}async function RZ(X,$,Z){if(Z&&Z.trim().length>0)return Z.trim();if(!X||!$)throw Error("Run-folder tools require an active IdeaWave board and card.");return(await X0({boardId:X,cardId:$})).runFolder}async function bZ(X){let $=await RZ(X.boardId,X.cardId,X.runFolder);if(X.name===zX){let Z=L2(X.args,"path")??"",Q=await M$($,Z);return AZ(Q)}if(X.name===UX){let Z=L2(X.args,"path");if(!Z)return M2("read_run_folder_file requires a path.");return D1(await e0($,Z))}return M2(`Unknown local tool "${X.name}"`)}function TZ(X,$,Z,Q,K,J="full",Y=!1){let j=new FZ(qZ,{capabilities:{tools:{}}}),z=async()=>{if(Y)return!0;if(g$(Q))return!0;if(Z&&Q)try{return(await X0({boardId:Z,cardId:Q})).adapter.supportsImages===!0}catch{return!1}return!1};return j.setRequestHandler(kZ,async()=>({tools:yZ(X,$,{includeRunFolderTools:Boolean(K||Z&&Q),toolSurface:J,imagesSupported:await z()})})),j.setRequestHandler(OZ,async(W)=>{let{name:V,arguments:B}=W.params,L=XX(V),x=Date.now();q("mcp.tool_call_received",{frontendSessionId:$,cardId:Q,toolName:L});try{if(L===zX||L===UX)return await bZ({name:L,args:B,boardId:Z,cardId:Q,runFolder:K});if(J==="read"&&!P2.has(L))throw Error(`Tool "${V}" is not available in read-only mode`);if(F2.has(L)&&!await z())throw Error(`Tool "${V}" requires a runtime that supports image input`);let U=await X.callTool($,L,B??{},void 0,Q??void 0);if(q("mcp.tool_result_returned",{frontendSessionId:$,cardId:Q,toolName:L,elapsedMs:Date.now()-x}),U&&typeof U==="object"&&Array.isArray(U.content)){let D=U;return L==="screenshot_board"?await CZ(D,await z()):D}return{content:[{type:"text",text:typeof U==="string"?U:JSON.stringify(U)}]}}catch(U){return q("mcp.tool_result_returned",{frontendSessionId:$,cardId:Q,toolName:L,elapsedMs:Date.now()-x,hasError:!0}),{content:[{type:"text",text:U instanceof Error?U.message:"Tool call failed"}],isError:!0}}}),j}function O2(X,$){return B2({buildServer:(Z)=>TZ(X,Z.frontendSessionId,Z.boardId,Z.cardId,Z.runFolder,Z.toolSurface,Z.imagesSupported),port:$})}import HX from"node:fs/promises";import N1 from"node:os";import xX from"node:path";function k2(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function EZ(){let[X,$]=await Promise.all([m(),W$()]),Z=X.globalDefaultConfigId?X.runtimes.find((Q)=>Q.id===X.globalDefaultConfigId)??null:null;return{runtimes:X.runtimes,globalDefaultConfigId:X.globalDefaultConfigId,globalDefaultEffective:Z?{runFolder:Z.runFolder??N1.homedir(),modelId:Z.defaultModelId??null,configValues:Z.defaultConfigValues??{}}:null,knownAdapters:D0().map((Q)=>({id:Q.id,displayName:Q.displayName})),readiness:$}}async function vZ(X){try{let $=await X0({boardId:X.boardId,cardId:X.cardId});return{resolved:{configId:$.entry.id,adapterId:$.entry.kind==="registered"?$.entry.adapterId:null,displayName:$.entry.displayName,runFolder:$.runFolder,modelId:$.modelId,configValues:$.configValues}}}catch($){if($ instanceof Y0)return{resolved:null};throw $}}async function hZ(X){return p(($)=>{let Z=$.runtimes.find((J)=>J.kind==="registered"&&J.adapterId===X.adapterId);if(Z)return Z;let Q=D0().find((J)=>J.id===X.adapterId);if(!Q)throw Error(`Unknown adapterId: ${X.adapterId}`);let K={id:k2(),kind:"registered",adapterId:X.adapterId,displayName:Q.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return $.runtimes.push(K),K})}async function IZ(X){return p(($)=>{let Z={id:k2(),kind:"custom",displayName:X.displayName,command:X.command,args:X.args,env:X.env,runFolder:X.runFolder,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return $.runtimes.push(Z),Z})}async function SZ(X){await p(($)=>{if($.runtimes=$.runtimes.filter((Z)=>Z.id!==X.runtimeConfigId),$.globalDefaultConfigId===X.runtimeConfigId)$.globalDefaultConfigId=null;for(let Z of Object.keys($.boardOverrides))if($.boardOverrides[Z].runtimeConfigId===X.runtimeConfigId)delete $.boardOverrides[Z];for(let Z of Object.keys($.cardOverrides))if($.cardOverrides[Z].runtimeConfigId===X.runtimeConfigId)delete $.cardOverrides[Z]})}async function gZ(X){await p(($)=>{let Z=$.runtimes.find((Q)=>Q.id===X.runtimeConfigId);if(!Z)throw Error(`Runtime config not found: ${X.runtimeConfigId}`);if($.globalDefaultConfigId=X.runtimeConfigId,X.runFolder!==void 0)Z.runFolder=X.runFolder;if(X.modelId!==void 0)Z.defaultModelId=X.modelId;if(X.configValues!==void 0)Z.defaultConfigValues=X.configValues})}async function mZ(X){X.boardId,await p(($)=>{if(X.runtimeConfigId===null){delete $.cardOverrides[X.cardId];return}if(!$.runtimes.some((K)=>K.id===X.runtimeConfigId))throw Error(`Runtime config not found: ${X.runtimeConfigId}`);let Q=$.cardOverrides[X.cardId];$.cardOverrides[X.cardId]={runtimeConfigId:X.runtimeConfigId,runFolder:X.runFolder!==void 0?X.runFolder:Q?.runFolder??null,modelId:X.modelId!==void 0?X.modelId:Q?.modelId??null,configValues:X.configValues!==void 0?X.configValues:Q?.configValues??{}}})}async function cZ(X){let Z=(await m()).runtimes.find((Y)=>Y.id===X.runtimeConfigId);if(!Z)throw Error(`Runtime config not found: ${X.runtimeConfigId}`);let Q=a(Z),K=await Q.resolveSpawnConfig(Z),J=Z.runFolder??N1.homedir();try{let Y=await v$({spawn:{...K,cwd:J},modelId:X.modelId??Z.defaultModelId??null,configValues:X.configValues??Z.defaultConfigValues??{}}),j=r0({adapterId:Q.id,models:Y.models,currentModelId:Y.currentModelId}),z=new Date().toISOString();return await p((W)=>{let V=W.runtimes.find((B)=>B.id===X.runtimeConfigId);if(V)V.discoveredModels=j,V.discoveredConfigOptions=Y.configOptions,V.discoveredAt=z}),{ok:!0,models:j,configOptions:Y.configOptions,currentModelId:Y.currentModelId}}catch(Y){if(Y instanceof H0)throw Error(`${Y.message}${Q.authHint?` ${Q.authHint}`:""}`);if(Y instanceof f||Y instanceof u)throw Error(Y.message);throw Y}}async function lZ(X){let $=N1.homedir(),Z=X.path?.trim()?X.path.trim():$,Q=xX.resolve(Z),K=!0;try{if(!(await HX.stat(Q)).isDirectory())Q=xX.dirname(Q)}catch{K=!1,Q=$}let J=[];try{J=(await HX.readdir(Q,{withFileTypes:!0})).filter((z)=>z.isDirectory()&&!z.name.startsWith(".")).map((z)=>({name:z.name,path:xX.join(Q,z.name)})).sort((z,W)=>z.name.localeCompare(W.name))}catch{J=[]}let Y=xX.dirname(Q);return{path:Q,parent:Y===Q?null:Y,home:$,exists:K,entries:J}}var q2={list:EZ,getEffectiveForCard:vZ,registerRegistered:hZ,registerCustom:IZ,unregister:SZ,setUserDefault:gZ,setCardOverride:mZ,refreshModels:cZ,browseFolder:lZ};var pZ=[{id:"claude-code",displayName:"Claude Code"},{id:"codex",displayName:"Codex"},{id:"copilot",displayName:"Copilot"},{id:"opencode",displayName:"OpenCode"}];function uZ(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function _2(){try{let X=await m();if(X.globalDefaultConfigId){if(X.runtimes.some((Z)=>Z.id===X.globalDefaultConfigId))return X.globalDefaultConfigId}for(let $ of pZ){if((await j$($.id))?.status!=="ready")continue;let Q=null;if(await p((K)=>{if(K.globalDefaultConfigId){if(K.runtimes.some((j)=>j.id===K.globalDefaultConfigId)){Q=K.globalDefaultConfigId;return}}let J=K.runtimes.find((Y)=>Y.kind==="registered"&&Y.adapterId===$.id);if(!J){let Y={id:uZ(),kind:"registered",adapterId:$.id,displayName:$.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};K.runtimes.push(Y),J=Y}K.globalDefaultConfigId=J.id,Q=J.id}),Q)return console.log(`[ideawave-cli] using agent runtime: ${$.displayName}`),Q}return console.warn("[ideawave-cli] no agent runtime detected on PATH (tried claude, codex, gh copilot, opencode). Install one to run agents."),null}catch(X){return console.warn("[ideawave-cli] runtime auto-seed failed",X),null}}var aZ=120000;function dZ(){if(typeof crypto<"u"&&"randomUUID"in crypto)return`call_${crypto.randomUUID()}`;return`call_${Date.now()}_${Math.random().toString(16).slice(2)}`}class w1{sessions=new Map;createCallId;toolCallTimeoutMs;constructor(X={}){this.createCallId=X.createCallId??dZ,this.toolCallTimeoutMs=X.toolCallTimeoutMs??aZ}register(X){let $=this.sessions.get(X.frontendSessionId);if($){if($.userId!==X.userId)this.rejectPending($,"frontend session user changed"),$.activeRunIds.clear();this.sessions.set(X.frontendSessionId,{frontendSessionId:X.frontendSessionId,userId:X.userId,tools:X.tools,send:X.send,pendingToolCalls:$.pendingToolCalls,activeRunIds:$.activeRunIds,activeRunCardIds:$.activeRunCardIds});return}this.sessions.set(X.frontendSessionId,{frontendSessionId:X.frontendSessionId,userId:X.userId,tools:X.tools,send:X.send,pendingToolCalls:new Map,activeRunIds:new Set,activeRunCardIds:new Map})}disconnect(X,$="frontend session disconnected"){let Z=this.sessions.get(X);if(!Z)return{activeRunIds:[]};return this.sessions.delete(X),this.rejectPending(Z,$),{activeRunIds:Array.from(Z.activeRunIds)}}sessionCount(){return this.sessions.size}has(X){return this.sessions.has(X)}getUserId(X){return this.sessions.get(X)?.userId??null}setMetadata(X,$){let Z=this.sessions.get(X);if(Z)Z.tools=$}getMetadata(X){if(!X)return[];return this.sessions.get(X)?.tools??[]}sendToSession(X,$){let Z=this.sessions.get(X);if(!Z)return!1;return Z.send($),!0}callTool(X,$,Z,Q,K){if(!X)return Promise.reject(Error("MCP tool call is missing a frontend session id"));let J=this.sessions.get(X);if(!J)return Promise.reject(Error(`Frontend session ${X} is not connected`));let Y=this.createCallId();return new Promise((j,z)=>{let W=Q??(K?this.getActiveRunIdForCard(J,K):this.getSoleActiveRunId(J)),V=K??(W?J.activeRunCardIds.get(W):void 0),B=Date.now(),L=setTimeout(()=>{J.pendingToolCalls.delete(Y),q("tool_queue.timeout",{frontendSessionId:X,runId:W,cardId:V,callId:Y,toolName:$,elapsedMs:Date.now()-B,queueDepth:J.pendingToolCalls.size}),z(Error(`Tool "${$}" timed out waiting for the frontend`))},this.toolCallTimeoutMs);J.pendingToolCalls.set(Y,{resolve:j,reject:z,timer:L,name:$,runId:W??null,cardId:V??null,startedAt:B}),q("tool_queue.forwarded_to_browser",{frontendSessionId:X,runId:W,cardId:V,callId:Y,toolName:$,queueDepth:J.pendingToolCalls.size}),J.send({type:"tool_call",callId:Y,name:$,args:Z,...W?{runId:W}:{},...V?{cardId:V}:{}})})}handleToolResult(X,$){let Z=this.sessions.get(X);if(!Z)return;let Q=Z.pendingToolCalls.get($.callId);if(!Q)return;if(Z.pendingToolCalls.delete($.callId),clearTimeout(Q.timer),q("tool_queue.result_received",{frontendSessionId:X,runId:Q.runId,cardId:Q.cardId,callId:$.callId,toolName:Q.name,elapsedMs:Date.now()-Q.startedAt,queueDepth:Z.pendingToolCalls.size,ok:$.ok}),$.ok){Q.resolve($.result);return}let K=$.result;if(K&&typeof K==="object"&&Array.isArray(K.content)){Q.resolve({...K,isError:!0});return}Q.reject(Error($.error??"Tool execution failed"))}markRunActive(X,$,Z){let Q=this.sessions.get(X);if(!Q)return;if(Q.activeRunIds.add($),Z)Q.activeRunCardIds.set($,Z)}markRunSettled(X,$){let Z=this.sessions.get(X);if(!Z)return;Z.activeRunIds.delete($),Z.activeRunCardIds.delete($)}ownsRun(X,$){return this.sessions.get(X)?.activeRunIds.has($)??!1}rejectPending(X,$){for(let Z of X.pendingToolCalls.values())clearTimeout(Z.timer),q("tool_queue.rejected",{frontendSessionId:X.frontendSessionId,runId:Z.runId,cardId:Z.cardId,toolName:Z.name,elapsedMs:Date.now()-Z.startedAt}),Z.reject(Error($));X.pendingToolCalls.clear()}getSoleActiveRunId(X){return X.activeRunIds.size===1?X.activeRunIds.values().next().value:void 0}getActiveRunIdForCard(X,$){let Z=[...X.activeRunCardIds.entries()].filter(([Q,K])=>X.activeRunIds.has(Q)&&K===$).map(([Q])=>Q);return Z.length===1?Z[0]:void 0}}function C2(){return"0.0.67".trim()?"0.0.67":"dev"}var iZ=process.argv.slice(2),f2=[];for(let X of iZ){if(X==="--dev"){process.env[VX]="1";continue}f2.push(X)}var K0=f2[0],P0=process.env.APP_ENV==="development"||process.env[VX]==="1";if(K0==="--help"||K0==="-h"||K0==="help")console.log("ideawave — host the local bridge for a running ideawave.app session."),console.log(""),console.log("Usage:"),console.log(" ideawave Serve the browser bridge and MCP forwarder."),console.log(" ideawave --version Print the CLI version."),process.exit(0);if(K0==="--version"||K0==="-v"||K0==="version")console.log(C2()),process.exit(0);if(K0)console.error(`Unknown command: ${K0}`),console.error("Run `ideawave --help` for usage."),process.exit(1);var T0=new w1,z0=null,oZ=P0?{phase:"ready",message:"Local browser-kit proxy is ready"}:{phase:"idle"},F0=new t0;function Q0(X,$){T0.sendToSession(X,$)}async function nZ(X,$){try{let Z=q2[$.method],Q=await Z($.params);Q0(X,{type:"runtime_rpc_result",requestId:$.requestId,ok:!0,result:Q})}catch(Z){Q0(X,{type:"runtime_rpc_result",requestId:$.requestId,ok:!1,error:Z instanceof Error?Z.message:String(Z)})}}var E0=!1,b0=null;async function B1(){if(E0)return;if(b0)return b0;return b0=(async()=>{try{let X=await O2(T0);q1({...X,requestedPort:X.port}),console.log(`[ideawave-cli] MCP endpoint for the agent: ${X.url}`);try{await l1({onStatusChange:($)=>{if(G$(),z0?.sendStatus(),$.status==="failed")console.warn(`[ideawave-cli] ACP bridge setup failed for ${$.packageName}: ${$.error??"unknown error"}`)}})}catch($){console.warn("[ideawave-cli] ACP bridge setup skipped:",$ instanceof Error?$.message:String($))}await _2(),E0=!0,console.log("[ideawave-cli] ready — agent runs will drive the board."),z0?.sendStatus()}catch(X){console.error("[ideawave-cli] failed to start agent host:",X),z0?.sendStatus(void 0,X instanceof Error?X.message:String(X))}finally{b0=null}})(),b0}if(process.env.APP_ENV!=="development"){let X=await G2();if(X)console.error(`[ideawave-cli] An IdeaWave CLI is already running at ${X}.`),console.error("[ideawave-cli] Only one CLI per machine is supported — it already serves every browser tab. Exiting."),process.exit(0)}if(!P0)n$().then((X)=>{if(X.phase==="ready")console.log("[ideawave-cli] screenshot engine ready");else if(X.phase==="failed")console.warn(`[ideawave-cli] screenshot engine setup failed: ${X.error??"unknown error"}`)});z0=await V2({registry:T0,runtime:null,mcpReady:()=>E0,capabilities:P0?[_1]:[],cliVersion:C2(),browserRuntimeStatus:()=>oZ,onToolMetadata:(X)=>{console.log(`[ideawave-cli] session ${X} advertised ${T0.getMetadata(X).length} tools`),B1()},onRunTurn:(X,$)=>{console.log(`[ideawave-cli] running agent turn for card ${$.cardId} (session ${X})`),(async()=>{if(await B1(),!E0){Q0(X,{type:"run_settled",runId:$.runId,cardId:$.cardId,result:{assistantContent:"",model:null,latencyMs:0,errorText:"IdeaWave CLI agent host is not ready",partialText:null}});return}await p$($,(Z)=>Q0(X,Z))})().catch(()=>{return}).finally(()=>T0.markRunSettled(X,$.runId))},onCancelRun:(X,$)=>{$1($)},onRuntimeRpc:(X,$)=>{nZ(X,$)},onBrowserRpc:(X,$,Z)=>{if(!P0){Q0(X,{type:"browser_rpc_result",requestId:Z.requestId,ok:!1,error:"The development browser-kit proxy is not enabled"});return}F0.handleRpc(X,$,Z).then((Q)=>{Q0(X,{type:"browser_rpc_result",requestId:Z.requestId,ok:!0,result:Q})},(Q)=>{Q0(X,{type:"browser_rpc_result",requestId:Z.requestId,ok:!1,error:Q instanceof Error?Q.message:String(Q)})})},onHttpRequest:(X,$)=>P0?F0.handleHttpRequest(X,$):!1,onHttpUpgrade:(X,$,Z)=>P0?F0.handleUpgrade(X,$,Z):!1,onWarmupRun:(X,$,Z)=>{(async()=>{if(await B1(),!E0)return{status:"retryable",error:"agent host is not ready"};return u$({cardId:$.cardId,boardId:$.boardId,userId:Z,frontendSessionId:X})})().then((Q)=>{if(!$.warmupId)return;Q0(X,{type:"warmup_result",warmupId:$.warmupId,cardId:$.cardId,...Q})})},onDisconnect:(X,$)=>{F0.closeFrontendSession(X),m$(X);for(let Z of $)$1(Z);q("bridge.frontend_disconnected",{frontendSessionId:X,activeRuns:$.length}),P1(X).catch((Z)=>{console.warn(`[ideawave-cli] failed to evict sessions for ${X}:`,Z instanceof Error?Z.message:String(Z))}),console.log(`[ideawave-cli] browser session ${X} disconnected`)}});F0.setPort(z0.port);console.log(`[ideawave-cli] browser bridge listening on ${z0.url}`);console.log("[ideawave-cli] waiting for ideawave.app browser sessions…");var A2=!1;for(let X of["SIGINT","SIGTERM"])process.once(X,()=>{if(A2)return;A2=!0,c$(),(async()=>{await F0.close(),await s$(),await z0?.close().catch(()=>{return}),process.exit(0)})()});