ideawave 0.0.66 → 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 +76 -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 l7}from"node:module";var i7=l7(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 a7=600000,p7=60000,J6=200,r7=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 o7(){if(q0!==null)return;q0=setInterval(()=>{let Z=Date.now();for(let[X,Q]of A){if(Q.inUse)continue;if(Z-Q.lastUsed<a7)continue;O0(X,Q)}if(A.size===0&&q0!==null)clearInterval(q0),q0=null},p7),q0.unref?.()}function n7(){if(A.size<J6)return;let Z=null,X=1/0;for(let[K,J]of A){if(J.inUse)continue;if(J.lastUsed>=X)continue;Z=K,X=J.lastUsed}if(!Z)return;let Q=A.get(Z);if(!Q)return;O0(Z,Q)}function t7(){let Z=0;while(A.size>J6){let X=null,Q=null;for(let[K,J]of A){if(J.inUse)continue;if(Q&&J.lastUsed>=Q.lastUsed)continue;X=K,Q=J}if(!X||!Q)break;O0(X,Q),Z+=1}if(Z>0)m("session_pool.global_idle_trimmed",{evictedSessions:Z,poolEntries:A.size})}function e7(Z){let X=Array.from(A.entries()).filter(([,K])=>K.frontendSessionId===Z&&!K.inUse).sort(([,K],[,J])=>K.lastUsed-J.lastUsed),Q=X.length-r7;if(Q<=0)return;for(let[K,J]of X.slice(0,Q))O0(K,J);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(n7(),A.set(Z.key,{key:Z.key,frontendSessionId:Z.frontendSessionId??null,fingerprint:Z.fingerprint,sessionPromise:Q,lastUsed:Date.now(),inUse:!0,idleWaiters:new Set}),o7(),Z.frontendSessionId)m("session_pool.open",{frontendSessionId:Z.frontendSessionId,poolEntries:A.size});try{return await Q}catch(K){let J=A.get(Z.key);if(J?.sessionPromise===Q)O0(Z.key,J);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)e7(Q.frontendSessionId),m("session_pool.release",{frontendSessionId:Q.frontendSessionId,poolEntries:A.size});if(t7(),A.get(Z)===Q)N1(Q)}async function Y6(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 Z9(){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],[J])=>K.localeCompare(J)))):"";return[Z.adapterId,Z.configId??"",Z.modelId??"",Q,Z.mcpUrl??"",Z.runFolder??"",Z.toolSurface??"full"].join(" ")}var W6=!1;function X9(){if(W6)return;W6=!0;let Z=()=>{Z9()};process.once("beforeExit",Z),process.once("SIGTERM",Z),process.once("SIGINT",Z)}X9();import{readFileSync as W9}from"node:fs";import{homedir as Q9}from"node:os";import{join as g1}from"node:path";function K9(){let Z=Q9();switch(process.platform){case"win32":return process.env.APPDATA??g1(Z,"AppData","Roaming");case"darwin":return g1(Z,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??g1(Z,".config")}}function V6(){let Z=process.env.IDEAWAVE_MCP_JSON_PATH;if(Z&&Z.trim().length>0)return Z;return g1(K9(),"ideawave","mcp.json")}var H6=null;function w6(Z){H6=Z}var J9=86400000;function Y9(){let Z;try{Z=W9(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>J9)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 z6="browser-proxy-v2",U6="browser-proxy-v3",F6="browser-proxy-v4",V9=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 $1(Z){try{let X=JSON.parse(Z);if(X&&typeof X==="object"&&typeof X.type==="string"&&V9.has(X.type))return X}catch{}return null}function G1(Z){return JSON.stringify(Z)}import Z1 from"node:fs/promises";import U9 from"node:path";import{z as $}from"zod";var B6=$.object({id:$.string(),name:$.string().nullable().default(null),description:$.string().nullable().default(null)}),x6=$.union([$.string(),$.boolean()]),j9=$.object({value:$.string(),name:$.string(),description:$.string().nullable().default(null),group:$.string().nullable().default(null),groupName:$.string().nullable().default(null)}),L6=$.object({id:$.string(),name:$.string(),category:$.string().nullable().default(null),description:$.string().nullable().default(null),type:$.enum(["select","boolean"]),currentValue:x6.nullable().default(null),options:$.array(j9).default([])}),g4=$.record($.string(),x6).default({}),H9=$.discriminatedUnion("kind",[$.object({id:$.string(),kind:$.literal("registered"),adapterId:$.enum(["claude-code","opencode","codex","copilot"]),displayName:$.string(),runFolder:$.string().nullable(),defaultModelId:$.string().nullable().default(null),defaultConfigValues:g4,discoveredModels:$.array(B6).default([]),discoveredConfigOptions:$.array(L6).default([]),discoveredAt:$.string().nullable().default(null)}),$.object({id:$.string(),kind:$.literal("custom"),displayName:$.string(),command:$.string(),args:$.array($.string()),env:$.record($.string(),$.string()),runFolder:$.string().nullable(),defaultModelId:$.string().nullable().default(null),defaultConfigValues:g4,discoveredModels:$.array(B6).default([]),discoveredConfigOptions:$.array(L6).default([]),discoveredAt:$.string().nullable().default(null)})]),q6=$.object({runtimeConfigId:$.string(),runFolder:$.string().nullable(),modelId:$.string().nullable().default(null),configValues:g4}),E1=$.object({version:$.literal(1),globalDefaultConfigId:$.string().nullable(),runtimes:$.array(H9),boardOverrides:$.record($.string(),q6).default({}),cardOverrides:$.record($.string(),q6).default({})});import w9 from"node:os";import m1 from"node:path";function z9(){let Z=w9.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 F9={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},P6=new Map;function B9(Z){return P6.get(Z)??Promise.resolve()}function L9(Z,X){P6.set(Z,X)}async function W0(Z){let X=Z??k1(),Q;try{Q=await Z1.readFile(X,"utf-8")}catch(J){if(J.code==="ENOENT")return structuredClone(F9);throw J}return E1.parse(JSON.parse(Q))}async function j0(Z,X){let Q=X??k1(),K=B9(Q).then(async()=>{let J=await W0(Q),Y=structuredClone(J),j=await Z(Y);return await q9(Y,Q),j});return L9(Q,K.catch(()=>{return})),K}async function q9(Z,X){let Q=X??k1(),K=U9.dirname(Q);await Z1.mkdir(K,{recursive:!0});let J=`${Q}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`,Y=JSON.stringify(Z,null,2);await Z1.writeFile(J,Y,"utf-8");try{await Z1.rename(J,Q)}catch(j){throw await Z1.unlink(J).catch(()=>{return}),j}}import{spawn as h9}from"node:child_process";import{closeSync as M9,existsSync as v6,mkdirSync as R6,openSync as N9,readFileSync as D9,renameSync as g9,rmSync as C6,statSync as $9,unlinkSync as G9,writeFileSync as E9}from"node:fs";import O6 from"node:os";import m0 from"node:path";var x9=/\.(?:cmd|bat)$/i;function P9(Z){return process.platform==="win32"&&x9.test(Z)}function _1(Z){return P9(Z)?{shell:!0,windowsHide:!0}:{}}import{execFile as R9}from"node:child_process";import{promisify as C9}from"node:util";import{execFile as f9}from"node:child_process";import{promisify as y9}from"node:util";var O9=y9(f9),$4=new Map,f6=5000,b9=/\.(?:cmd|bat|com|exe)$/i;function v9(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)=>b9.test(Q))??X[0]??null}async function y6(Z,X=O9){let Q=$4.get(Z);if(Q&&Q.expiresAt>Date.now())return Q.value;let K=process.platform==="win32"?"where":"which";try{let{stdout:J}=await X(K,[Z],{timeout:2000}),Y=v9(J);return $4.set(Z,{value:Y,expiresAt:Date.now()+f6}),Y}catch{return $4.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 YJ=C9(R9);function d(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"]}],m9=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 k9(Z){return Z.replace(/^@/,"").replace(/[/\\]/g,"-")}function I1(){return m0.join(m4(),"install-state.json")}function k4(Z){return m0.join(m4(),`${k9(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(D9(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},E9(`${I1()}.tmp`,`${JSON.stringify(K,null,2)}
3
- `),g9(`${I1()}.tmp`,I1())}function M6(Z){return E4.find((X)=>X.packageName===Z)??null}function J0(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>m9}catch{return!1}}function _9(Z){let X=k4(Z);if(!v6(X))return!1;if(N6(X))return C6(X,{force:!0}),!1;return!0}function S9(Z){let X=k4(Z);if(R6(m0.dirname(X),{recursive:!0}),N6(X))C6(X,{force:!0});try{let Q=N9(X,"wx");return M9(Q),!0}catch{return!1}}function I9(Z){G9(k4(Z))}function I4(Z){let X=h6().bridges?.[Z.adapterId];if(b6(Z,X)&&X.status==="ready")return J0(Z,"ready");if(S1.has(Z.adapterId)||_9(Z))return J0(Z,"installing");if(b6(Z,X)&&X.status==="failed")return J0(Z,"failed",X.error);return J0(Z,"missing")}function Q1(Z,X){Z?.onStatusChange?.(X)}function T9(Z,X){let Q=I4(Z);if(Q.status==="ready")return Q1(X,Q),Q;if(Q.status==="installing"){let z=S1.get(Z.adapterId);if(z&&X?.onStatusChange)z.then((q)=>Q1(X,q));return Q1(X,Q),Q}if(!S9(Z))return J0(Z,"installing");let K=J0(Z,"installing");G4(Z,K),Q1(X,K);let J=()=>{},Y=new Promise((z)=>{J=z});S1.set(Z.adapterId,Y);let j=!1,U=(z)=>{if(j)return;j=!0;try{I9(Z)}catch{}G4(Z,z),Q1(X,z),S1.delete(Z.adapterId),J(z)},B;try{let z=_4();B=h9(z,["-y",S4(Z),...Z.warmupArgs],{stdio:"ignore",windowsHide:!0,..._1(z)})}catch(z){let q=J0(Z,"failed",z instanceof Error?z.message:String(z));return U(q),q}return B.on("error",(z)=>{U(J0(Z,"failed",z.message))}),B.on("close",(z)=>{if(z===0){U(J0(Z,"ready"));return}U(J0(Z,"failed",`npx warmup exited ${z??"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 d(Q.runtimeBinary)){X.push(J0(Q,"not_needed"));continue}X.push(T9(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,J0(Q,"failed",X)),!0}var g6="claude",A4="@agentclientprotocol/claude-agent-acp",$6=["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 d(g6))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 Y of $6){let j=await d(Y);if(j&&!K&&Q?.status!=="failed")return{command:j,args:[],env:K0()}}let J=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(J)},checkReadiness:async()=>{if(!await d(g6))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 $6)if(await d(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 d(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",J=await d(k6);if(J&&!K&&Q?.status!=="failed")return{command:J,args:[],env:K0()};let Y=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(Y)},checkReadiness:async()=>{if(!await d(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 d(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 d(I6);if(Z)return{command:Z,args:["--acp"],env:K0()};let X=await d(T6);if(X)return{command:X,args:[],env:K0()};throw new T(`Copilot not installed. Run: ${A6}`)},checkReadiness:async()=>{if(await d(I6))return{status:"ready"};if(await d(T6))return{status:"ready"};return{status:"not_installed",detail:A6}},authHint:"Run `gh auth login` (or `copilot login`)."};import A9 from"node:fs/promises";function u9(Z){return Z.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(Z)}async function c6(Z){if(u9(Z))try{return await A9.access(Z),!0}catch{return!1}return await d(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 i6="opencode",d6="Install OpenCode from https://opencode.ai",a6={id:"opencode",displayName:"OpenCode",kind:"registered",resolveSpawnConfig:async()=>{let Z=await d(i6);if(!Z)throw new T(`OpenCode not installed. ${d6}`);return{command:Z,args:["acp"],env:K0()}},checkReadiness:async()=>{if(!await d(i6))return{status:"not_installed",detail:d6};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 i0(){return Object.values(p6)}var c4=new Map,A1=new Map,c9=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 J=X().then((Y)=>{return c4.set(Z,{value:Y,expiresAt:Date.now()+c9}),Y}).finally(()=>{A1.delete(Z)});return A1.set(Z,J),J}async function r6(Z){let X=await Promise.all(i0().map((Y)=>u1(Y.id,async()=>({adapterId:Y.id,...await Y.checkReadiness({id:"__probe__",kind:"registered",adapterId:Y.id,displayName:Y.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})})))),K=(await W0(Z)).runtimes.filter((Y)=>Y.kind==="custom"),J=await Promise.all(K.map((Y)=>u1(`custom:${Y.id}`,async()=>({adapterId:Y.id,...await F0(Y).checkReadiness(Y)}))));return[...X,...J]}async function s6(Z,X){let Q=i0().find((Y)=>Y.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 J=(await W0(X)).runtimes.find((Y)=>Y.id===Z);if(!J||J.kind!=="custom")return null;return u1(`custom:${J.id}`,async()=>({adapterId:J.id,...await F0(J).checkReadiness(J)}))}function o6(){c4.clear(),A1.clear()}import{randomBytes as Q3,randomUUID as e6}from"node:crypto";import{WebSocket as c1,WebSocketServer as i9}from"ws";function b0(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function l9(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(l9(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 l7}from"node:module";var i7=l7(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 i4(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 l7}from"node:module";var i7=l7(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 l7}from"node:module";var i7=l7(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, {
@@ -708,7 +745,11 @@ import{createRequire as l7}from"node:module";var i7=l7(import.meta.url);function
708
745
  if (!anchor) return;
709
746
  const raw = anchor.getAttribute("href");
710
747
  if (!raw || raw.startsWith("#") || /^(javascript|mailto|tel|blob|data):/i.test(raw)) return;
711
- 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
+ }
712
753
  const escapes = Boolean(target && target !== "_self");
713
754
  const absolute = /^(https?:\\/\\/|\\/\\/)/i.test(raw);
714
755
  if (!absolute && !escapes) return;
@@ -744,7 +785,7 @@ import{createRequire as l7}from"node:module";var i7=l7(import.meta.url);function
744
785
  };
745
786
  addEventListener("popstate", notifyNavigation);
746
787
  addEventListener("hashchange", notifyNavigation);
747
- })();`}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 d0(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 J=new URL(K,X);if(J.protocol!=="http:"&&J.protocol!=="https:")return K;return`${Q}/browser-kit/proxy/${J.href}`}catch{return K}}function d4(Z){let X=(Q)=>{let K=Q.trim().replace(/^["']|["']$/g,"");if(!K||K.startsWith("data:"))return Q;return d0(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,J)=>`@import ${K}${X(J)}${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,(j,U,B)=>U+d0(B,Z.sourceUrl,Z.proxyOrigin)),Q=Q.replace(/\bsrcset\s*=\s*["']([^"']*)["']/gi,(j,U)=>{return`srcset="${U.split(",").map((z)=>{let q=z.trim().split(/\s+/),R=q.shift();if(!R)return"";return[d0(R,Z.sourceUrl,Z.proxyOrigin),...q].join(" ")}).filter(Boolean).join(", ")}"`});let K=i4({sourceUrl:Z.sourceUrl,proxyOrigin:Z.proxyOrigin}),J=l4({token:Z.bridgeToken,sourceUrl:Z.sourceUrl,revision:Z.revision,navigateUrlPrefix:Z.navigateUrlPrefix,parentOrigin:Z.proxyOrigin}),Y=`<base href="${Z.proxyOrigin}/browser-kit/proxy/${Z.sourceUrl}"><script data-browser-kit-runtime>${K}</script><script data-ideawave-browser-bridge>${J}</script>`;if(/<head[^>]*>/i.test(Q))return Q.replace(/<head[^>]*>/i,(j)=>j+Y);if(/<html[^>]*>/i.test(Q))return Q.replace(/<html[^>]*>/i,(j)=>j+Y);return Y+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`
748
789
  self.addEventListener("install", (event) => event.waitUntil(self.skipWaiting()));
749
790
  self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim()));
750
791
 
@@ -832,14 +873,13 @@ self.addEventListener("fetch", (event) => {
832
873
  return proxy(event, url.href);
833
874
  })());
834
875
  });
835
- `}var d9=1800000,K1="/browser-kit/proxy/",Z3="__browser_kit_client_";function a9(Z){let X=Z??"";return X.startsWith("[")?X.slice(1,X.indexOf("]")):X.split(":")[0]??""}function X3(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 p9(Z){let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")throw Error("Browser frontend origin is invalid");return X.origin}function r4(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function r9(){return Q3(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 o9(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 n9(Z){let X={};return Z.forEach((Q,K)=>{X[K]=Q}),X}function t9(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>
836
877
  <html>
837
878
  <head>
838
879
  <meta charset="utf-8">
839
- <meta name="color-scheme" content="light">
840
880
  <style>
841
881
  *{box-sizing:border-box}
842
- 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}
843
883
  #view{display:block}
844
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)}
845
885
  #status[hidden]{display:none}
@@ -850,9 +890,9 @@ html,body,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden;backgro
850
890
  <div id="status" hidden></div>
851
891
  <script>
852
892
  (() => {
853
- const TOKEN = ${r4(Z.bridgeToken)};
854
- const FRONTEND_ORIGIN = ${r4(Z.frontendOrigin)};
855
- const INITIAL_URL = ${r4(X)};
893
+ const TOKEN = ${hX(X.bridgeToken)};
894
+ const FRONTEND_ORIGIN = ${hX(X.frontendOrigin)};
895
+ const INITIAL_URL = ${hX($)};
856
896
  const frame = document.getElementById("view");
857
897
  const status = document.getElementById("status");
858
898
  const showError = (error) => {
@@ -878,49 +918,29 @@ html,body,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden;backgro
878
918
  })();
879
919
  </script>
880
920
  </body>
881
- </html>`}class l1{sessions=new Map;socketServer=new i9({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 J=X3(K.url),Y=p9(X),j=[...this.sessions.values()].find((B)=>B.frontendSessionId===Z&&B.browserNodeId===K.browserNodeId);if(j){if(j.frontendOrigin!==Y)throw Error("Browser proxy session origin changed unexpectedly");return j.currentUrl=J,j.lastUsedAt=Date.now(),this.result(j)}let U={id:e6(),frontendSessionId:Z,frontendOrigin:Y,browserNodeId:K.browserNodeId,wrapperHost:`iw-browser-${r9()}`,bridgeToken:Q3(24).toString("base64url"),currentUrl:J,lastUsedAt:Date.now(),cookies:new Map};return this.sessions.set(U.id,U),this.result(U)}if(Q.method==="close_proxy_session"){let K=Q.params;if(typeof K.proxySessionId!=="string")throw Error("Browser proxy session input is invalid");let J=this.sessions.get(K.proxySessionId);if(J&&J.frontendSessionId!==Z)throw Error("Browser proxy session belongs to another frontend session");if(J)this.sessions.delete(J.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=a9(Z.headers.host);return[...this.sessions.values()].find((Q)=>X===`${Q.wrapperHost}.localhost`)??null}storeCookies(Z,X,Q){for(let K of X){let[J="",...Y]=K.split(";"),j=J.indexOf("=");if(j<0)continue;let U=J.slice(0,j).trim(),B=J.slice(j+1).trim(),z=Q.toLowerCase();for(let R of Y){let h=R.indexOf("="),O=(h<0?R:R.slice(0,h)).trim().toLowerCase(),f=h<0?"":R.slice(h+1).trim();if(O==="domain"&&f)z=f.replace(/^\./,"").toLowerCase()}if(!Z.cookies.has(z))Z.cookies.set(z,new Map);let q=Z.cookies.get(z);if(!q)continue;if(B===""||/(^|;)\s*max-age=0/i.test(K))q.delete(U);else q.set(U,B)}}storeClientCookies(Z,X){if(!X)return;for(let Q of X.split(";")){let K=Q.trim(),J=K.indexOf("=");if(J<1)continue;let Y=K.slice(0,J);if(!Y.startsWith(Z3))continue;let j=Y.slice(Z3.length).split(".");if(j.length!==2)continue;try{let U=Buffer.from(j[0]??"","base64url").toString(),B=Buffer.from(j[1]??"","base64url").toString(),z=JSON.parse(decodeURIComponent(K.slice(J+1))),q=new URL(U).hostname.toLowerCase();if(!B||z.name!==B||typeof z.value!=="string")continue;if(!Z.cookies.has(q))Z.cookies.set(q,new Map);let R=Z.cookies.get(q);if(!R)continue;if(z.deleted===!0)R.delete(B);else R.set(B,z.value)}catch{}}}cookieHeader(Z,X){let Q=X.toLowerCase(),K=[];for(let[J,Y]of Z.cookies)if(Q===J||Q.endsWith(`.${J}`))for(let[j,U]of Y)K.push(`${j}=${U}`);return K.join("; ")}async proxy(Z,X,Q,K){let J=K.pathname.slice(K1.length)+K.search+K.hash;if(!/^https?:\/\//i.test(J)){X.writeHead(400,{"content-type":"text/plain"}),X.end(`Bad proxy target: ${J}`);return}let Y=await o9(Z),j=Z.method??"GET",U=J,B=Y,z=null;this.storeClientCookies(Q,Z.headers.cookie);for(let O=0;;O+=1){let f=new URL(U),M=s9(Z);for(let _ of["host","connection","origin","referer","cookie","accept-encoding"])M.delete(_);let N=this.cookieHeader(Q,f.hostname);if(N)M.set("cookie",N);M.set("referer",`${f.origin}/`);let b={method:j,headers:M,redirect:"manual",...j!=="GET"&&j!=="HEAD"&&B?{body:B,duplex:"half"}:{}};try{z=await fetch(U,b)}catch(_){X.writeHead(502,{"content-type":"text/plain"}),X.end(`Proxy fetch error for ${U}: ${_ instanceof Error?_.message:String(_)}`);return}let g=z.headers.getSetCookie,v=typeof g==="function"?g.call(z.headers):[];if(v.length>0)this.storeCookies(Q,v,f.hostname);let G=z.headers.get("location");if(z.status>=300&&z.status<400&&G&&O<15){if(U=new URL(G,U).href,z.status===303||j==="POST"&&(z.status===301||z.status===302))j="GET",B=void 0;continue}break}if(!z)throw Error("Browser proxy received no response");Q.lastUsedAt=Date.now();let q=new Headers;z.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,d0(f,U,this.wrapperOrigin(Q)))}let R=(z.headers.get("content-type")??"").toLowerCase(),h;if(R.includes("text/html")){let O=e6();h=a4({html:await z.text(),sourceUrl:U,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(U).origin)}; Path=/; SameSite=Lax`)}else if(R.includes("text/css"))h=d4({css:await z.text(),baseUrl:U,proxyOrigin:this.wrapperOrigin(Q)}),q.delete("etag"),q.delete("last-modified"),q.set("cache-control","no-store");else h=Buffer.from(await z.arrayBuffer());if(X.writeHead(z.status,n9(q)),Z.method==="HEAD")X.end();else X.end(h)}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 J=t9(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(J);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 J=Q.searchParams.get("url");if(!J)return X.writeHead(400),X.end(),!0;return K.currentUrl=X3(J),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;let J=this.sessionForRequest(Z);if(!J)return X.destroy(),!0;let Y=K.pathname.slice(K1.length)+K.search+K.hash;if(!/^wss?:\/\//i.test(Y))return X.destroy(),!0;return this.socketServer.handleUpgrade(Z,X,Q,(j)=>{let U;try{let z=new URL(Y),q={origin:z.origin},R=this.cookieHeader(J,z.hostname);if(R)q.cookie=R;U=new c1(Y,{headers:q})}catch{j.close(1011,"bad target");return}let B=[];U.binaryType="arraybuffer",U.on("open",()=>{for(let z of B)U.send(z);B.length=0}),j.on("message",(z)=>{if(U.readyState===c1.OPEN)U.send(z);else B.push(z)}),U.on("message",(z)=>{if(j.readyState===c1.OPEN)j.send(z)}),j.on("close",()=>U.close()),j.on("error",()=>U.close()),U.on("close",(z,q)=>{if(j.readyState===c1.OPEN)j.close(z>=1000&&z<=4999?z:1000,q.toString())}),U.on("error",()=>j.close(1011,"upstream error"))}),!0}}function e9(Z){if(!Z)return null;let X=Z.indexOf("/");if(X<=0)return null;return Z.slice(0,X)}function i1(Z){let X=[...Z.models];if(Z.adapterId!=="opencode"||X.length===0)return X;let Q=e9(Z.currentModelId)??(X.some((J)=>J.id.startsWith("opencode/"))?"opencode":null);if(!Q)return X;let K=X.filter((J)=>J.id===Z.currentModelId||J.id.startsWith(`${Q}/`));return K.length>0?K:X}import{Readable as LZ,Writable as qZ}from"node:stream";import{ClientSideConnection as F3,ndJsonStream as B3}from"@agentclientprotocol/sdk";import v0 from"node:fs/promises";import Q0 from"node:path";class J1 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 ZZ=new Set([".bzr",".cache",".claude",".config",".env",".git",".hg",".idea",".obsidian",".svn",".vscode","node_modules"]),K3=1e6,XZ=4096,QZ=new TextDecoder("utf-8",{fatal:!0});function KZ(Z){return Z.split(/[\\/]+/).filter((X)=>X.length>0)}function d1(Z){if(Q0.isAbsolute(Z))throw new J1("Absolute paths are not allowed");for(let X of KZ(Z)){if(X===".")continue;if(X==="..")throw new J1("Parent-directory traversal is not allowed");if(X.startsWith(".")||ZZ.has(X))throw new o4(`Path segment "${X}" is hidden or configuration data`)}}function WZ(Z){d1(Z);let X=Q0.normalize(Z||".");return X==="."?"":X}function JZ(Z,X,Q){let K=Q0.relative(Z,X);if(K===".."||K.startsWith(`..${Q0.sep}`)||Q0.isAbsolute(K))throw new J1(`Path "${Q}" resolves outside the run folder`);if(K.length>0)d1(K);return K}async function s4(Z,X){d1(X);let Q=Q0.resolve(Z,X||"."),K;try{K=await v0.realpath(Q)}catch(J){if(J.code!=="ENOENT")throw J;let Y=Q0.dirname(Q),j=[Q0.basename(Q)];while(Y!==Z&&Y!==Q0.dirname(Y))try{Y=await v0.realpath(Y);break}catch(U){if(U.code!=="ENOENT")throw U;j.unshift(Q0.basename(Y)),Y=Q0.dirname(Y)}K=Q0.join(Y,...j)}return JZ(Z,K,X),K}async function YZ(Z,X){let Q=await v0.realpath(Z);return s4(Q,X)}function VZ(Z){let X=Z.subarray(0,Math.min(Z.length,XZ));if(X.length===0)return!1;let Q=0;for(let K of X){if(K===0)return!0;let J=K===9||K===10||K===12||K===13;if(K<32&&!J)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>K3)throw new n4(`File "${X}" is too large to read (${K.size} bytes, max ${K3} bytes)`);let J=await v0.readFile(Q);if(VZ(J))throw new W1(`File "${X}" appears to be binary, not text`);try{return QZ.decode(J)}catch{throw new W1(`File "${X}" is not valid UTF-8 text`)}}function jZ(Z){if(Z.isDirectory())return"directory";if(Z.isFile())return"file";if(Z.isSymbolicLink())return"symlink";return"other"}function W3(Z){return Z.split(Q0.sep).join("/")}async function J3(Z,X=""){let Q=await v0.realpath(Z),K=WZ(X),J=await s4(Q,K),Y=await v0.readdir(J,{withFileTypes:!0}),j=[];for(let U of Y){let B=K?Q0.join(K,U.name):U.name;try{d1(B);let z=await s4(Q,B),q=await v0.stat(z);j.push({name:U.name,path:W3(B),type:jZ(U),size:U.isFile()?q.size:null})}catch{}}return j.sort((U,B)=>{if(U.type==="directory"&&B.type!=="directory")return-1;if(U.type!=="directory"&&B.type==="directory")return 1;return U.name.localeCompare(B.name)}),{path:W3(K),absolutePath:J,entries:j}}var t4={fs:{readTextFile:!0,writeTextFile:!1},terminal:!1};function Y3(Z){return{readTextFile:async(X)=>{return{content:await a1(Z,X.path)}}}}import{spawn as HZ}from"node:child_process";function e4(Z){let X=HZ(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:J}=X,Y=4096,j=[],U=0;J.on("data",(N)=>{j.push(N),U+=N.length;while(U>Y*2&&j.length>1){let b=j.shift();if(b)U-=b.length}});let B=()=>{let N=Buffer.concat(j).toString("utf8");return N.length>Y?N.slice(-Y):N},z=!1,q=!1,R,h,O=new Promise((N)=>{R=N}),f=new Promise((N)=>{h=N}),M=(N)=>{if(q)return;if(q=!0,R(N),!z)h(N)};return X.on("exit",(N,b)=>{M({code:N,signal:b,stderr:B()})}),X.on("error",(N)=>{let b=B(),g=N?.message??String(N);M({code:null,signal:null,stderr:b?`${g}
882
- ${b}`:g})}),{stdin:Q,stdout:K,stderr:J,kill:(N="SIGTERM")=>{if(z)return;z=!0;try{X.kill(N)}catch{}},waitForExit:O,processCrashed:f}}var wZ=["mcp_ideawave_board_","ideawave_board_","ideawave-board_","ideawave-board.","ideawave.board."];function zZ(Z){let X=Z.toLowerCase();for(let Q of wZ)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 V3(Z){if(typeof Z!=="string")return"Tool";let X=Z.trim();return X?X:"Tool"}function UZ(Z,X){if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let Q=Z;for(let K of X){let J=Q[K];if(typeof J==="string"&&J.trim())return J.trim()}return null}function K2(Z,X){let Q=Z.trim().toLowerCase();if(Q==="skill"||Q==="workflow"||Q==="tool"||Q==="invalid"){let K=UZ(X,["skillName","workflowName","toolName","name","title"]);if(K){let J=Q==="skill"?" skill":Q==="workflow"?" workflow":"";return`${Z2(K)}${J}`}}if(Q==="invalid")return"Tool call";return Z2(Z)}var FZ=33,j3=1600;function k0(Z){if(Z.length<=j3)return Z;return`${Z.slice(0,j3-22)}
883
- ... truncated`}function s1(Z){let X=Z.replace(/\r\n?/g,`
884
- `),Q=X.trim();if(Q.startsWith('"')&&Q.endsWith('"')||Q.startsWith("'")&&Q.endsWith("'"))try{let J=JSON.parse(Q);if(typeof J==="string")return J.replace(/\r\n?/g,`
885
- `)}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,`
886
926
  `).replace(/\\n/g,`
887
927
  `).replace(/\\r/g,`
888
- `).replace(/\\t/g,"\t").replace(/\\"/g,'"');try{let J=JSON.parse(K);if(J!==null&&typeof J==="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=s1(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(s1(String(Z)))}}function BZ(Z){if(!Z||typeof Z!=="object")return null;let X=Z;if(X.type==="text"&&typeof X.text==="string")return s1(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 s1(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 r1(Z){if(!Array.isArray(Z))return null;let X=Z.map(BZ).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(`
889
929
 
890
- `))}function W2(Z){if(!Z||typeof Z!=="object"||Array.isArray(Z))return x0(Z);let X=Z,Q=r1(X.content);if(Q)return Q;for(let Y of["output","result","text","message"]){let j=x0(X[Y]);if(j)return j}let K=x0(X.stdout),J=x0(X.stderr);if(K||J)return k0([K?`stdout:
891
- ${K}`:null,J?`stderr:
892
- ${J}`: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(`
893
933
 
894
- `));return x0(Z)}function H3(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}
895
935
 
896
- ${X}`)}function J2(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 J=typeof K.line==="number"?`:${K.line}`:"";return[`${K.path}${J}`]});return X.length>0?X.slice(0,5):null}function w3(Z){let{ctx:X,appendText:Q,appendToolActivity:K}=Z,J=Z.flushIntervalMs??FZ,Y="",j="",U=0,B=null,z={},q=new Map,R=(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)})},h=(D)=>{let x=`${X.runId}:thought`,E=q.get(x);if(!E||E.status!=="running")return;R({...E,status:"completed",completedAt:E.completedAt??D})},O=(D)=>{for(let x of q.values()){if(x.status!=="running"||x.rawTitle.toLowerCase()!=="toolsearch")continue;R({...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;R({...x,status:"completed",completedAt:x.completedAt??D})}},M="",N=0,b=null,g=null,v=(D)=>{if(D===M)return;M=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(g!==null){let D=g;g=null,v(D)}},_=(D)=>{let x=Date.now()-N;if(x>=J&&b===null){v(D);return}if(g=D,b===null){let E=Math.max(0,J-x);b=setTimeout(()=>{b=null,G()},E)}};return{onSessionUpdate:async(D)=>{let x=D.update;switch(z[x.sessionUpdate]=(z[x.sessionUpdate]??0)+1,x.sessionUpdate){case"agent_message_chunk":{let E=new Date().toISOString();if(h(E),x.content.type==="text")Y+=x.content.text,_(Y);else{let k=`agent_message_chunk:${x.content.type}`;z[k]=(z[k]??0)+1}return}case"agent_thought_chunk":{if(x.content.type!=="text")return;j+=x.content.text;let E=new Date().toISOString(),k=`${X.runId}:thought`,l=q.get(k);R({toolCallId:k,rawTitle:"agent_thought",title:"Thought",kind:"thought",status:"running",startedAt:l?.startedAt??E,completedAt:null,contentPreview:k0(j.trim())});return}case"user_message_chunk":return;case"tool_call":{U+=1;let E=V3(x.title),k=X2(x.status),l=new Date().toISOString();h(l),O(l),R({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:r1(x.content),locations:J2(x.locations)});return}case"tool_call_update":{let E=q.get(x.toolCallId);if(!E){let c=V3(x.title),X0=X2(x.status),s=new Date().toISOString();R({toolCallId:x.toolCallId,rawTitle:c,title:K2(c,x.rawInput),kind:Q2(x.kind),status:X0,startedAt:s,completedAt:X0==="running"?null:s,inputPreview:x0(x.rawInput),outputPreview:W2(x.rawOutput),contentPreview:r1(x.content),locations:J2(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:H3(E.contentPreview,r1(x.content)),p=x.rawOutput===void 0?E.outputPreview:H3(E.outputPreview,W2(x.rawOutput));R({...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:J2(x.locations)});return}case"plan":B=x.entries;return;case"available_commands_update":return;case"current_mode_update":return;default:return}},getFinalText:()=>Y,getToolCallCount:()=>U,getLatestPlan:()=>B,getUpdateTypeCounts:()=>({...z}),flush:(D)=>{let x=new Date().toISOString();if(h(x),D?.completeOpenToolCalls)f(x);G()}}}var Y1=1,z3=-32000;function U3(Z){if(Z.awaitingInput)return!1;return Z.nowMs-Z.lastUpdateMs>=Z.windowMs}function L3(Z){if(!Z||typeof Z!=="object")return!1;return Z.code===z3}var xZ=60000,PZ=xZ,fZ=5000;function yZ(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 q3(){return{name:"ideawave-cli",title:"IdeaWave CLI",version:"0.0.66".trim()?"0.0.66":"dev"}}function x3(Z){if(Z===Y1)return;throw new T(`Unsupported ACP protocol version ${Z}; expected ${Y1}`)}function P3(Z){return LZ.toWeb(Z)}function f3(Z){return qZ.toWeb(Z)}function Y2(Z){return Z!==null&&typeof Z==="object"}function OZ(Z){if(!Array.isArray(Z))return[];let X=[];for(let Q of Z){if(!Y2(Q))continue;if(typeof Q.group==="string"&&Array.isArray(Q.options)){let K=typeof Q.name==="string"?Q.name:Q.group;for(let J of Q.options){if(!Y2(J))continue;if(typeof J.value!=="string"||typeof J.name!=="string")continue;X.push({value:J.value,name:J.name,description:typeof J.description==="string"?J.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 bZ(Z){if(!Y2(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:OZ(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(bZ).filter((U)=>U!==null),Q=X.find((U)=>U.type==="select"&&U.category==="model")??X.find((U)=>U.type==="select"&&U.id==="model")??null,K=Q?.options.map((U)=>({id:U.value,name:U.name,description:U.description??null})),J=vZ(Z.models),Y=K&&K.length>0?K:J&&J.length>0?J:null,j=(typeof Q?.currentValue==="string"?Q.currentValue:null)??RZ(Z.models)??null;return{models:Y,currentModelId:j,configOptions:X,modelConfigId:Q?.id??null}}function vZ(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 RZ(Z){return typeof Z?.currentModelId==="string"?Z.currentModelId:null}function CZ(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 hZ(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 MZ(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 y3(Z,X){if(Z==="default")return null;if(!X||X.length===0)return Z;let Q=X.find((z)=>z.id===Z);if(Q)return Q.id;let K=Z.toLowerCase(),J=K.includes("opus")?"opus":K.includes("sonnet")?"sonnet":K.includes("haiku")?"haiku":null;if(!J)return Z;let Y=(z)=>`${z.id} ${z.name??""} ${z.description??""}`.toLowerCase(),j=X.filter((z)=>Y(z).includes(J));if(j.length===0)return Z;let B=(K.includes("1m")?j.find((z)=>Y(z).includes("1m")):void 0)??j[0];return B?B.id:Z}async function o1(Z){try{let X=await Z.conn.setSessionConfigOption(hZ({sessionId:Z.sessionId,configId:Z.configId,value:Z.value}));return MZ(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,J=4096;X.stderr.on("data",(I)=>{Q.push(I),K+=I.length;while(K>J*2&&Q.length>1){let p=Q.shift();if(p)K-=p.length}});let Y=()=>{let I=Buffer.concat(Q).toString("utf8");return I.length>J?I.slice(-J):I},j=Y3(Z.spawn.cwd),U={current:null},B={current:null},z={at:Date.now()},q=null,R=f3(X.stdin),h=P3(X.stdout),O=B3(R,h),M=new F3((I)=>({requestPermission:async(p)=>{let c=p.options,X0=c?.find((s)=>s.kind==="allow_once")??c?.find((s)=>s.kind==="allow_always");if(X0)return{outcome:{outcome:"selected",optionId:X0.optionId}};return{outcome:{outcome:"cancelled"}}},sessionUpdate:async(p)=>{z.at=Date.now();let c=B.current;if(c){let s=p.update.sessionUpdate;if(c.updateCount+=1,c.updateCount===1||c.lastUpdateType!==s||s==="tool_call"||s==="tool_call_update")m("acp.session_update",{runId:c.runId,cardId:c.cardId,sessionId:q,updateType:s,updateCount:c.updateCount,elapsedMs:Date.now()-c.startedAt});c.lastUpdateType=s}let X0=U.current;if(X0)await X0.onSessionUpdate(p)},readTextFile:j.readTextFile}),O),N=()=>X.kill();if(Z.signal)Z.signal.addEventListener("abort",N);let b=()=>{if(Z.signal)Z.signal.removeEventListener("abort",N)},g=async(I,p)=>{if(b(),X.kill(),L3(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 M.initialize({protocolVersion:Y1,clientCapabilities:t4,clientInfo:q3()})}catch(I){throw await g(I,[]),Error("unreachable")}try{x3(v.protocolVersion)}catch(I){throw b(),X.kill(),I}let G=v.authMethods?.map((I)=>I.id)??[],_;try{_=await M.newSession({cwd:Z.spawn.cwd,mcpServers:Z.mcpServers??[]})}catch(I){throw await g(I,G),Error("unreachable")}let D=_.sessionId;q=D;let x=V2(_),E=Z.modelId??null,k=E?y3(E,x.models):null;if(k&&k!==x.currentModelId)if(x.modelConfigId)x=await o1({conn:M,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:M,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)=>NZ({proc:X,conn:M,sessionId:D,activeAdapter:U,activeTrace:B,lastUpdate:z,collectStderrTail:Y},I)}}async function NZ(Z,X){let{proc:Q,conn:K,sessionId:J,activeAdapter:Y,activeTrace:j,lastUpdate:U}=Z,B=Date.now(),z=X.heartbeatMs??PZ,q=yZ(z),R={boardId:X.boardId,cardId:X.cardId,runId:X.runId},h=w3({ctx:R,appendText:X.appendText,appendToolActivity:X.appendToolActivity});Y.current=h,j.current={runId:X.runId,cardId:X.cardId,startedAt:B,updateCount:0,lastUpdateType:null},U.at=Date.now(),m("acp.prompt_started",{runId:X.runId,cardId:X.cardId,sessionId:J,heartbeatWindowMs:z});let O=!1,f=null,M=()=>Q.kill();X.signal.addEventListener("abort",M);try{let N=async()=>{let G=Math.min(fZ,Math.max(50,Math.floor(z/2)));f=setInterval(()=>{let D=X.isAwaitingInput?.()??!1;if(D){U.at=Date.now();return}if(U3({nowMs:Date.now(),lastUpdateMs:U.at,windowMs:z,awaitingInput:D}))O=!0,m("acp.inactivity_timeout",{runId:X.runId,cardId:X.cardId,sessionId:J,windowMs:z,silentForMs:Date.now()-U.at}),K.cancel({sessionId:J}).catch(()=>{return}),Q.kill()},G);let _=CZ(X.prompt.systemPrompt,X.prompt.messages);await K.prompt({sessionId:J,prompt:_}),m("acp.prompt_resolved",{runId:X.runId,cardId:X.cardId,sessionId:J,elapsedMs:Date.now()-B}),h.flush({completeOpenToolCalls:!0})},b=Q.waitForExit.then((G)=>({kind:"exited",exit:G})),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([g,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:h.getFinalText(),toolCallsExecuted:h.getToolCallCount(),stderrTail:Z.collectStderrTail(),updateTypeCounts:h.getUpdateTypeCounts()}}finally{if(m("acp.prompt_finished",{runId:X.runId,cardId:X.cardId,sessionId:J,elapsedMs:Date.now()-B,timedOut:O,updateCount:j.current?.updateCount??0}),f!==null)clearInterval(f);X.signal.removeEventListener("abort",M),h.flush({completeOpenToolCalls:!0}),Y.current=null,j.current=null}}var DZ=30000;async function O3(Z){let X=e4(Z.spawn),Q=f3(X.stdin),K=P3(X.stdout),J=B3(Q,K),j=new F3((z)=>({requestPermission:async()=>({outcome:{outcome:"cancelled"}}),sessionUpdate:async()=>{return},readTextFile:async()=>({content:""})}),J),U=()=>X.kill();if(Z.signal)Z.signal.addEventListener("abort",U);let B=null;try{let z=(async()=>{let R=await j.initialize({protocolVersion:Y1,clientCapabilities:t4,clientInfo:q3()});x3(R.protocolVersion);let h=R.authMethods?.map((v)=>v.id)??[],O;try{O=await j.newSession({cwd:Z.spawn.cwd,mcpServers:[]})}catch(v){if(L3(v))throw new c0(v.message??"Authentication required",h);throw v}let f=V2(O),M=Z.modelId??null,N=M?y3(M,f.models):null;if(N&&N!==f.currentModelId)if(f.modelConfigId)f=await o1({conn:j,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:j,sessionId:O.sessionId,configId:v,value:G,metadata:f,label:`${v}=${String(G)}`})}let b=f.models??[],g=f.currentModelId;return j.cancel({sessionId:O.sessionId}).catch(()=>{return}),{models:b,configOptions:f.configOptions,currentModelId:g}})(),q=new Promise((R,h)=>{B=setTimeout(()=>{h(new U0)},DZ)});return await Promise.race([z,q])}catch(z){if(z instanceof Error&&z.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 z}finally{if(B)clearTimeout(B);if(Z.signal)Z.signal.removeEventListener("abort",U);X.kill()}}import gZ from"node:fs/promises";import n1 from"node:os";async function b3(Z){let X={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},Q;try{Q=await gZ.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 b3(Z.configPath):await W0(),Q=Z.cardId?X.cardOverrides[Z.cardId]:void 0;if(Q?.runtimeConfigId){let J=X.runtimes.find((Y)=>Y.id===Q.runtimeConfigId);if(J)return{entry:J,adapter:F0(J),runFolder:Q.runFolder??J.runFolder??n1.homedir(),modelId:Q.modelId??J.defaultModelId??null,configValues:H2(J,void 0,Q)}}let K=X.boardOverrides[Z.boardId];if(K?.runtimeConfigId){let J=X.runtimes.find((Y)=>Y.id===K.runtimeConfigId);if(J)return{entry:J,adapter:F0(J),runFolder:K.runFolder??J.runFolder??n1.homedir(),modelId:K.modelId??J.defaultModelId??null,configValues:H2(J,K)}}if(X.globalDefaultConfigId){let J=X.runtimes.find((Y)=>Y.id===X.globalDefaultConfigId);if(J)return{entry:J,adapter:F0(J),runFolder:Q?.runFolder??K?.runFolder??J.runFolder??n1.homedir(),modelId:Q?.modelId??K?.modelId??J.defaultModelId??null,configValues:H2(J,K,Q)}}throw new E0}async function v3(Z,X={}){let K=(X.configPath?await b3(X.configPath):await W0()).runtimes.find((J)=>J.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 R3=new Map;function w2(Z,X){if(!Z)return;R3.set(Z,X)}function C3(Z){if(!Z)return!1;return R3.get(Z)??!1}var _0=new Map,z2=new Set;function F2(Z){_0.get(Z)?.controller.abort()}function h3(Z){for(let[X,Q]of _0){if(Q.frontendSessionId!==Z)continue;Q.controller.abort(),_0.delete(X)}}function M3(){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 N3(Z,X,Q,K){if((!X.availableModels||X.availableModels.length===0)&&X.availableConfigOptions.length===0)return;j0((J)=>{let Y=J.runtimes.find((j)=>j.id===Z);if(Y){if(X.availableModels&&X.availableModels.length>0)Y.discoveredModels=i1({adapterId:Q,models:X.availableModels,currentModelId:X.currentModelId??K});if(X.availableConfigOptions.length>0)Y.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}
897
937
 
898
938
  Runtime run folder:
899
- - Effective run folder: ${X}
939
+ - Effective run folder: ${$}
900
940
  - When the user says "my folder", "current folder", or "run folder", they mean this selected runtime folder.
901
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.
902
- - Filesystem access is read-only and limited to this folder. Hidden/config folders and outside-folder paths are unavailable.`}async function D3(Z,X){let Q=Date.now(),K=new AbortController;_0.set(Z.runId,{controller:K,frontendSessionId:Z.frontendSessionId}),z2.add(Z.cardId),m("cli.run_started",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId});let J=h4(Z.userId,Z.frontendSessionId,Z.cardId),Y=!1,j=null;try{let B=(Z.runtimeConfigIdHint?await v3(Z.runtimeConfigIdHint,{modelId:Z.modelHint??null}):null)??await R0({boardId:Z.boardId,cardId:Z.cardId}),z=await B.adapter.resolveSpawnConfig(B.entry),q=Z.toolSurface??"full",R=B.adapter.supportsImages===!0;j=z;let h=D4({userId:Z.userId,frontendSessionId:Z.frontendSessionId,boardId:Z.boardId,toolSurface:q,imagesSupported:R,cardId:Z.cardId,runFolder:B.runFolder}),O=h?[h]:[];w2(Z.cardId,R);let f=Z.modelHint??B.modelId,M=N4({adapterId:B.adapter.id,configId:B.entry.id,modelId:f,configValues:B.configValues,mcpUrl:h?.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:J,frontendSessionId:Z.frontendSessionId,fingerprint:M,open:()=>j2({spawn:{...z,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}),N3(B.entry.id,N,B.adapter.id,f);let b;try{let g=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(g+=1,g===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(g){if(!N.isAlive()||g instanceof T||g instanceof U0)Y=!0;throw g}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(U){let B=U instanceof Error?U.message:"Agent run failed";if(U instanceof T&&j&&!U2(U,K.signal))T4(j,B);if(!U2(U,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:U instanceof Error?U.name:"unknown"})}finally{M4(J,Y),_0.delete(Z.runId),z2.delete(Z.cardId),m("cli.run_released",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,sessionDead:Y})}}async function g3(Z){if(z2.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}),J=await K.adapter.resolveSpawnConfig(K.entry);Q=J;let Y=D4({userId:Z.userId,frontendSessionId:Z.frontendSessionId,boardId:Z.boardId,cardId:Z.cardId,runFolder:K.runFolder}),j=Y?[Y]:[];w2(Z.cardId,K.adapter.supportsImages===!0);let U=N4({adapterId:K.adapter.id,configId:K.entry.id,modelId:K.modelId,configValues:K.configValues,mcpUrl:Y?.url??null,runFolder:K.runFolder}),B=new AbortController,z=await D1({key:X,frontendSessionId:Z.frontendSessionId,fingerprint:U,open:()=>j2({spawn:{...J,cwd:K.runFolder},mcpServers:j,modelId:K.modelId,configValues:K.configValues,signal:B.signal})});return N3(K.entry.id,z,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 J=K instanceof Error?K.message:String(K);if(K instanceof T&&Q&&!U2(K))T4(Q,J);if(K instanceof T&&/(not ready|installing|warming|retry in a moment)/i.test(J))return{status:"retryable",error:J};return console.warn(`[ideawave-cli] warmup failed for card ${Z.cardId}:`,J),{status:"failed",error:J}}}import{spawn as uZ}from"node:child_process";import{randomUUID as u3}from"node:crypto";import{access as cZ,mkdir as c3}from"node:fs/promises";import{createRequire as lZ}from"node:module";import{homedir as q2,platform as l3}from"node:os";import{dirname as iZ,join as h0}from"node:path";import{randomBytes as m3,timingSafeEqual as EZ}from"node:crypto";import{lookup as mZ}from"node:dns/promises";import k3 from"node:http";import kZ from"node:https";import _Z from"node:net";import{isIP as $3}from"node:net";var G3=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=$3(Z);if(X===4){let J=GZ(Z);if(!J)return!1;if(H0(J,0))return!1;if(H0(J,10))return!1;if(H0(J,100,64,127))return!1;if(H0(J,127))return!1;if(H0(J,169,254,254))return!1;if(H0(J,172,16,31))return!1;if(H0(J,192,0,0))return!1;if(H0(J,192,168,168))return!1;if(H0(J,198,18,19))return!1;if(H0(J,198,51,51)&&J[2]===100)return!1;if(H0(J,203,0,0)&&J[2]===113)return!1;if((J[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($3(Q)&&!B2(Q))throw Error("Browser destination is not on a public network");return X.hash="",X}function E3(Z){return(X,Q,K)=>{if(Q.all){K(null,[Z]);return}K(null,Z.address,Z.family)}}var _3=30000;async function T3(Z){return(await mZ(Z,{all:!0,verbatim:!0})).flatMap((Q)=>Q.family===4||Q.family===6?[{address:Q.address,family:Q.family}]:[])}async function S3(Z,X=T3){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 A3(Z){return Array.isArray(Z)?Z[0]:Z}function SZ(Z,X){let Q=Buffer.from(Z),K=Buffer.from(X);return Q.byteLength===K.byteLength&&EZ(Q,K)}function I3(Z){let X={...Z},Q=A3(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 IZ(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 TZ(Z){return new Promise((X,Q)=>{let K=(Y)=>{Z.off("listening",J),Q(Y)},J=()=>{Z.off("error",K);let Y=Z.address();if(!Y||typeof Y==="string"){Q(Error("Headless browser proxy did not bind a TCP port"));return}X(Y.port)};Z.once("error",K),Z.once("listening",J),Z.listen(0,"127.0.0.1")})}function AZ(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-${m3(12).toString("hex")}`;password=m3(24).toString("base64url");sockets=new Set;server=null;port=null;constructor(Z=T3){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 SZ(A3(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 S3(Q.hostname,this.resolver),Y=(Q.protocol==="https:"?kZ:k3).request(Q,{method:Z.method,headers:I3(Z.headers),lookup:E3(K)});Y.setTimeout(_3,()=>{Y.destroy(Error("Browser request timed out"))}),Y.once("response",(j)=>{X.writeHead(j.statusCode??502,I3(j.headers)),j.pipe(X)}),Y.once("error",(j)=>{if(X.headersSent)X.destroy(j);else X.writeHead(502,{"content-type":"text/plain; charset=utf-8"}),X.end("Browser request failed")}),Z.pipe(Y)}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
903
- Proxy-Authenticate: Basic realm="IdeaWave browser"\r
904
- Connection: close\r
905
- \r
906
- `);return}try{let K=IZ(Z.url??""),J=await S3(K.hostname,this.resolver),Y=_Z.connect({host:J.address,family:J.family,port:K.port});this.sockets.add(Y),AZ(X,Y),Y.setTimeout(_3,()=>Y.destroy()),Y.once("connect",()=>{if(X.write(`HTTP/1.1 200 Connection Established\r
907
- \r
908
- `),Q.byteLength>0)Y.write(Q);X.pipe(Y),Y.pipe(X)}),Y.once("close",()=>this.sockets.delete(Y))}catch(K){X.end(`HTTP/1.1 403 Forbidden\r
909
- Content-Type: text/plain; charset=utf-8\r
910
- Connection: close\r
911
- \r
912
- ${K instanceof Error?K.message:"Browser destination blocked"}`)}}async start(){if(this.server)return;let Z=k3.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 TZ(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 i3=8,dZ={width:720,height:442},aZ=320,pZ=180,d3=2048,rZ=45000,sZ=12582912,a3=300;function p3(Z,X,Q){return Math.min(Q,Math.max(X,Math.round(Z)))}function oZ(){if(l3()==="darwin")return h0(q2(),"Library","Application Support","IdeaWave","browser");if(l3()==="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 nZ(Z=oZ()){return{profile:h0(Z,"profile"),browsers:h0(Z,"engines")}}async function tZ(Z){let Q=lZ(import.meta.url).resolve("playwright-core/package.json"),K=h0(iZ(Q),"cli.js");await new Promise((J,Y)=>{let j=uZ(process.execPath,[K,"install","chromium","--no-shell"],{stdio:"inherit",env:{...process.env,PLAYWRIGHT_BROWSERS_PATH:Z}});j.once("error",Y),j.once("exit",(U)=>{if(U===0)J();else Y(Error(`Chromium installation exited with code ${U??"unknown"}`))})})}function eZ(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 ZX(Z){let X=[],Q=Z;while(Q?.parentFrame()){let J=await(await Q.frameElement()).evaluate((Y)=>{if(Y.id)return`#${globalThis.CSS?.escape?globalThis.CSS.escape(Y.id):Y.id.replace(/[^a-zA-Z0-9_-]/g,(z)=>`\\${z}`)}`;let j=[],U=Y;while(U&&U!==U.ownerDocument.documentElement&&j.length<8){let B=U.localName||"*",z=U.parentElement;if(z){let q=[...z.children].filter((R)=>R.localName===U?.localName);if(q.length>1)B+=`:nth-of-type(${q.indexOf(U)+1})`}j.unshift(B),U=z}return j.join(" > ")});X.unshift(J||"iframe"),Q=Q.parentFrame()}return X}async function r3(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,(j)=>`\\${j}`)}`;else{let Y=[],j=X;while(j&&j!==j.ownerDocument.documentElement&&Y.length<8){let U=j.localName||"*",B=j.parentElement;if(B){let z=[...B.children].filter((q)=>q.localName===j?.localName);if(z.length>1)U+=`:nth-of-type(${z.indexOf(j)+1})`}Y.unshift(U),j=B}Q=Y.join(" > ")||null}let K=(X.innerText||X.textContent||"").replace(/\s+/g," ").trim().slice(0,500),J={tag:X.localName,text:K,selector:Q};if(X instanceof HTMLAnchorElement)J.href=X.href;if(X instanceof HTMLInputElement)J.inputType=X.type,J.value=X.type==="password"?"":X.value.slice(0,500);if(X instanceof HTMLButtonElement||X instanceof HTMLInputElement||X instanceof HTMLSelectElement||X instanceof HTMLTextAreaElement)J.disabled=X.disabled;return J})}class s3{page;onClose;revision=u3();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(rZ),this.page.setDefaultTimeout(12000),this.page.on("framenavigated",(X)=>{if(X!==this.page.mainFrame()||!/^https?:/.test(X.url()))return;this.revision=u3(),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:p3(Z,aZ,d3),height:p3(X,pZ,d3)}),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 ZX(X)})))}refFor(Z,X){for(let[K,J]of this.refs)if(J.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 J=this.refs.get(Z.ref);if(!J)throw Error("STALE_BROWSER_REF: inspect the browser again");return J}let X="framePath"in Z?Z.framePath??[]:[],Q=(await this.framesWithPaths()).find((J)=>JSON.stringify(J.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((Y)=>{let j=Y.getBoundingClientRect(),U=(Y.textContent??"").replace(/\s+/g," ").trim().slice(0,2000);return{rect:{x:j.x,y:j.y,width:j.width,height:j.height},scrollX:Y.ownerDocument.defaultView?.scrollX??0,scrollY:Y.ownerDocument.defaultView?.scrollY??0,text:U}}),J=await r3(X.handle);return{revision:this.revision,ref:this.refFor(X.handle,X.framePath),selector:J.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,J)=>{let Y=K;Y.dataset.ideawaveBrowserHighlight="true",Y.style.outline=`3px solid ${J}`,Y.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:J,backwards:Y})=>window.find(J,!1,Y,!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 J=window.getSelection();if(!J||J.isCollapsed||!J.anchorNode)return null;return J.anchorNode.nodeType===Node.ELEMENT_NODE?J.anchorNode:J.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:j,path:U}of await this.framesWithPaths()){let B=await j.locator("body").innerText({timeout:1500}).catch(()=>"");if(B.trim())K.push(B.replace(/\s+/g," ").trim());for(let[z,q,R]of[["h1,h2,h3,h4,h5,h6",Z,200],["a[href]",X,a3],["button,input,select,textarea,[role=button]",Q,a3]]){if(q.length>=R)continue;let h=(await j.$$(z)).slice(0,R-q.length);for(let O of h){let f=O;if(!await f.isVisible().catch(()=>!1)){await f.dispose();continue}let M=await r3(f);q.push({ref:this.refFor(f,U),...M,framePath:U})}}}let J=K.join(`
913
- `),Y=await this.state();return{sourceUrl:Y.sourceUrl,title:Y.title,mode:"live",revision:this.revision,untrustedContent:!0,visibleText:J.slice(0,25000),truncated:J.length>25000,headings:Z,links:X,controls:Q,metrics:Y.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 J=X[K],Y=Q[K];if(!J||!Y)continue;if(J instanceof HTMLInputElement&&Y instanceof HTMLInputElement){if(J.type==="password")Y.removeAttribute("value");else Y.setAttribute("value",J.value);if(J.checked)Y.setAttribute("checked","");else Y.removeAttribute("checked")}else if(J instanceof HTMLTextAreaElement&&Y instanceof HTMLTextAreaElement)Y.textContent=J.value;else if(J instanceof HTMLOptionElement&&Y instanceof HTMLOptionElement)if(J.selected)Y.setAttribute("selected","");else Y.removeAttribute("selected");else if(J instanceof HTMLImageElement&&Y instanceof HTMLImageElement&&J.currentSrc)Y.setAttribute("src",J.currentSrc),Y.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}),J=Number(K.headers()["content-length"]??0);if(Number.isFinite(J)&&J>X)throw Error("Browser proxy response exceeds the size limit");let Y=Buffer.from(await K.body());if(Y.byteLength>X)throw Error("Browser proxy response exceeds the size limit");return{url:K.url(),status:K.status(),headers:K.headers(),body:Y}}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=nZ();await Promise.all([c3(Z.profile,{recursive:!0}),c3(Z.browsers,{recursive:!0}),this.networkProxy.start()]),process.env.PLAYWRIGHT_BROWSERS_PATH=Z.browsers;let{chromium:X}=await import("playwright-core"),Q=eZ(this.networkProxy),K=null;if(await cZ(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 tZ(Z.browsers),K=await X.launchPersistentContext(Z.profile,{...Q,channel:"chromium"});await K.route("**/*",async(U)=>{let B=U.request().url();try{let z=new URL(B);if(z.protocol==="http:"||z.protocol==="https:")C0(B);else if(z.protocol!=="data:"&&z.protocol!=="blob:"){await U.abort("blockedbyclient");return}await U.continue()}catch{await U.abort("blockedbyclient")}});let Y=K.pages();await Promise.all(Y.slice(1).map((U)=>U.close({runBeforeUnload:!1}).catch(()=>{return})));let j=Y[0];if(j&&j.url()!=="about:blank")await j.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>=i3)throw Error(`IdeaWave supports at most ${i3} simultaneous live browser cards`);let X=await this.ensureContext(),Q=X.pages().find((J)=>J.url()==="about:blank"&&![...this.pages].some((Y)=>Y.page===J));Q??=await X.newPage();let K=new s3(Q,()=>this.pages.delete(K));this.pages.add(K);try{return await K.initialize(Z),K}catch(J){throw await K.close(),J}}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 EQ}from"node:crypto";import*as B4 from"css-tree";var XX=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 o3(Z){return Z>=56320&&Z<=57343}function n3(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||XX.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 KX=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=KX,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:J}=this,Y=K+X,j=J+X;return{code:Z,startLine:Q,endLine:Q,startCol:Y,endCol:Y,startOffset:j,endOffset:j}}_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(o3(X))return this.pos++,this._addGap(),n3(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 JX=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 t3(Z){if(Z>=55296&&Z<=57343||Z>1114111)return 65533;return JX.get(Z)??Z}function e3(Z){let X=atob(Z),Q=X.length&-2,K=new Uint16Array(Q/2);for(let J=0,Y=0;J<Q;J+=2){let j=X.charCodeAt(J),U=X.charCodeAt(J+1);K[Y++]=j|U<<8}return K}var f2=e3("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 i;(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"})(i||(i={}));var Z8=32;function y2(Z){return Z>=i.ZERO&&Z<=i.NINE}function YX(Z){return Z>=i.UPPER_A&&Z<=i.UPPER_F||Z>=i.LOWER_A&&Z<=i.LOWER_F}function VX(Z){return Z>=i.UPPER_A&&Z<=i.UPPER_Z||Z>=i.LOWER_A&&Z<=i.LOWER_Z||y2(Z)}function jX(Z){return Z===i.EQUALS||VX(Z)}var r;(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"})(r||(r={}));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=r.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=B0.Strict;runConsumed=0;startEntity(Z){this.decodeMode=Z,this.state=r.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(Z,X){switch(this.state){case r.EntityStart:{if(Z.charCodeAt(X)===i.NUM)return this.state=r.NumericStart,this.consumed+=1,this.stateNumericStart(Z,X+1);return this.state=r.NamedEntity,this.stateNamedEntity(Z,X)}case r.NumericStart:return this.stateNumericStart(Z,X);case r.NumericDecimal:return this.stateNumericDecimal(Z,X);case r.NumericHex:return this.stateNumericHex(Z,X);case r.NamedEntity:return this.stateNamedEntity(Z,X)}}stateNumericStart(Z,X){if(X>=Z.length)return-1;if((Z.charCodeAt(X)|Z8)===i.LOWER_X)return this.state=r.NumericHex,this.consumed+=1,this.stateNumericHex(Z,X+1);return this.state=r.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<=i.NINE?Q-i.ZERO:(Q|Z8)-i.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-i.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===i.SEMI)this.consumed+=1;else if(this.decodeMode===B0.Strict)return 0;if(this.emitCodePoint(t3(this.result),this.consumed),this.errors){if(Z!==i.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(Z,X){let{decodeTree:Q}=this,K=Q[this.treeIndex],J=(K&o.VALUE_LENGTH)>>14;while(X<Z.length){if(J===0&&(K&o.FLAG13)!==0){let j=(K&o.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let U=K&o.JUMP_TABLE;if(Z.charCodeAt(X)!==U)return this.result===0?0:this.emitNotTerminatedNamedEntity();X++,this.excess++,this.runConsumed++}while(this.runConsumed<j){if(X>=Z.length)return-1;let U=this.runConsumed-1,B=Q[this.treeIndex+1+(U>>1)],z=U%2===0?B&255:B>>8&255;if(Z.charCodeAt(X)!==z)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();X++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(j>>1),K=Q[this.treeIndex],J=(K&o.VALUE_LENGTH)>>14}if(X>=Z.length)break;let Y=Z.charCodeAt(X);if(Y===i.SEMI&&J!==0&&(K&o.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,J,this.consumed+this.excess);if(this.treeIndex=HX(Q,K,this.treeIndex+Math.max(1,J),Y),this.treeIndex<0)return this.result===0||this.decodeMode===B0.Attribute&&(J===0||jX(Y))?0:this.emitNotTerminatedNamedEntity();if(K=Q[this.treeIndex],J=(K&o.VALUE_LENGTH)>>14,J!==0){if(Y===i.SEMI)return this.emitNamedEntityData(this.treeIndex,J,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 r.NamedEntity:return this.result!==0&&(this.decodeMode!==B0.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case r.NumericDecimal:return this.emitNumericEntity(0,2);case r.NumericHex:return this.emitNumericEntity(0,3);case r.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case r.EntityStart:return 0}}}function HX(Z,X,Q,K){let J=(X&o.BRANCH_LENGTH)>>7,Y=X&o.JUMP_TABLE;if(J===0)return Y!==0&&K===Y?Q:-1;if(Y){let z=K-Y;return z<0||z>=J?-1:Z[Q+z]-1}let j=J+1>>1,U=0,B=J-1;while(U<=B){let z=U+B>>>1,q=z>>1,h=Z[Q+q]>>(z&1)*8&255;if(h<K)U=z+1;else if(h>K)B=z-1;else return Z[Q+j+z]}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 wX=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=wX.get(Z))!==null&&X!==void 0?X:W.UNKNOWN}var y=W,X8={[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 Q8(Z,X){return zX.has(Z)||X&&Z===F.NOSCRIPT}var H;(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"})(H||(H={}));var n={DATA:H.DATA,RCDATA:H.RCDATA,RAWTEXT:H.RAWTEXT,SCRIPT_DATA:H.SCRIPT_DATA,PLAINTEXT:H.PLAINTEXT,CDATA_SECTION:H.CDATA_SECTION};function FX(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 BX(Z){return Z>=V.LATIN_SMALL_A&&Z<=V.LATIN_SMALL_Z}function M0(Z){return BX(Z)||H1(Z)}function K8(Z){return M0(Z)||FX(Z)}function Q4(Z){return Z+32}function J8(Z){return Z===V.SPACE||Z===V.LINE_FEED||Z===V.TABULATION||Z===V.FORM_FEED}function W8(Z){return J8(Z)||Z===V.SOLIDUS||Z===V.GREATER_THAN_SIGN}function LX(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=H.DATA,this.returnState=H.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=LX(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=J8(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=H.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?B0.Attribute:B0.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===H.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===H.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===H.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(Z){if(this._isCharacterReferenceInAttribute())this.currentAttr.value+=String.fromCodePoint(Z);else this._emitCodePoint(Z)}_callState(Z){switch(this.state){case H.DATA:{this._stateData(Z);break}case H.RCDATA:{this._stateRcdata(Z);break}case H.RAWTEXT:{this._stateRawtext(Z);break}case H.SCRIPT_DATA:{this._stateScriptData(Z);break}case H.PLAINTEXT:{this._statePlaintext(Z);break}case H.TAG_OPEN:{this._stateTagOpen(Z);break}case H.END_TAG_OPEN:{this._stateEndTagOpen(Z);break}case H.TAG_NAME:{this._stateTagName(Z);break}case H.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(Z);break}case H.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(Z);break}case H.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(Z);break}case H.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(Z);break}case H.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(Z);break}case H.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(Z);break}case H.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(Z);break}case H.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(Z);break}case H.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(Z);break}case H.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(Z);break}case H.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(Z);break}case H.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(Z);break}case H.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(Z);break}case H.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(Z);break}case H.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(Z);break}case H.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(Z);break}case H.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(Z);break}case H.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(Z);break}case H.ATTRIBUTE_NAME:{this._stateAttributeName(Z);break}case H.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(Z);break}case H.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(Z);break}case H.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(Z);break}case H.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(Z);break}case H.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(Z);break}case H.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(Z);break}case H.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(Z);break}case H.BOGUS_COMMENT:{this._stateBogusComment(Z);break}case H.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(Z);break}case H.COMMENT_START:{this._stateCommentStart(Z);break}case H.COMMENT_START_DASH:{this._stateCommentStartDash(Z);break}case H.COMMENT:{this._stateComment(Z);break}case H.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(Z);break}case H.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(Z);break}case H.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(Z);break}case H.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(Z);break}case H.COMMENT_END_DASH:{this._stateCommentEndDash(Z);break}case H.COMMENT_END:{this._stateCommentEnd(Z);break}case H.COMMENT_END_BANG:{this._stateCommentEndBang(Z);break}case H.DOCTYPE:{this._stateDoctype(Z);break}case H.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(Z);break}case H.DOCTYPE_NAME:{this._stateDoctypeName(Z);break}case H.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(Z);break}case H.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(Z);break}case H.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(Z);break}case H.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(Z);break}case H.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(Z);break}case H.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(Z);break}case H.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(Z);break}case H.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(Z);break}case H.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(Z);break}case H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(Z);break}case H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(Z);break}case H.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(Z);break}case H.BOGUS_DOCTYPE:{this._stateBogusDoctype(Z);break}case H.CDATA_SECTION:{this._stateCdataSection(Z);break}case H.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(Z);break}case H.CDATA_SECTION_END:{this._stateCdataSectionEnd(Z);break}case H.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case H.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(Z);break}default:throw Error("Unknown state")}}_stateData(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=H.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=H.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=H.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=H.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=H.TAG_NAME,this._stateTagName(Z);else switch(Z){case V.EXCLAMATION_MARK:{this.state=H.MARKUP_DECLARATION_OPEN;break}case V.SOLIDUS:{this.state=H.END_TAG_OPEN;break}case V.QUESTION_MARK:{this._err(L.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=H.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=H.DATA,this._stateData(Z)}}_stateEndTagOpen(Z){if(M0(Z))this._createEndTagToken(),this.state=H.TAG_NAME,this._stateTagName(Z);else switch(Z){case V.GREATER_THAN_SIGN:{this._err(L.missingEndTagName),this.state=H.DATA;break}case V.EOF:{this._err(L.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(L.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=H.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=H.BEFORE_ATTRIBUTE_NAME;break}case V.SOLIDUS:{this.state=H.SELF_CLOSING_START_TAG;break}case V.GREATER_THAN_SIGN:{this.state=H.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=H.RCDATA_END_TAG_OPEN;else this._emitChars("<"),this.state=H.RCDATA,this._stateRcdata(Z)}_stateRcdataEndTagOpen(Z){if(M0(Z))this.state=H.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(Z);else this._emitChars("</"),this.state=H.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=H.BEFORE_ATTRIBUTE_NAME,!1;case V.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=H.SELF_CLOSING_START_TAG,!1;case V.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=H.DATA,!1;default:return!this._ensureHibernation()}}_stateRcdataEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=H.RCDATA,this._stateRcdata(Z)}_stateRawtextLessThanSign(Z){if(Z===V.SOLIDUS)this.state=H.RAWTEXT_END_TAG_OPEN;else this._emitChars("<"),this.state=H.RAWTEXT,this._stateRawtext(Z)}_stateRawtextEndTagOpen(Z){if(M0(Z))this.state=H.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(Z);else this._emitChars("</"),this.state=H.RAWTEXT,this._stateRawtext(Z)}_stateRawtextEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=H.RAWTEXT,this._stateRawtext(Z)}_stateScriptDataLessThanSign(Z){switch(Z){case V.SOLIDUS:{this.state=H.SCRIPT_DATA_END_TAG_OPEN;break}case V.EXCLAMATION_MARK:{this.state=H.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}}_stateScriptDataEndTagOpen(Z){if(M0(Z))this.state=H.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(Z);else this._emitChars("</"),this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscapeStart(Z){if(Z===V.HYPHEN_MINUS)this.state=H.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-");else this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscapeStartDash(Z){if(Z===V.HYPHEN_MINUS)this.state=H.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");else this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscaped(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.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=H.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=H.SCRIPT_DATA_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=H.SCRIPT_DATA_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataEscapedDashDash(Z){switch(Z){case V.HYPHEN_MINUS:{this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.GREATER_THAN_SIGN:{this.state=H.SCRIPT_DATA,this._emitChars(">");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=H.SCRIPT_DATA_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=H.SCRIPT_DATA_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataEscapedLessThanSign(Z){if(Z===V.SOLIDUS)this.state=H.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;else if(M0(Z))this._emitChars("<"),this.state=H.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(Z);else this._emitChars("<"),this.state=H.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataEscapedEndTagOpen(Z){if(M0(Z))this.state=H.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(Z);else this._emitChars("</"),this.state=H.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataEscapedEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=H.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataDoubleEscapeStart(Z){if(this.preprocessor.startsWith(e.SCRIPT,!1)&&W8(this.preprocessor.peek(e.SCRIPT.length))){this._emitCodePoint(Z);for(let X=0;X<e.SCRIPT.length;X++)this._emitCodePoint(this._consume());this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED}else if(!this._ensureHibernation())this.state=H.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataDoubleEscaped(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.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=H.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=H.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=H.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.GREATER_THAN_SIGN:{this.state=H.SCRIPT_DATA,this._emitChars(">");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedLessThanSign(Z){if(Z===V.SOLIDUS)this.state=H.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/");else this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(Z)}_stateScriptDataDoubleEscapeEnd(Z){if(this.preprocessor.startsWith(e.SCRIPT,!1)&&W8(this.preprocessor.peek(e.SCRIPT.length))){this._emitCodePoint(Z);for(let X=0;X<e.SCRIPT.length;X++)this._emitCodePoint(this._consume());this.state=H.SCRIPT_DATA_ESCAPED}else if(!this._ensureHibernation())this.state=H.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=H.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(Z);break}case V.EQUALS_SIGN:{this._err(L.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=H.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=H.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=H.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(Z);break}case V.EQUALS_SIGN:{this._leaveAttrName(),this.state=H.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=H.SELF_CLOSING_START_TAG;break}case V.EQUALS_SIGN:{this.state=H.BEFORE_ATTRIBUTE_VALUE;break}case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=H.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=H.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this.state=H.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingAttributeValue),this.state=H.DATA,this.emitCurrentTagToken();break}default:this.state=H.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(Z)}}_stateAttributeValueDoubleQuoted(Z){switch(Z){case V.QUOTATION_MARK:{this.state=H.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=H.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=H.BEFORE_ATTRIBUTE_NAME;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=H.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=H.BEFORE_ATTRIBUTE_NAME;break}case V.SOLIDUS:{this._leaveAttrValue(),this.state=H.SELF_CLOSING_START_TAG;break}case V.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=H.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this._err(L.missingWhitespaceBetweenAttributes),this.state=H.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(Z)}}_stateSelfClosingStartTag(Z){switch(Z){case V.GREATER_THAN_SIGN:{let X=this.currentToken;X.selfClosing=!0,this.state=H.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this._err(L.unexpectedSolidusInTag),this.state=H.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(Z)}}_stateBogusComment(Z){let X=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.state=H.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=H.COMMENT_START;else if(this._consumeSequenceIfMatch(e.DOCTYPE,!1))this.currentLocation=this.getCurrentLocation(e.DOCTYPE.length+1),this.state=H.DOCTYPE;else if(this._consumeSequenceIfMatch(e.CDATA_START,!0))if(this.inForeignNode)this.state=H.CDATA_SECTION;else this._err(L.cdataInHtmlContent),this._createCommentToken(e.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=H.BOGUS_COMMENT;else if(!this._ensureHibernation())this._err(L.incorrectlyOpenedComment),this._createCommentToken(2),this.state=H.BOGUS_COMMENT,this._stateBogusComment(Z)}_stateCommentStart(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.COMMENT_START_DASH;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptClosingOfEmptyComment),this.state=H.DATA;let X=this.currentToken;this.emitCurrentComment(X);break}default:this.state=H.COMMENT,this._stateComment(Z)}}_stateCommentStartDash(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=H.COMMENT_END;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptClosingOfEmptyComment),this.state=H.DATA,this.emitCurrentComment(X);break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="-",this.state=H.COMMENT,this._stateComment(Z)}}_stateComment(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=H.COMMENT_END_DASH;break}case V.LESS_THAN_SIGN:{X.data+="<",this.state=H.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=H.COMMENT_LESS_THAN_SIGN_BANG;break}case V.LESS_THAN_SIGN:{X.data+="<";break}default:this.state=H.COMMENT,this._stateComment(Z)}}_stateCommentLessThanSignBang(Z){if(Z===V.HYPHEN_MINUS)this.state=H.COMMENT_LESS_THAN_SIGN_BANG_DASH;else this.state=H.COMMENT,this._stateComment(Z)}_stateCommentLessThanSignBangDash(Z){if(Z===V.HYPHEN_MINUS)this.state=H.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;else this.state=H.COMMENT_END_DASH,this._stateCommentEndDash(Z)}_stateCommentLessThanSignBangDashDash(Z){if(Z!==V.GREATER_THAN_SIGN&&Z!==V.EOF)this._err(L.nestedComment);this.state=H.COMMENT_END,this._stateCommentEnd(Z)}_stateCommentEndDash(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=H.COMMENT_END;break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="-",this.state=H.COMMENT,this._stateComment(Z)}}_stateCommentEnd(Z){let X=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentComment(X);break}case V.EXCLAMATION_MARK:{this.state=H.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=H.COMMENT,this._stateComment(Z)}}_stateCommentEndBang(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{X.data+="--!",this.state=H.COMMENT_END_DASH;break}case V.GREATER_THAN_SIGN:{this._err(L.incorrectlyClosedComment),this.state=H.DATA,this.emitCurrentComment(X);break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="--!",this.state=H.COMMENT,this._stateComment(Z)}}_stateDoctype(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.BEFORE_DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this.state=H.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=H.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(Z)}}_stateBeforeDoctypeName(Z){if(H1(Z))this._createDoctypeToken(String.fromCharCode(Q4(Z))),this.state=H.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=H.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=H.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=H.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=H.AFTER_DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this.state=H.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=H.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=H.AFTER_DOCTYPE_PUBLIC_KEYWORD;else if(this._consumeSequenceIfMatch(e.SYSTEM,!1))this.state=H.AFTER_DOCTYPE_SYSTEM_KEYWORD;else if(!this._ensureHibernation())this._err(L.invalidCharacterSequenceAfterDoctypeName),X.forceQuirks=!0,this.state=H.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=H.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.QUOTATION_MARK:{this._err(L.missingWhitespaceAfterDoctypePublicKeyword),X.publicId="",this.state=H.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(L.missingWhitespaceAfterDoctypePublicKeyword),X.publicId="",this.state=H.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypePublicIdentifier),X.forceQuirks=!0,this.state=H.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=H.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=H.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{X.publicId="",this.state=H.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypePublicIdentifier),X.forceQuirks=!0,this.state=H.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=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateDoctypePublicIdentifierDoubleQuoted(Z){let X=this.currentToken;switch(Z){case V.QUOTATION_MARK:{this.state=H.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=H.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=H.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=H.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=H.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentDoctype(X);break}case V.QUOTATION_MARK:{this._err(L.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(L.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),X.systemId="",this.state=H.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=H.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=H.DATA;break}case V.QUOTATION_MARK:{X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{X.systemId="",this.state=H.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=H.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=H.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.QUOTATION_MARK:{this._err(L.missingWhitespaceAfterDoctypeSystemKeyword),X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(L.missingWhitespaceAfterDoctypeSystemKeyword),X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=H.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=H.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=H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=H.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=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateDoctypeSystemIdentifierDoubleQuoted(Z){let X=this.currentToken;switch(Z){case V.QUOTATION_MARK:{this.state=H.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=H.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=H.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=H.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=H.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=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBogusDoctype(Z){let X=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(X),this.state=H.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=H.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=H.CDATA_SECTION_END;else this._emitChars("]"),this.state=H.CDATA_SECTION,this._stateCdataSection(Z)}_stateCdataSectionEnd(Z){switch(Z){case V.GREATER_THAN_SIGN:{this.state=H.DATA;break}case V.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=H.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()&&K8(this.preprocessor.peek(1))?H.AMBIGUOUS_AMPERSAND:this.returnState;else this.state=this.returnState}_stateAmbiguousAmpersand(Z){if(K8(Z))this._flushCodePointConsumedAsCharacterReference(Z);else{if(Z===V.SEMICOLON)this._err(L.unknownNamedCharacterReference);this.state=this.returnState,this._callState(Z)}}}var H8=new Set([W.DD,W.DT,W.LI,W.OPTGROUP,W.OPTION,W.P,W.RB,W.RP,W.RT,W.RTC]),Y8=new Set([...H8,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]),qX=new Set([...W4,W.OL,W.UL]),xX=new Set([...W4,W.BUTTON]),V8=new Set([W.ANNOTATION_XML,W.MI,W.MN,W.MO,W.MS,W.MTEXT]),j8=new Set([W.DESC,W.FOREIGN_OBJECT,W.TITLE]),PX=new Set([W.TR,W.TEMPLATE,W.HTML]),fX=new Set([W.TBODY,W.TFOOT,W.THEAD,W.TEMPLATE,W.HTML]),yX=new Set([W.TABLE,W.TEMPLATE,W.HTML]),OX=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(OX,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(yX,P.HTML)}clearBackToTableBodyContext(){this.clearBackTo(fX,P.HTML)}clearBackToTableRowContext(){this.clearBackTo(PX,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(j8.has(K))return!1;break}case P.MATHML:{if(V8.has(K))return!1;break}}}return!0}hasInScope(Z){return this.hasInDynamicScope(Z,W4)}hasInListItemScope(Z){return this.hasInDynamicScope(Z,qX)}hasInButtonScope(Z){return this.hasInDynamicScope(Z,xX)}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(j8.has(X))return!1;break}case P.MATHML:{if(V8.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&&H8.has(this.currentTagId))this.pop()}generateImpliedEndTagsThoroughly(){while(this.currentTagId!==void 0&&Y8.has(this.currentTagId))this.pop()}generateImpliedEndTagsWithExclusion(Z){while(this.currentTagId!==void 0&&this.currentTagId!==Z&&Y8.has(this.currentTagId))this.pop()}}var w0;(function(Z){Z[Z.Marker=0]="Marker",Z[Z.Element=1]="Element"})(w0||(w0={}));var w8={type:w0.Marker};class v2{constructor(Z){this.treeAdapter=Z,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(Z,X){let Q=[],K=X.length,J=this.treeAdapter.getTagName(Z),Y=this.treeAdapter.getNamespaceURI(Z);for(let j=0;j<this.entries.length;j++){let U=this.entries[j];if(U.type===w0.Marker)break;let{element:B}=U;if(this.treeAdapter.getTagName(B)===J&&this.treeAdapter.getNamespaceURI(B)===Y){let z=this.treeAdapter.getAttrList(B);if(z.length===K)Q.push({idx:j,attrs:z})}}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((Y)=>[Y.name,Y.value])),J=0;for(let Y=0;Y<Q.length;Y++){let j=Q[Y];if(j.attrs.every((U)=>K.get(U.name)===U.value)){if(J+=1,J>=3)this.entries.splice(j.idx,1)}}}insertMarker(){this.entries.unshift(w8)}pushElement(Z,X){this._ensureNoahArkCondition(Z),this.entries.unshift({type:w0.Element,element:Z,token:X})}insertElementAfterBookmark(Z,X){let Q=this.entries.indexOf(this.bookmark);this.entries.splice(Q,0,{type:w0.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(w8);if(Z===-1)this.entries.length=0;else this.entries.splice(0,Z+1)}getElementEntryInScopeWithTagName(Z){let X=this.entries.find((Q)=>Q.type===w0.Marker||this.treeAdapter.getTagName(Q.element)===Z);return X&&X.type===w0.Element?X:null}getElementEntry(Z){return this.entries.find((X)=>X.type===w0.Element&&X.element===Z)}}var Y0={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 J=Z.childNodes.find((Y)=>Y.nodeName==="#documentType");if(J)J.name=X,J.publicId=Q,J.systemId=K;else{let Y={nodeName:"#documentType",name:X,publicId:Q,systemId:K,parentNode:null};Y0.appendChild(Z,Y)}},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(Y0.isTextNode(Q)){Q.value+=X;return}}Y0.appendChild(Z,Y0.createTextNode(X))},insertTextBefore(Z,X,Q){let K=Z.childNodes[Z.childNodes.indexOf(Q)-1];if(K&&Y0.isTextNode(K))K.value+=X;else Y0.insertBefore(Z,Y0.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 U8="html",bX="about:legacy-compat",vX="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",F8=["+//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//"],RX=[...F8,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],CX=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),B8=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],hX=[...B8,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function z8(Z,X){return X.some((Q)=>Z.startsWith(Q))}function L8(Z){return Z.name===U8&&Z.publicId===null&&(Z.systemId===null||Z.systemId===bX)}function q8(Z){if(Z.name!==U8)return Z0.QUIRKS;let{systemId:X}=Z;if(X&&X.toLowerCase()===vX)return Z0.QUIRKS;let{publicId:Q}=Z;if(Q!==null){if(Q=Q.toLowerCase(),CX.has(Q))return Z0.QUIRKS;let K=X===null?RX:F8;if(z8(Q,K))return Z0.QUIRKS;if(K=X===null?B8:hX,z8(Q,K))return Z0.LIMITED_QUIRKS}return Z0.NO_QUIRKS}var x8={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},NX="definitionurl",DX="definitionURL",gX=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])),EX=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 P8(Z){let X=Z.tagID;return X===W.FONT&&Z.attrs.some(({name:K})=>K===P0.COLOR||K===P0.SIZE||K===P0.FACE)||EX.has(X)}function R2(Z){for(let X=0;X<Z.attrs.length;X++)if(Z.attrs[X].name===NX){Z.attrs[X].name=DX;break}}function C2(Z){for(let X=0;X<Z.attrs.length;X++){let Q=gX.get(Z.attrs[X].name);if(Q!=null)Z.attrs[X].name=Q}}function J4(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 f8(Z){let X=GX.get(Z.tagName);if(X!=null)Z.tagName=X,Z.tagID=S0(Z.tagName)}function mX(Z,X){return X===P.MATHML&&(Z===W.MI||Z===W.MO||Z===W.MN||Z===W.MS||Z===W.MTEXT)}function kX(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 J=Q[K].value.toLowerCase();return J===x8.TEXT_HTML||J===x8.APPLICATION_XML}}return X===P.SVG&&(Z===W.FOREIGN_OBJECT||Z===W.DESC||Z===W.TITLE)}function y8(Z,X,Q,K){return(!K||K===P.HTML)&&kX(Z,X,Q)||(!K||K===P.MATHML)&&mX(Z,X)}var _X="hidden",SX=8,IX=3,w;(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"})(w||(w={}));var TX={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},C8=new Set([W.TABLE,W.TBODY,W.TFOOT,W.THEAD,W.TR]),b8={scriptingEnabled:!0,sourceCodeLocationInfo:!1,treeAdapter:Y0,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=w.INITIAL,this.originalInsertionMode=w.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={...b8,...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={...b8,...X};Z!==null&&Z!==void 0||(Z=Q.treeAdapter.createElement(F.TEMPLATE,P.HTML,[]));let K=Q.treeAdapter.createElement("documentmock",P.HTML,[]),J=new this(Q,K,Z);if(J.fragmentContextID===W.TEMPLATE)J.tmplInsertionModeStack.unshift(w.IN_TEMPLATE);return J._initTokenizerForFragmentParsing(),J._insertFakeRootElement(),J._resetInsertionMode(),J._findFormInFragmentContext(),J}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 J=(K=Z.location)!==null&&K!==void 0?K:TX,Y={code:X,startLine:J.startLine,startCol:J.startCol,startOffset:J.startOffset,endLine:Q?J.startLine:J.endLine,endCol:Q?J.startCol:J.endCol,endOffset:Q?J.startOffset:J.endOffset};this.onParseError(Y)}onItemPush(Z,X,Q){var K,J;if((J=(K=this.treeAdapter).onItemPush)===null||J===void 0||J.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 J,Y;if(this.openElements.stackTop===0&&this.fragmentContext)J=this.fragmentContext,Y=this.fragmentContextID;else({current:J,currentTagId:Y}=this.openElements);this._setContextModes(J,Y)}}_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=w.TEXT}switchToPlaintextParsing(){this.insertionMode=w.TEXT,this.originalInsertionMode=w.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 Y=this.treeAdapter.getChildNodes(this.document).find((j)=>this.treeAdapter.isDocumentTypeNode(j));if(Y)this.treeAdapter.setNodeSourceCodeLocation(Y,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),J=Q?K.lastIndexOf(Q):K.length,Y=K[J-1];if(this.treeAdapter.getNodeSourceCodeLocation(Y)){let{endLine:U,endCol:B,endOffset:z}=Z.location;this.treeAdapter.updateNodeSourceCodeLocation(Y,{endLine:U,endCol:B,endOffset:z})}else if(this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Y,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),J=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,J)}}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),J=this.treeAdapter.getAttrList(X);return y8(Z,K,J,Q)}_reconstructActiveFormattingElements(){let Z=this.activeFormattingElements.entries.length;if(Z){let X=this.activeFormattingElements.entries.findIndex((K)=>K.type===w0.Marker||this.openElements.contains(K.element)),Q=X===-1?Z-1:X-1;for(let K=Q;K>=0;K--){let J=this.activeFormattingElements.entries[K];this._insertElement(J.token,this.treeAdapter.getNamespaceURI(J.element)),J.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=w.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=w.IN_ROW;return}case W.TBODY:case W.THEAD:case W.TFOOT:{this.insertionMode=w.IN_TABLE_BODY;return}case W.CAPTION:{this.insertionMode=w.IN_CAPTION;return}case W.COLGROUP:{this.insertionMode=w.IN_COLUMN_GROUP;return}case W.TABLE:{this.insertionMode=w.IN_TABLE;return}case W.BODY:{this.insertionMode=w.IN_BODY;return}case W.FRAMESET:{this.insertionMode=w.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?w.AFTER_HEAD:w.BEFORE_HEAD;return}case W.TD:case W.TH:{if(Z>0){this.insertionMode=w.IN_CELL;return}break}case W.HEAD:{if(Z>0){this.insertionMode=w.IN_HEAD;return}break}}this.insertionMode=w.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=w.IN_SELECT_IN_TABLE;return}}this.insertionMode=w.IN_SELECT}_isElementCausesFosterParenting(Z){return C8.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 X8[Q].has(X)}onCharacter(Z){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){LQ(this,Z);return}switch(this.insertionMode){case w.INITIAL:{w1(this,Z);break}case w.BEFORE_HTML:{U1(this,Z);break}case w.BEFORE_HEAD:{F1(this,Z);break}case w.IN_HEAD:{B1(this,Z);break}case w.IN_HEAD_NO_SCRIPT:{L1(this,Z);break}case w.AFTER_HEAD:{q1(this,Z);break}case w.IN_BODY:case w.IN_CAPTION:case w.IN_CELL:case w.IN_TEMPLATE:{M8(this,Z);break}case w.TEXT:case w.IN_SELECT:case w.IN_SELECT_IN_TABLE:{this._insertCharacters(Z);break}case w.IN_TABLE:case w.IN_TABLE_BODY:case w.IN_ROW:{h2(this,Z);break}case w.IN_TABLE_TEXT:{E8(this,Z);break}case w.IN_COLUMN_GROUP:{V4(this,Z);break}case w.AFTER_BODY:{j4(this,Z);break}case w.AFTER_AFTER_BODY:{Y4(this,Z);break}default:}}onNullCharacter(Z){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){BQ(this,Z);return}switch(this.insertionMode){case w.INITIAL:{w1(this,Z);break}case w.BEFORE_HTML:{U1(this,Z);break}case w.BEFORE_HEAD:{F1(this,Z);break}case w.IN_HEAD:{B1(this,Z);break}case w.IN_HEAD_NO_SCRIPT:{L1(this,Z);break}case w.AFTER_HEAD:{q1(this,Z);break}case w.TEXT:{this._insertCharacters(Z);break}case w.IN_TABLE:case w.IN_TABLE_BODY:case w.IN_ROW:{h2(this,Z);break}case w.IN_COLUMN_GROUP:{V4(this,Z);break}case w.AFTER_BODY:{j4(this,Z);break}case w.AFTER_AFTER_BODY:{Y4(this,Z);break}default:}}onComment(Z){if(this.skipNextNewLine=!1,this.currentNotInHTML){M2(this,Z);return}switch(this.insertionMode){case w.INITIAL:case w.BEFORE_HTML:case w.BEFORE_HEAD:case w.IN_HEAD:case w.IN_HEAD_NO_SCRIPT:case w.AFTER_HEAD:case w.IN_BODY:case w.IN_TABLE:case w.IN_CAPTION:case w.IN_COLUMN_GROUP:case w.IN_TABLE_BODY:case w.IN_ROW:case w.IN_CELL:case w.IN_SELECT:case w.IN_SELECT_IN_TABLE:case w.IN_TEMPLATE:case w.IN_FRAMESET:case w.AFTER_FRAMESET:{M2(this,Z);break}case w.IN_TABLE_TEXT:{z1(this,Z);break}case w.AFTER_BODY:{aX(this,Z);break}case w.AFTER_AFTER_BODY:case w.AFTER_AFTER_FRAMESET:{pX(this,Z);break}default:}}onDoctype(Z){switch(this.skipNextNewLine=!1,this.insertionMode){case w.INITIAL:{rX(this,Z);break}case w.BEFORE_HEAD:case w.IN_HEAD:case w.IN_HEAD_NO_SCRIPT:case w.AFTER_HEAD:{this._err(Z,L.misplacedDoctype);break}case w.IN_TABLE_TEXT:{z1(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))qQ(this,Z);else this._startTagOutsideForeignContent(Z)}_startTagOutsideForeignContent(Z){switch(this.insertionMode){case w.INITIAL:{w1(this,Z);break}case w.BEFORE_HTML:{sX(this,Z);break}case w.BEFORE_HEAD:{nX(this,Z);break}case w.IN_HEAD:{z0(this,Z);break}case w.IN_HEAD_NO_SCRIPT:{Z5(this,Z);break}case w.AFTER_HEAD:{Q5(this,Z);break}case w.IN_BODY:{t(this,Z);break}case w.IN_TABLE:{a0(this,Z);break}case w.IN_TABLE_TEXT:{z1(this,Z);break}case w.IN_CAPTION:{t5(this,Z);break}case w.IN_COLUMN_GROUP:{$2(this,Z);break}case w.IN_TABLE_BODY:{U4(this,Z);break}case w.IN_ROW:{F4(this,Z);break}case w.IN_CELL:{XQ(this,Z);break}case w.IN_SELECT:{_8(this,Z);break}case w.IN_SELECT_IN_TABLE:{KQ(this,Z);break}case w.IN_TEMPLATE:{JQ(this,Z);break}case w.AFTER_BODY:{VQ(this,Z);break}case w.IN_FRAMESET:{jQ(this,Z);break}case w.AFTER_FRAMESET:{wQ(this,Z);break}case w.AFTER_AFTER_BODY:{UQ(this,Z);break}case w.AFTER_AFTER_FRAMESET:{FQ(this,Z);break}default:}}onEndTag(Z){if(this.skipNextNewLine=!1,this.currentToken=Z,this.currentNotInHTML)xQ(this,Z);else this._endTagOutsideForeignContent(Z)}_endTagOutsideForeignContent(Z){switch(this.insertionMode){case w.INITIAL:{w1(this,Z);break}case w.BEFORE_HTML:{oX(this,Z);break}case w.BEFORE_HEAD:{tX(this,Z);break}case w.IN_HEAD:{eX(this,Z);break}case w.IN_HEAD_NO_SCRIPT:{X5(this,Z);break}case w.AFTER_HEAD:{K5(this,Z);break}case w.IN_BODY:{z4(this,Z);break}case w.TEXT:{c5(this,Z);break}case w.IN_TABLE:{x1(this,Z);break}case w.IN_TABLE_TEXT:{z1(this,Z);break}case w.IN_CAPTION:{e5(this,Z);break}case w.IN_COLUMN_GROUP:{ZQ(this,Z);break}case w.IN_TABLE_BODY:{N2(this,Z);break}case w.IN_ROW:{k8(this,Z);break}case w.IN_CELL:{QQ(this,Z);break}case w.IN_SELECT:{S8(this,Z);break}case w.IN_SELECT_IN_TABLE:{WQ(this,Z);break}case w.IN_TEMPLATE:{YQ(this,Z);break}case w.AFTER_BODY:{T8(this,Z);break}case w.IN_FRAMESET:{HQ(this,Z);break}case w.AFTER_FRAMESET:{zQ(this,Z);break}case w.AFTER_AFTER_BODY:{Y4(this,Z);break}default:}}onEof(Z){switch(this.insertionMode){case w.INITIAL:{w1(this,Z);break}case w.BEFORE_HTML:{U1(this,Z);break}case w.BEFORE_HEAD:{F1(this,Z);break}case w.IN_HEAD:{B1(this,Z);break}case w.IN_HEAD_NO_SCRIPT:{L1(this,Z);break}case w.AFTER_HEAD:{q1(this,Z);break}case w.IN_BODY:case w.IN_TABLE:case w.IN_CAPTION:case w.IN_COLUMN_GROUP:case w.IN_TABLE_BODY:case w.IN_ROW:case w.IN_CELL:case w.IN_SELECT:case w.IN_SELECT_IN_TABLE:{$8(this,Z);break}case w.TEXT:{l5(this,Z);break}case w.IN_TABLE_TEXT:{z1(this,Z);break}case w.IN_TEMPLATE:{I8(this,Z);break}case w.AFTER_BODY:case w.IN_FRAMESET:case w.AFTER_FRAMESET:case w.AFTER_AFTER_BODY:case w.AFTER_AFTER_FRAMESET:{g2(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 w.IN_HEAD:case w.IN_HEAD_NO_SCRIPT:case w.AFTER_HEAD:case w.TEXT:case w.IN_COLUMN_GROUP:case w.IN_SELECT:case w.IN_SELECT_IN_TABLE:case w.IN_FRAMESET:case w.AFTER_FRAMESET:{this._insertCharacters(Z);break}case w.IN_BODY:case w.IN_CAPTION:case w.IN_CELL:case w.IN_TEMPLATE:case w.AFTER_BODY:case w.AFTER_AFTER_BODY:case w.AFTER_AFTER_FRAMESET:{h8(this,Z);break}case w.IN_TABLE:case w.IN_TABLE_BODY:case w.IN_ROW:{h2(this,Z);break}case w.IN_TABLE_TEXT:{G8(this,Z);break}default:}}}function AX(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 g8(Z,X);return Q}function uX(Z,X){let Q=null,K=Z.openElements.stackTop;for(;K>=0;K--){let J=Z.openElements.items[K];if(J===X.element)break;if(Z._isSpecialElement(J,Z.openElements.tagIDs[K]))Q=J}if(!Q)Z.openElements.shortenToLength(Math.max(K,0)),Z.activeFormattingElements.removeEntry(X);return Q}function cX(Z,X,Q){let K=X,J=Z.openElements.getCommonAncestor(X);for(let Y=0,j=J;j!==Q;Y++,j=J){J=Z.openElements.getCommonAncestor(j);let U=Z.activeFormattingElements.getElementEntry(j),B=U&&Y>=IX;if(!U||B){if(B)Z.activeFormattingElements.removeEntry(U);Z.openElements.remove(j)}else{if(j=lX(Z,U),K===X)Z.activeFormattingElements.bookmark=U;Z.treeAdapter.detachNode(K),Z.treeAdapter.appendChild(j,K),K=j}}return K}function lX(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 iX(Z,X,Q){let K=Z.treeAdapter.getTagName(X),J=S0(K);if(Z._isElementCausesFosterParenting(J))Z._fosterParentElement(Q);else{let Y=Z.treeAdapter.getNamespaceURI(X);if(J===W.TEMPLATE&&Y===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:J}=Q,Y=Z.treeAdapter.createElement(J.tagName,K,J.attrs);Z._adoptNodes(X,Y),Z.treeAdapter.appendChild(X,Y),Z.activeFormattingElements.insertElementAfterBookmark(Y,J),Z.activeFormattingElements.removeEntry(Q),Z.openElements.remove(Q.element),Z.openElements.insertAfter(X,Y,J.tagID)}function D2(Z,X){for(let Q=0;Q<SX;Q++){let K=AX(Z,X);if(!K)break;let J=uX(Z,K);if(!J)break;Z.activeFormattingElements.bookmark=K;let Y=cX(Z,J,K.element),j=Z.openElements.getCommonAncestor(K.element);if(Z.treeAdapter.detachNode(Y),j)iX(Z,j,Y);dX(Z,J,K)}}function M2(Z,X){Z._appendCommentNode(X,Z.openElements.currentTmplContentOrNode)}function aX(Z,X){Z._appendCommentNode(X,Z.openElements.items[0])}function pX(Z,X){Z._appendCommentNode(X,Z.document)}function g2(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],J=Z.treeAdapter.getNodeSourceCodeLocation(K);if(J&&!J.endTag){if(Z._setEndLocation(K,X),Z.openElements.stackTop>=1){let Y=Z.openElements.items[1],j=Z.treeAdapter.getNodeSourceCodeLocation(Y);if(j&&!j.endTag)Z._setEndLocation(Y,X)}}}}}function rX(Z,X){Z._setDocumentType(X);let Q=X.forceQuirks?Z0.QUIRKS:q8(X);if(!L8(X))Z._err(X,L.nonConformingDoctype);Z.treeAdapter.setDocumentMode(Z.document,Q),Z.insertionMode=w.BEFORE_HTML}function w1(Z,X){Z._err(X,L.missingDoctype,!0),Z.treeAdapter.setDocumentMode(Z.document,Z0.QUIRKS),Z.insertionMode=w.BEFORE_HTML,Z._processToken(X)}function sX(Z,X){if(X.tagID===W.HTML)Z._insertElement(X,P.HTML),Z.insertionMode=w.BEFORE_HEAD;else U1(Z,X)}function oX(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=w.BEFORE_HEAD,Z._processToken(X)}function nX(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=w.IN_HEAD;break}default:F1(Z,X)}}function tX(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=w.IN_HEAD,Z._processToken(X)}function z0(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=w.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=w.IN_TEMPLATE,Z.tmplInsertionModeStack.unshift(w.IN_TEMPLATE);break}case W.HEAD:{Z._err(X,L.misplacedStartTagForHeadElement);break}default:B1(Z,X)}}function eX(Z,X){switch(X.tagID){case W.HEAD:{Z.openElements.pop(),Z.insertionMode=w.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=w.AFTER_HEAD,Z._processToken(X)}function Z5(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:{z0(Z,X);break}case W.NOSCRIPT:{Z._err(X,L.nestedNoscriptInHead);break}default:L1(Z,X)}}function X5(Z,X){switch(X.tagID){case W.NOSCRIPT:{Z.openElements.pop(),Z.insertionMode=w.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=w.IN_HEAD,Z._processToken(X)}function Q5(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=w.IN_BODY;break}case W.FRAMESET:{Z._insertElement(X,P.HTML),Z.insertionMode=w.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),z0(Z,X),Z.openElements.remove(Z.headElement);break}case W.HEAD:{Z._err(X,L.misplacedStartTagForHeadElement);break}default:q1(Z,X)}}function K5(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=w.IN_BODY,w4(Z,X)}function w4(Z,X){switch(X.type){case S.CHARACTER:{M8(Z,X);break}case S.WHITESPACE_CHARACTER:{h8(Z,X);break}case S.COMMENT:{M2(Z,X);break}case S.START_TAG:{t(Z,X);break}case S.END_TAG:{z4(Z,X);break}case S.EOF:{$8(Z,X);break}default:}}function h8(Z,X){Z._reconstructActiveFormattingElements(),Z._insertCharacters(X)}function M8(Z,X){Z._reconstructActiveFormattingElements(),Z._insertCharacters(X),Z.framesetOk=!1}function W5(Z,X){if(Z.openElements.tmplCount===0)Z.treeAdapter.adoptAttributes(Z.openElements.items[0],X.attrs)}function J5(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=w.IN_FRAMESET}function V5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML)}function j5(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 H5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML),Z.skipNextNewLine=!0,Z.framesetOk=!1}function w5(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 J=Z.openElements.tagIDs[K];if(Q===W.LI&&J===W.LI||(Q===W.DD||Q===W.DT)&&(J===W.DD||J===W.DT)){Z.openElements.generateImpliedEndTagsWithExclusion(J),Z.openElements.popUntilTagNamePopped(J);break}if(J!==W.ADDRESS&&J!==W.DIV&&J!==W.P&&Z._isSpecialElement(Z.openElements.items[K],J))break}if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML)}function U5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML),Z.tokenizer.state=n.PLAINTEXT}function F5(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 B5(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 L5(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,X)}function q5(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 x5(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.activeFormattingElements.insertMarker(),Z.framesetOk=!1}function P5(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=w.IN_TABLE}function N8(Z,X){Z._reconstructActiveFormattingElements(),Z._appendElement(X,P.HTML),Z.framesetOk=!1,X.ackSelfClosing=!0}function D8(Z){let X=X4(Z,P0.TYPE);return X!=null&&X.toLowerCase()===_X}function f5(Z,X){if(Z._reconstructActiveFormattingElements(),Z._appendElement(X,P.HTML),!D8(X))Z.framesetOk=!1;X.ackSelfClosing=!0}function y5(Z,X){Z._appendElement(X,P.HTML),X.ackSelfClosing=!0}function O5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._appendElement(X,P.HTML),Z.framesetOk=!1,X.ackSelfClosing=!0}function b5(Z,X){X.tagName=F.IMG,X.tagID=W.IMG,N8(Z,X)}function v5(Z,X){Z._insertElement(X,P.HTML),Z.skipNextNewLine=!0,Z.tokenizer.state=n.RCDATA,Z.originalInsertionMode=Z.insertionMode,Z.framesetOk=!1,Z.insertionMode=w.TEXT}function R5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._reconstructActiveFormattingElements(),Z.framesetOk=!1,Z._switchToTextParsing(X,n.RAWTEXT)}function C5(Z,X){Z.framesetOk=!1,Z._switchToTextParsing(X,n.RAWTEXT)}function v8(Z,X){Z._switchToTextParsing(X,n.RAWTEXT)}function h5(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.framesetOk=!1,Z.insertionMode=Z.insertionMode===w.IN_TABLE||Z.insertionMode===w.IN_CAPTION||Z.insertionMode===w.IN_TABLE_BODY||Z.insertionMode===w.IN_ROW||Z.insertionMode===w.IN_CELL?w.IN_SELECT_IN_TABLE:w.IN_SELECT}function M5(Z,X){if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML)}function N5(Z,X){if(Z.openElements.hasInScope(W.RUBY))Z.openElements.generateImpliedEndTags();Z._insertElement(X,P.HTML)}function D5(Z,X){if(Z.openElements.hasInScope(W.RUBY))Z.openElements.generateImpliedEndTagsWithExclusion(W.RTC);Z._insertElement(X,P.HTML)}function g5(Z,X){if(Z._reconstructActiveFormattingElements(),R2(X),J4(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),J4(X),X.selfClosing)Z._appendElement(X,P.SVG);else Z._insertElement(X,P.SVG);X.ackSelfClosing=!0}function R8(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:{L5(Z,X);break}case W.A:{B5(Z,X);break}case W.H1:case W.H2:case W.H3:case W.H4:case W.H5:case W.H6:{j5(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:{V5(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:{N8(Z,X);break}case W.HR:{O5(Z,X);break}case W.RB:case W.RTC:{N5(Z,X);break}case W.RT:case W.RP:{D5(Z,X);break}case W.PRE:case W.LISTING:{H5(Z,X);break}case W.XMP:{R5(Z,X);break}case W.SVG:{$5(Z,X);break}case W.HTML:{W5(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:{z0(Z,X);break}case W.BODY:{J5(Z,X);break}case W.FORM:{w5(Z,X);break}case W.NOBR:{q5(Z,X);break}case W.MATH:{g5(Z,X);break}case W.TABLE:{P5(Z,X);break}case W.INPUT:{f5(Z,X);break}case W.PARAM:case W.TRACK:case W.SOURCE:{y5(Z,X);break}case W.IMAGE:{b5(Z,X);break}case W.BUTTON:{F5(Z,X);break}case W.APPLET:case W.OBJECT:case W.MARQUEE:{x5(Z,X);break}case W.IFRAME:{C5(Z,X);break}case W.SELECT:{h5(Z,X);break}case W.OPTION:case W.OPTGROUP:{M5(Z,X);break}case W.NOEMBED:case W.NOFRAMES:{v8(Z,X);break}case W.FRAMESET:{Y5(Z,X);break}case W.TEXTAREA:{v5(Z,X);break}case W.NOSCRIPT:{if(Z.options.scriptingEnabled)v8(Z,X);else R8(Z,X);break}case W.PLAINTEXT:{U5(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:R8(Z,X)}}function G5(Z,X){if(Z.openElements.hasInScope(W.BODY)){if(Z.insertionMode=w.AFTER_BODY,Z.options.sourceCodeLocationInfo){let Q=Z.openElements.tryPeekProperlyNestedBodyElement();if(Q)Z._setEndLocation(Q,X)}}}function E5(Z,X){if(Z.openElements.hasInScope(W.BODY))Z.insertionMode=w.AFTER_BODY,T8(Z,X)}function m5(Z,X){let Q=X.tagID;if(Z.openElements.hasInScope(Q))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(Q)}function k5(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 _5(Z){if(!Z.openElements.hasInButtonScope(W.P))Z._insertFakeElement(F.P,W.P);Z._closePElement()}function S5(Z){if(Z.openElements.hasInListItemScope(W.LI))Z.openElements.generateImpliedEndTagsWithExclusion(W.LI),Z.openElements.popUntilTagNamePopped(W.LI)}function I5(Z,X){let Q=X.tagID;if(Z.openElements.hasInScope(Q))Z.openElements.generateImpliedEndTagsWithExclusion(Q),Z.openElements.popUntilTagNamePopped(Q)}function T5(Z){if(Z.openElements.hasNumberedHeaderInScope())Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilNumberedHeaderPopped()}function A5(Z,X){let Q=X.tagID;if(Z.openElements.hasInScope(Q))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(Q),Z.activeFormattingElements.clearToLastMarker()}function u5(Z){Z._reconstructActiveFormattingElements(),Z._insertFakeElement(F.BR,W.BR),Z.openElements.pop(),Z.framesetOk=!1}function g8(Z,X){let{tagName:Q,tagID:K}=X;for(let J=Z.openElements.stackTop;J>0;J--){let Y=Z.openElements.items[J],j=Z.openElements.tagIDs[J];if(K===j&&(K!==W.UNKNOWN||Z.treeAdapter.getTagName(Y)===Q)){if(Z.openElements.generateImpliedEndTagsWithExclusion(K),Z.openElements.stackTop>=J)Z.openElements.shortenToLength(J);break}if(Z._isSpecialElement(Y,j))break}}function z4(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:{_5(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:{m5(Z,X);break}case W.LI:{S5(Z);break}case W.DD:case W.DT:{I5(Z,X);break}case W.H1:case W.H2:case W.H3:case W.H4:case W.H5:case W.H6:{T5(Z);break}case W.BR:{u5(Z);break}case W.BODY:{G5(Z,X);break}case W.HTML:{E5(Z,X);break}case W.FORM:{k5(Z);break}case W.APPLET:case W.OBJECT:case W.MARQUEE:{A5(Z,X);break}case W.TEMPLATE:{I0(Z,X);break}default:g8(Z,X)}}function $8(Z,X){if(Z.tmplInsertionModeStack.length>0)I8(Z,X);else g2(Z,X)}function c5(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 l5(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&&C8.has(Z.openElements.currentTagId))switch(Z.pendingCharacterTokens.length=0,Z.hasNonWhitespacePendingCharacterToken=!1,Z.originalInsertionMode=Z.insertionMode,Z.insertionMode=w.IN_TABLE_TEXT,X.type){case S.CHARACTER:{E8(Z,X);break}case S.WHITESPACE_CHARACTER:{G8(Z,X);break}}else P1(Z,X)}function i5(Z,X){Z.openElements.clearBackToTableContext(),Z.activeFormattingElements.insertMarker(),Z._insertElement(X,P.HTML),Z.insertionMode=w.IN_CAPTION}function d5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertElement(X,P.HTML),Z.insertionMode=w.IN_COLUMN_GROUP}function a5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertFakeElement(F.COLGROUP,W.COLGROUP),Z.insertionMode=w.IN_COLUMN_GROUP,$2(Z,X)}function p5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertElement(X,P.HTML),Z.insertionMode=w.IN_TABLE_BODY}function r5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertFakeElement(F.TBODY,W.TBODY),Z.insertionMode=w.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 o5(Z,X){if(D8(X))Z._appendElement(X,P.HTML);else P1(Z,X);X.ackSelfClosing=!0}function n5(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:{r5(Z,X);break}case W.STYLE:case W.SCRIPT:case W.TEMPLATE:{z0(Z,X);break}case W.COL:{a5(Z,X);break}case W.FORM:{n5(Z,X);break}case W.TABLE:{s5(Z,X);break}case W.TBODY:case W.TFOOT:case W.THEAD:{p5(Z,X);break}case W.INPUT:{o5(Z,X);break}case W.CAPTION:{i5(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,w4(Z,X),Z.fosterParentingEnabled=Q}function G8(Z,X){Z.pendingCharacterTokens.push(X)}function E8(Z,X){Z.pendingCharacterTokens.push(X),Z.hasNonWhitespacePendingCharacterToken=!0}function z1(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 m8=new Set([W.CAPTION,W.COL,W.COLGROUP,W.TBODY,W.TD,W.TFOOT,W.TH,W.THEAD,W.TR]);function t5(Z,X){let Q=X.tagID;if(m8.has(Q)){if(Z.openElements.hasInTableScope(W.CAPTION))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(W.CAPTION),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=w.IN_TABLE,a0(Z,X)}else t(Z,X)}function e5(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=w.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:z4(Z,X)}}function $2(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:{z0(Z,X);break}default:V4(Z,X)}}function ZQ(Z,X){switch(X.tagID){case W.COLGROUP:{if(Z.openElements.currentTagId===W.COLGROUP)Z.openElements.pop(),Z.insertionMode=w.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=w.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=w.IN_ROW;break}case W.TH:case W.TD:{Z.openElements.clearBackToTableBodyContext(),Z._insertFakeElement(F.TR,W.TR),Z.insertionMode=w.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=w.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=w.IN_TABLE;break}case W.TABLE:{if(Z.openElements.hasTableBodyContextInTableScope())Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=w.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=w.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=w.IN_TABLE_BODY,U4(Z,X);break}default:a0(Z,X)}}function k8(Z,X){switch(X.tagID){case W.TR:{if(Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=w.IN_TABLE_BODY;break}case W.TABLE:{if(Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=w.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=w.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 XQ(Z,X){let Q=X.tagID;if(m8.has(Q)){if(Z.openElements.hasInTableScope(W.TD)||Z.openElements.hasInTableScope(W.TH))Z._closeTableCell(),F4(Z,X)}else t(Z,X)}function QQ(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=w.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(),k8(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:break;default:z4(Z,X)}}function _8(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:{z0(Z,X);break}default:}}function S8(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 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)Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode(),Z._processStartTag(X);else _8(Z,X)}function WQ(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 S8(Z,X)}function JQ(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:{z0(Z,X);break}case W.CAPTION:case W.COLGROUP:case W.TBODY:case W.TFOOT:case W.THEAD:{Z.tmplInsertionModeStack[0]=w.IN_TABLE,Z.insertionMode=w.IN_TABLE,a0(Z,X);break}case W.COL:{Z.tmplInsertionModeStack[0]=w.IN_COLUMN_GROUP,Z.insertionMode=w.IN_COLUMN_GROUP,$2(Z,X);break}case W.TR:{Z.tmplInsertionModeStack[0]=w.IN_TABLE_BODY,Z.insertionMode=w.IN_TABLE_BODY,U4(Z,X);break}case W.TD:case W.TH:{Z.tmplInsertionModeStack[0]=w.IN_ROW,Z.insertionMode=w.IN_ROW,F4(Z,X);break}default:Z.tmplInsertionModeStack[0]=w.IN_BODY,Z.insertionMode=w.IN_BODY,t(Z,X)}}function YQ(Z,X){if(X.tagID===W.TEMPLATE)I0(Z,X)}function I8(Z,X){if(Z.openElements.tmplCount>0)Z.openElements.popUntilTagNamePopped(W.TEMPLATE),Z.activeFormattingElements.clearToLastMarker(),Z.tmplInsertionModeStack.shift(),Z._resetInsertionMode(),Z.onEof(X);else g2(Z,X)}function VQ(Z,X){if(X.tagID===W.HTML)t(Z,X);else j4(Z,X)}function T8(Z,X){var Q;if(X.tagID===W.HTML){if(!Z.fragmentContext)Z.insertionMode=w.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=w.IN_BODY,w4(Z,X)}function jQ(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:{z0(Z,X);break}default:}}function HQ(Z,X){if(X.tagID===W.FRAMESET&&!Z.openElements.isRootHtmlElementCurrent()){if(Z.openElements.pop(),!Z.fragmentContext&&Z.openElements.currentTagId!==W.FRAMESET)Z.insertionMode=w.AFTER_FRAMESET}}function wQ(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.NOFRAMES:{z0(Z,X);break}default:}}function zQ(Z,X){if(X.tagID===W.HTML)Z.insertionMode=w.AFTER_AFTER_FRAMESET}function UQ(Z,X){if(X.tagID===W.HTML)t(Z,X);else Y4(Z,X)}function Y4(Z,X){Z.insertionMode=w.IN_BODY,w4(Z,X)}function FQ(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.NOFRAMES:{z0(Z,X);break}default:}}function BQ(Z,X){X.chars=u,Z._insertCharacters(X)}function LQ(Z,X){Z._insertCharacters(X),Z.framesetOk=!1}function A8(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 qQ(Z,X){if(P8(X))A8(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)f8(X),C2(X);if(J4(X),X.selfClosing)Z._appendElement(X,K);else Z._insertElement(X,K);X.ackSelfClosing=!0}}function xQ(Z,X){if(X.tagID===W.P||X.tagID===W.BR){A8(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 J=Z.treeAdapter.getTagName(K);if(J.toLowerCase()===X.tagName){X.tagName=J,Z.openElements.shortenToLength(Q);break}}}var lV=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 u8(Z,X){return function(K){let J,Y=0,j="";while(J=Z.exec(K)){if(Y!==J.index)j+=K.substring(Y,J.index);j+=X.get(J[0].charCodeAt(0)),Y=J.index+1}return j+K.substring(Y)}}var c8=u8(/["&\u00A0]/g,new Map([[34,"&quot;"],[38,"&amp;"],[160,"&nbsp;"]])),l8=u8(/[&<>\u00A0]/g,new Map([[38,"&amp;"],[60,"&lt;"],[62,"&gt;"],[160,"&nbsp;"]]));var PQ=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 i8(Z,X){return X.treeAdapter.isElementNode(Z)&&X.treeAdapter.getNamespaceURI(Z)===P.HTML&&PQ.has(X.treeAdapter.getTagName(Z))}var fQ={treeAdapter:Y0,scriptingEnabled:!0};function p0(Z,X){let Q={...fQ,...X};if(i8(Z,Q))return"";return d8(Z,Q)}function d8(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,J=X.treeAdapter.getChildNodes(K);if(J)for(let Y of J)Q+=yQ(Y,X);return Q}function yQ(Z,X){if(X.treeAdapter.isElementNode(Z))return OQ(Z,X);if(X.treeAdapter.isTextNode(Z))return vQ(Z,X);if(X.treeAdapter.isCommentNode(Z))return RQ(Z,X);if(X.treeAdapter.isDocumentTypeNode(Z))return CQ(Z,X);return""}function OQ(Z,X){let Q=X.treeAdapter.getTagName(Z);return`<${Q}${bQ(Z,X)}>${i8(Z,X)?"":`${d8(Z,X)}</${Q}>`}`}function bQ(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+=`="${c8(K.value)}"`}return Q}function vQ(Z,X){let{treeAdapter:Q}=X,K=Q.getTextNodeContent(Z),J=Q.getParentNode(Z),Y=J&&Q.isElementNode(J)&&Q.getTagName(J);return Y&&Q.getNamespaceURI(J)===P.HTML&&Q8(Y,X.scriptingEnabled)?K:l8(K)}function RQ(Z,{treeAdapter:X}){return`<!--${X.getCommentNodeContent(Z)}-->`}function CQ(Z,{treeAdapter:X}){return`<!DOCTYPE ${X.getDocumentTypeNodeName(Z)}>`}function f1(Z,X){return H4.parse(Z,X)}import{z as C}from"zod";import*as r0 from"css-tree";var y1=20971520,hQ=new Set(["script","form","iframe","frame","frameset","object","embed","portal","base","audio","video","source","track","noscript","animate","animatemotion","animatetransform","discard","set"]),MQ=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,NQ=new Set(["date","datetime-local","email","month","number","password","search","tel","text","time","url","week"]);function DQ(Z){return"tagName"in Z}function a8(Z,X){return Z.attrs.find((Q)=>Q.name.toLowerCase()===X.toLowerCase())?.value??null}function N0(Z,X,Q){let K=Z.attrs.find((J)=>J.name.toLowerCase()===X.toLowerCase());if(K)K.value=Q;else Z.attrs.push({name:X,value:Q})}function p8(Z){try{let X=r0.parse(Z,{context:"stylesheet",parseCustomProperty:!0,positions:!1});return r0.walk(X,{enter(Q,K,J){if(Q.type==="Atrule"&&Q.name.toLowerCase()==="import"){J.remove(K);return}if(Q.type==="Declaration"){let Y=Q.property.toLowerCase();if(Y==="behavior"||Y==="-moz-binding")J.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:,"}}),r0.generate(X)}catch{return""}}function gQ(Z){return p8(`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 J=gQ(Q.value);return J?[{...Q,value:J}]:[]}if(MQ.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"&&NQ.has((a8(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(a8(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=p8(Q.value)}}function r8(Z){let X=[];for(let Q of Z.childNodes){if(DQ(Q)){let K=Q.tagName.toLowerCase();if(hQ.has(K))continue;if(K==="meta"&&Q.attrs.some((J)=>J.name.toLowerCase()==="http-equiv"&&J.value.toLowerCase()!=="content-type"))continue;if(K==="link")continue;$Q(Q),r8(Q)}X.push(Q)}Z.childNodes=X}function s8(Z){if(Buffer.byteLength(Z,"utf8")>y1)throw Error("Browser snapshot exceeds the 20 MiB limit");let X=f1(Z);r8(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 s0 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 o8(Z){try{let X=s0.parse(Z.css,{context:"stylesheet",parseCustomProperty:!0,positions:!1});return s0.walk(X,{enter(Q,K,J){if(Q.type==="Atrule"&&Q.name.toLowerCase()==="import"){if(K&&J)J.remove(K);return}if(Q.type==="Declaration"){let j=Q.property.toLowerCase();if(j==="behavior"||j==="-moz-binding"){if(K&&J)J.remove(K)}return}if(Q.type!=="Url")return;let Y=GQ(Q.value,Z.baseUrl);if(Y&&!Y.startsWith("#"))Q.value=Z.resourceUrl(Y);else if(!Y)Q.value="data:,"}}),s0.generate(X)}catch{return""}}var mQ=1200000,kQ=200,n8=8,_Q=65536,t8="ideawave-frame",SQ=C.object({browserNodeId:C.string().uuid(),url:C.string().max(4000)}).strict(),IQ=C.object({proxySessionId:C.string().uuid()}).strict(),TQ=C.object({proxySessionId:C.string().uuid(),revision:C.string().min(1).max(200),html:C.string().max(y1).optional()}).strict(),AQ=C.object({exact:C.string().min(1).max(2000),prefix:C.string().max(500).optional(),suffix:C.string().max(500).optional()}).strict(),E2=C.union([C.object({ref:C.string().min(1).max(200)}).strict(),C.object({selector:C.string().min(1).max(2000).nullable(),textQuote:AQ.nullable().optional(),framePath:C.array(C.string().max(1000)).max(12).optional()}).strict().refine((Z)=>Boolean(Z.selector||Z.textQuote),{message:"A selector or text quote is required"})]),uQ=C.discriminatedUnion("type",[C.object({type:C.literal("inspect")}).strict(),C.object({type:C.literal("locate"),target:E2}).strict(),C.object({type:C.literal("click"),target:E2}).strict(),C.object({type:C.literal("scroll"),deltaY:C.number().finite().min(-1e5).max(1e5).optional(),left:C.number().finite().min(0).max(1e7).optional(),top:C.number().finite().min(0).max(1e7).optional()}).strict(),C.object({type:C.literal("find"),query:C.string().max(500),direction:C.enum(["forward","backward"]).optional()}).strict(),C.object({type:C.literal("refresh")}).strict(),C.object({type:C.literal("back")}).strict(),C.object({type:C.literal("forward")}).strict(),C.object({type:C.literal("navigate"),url:C.string().max(4000)}).strict(),C.object({type:C.literal("highlight"),target:E2,color:C.string().regex(/^#[0-9a-fA-F]{6}$/)}).strict(),C.object({type:C.literal("selection")}).strict(),C.object({type:C.literal("snapshot")}).strict()]),cQ=C.object({type:C.literal("pointer"),phase:C.enum(["move","down","up"]),x:C.number().finite().min(0).max(2048),y:C.number().finite().min(0).max(2048),button:C.enum(["left","middle","right"]).optional(),buttons:C.number().int().min(0).max(31).optional()}).strict(),lQ=C.object({events:C.array(C.discriminatedUnion("type",[cQ,C.object({type:C.literal("wheel"),deltaX:C.number().finite().min(-1e5).max(1e5),deltaY:C.number().finite().min(-1e5).max(1e5)}).strict(),C.object({type:C.literal("key"),phase:C.enum(["down","up"]),key:C.string().min(1).max(64)}).strict(),C.object({type:C.literal("text"),text:C.string().max(5000)}).strict()])).max(64)}).strict(),iQ=C.object({width:C.number().finite().min(1).max(16384),height:C.number().finite().min(1).max(16384)}).strict();function dQ(){return S2(18).toString("hex")}function aQ(Z){if(!Z)return"";if(Z.startsWith("["))return Z.slice(1,Z.indexOf("]"));return Z.split(":")[0]?.toLowerCase()??""}function e8(Z){return typeof Z==="string"?Z:void 0}function pQ(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 rQ(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),J=`session=${encodeURIComponent(Z.sessionId)}&token=${encodeURIComponent(Z.bridgeToken)}`,Y=rQ(Z.cspNonce);return`<!doctype html><html><head><meta charset="utf-8"><meta name="color-scheme" content="light"><style nonce="${Y}">*{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?${J}"><div id="status" hidden></div></div><script nonce="${Y}">(()=>{"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?${J}");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 Q7(Z){return(Z["content-type"]??"application/octet-stream").split(";")[0]?.trim().toLowerCase()??"application/octet-stream"}function oQ(Z){return"tagName"in Z}function k2(Z,X){return Z.attrs.find((Q)=>Q.name.toLowerCase()===X)?.value??null}function Z7(Z,X,Q){let K=Z.attrs.find((J)=>J.name.toLowerCase()===X);if(K)K.value=Q;else Z.attrs.push({name:X,value:Q})}function X7(Z){let X=Q7(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 J=Buffer.isBuffer(K)?K:Buffer.from(K);if(Q+=J.byteLength,Q>_Q)throw Error("Browser request is too large");X.push(J)}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=SQ.parse(Q.params),J=C0(K.url).href,Y=pQ(X),j=[...this.sessions.values()].find((z)=>z.frontendSessionId===Z&&z.browserNodeId===K.browserNodeId);if(j){if(j.frontendOrigin!==Y)throw Error("Browser proxy session origin changed unexpectedly");if(j.lastUsedAt=Date.now(),j.remote.currentUrl!==J)await j.remote.navigate(J);return this.result(j)}let U=await this.runtime.createPage(J),B={id:EQ(),frontendSessionId:Z,frontendOrigin:Y,browserNodeId:K.browserNodeId,wrapperHost:`iw-browser-${dQ()}`,bridgeToken:S2(24).toString("base64url"),remote:U,lastUsedAt:Date.now()};return this.sessions.set(B.id,B),this.result(B)}case"close_proxy_session":{let K=IQ.parse(Q.params),J=this.sessions.get(K.proxySessionId);if(J&&J.frontendSessionId!==Z)throw Error("Browser proxy session belongs to another frontend session");if(J)await this.closeSession(J);return{closed:!0}}case"build_snapshot":{let K=TQ.parse(Q.params),J=this.ownedSession(Z,K.proxySessionId);if(J.remote.currentRevision!==K.revision)throw Error("STALE_BROWSER_REF: inspect the browser again before freezing");return this.buildSnapshot(J,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()-mQ;for(let X of[...this.sessions.values()])if(X.lastUsedAt<Z)this.closeSession(X)}requestAuthorized(Z,X){return e8(Z.headers.origin)===this.wrapperOrigin(X)&&e8(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"),J=K?this.sessions.get(K):null;if(!J)return X.writeHead(404),X.end(),!0;if(J.lastUsedAt=Date.now(),aQ(Z.headers.host)!==`${J.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,J,Z.method==="HEAD"),!0}if(Q.searchParams.get("token")===J.bridgeToken){if(Q.pathname==="/browser/stream")return this.sendFrameStream(X,J,Z.method==="HEAD"),!0;if(Q.pathname==="/browser/events")return this.sendEventStream(X,J,Z.method==="HEAD"),!0}if(Z.method!=="POST"||!this.requestAuthorized(Z,J))return X.writeHead(403),X.end(),!0;if(Q.pathname==="/browser/input"){let Y=lQ.parse(await _2(Z));return await J.remote.input(Y.events),this.sendJson(X,{ok:!0}),!0}if(Q.pathname==="/browser/viewport"){let Y=iQ.parse(await _2(Z));return await J.remote.setViewport(Y.width,Y.height),this.sendJson(X,{ok:!0}),!0}if(Q.pathname==="/browser/command"){let Y=uQ.parse(await _2(Z));return this.sendJson(X,await J.remote.command(Y)),!0}return X.writeHead(404),X.end(),!0}catch(Y){let j=Y instanceof Error?Y.message:"Browser operation failed";if(X.headersSent)X.destroy(Y instanceof Error?Y:void 0);else X.writeHead(400,{"content-type":"text/plain; charset=utf-8"}),X.end(j);return!0}}sendViewer(Z,X,Q){let K=S2(18).toString("base64url"),J=sQ({bridgeToken:X.bridgeToken,cspNonce:K,frontendOrigin:X.frontendOrigin,sessionId:X.id}),Y=Buffer.from(J),j=["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(Y.byteLength),"content-security-policy":j,"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:Y)}sendFrameStream(Z,X,Q){if(Z.writeHead(200,{"cache-control":"no-store","content-type":`multipart/x-mixed-replace; boundary=${t8}`,"x-content-type-options":"nosniff"}),Q){Z.end();return}let K=!1,J=X.remote.onFrame((Y)=>{if(K||Z.destroyed)return;X.lastUsedAt=Date.now(),K=!Z.write(Buffer.concat([Buffer.from(`--${t8}\r
914
- Content-Type: image/jpeg\r
915
- Content-Length: ${Y.byteLength}\r
916
- \r
917
- `),Y,Buffer.from(`\r
918
- `)]))});Z.on("drain",()=>{K=!1}),Z.once("close",J)}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=(j)=>{if(!Z.destroyed)X.lastUsedAt=Date.now(),Z.write(`data: ${JSON.stringify(j)}
919
-
920
- `)},J=X.remote.onEvent(K),Y=setInterval(()=>{if(!Z.destroyed)X.lastUsedAt=Date.now(),Z.write(`: ping
921
-
922
- `)},15000);Y.unref?.(),Z.once("close",()=>{clearInterval(Y),J()})}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,G3)}async inlineCss(Z,X,Q,K){let J=new Set;try{let U=B4.parse(X,{context:"stylesheet",parseCustomProperty:!0});B4.walk(U,(B)=>{if(B.type!=="Url")return;try{J.add(new URL(B.value,Q).href)}catch{}})}catch{return""}let Y=new Map,j=[...J].slice(0,K.remaining);for(let U=0;U<j.length;U+=n8)await Promise.all(j.slice(U,U+n8).map(async(B)=>{try{let z=await this.snapshotUpstream(Z,B,K),q=z?X7(z):null;if(q)Y.set(B,q)}catch{}}));return o8({css:X,baseUrl:Q,resourceUrl:(U)=>Y.get(U)??"data:"})}async inlineSnapshotTree(Z,X,Q,K){let J=[];for(let Y of X.childNodes){if(oQ(Y)){let j=Y.tagName.toLowerCase();if(j==="link"&&(k2(Y,"rel")??"").toLowerCase().includes("stylesheet")){let U=k2(Y,"href");if(U)try{let B=new URL(U,K).href,z=await this.snapshotUpstream(Z,B,Q);if(!z)continue;if(Q7(z.headers)==="text/css")Y.tagName="style",Y.nodeName="style",Y.attrs=[],Y.childNodes=[{nodeName:"#text",value:await this.inlineCss(Z,Buffer.from(z.body).toString("utf8"),z.url,Q),parentNode:Y}]}catch{continue}}if(j==="style"){for(let U of Y.childNodes)if("value"in U&&typeof U.value==="string")U.value=await this.inlineCss(Z,U.value,K,Q)}if(j==="img"){let U=k2(Y,"src");if(U&&!U.startsWith("data:"))try{let B=new URL(U,K).href,z=await this.snapshotUpstream(Z,B,Q);Z7(Y,"src",z&&X7(z)||"data:")}catch{Z7(Y,"src","data:")}}await this.inlineSnapshotTree(Z,Y,Q,K)}J.push(Y)}X.childNodes=J}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,J=f1(Q),Y={remaining:kQ,resourceCount:0};await this.inlineSnapshotTree(Z,J,Y,K);let j=p0(J),U=s8(j),B=j.match(/<title[^>]*>([^<]*)<\/title>/i)?.[1]?.trim()??"";return{html:U,sourceUrl:K,title:B,revision:X,byteLength:Buffer.byteLength(U,"utf8"),resourceCount:Y.resourceCount,createdAt:new Date().toISOString()}}}import{chromium as wK}from"playwright-core";import{spawn as nQ}from"node:child_process";import{existsSync as O1,readFileSync as tQ}from"node:fs";import{createRequire as K7}from"node:module";import L4 from"node:os";import a from"node:path";var D0={phase:"checking"},o0=null,T2=0,eQ=60000,ZK=["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 W7 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 XK(Z){return Z.phase==="failed"?new W7(Z.error):new b1}function n0(){return{...D0}}function QK(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 J7(Z,X){let Q=[],K=X.IDEAWAVE_CAPTURE_EXECUTABLE_PATH??X.IDEAWAVE_CHROMIUM_PATH;if(K)Q.push(K);if(Z==="win32"){let J=X.ProgramFiles??"C:\\Program Files",Y=X["ProgramFiles(x86)"]??"C:\\Program Files (x86)";if(Q.push(a.win32.join(J,"Google\\Chrome\\Application\\chrome.exe"),a.win32.join(Y,"Google\\Chrome\\Application\\chrome.exe")),X.LOCALAPPDATA)Q.push(a.win32.join(X.LOCALAPPDATA,"Google\\Chrome\\Application\\chrome.exe"));Q.push(a.win32.join(Y,"Microsoft\\Edge\\Application\\msedge.exe"),a.win32.join(J,"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 KK(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 J of Q){let Y=a.join(K,`${Z}${J}`);if(O1(Y))return Y}}return null}function WK(){let Z=new Set([process.env.IDEAWAVE_CAPTURE_EXECUTABLE_PATH,process.env.IDEAWAVE_CHROMIUM_PATH]);for(let X of J7(process.platform,process.env)){if(Z.has(X))continue;if(a.isAbsolute(X)){if(O1(X))return X}else{let Q=KK(X);if(Q)return Q}}return null}function JK(){try{let Z=K7(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 VK(){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=JK();if(!Z)return null;try{let Q=JSON.parse(tQ(a.join(Z,"browsers.json"),"utf8")).browsers?.find((U)=>U.name==="chromium-headless-shell");if(!Q?.revision)return null;let K=VK(),J=Q.revisionOverrides?.[K]??Q.revision,Y=a.join(YK(Z),`chromium_headless_shell-${J}`),j=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 U of j){let B=a.join(Y,...U.split("/"));if(O1(B))return B}}catch{return null}return null}function jK(){let Z=process.env.IDEAWAVE_CAPTURE_EXECUTABLE_PATH??process.env.IDEAWAVE_CHROMIUM_PATH;return Z&&O1(Z)?Z:null}function Y7(){return QK({override:jK(),managedShell:A2(),system:WK()})}function HK(){let X=K7(import.meta.url).resolve("playwright-core/package.json"),Q=a.join(a.dirname(X),"cli.js");return new Promise((K,J)=>{let Y=nQ(process.execPath,[Q,...ZK],{stdio:"ignore",windowsHide:!0});Y.once("error",J),Y.once("exit",(j)=>{if(j===0)K();else J(Error(`Playwright headless-shell installer exited with code ${j}`))})})}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<eQ)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 HK();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 V7(){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 j7(){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),XK(D0)}var zK=60000,UK=16,T0=null,q4=null,t0=null,c2=Promise.resolve(),x4=0,l2=0,FK=0;class P4 extends Error{constructor(){super("The capture queue is busy; retry shortly.");this.name="CaptureQueueFullError"}}function i2(){if(t0)clearTimeout(t0);t0=null}async function d2(){i2();let Z=T0;if(T0=null,q4=null,Z)await Z.close().catch(()=>{return})}function BK(Z=zK){i2(),t0=setTimeout(()=>{if(t0=null,l2===0&&x4===0)d2()},Z),t0.unref?.()}async function LK(){let Z=await j7();if(T0?.isConnected()&&q4===Z)return T0;await d2();let X=await wK.launch({headless:!0,executablePath:Z,handleSIGHUP:!1,handleSIGINT:!1,handleSIGTERM:!1});return FK+=1,T0=X,q4=Z,X.on("disconnected",()=>{if(T0===X)T0=null,q4=null}),X}function H7(Z,X){if(x4>=UK)return Promise.reject(new P4);x4+=1;let Q,K,J=new Promise((Y,j)=>{Q=Y,K=j});return c2=c2.then(async()=>{x4-=1,l2+=1,i2();let Y=null,j;try{Y=await(await LK()).newContext(Z.context);let B=await Y.newPage();j={ok:!0,value:await X(B)}}catch(U){j={ok:!1,error:U}}finally{if(Y)await Y.close().catch(()=>{return});l2-=1,BK()}if(j.ok)Q(j.value);else K(j.error)}),J}async function w7(){await c2.catch(()=>{return}),await d2()}import{randomUUID as RK}from"node:crypto";import{createServer as CK}from"node:http";import{WebSocket as f7,WebSocketServer as hK}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 U7(Z=p2(),X="127.0.0.1",Q="/cli-bridge"){return Z.map((K)=>`ws://${X}:${K}${Q}`)}var qK=800;function F7({candidates:Z,createWebSocket:X,timeoutMs:Q=qK,maxConcurrent:K=1,staggerMs:J=0,setTimeoutFn:Y=setTimeout,clearTimeoutFn:j=clearTimeout}){return new Promise((U,B)=>{let z=0,q=!1,R=null,h=new Map,O=Math.max(1,Math.floor(K)),f=()=>{if(R===null)return;j(R),R=null},M=(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),j(k),h.delete(x)},N=(D)=>{f();for(let x of Array.from(h.values()))if(M(x),x.socket!==D)try{x.socket.close()}catch{}},b=()=>{if(q)return;if(z<Z.length)return;if(h.size>0)return;if(R!==null)return;q=!0,B(Error("No IdeaWave CLI bridge is reachable"))},g=(D)=>{if(q)return;if(z>=Z.length){b();return}if(h.size>=O)return;if(D<=0){f(),_();return}if(R!==null)return;R=Y(()=>{R=null,_()},D)},v=()=>{if(q)return;if(h.size>=O)return;if(h.size===0||J<=0||O===1){g(0);return}g(J)},G=(D)=>{if(q)return;let x=h.get(D);if(!x)return;M(x);try{D.close()}catch{}v(),b()};function _(){if(q)return;if(h.size>=O)return;let D=Z[z];if(z+=1,!D){b();return}let x;try{x=X(D)}catch{v(),b();return}let E={open:()=>{if(q||!h.has(x))return;x.send(G1({type:"bridge_probe",protocolVersion:1}))},message:(l)=>{if(q||!h.has(x))return;if($1(String(l?.data??""))?.type!=="bridge_probe_ack")return;q=!0,N(x),U({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=Y(()=>G(x),Q);h.set(x,{url:D,socket:x,listeners:E,timer:k}),v()}_()})}import{randomBytes as xK}from"node:crypto";import{mkdir as PK,writeFile as fK}from"node:fs/promises";import yK from"node:os";import B7 from"node:path";var OK=30000,bK=1024;function L7(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 J=Q==="ideawave.app"||Q.endsWith(".ideawave.app");return X.protocol==="https:"&&J&&X.pathname.startsWith("/static_boards/")}async function vK(Z,X){let Q=B7.join(yK.tmpdir(),"ideawave-screenshots");await PK(Q,{recursive:!0});let K=B7.join(Q,`board-${Date.now()}-${xK(4).toString("hex")}.png`);return await fK(K,Z),{path:K,engine:X}}async function q7(Z){let X=Z.timeoutMs??OK;return H7({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 J=await Q.screenshot({type:"png",animations:"disabled",caret:"hide",scale:"css"});if(J.byteLength<bK)throw Error("Headless Shell returned an empty screenshot");return vK(Buffer.from(J),n0().engine??"system-chromium")})}var MK=0,NK=30000,DK=15000,gK="/screenshot",$K=65536,y7="http://127.0.0.1",y4="IDEAWAVE_CLI_ALLOW_RAILWAY_PR_PREVIEWS";async function O7(Z=U7(),X=(Q)=>new f7(Q,{headers:{origin:y7}})){try{let{url:Q,socket:K}=await F7({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 EK(Z){return Z==="ideawave.app"||Z.endsWith(".ideawave.app")}function mK(Z){return Z==="1"||Z?.toLowerCase()==="true"}function kK(Z){return/^ideawave-app-ideawave-app-pr-\d+\.up\.railway\.app$/i.test(Z)}function _K(){let Z=process.env.IDEAWAVE_CLI_ALLOWED_ORIGINS;if(!Z)return SK;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 SK=new Set;function r2(Z){if(!Z)return!1;let X;try{X=new URL(Z)}catch{return!1}if(GK.has(X.origin))return!0;if(_K().has(X.origin))return!0;if(X.protocol==="https:"&&mK(process.env[y4])&&kK(X.hostname))return!0;if(X.protocol==="https:"&&EK(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!==f7.OPEN)return;try{Z.send(G1(X))}catch{}}function IK(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 x7(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
923
943
  Connection: close\r
924
- Content-Length: ${Buffer.byteLength(Q)}\r
944
+ Content-Length: ${Buffer.byteLength(Z)}\r
925
945
  \r
926
- ${Q}`),Z.destroy()}function TK(Z,X){return new Promise((Q,K)=>{let J=(j)=>{Z.off("listening",Y),K(j)},Y=()=>{Z.off("error",J);let j=Z.address();if(!j||typeof j==="string"){K(Error("Failed to read CLI bridge server address"));return}Q(j.port)};Z.once("error",J),Z.once("listening",Y),Z.listen(X,"127.0.0.1")})}function P7(Z){return new Promise((X,Q)=>{Z.close((K)=>{if(K)Q(K);else X()})})}async function b7(Z,X=p2()){let Q=new Map,K=new Map,J=Z.maxMessageSize??MK,Y=!1,j=(O)=>{let f=K.get(O);if(f)clearTimeout(f);K.delete(O)},U=(O)=>{K.delete(O);let{activeRunIds:f}=Z.registry.disconnect(O);Z.onDisconnect(O,f)},B=(O,f)=>{let M={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,M);return}for(let N of Q.values())e0(N,M)},z=(O,f)=>{let M=f.sessionId.trim(),N=f.userId.trim();if(!M||!N){e0(O,{type:"cli_status",connected:!1,runtime:Z.runtime,mcpReady:Z.mcpReady(),error:"Missing frontend session or user id"}),O.close();return}j(M);let b=Q.get(M);if(b&&b!==O)b.close();O.data.frontendSessionId=M,Q.set(M,O),Z.registry.register({frontendSessionId:M,userId:N,tools:f.tools,send:(g)=>e0(O,g)}),B(M),Z.onToolMetadata?.(M)},q=(O,f)=>{let M=Z.registry.getUserId(O);if(!M)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:M});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},M);break;default:break}},R=(O,f)=>{let M=f4(O.headers.origin),N=r2(M),b={Vary:"Origin"};if(N&&M)b["Access-Control-Allow-Origin"]=M,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?.()}))},h=(O,f)=>{let M=f4(O.headers.origin),N=r2(M),b={Vary:"Origin"};if(N&&M)b["Access-Control-Allow-Origin"]=M,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 g={...b,"content-type":"application/json"},v=(D,x)=>{f.writeHead(D,g),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(!L7(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)))};q7({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=CK((b,g)=>{(async()=>{let v=new URL(b.url??"/","http://127.0.0.1").pathname;if(v===z7){R(b,g);return}if(v===gK){h(b,g);return}if(await Z.onHttpRequest?.(b,g))return;g.writeHead(404,{"content-type":"text/plain"}),g.end("IdeaWave CLI bridge")})().catch((v)=>{if(g.headersSent){g.destroy(v instanceof Error?v:void 0);return}g.writeHead(500,{"content-type":"text/plain"}),g.end("IdeaWave CLI bridge request failed")})}),M=new hK({noServer:!0,maxPayload:J}),N=(b)=>{if(b.idleTimer)clearTimeout(b.idleTimer);b.idleTimer=setTimeout(()=>{b.close()},NK),b.idleTimer.unref?.()};M.on("connection",(b,g)=>{let v=b;v.data={id:RK(),frontendSessionId:null,frontendOrigin:new URL(f4(g.headers.origin)??y7).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 _=IK(G);if(J>0&&_.length>J)return;let D=$1(_);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")z(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),j(G),Y)return;K.set(G,setTimeout(()=>U(G),DK))})}),f.on("upgrade",(b,g,v)=>{let G=new URL(b.url??"/","http://127.0.0.1").pathname;if(Z.onHttpUpgrade?.(b,g,v))return;if(G!==a2){x7(g,404,"Not Found");return}if(!r2(f4(b.headers.origin))){x7(g,403,"Forbidden");return}M.handleUpgrade(b,g,v,(_)=>{M.emit("connection",_,b)})});try{let b=await TK(f,O);return{url:`ws://127.0.0.1:${b}${a2}`,port:b,sendStatus:B,close:async()=>{Y=!0;for(let g of K.values())clearTimeout(g);K.clear();for(let g of M.clients){let v=g;if(v.idleTimer)clearTimeout(v.idleTimer);v.close()}M.close(),await P7(f).catch(()=>{return})}}}catch(b){if(M.close(),await P7(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 eK,readFile as ZW}from"node:fs/promises";import XW from"node:os";import v1 from"node:path";import{Server as QW}from"@modelcontextprotocol/sdk/server/index.js";import{CallToolRequestSchema as KW,ListToolsRequestSchema as WW}from"@modelcontextprotocol/sdk/types.js";import{randomUUID as uK}from"node:crypto";import{createServer as cK}from"node:http";import{StreamableHTTPServerTransport as lK}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{isInitializeRequest as h7}from"@modelcontextprotocol/sdk/types.js";var v7=new Set(["127.0.0.1","localhost","[::1]","::1"]);function AK(Z){let X=Z.trim();if(X.length===0)return null;if(X.startsWith("[")){let Y=X.indexOf("]");if(Y===-1)return null;let j=X.slice(0,Y+1),U=X.slice(Y+1);if(U.length===0)return{host:j,port:null};if(!U.startsWith(":"))return null;let B=Number(U.slice(1));if(!Number.isInteger(B)||B<=0||B>65535)return null;return{host:j,port:B}}let Q=X.lastIndexOf(":");if(Q===-1)return{host:X,port:null};let K=X.slice(Q+1),J=Number(K);if(!Number.isInteger(J)||J<=0||J>65535)return{host:X,port:null};return{host:X.slice(0,Q),port:J}}function R7(Z){return v7.has(Z)||v7.has(Z.toLowerCase())}function C7(Z,X){let Q=Z.headers.host;if(typeof Q!=="string")return{ok:!1,status:403,reason:"missing-host"};let K=AK(Q);if(!K)return{ok:!1,status:403,reason:"bad-host"};if(!R7(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 J=Z.headers.origin;if(typeof J==="string"&&J.length>0){if(J!=="null"){let Y;try{Y=new URL(J)}catch{return{ok:!1,status:403,reason:"bad-origin"}}if(!R7(Y.hostname))return{ok:!1,status:403,reason:"non-loopback-origin"}}}return{ok:!0}}var M7="/mcp",iK=43274,D7=16777216,dK=1800000,aK=300000,N7=200,pK=-32700,g0=-32600,s2=-32603;function V0(Z,X,Q,K,J){Z.statusCode=X,Z.setHeader("content-type","application/json"),Z.end(JSON.stringify({jsonrpc:"2.0",error:{code:Q,message:K,...J?{data:J}:{}},id:null}))}class o2 extends Error{constructor(){super("expected application/json");this.name="BadContentTypeError"}}class n2 extends Error{constructor(){super(`body exceeds ${D7} bytes`);this.name="BodyTooLargeError"}}async function rK(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 Y of Z){let j=typeof Y==="string"?Buffer.from(Y):Y;if(Q+=j.byteLength,Q>D7)throw new n2;K.push(j)}if(K.length===0)return;let J=Buffer.concat(K).toString("utf8");if(J.length===0)return;return JSON.parse(J)}function sK(Z){if(Array.isArray(Z))return Z.some(h7);return h7(Z)}function oK(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 iK}async function nK(Z,X){let Q=(J)=>new Promise((Y,j)=>{let U=(z)=>{Z.off("listening",B),j(z)},B=()=>{Z.off("error",U),Y()};Z.once("error",U),Z.once("listening",B),Z.listen(J,"127.0.0.1")});try{await Q(X)}catch(J){if(J.code!=="EADDRINUSE"||X===0)throw J;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 tK(Z,X){if(X&&typeof X==="object"&&!Array.isArray(X)){let K=X.params;if(K&&typeof K==="object"&&!Array.isArray(K)){let J=K.clientInfo;if(J&&typeof J==="object"&&!Array.isArray(J)){let Y=J.name;if(typeof Y==="string"&&Y.trim().length>0)return Y.trim()}}}let Q=Z.headers["user-agent"];if(typeof Q==="string"&&Q.trim().length>0)return Q.trim();return null}async function g7(Z){let X=new Map,Q=0;function K(z){let q=X.get(z);if(q)q.lastActivity=Date.now()}async function J(z,q){X.delete(z),await q.transport.close().catch(()=>{return})}async function Y(){let z=null,q=1/0;for(let[R,h]of X)if(h.lastActivity<q)q=h.lastActivity,z=R;if(z!==null){let R=X.get(z);if(R)console.warn(`[mcp] session cap of ${N7} reached; evicting ${z}`),await J(z,R)}}let j=setInterval(()=>{let z=Date.now()-dK;for(let[q,R]of X)if(R.lastActivity<z)console.log(`[mcp] sweeping idle session ${q}`),J(q,R)},aK);j.unref?.();let U=cK((z,q)=>{(async()=>{let R;try{R=new URL(z.url??"/","http://127.0.0.1").pathname}catch{V0(q,400,g0,"bad-url");return}if(R!==M7){V0(q,404,g0,"not-found");return}let h=z.method??"POST";if(h!=="POST"&&h!=="GET"&&h!=="DELETE"){q.setHeader("Allow","GET, POST, DELETE"),V0(q,405,g0,"method-not-allowed");return}let O=C7(z,Q);if(!O.ok){V0(q,O.status,g0,"forbidden",{reason:O.reason});return}let f=z.headers["mcp-session-id"],M=typeof f==="string"?f:void 0;if(h==="GET"||h==="DELETE"){if(!M||!X.has(M)){V0(q,400,g0,"no-session",{hint:"Open a POST initialize first to receive an Mcp-Session-Id."});return}let g=X.get(M).transport;K(M);try{await g.handleRequest(z,q)}catch(v){if(console.error("[mcp] transport.handleRequest (GET/DELETE) threw",v),!q.headersSent)V0(q,500,s2,"internal")}return}let N;try{N=await rK(z)}catch(g){if(g instanceof o2){V0(q,415,g0,"expected-application-json");return}if(g instanceof n2){V0(q,413,g0,"body-too-large");return}V0(q,400,pK,"invalid-json");return}let b;if(M&&X.has(M))b=X.get(M).transport,K(M);else if(!M&&N!==void 0&&sK(N)){let g=z.headers["x-ideawave-user-id"],v=typeof g==="string"&&g.trim().length>0?g.trim():null,G=z.headers["x-ideawave-frontend-session-id"],_=typeof G==="string"&&G.trim().length>0?G.trim():null,D=z.headers["x-ideawave-tool-surface"],x=typeof D==="string"&&D.trim()==="read"?"read":"full",E=z.headers["x-ideawave-images-supported"],k=typeof E==="string"&&E.trim()==="1",l=z.headers["x-ideawave-card-id"],L0=typeof l==="string"&&l.trim().length>0?l.trim():null,y0=z.headers["x-ideawave-board-id"],I=typeof y0==="string"&&y0.trim().length>0?y0.trim():null,p=z.headers["x-ideawave-run-folder"],c=typeof p==="string"&&p.trim().length>0?p.trim():null,X0=tK(z,N);if(X.size>=N7)await Y();let s=null,G0=new lK({sessionIdGenerator:()=>uK(),onsessioninitialized:(u0)=>{s=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),s)X.delete(s);await G0.close().catch(()=>{return}),V0(q,500,s2,"server-init-failed");return}b=G0}else{V0(q,400,g0,"no-session",{hint:"Non-initialize requests must include a valid Mcp-Session-Id header obtained from a prior initialize."});return}try{await b.handleRequest(z,q,N)}catch(g){if(console.error("[mcp] transport.handleRequest threw",g),!q.headersSent)V0(q,500,s2,"internal")}})().catch((R)=>{console.error("[mcp] unhandled request handler error:",R)})});return Q=await nK(U,oK(Z.port)),{url:`http://127.0.0.1:${Q}${M7}`,port:Q,close:async()=>{clearInterval(j);for(let z of X.values())await z.transport.close().catch(()=>{return});X.clear(),await new Promise((z)=>U.close(()=>z()))}}}var JW={name:"ideawave-board",version:"1.0.0"},O4="list_run_folder",b4="read_run_folder_file",E7=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]),m7=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 VW(Z){return t2(JSON.stringify(Z,null,2))}function $7(Z){return{...t2(Z),isError:!0}}async function jW(Z,X){if(!X||Z.isError)return Z;let Q=Z.content.find((Y)=>Y.type==="text");if(!Q)return Z;let K;try{let Y=JSON.parse(Q.text);if(typeof Y.path!=="string")return Z;K=v1.resolve(Y.path)}catch{return Z}let J=v1.resolve(v1.join(XW.tmpdir(),"ideawave-screenshots"));if(v1.dirname(K)!==J||!/^board-[a-z0-9-]+\.png$/i.test(v1.basename(K)))return Z;try{if(!(await eK(K)).isFile())return Z;let j=await ZW(K);if(j.byteLength<1024||j.byteLength>26214400||!j.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])))return Z;return{...Z,content:[...Z.content,{type:"image",data:j.toString("base64"),mimeType:"image/png"}]}}catch{return Z}}function HW(Z,X,Q="full",K=!1){return Z.getMetadata(X).filter((J)=>{let Y=p1(J.name);if(Q==="read"&&!E7.has(Y))return!1;if(!K&&m7.has(Y))return!1;return!0}).map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}function wW(Z,X,Q={}){let K=HW(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 UW(Z){let X=await zW(Z.boardId,Z.cardId,Z.runFolder);if(Z.name===O4){let Q=G7(Z.args,"path")??"",K=await J3(X,Q);return VW(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 FW(Z,X,Q,K,J,Y="full",j=!1){let U=new QW(JW,{capabilities:{tools:{}}}),B=async()=>{if(j)return!0;if(C3(K))return!0;if(Q&&K)try{return(await R0({boardId:Q,cardId:K})).adapter.supportsImages===!0}catch{return!1}return!1};return U.setRequestHandler(WW,async()=>({tools:wW(Z,X,{includeRunFolderTools:Boolean(J||Q&&K),toolSurface:Y,imagesSupported:await B()})})),U.setRequestHandler(KW,async(z)=>{let{name:q,arguments:R}=z.params,h=p1(q),O=Date.now();m("mcp.tool_call_received",{frontendSessionId:X,cardId:K,toolName:h});try{if(h===O4||h===b4)return await UW({name:h,args:R,boardId:Q,cardId:K,runFolder:J});if(Y==="read"&&!E7.has(h))throw Error(`Tool "${q}" is not available in read-only mode`);if(m7.has(h)&&!await B())throw Error(`Tool "${q}" requires a runtime that supports image input`);let f=await Z.callTool(X,h,R??{},void 0,K??void 0);if(m("mcp.tool_result_returned",{frontendSessionId:X,cardId:K,toolName:h,elapsedMs:Date.now()-O}),f&&typeof f==="object"&&Array.isArray(f.content)){let M=f;return h==="screenshot_board"?await jW(M,await B()):M}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:h,elapsedMs:Date.now()-O,hasError:!0}),{content:[{type:"text",text:f instanceof Error?f.message:"Tool call failed"}],isError:!0}}}),U}function k7(Z,X){return g7({buildServer:(Q)=>FW(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 _7(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function BW(){let[Z,X]=await Promise.all([W0(),r6()]),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:i0().map((K)=>({id:K.id,displayName:K.displayName})),readiness:X}}async function LW(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 qW(Z){return j0((X)=>{let Q=X.runtimes.find((Y)=>Y.kind==="registered"&&Y.adapterId===Z.adapterId);if(Q)return Q;let K=i0().find((Y)=>Y.id===Z.adapterId);if(!K)throw Error(`Unknown adapterId: ${Z.adapterId}`);let J={id:_7(),kind:"registered",adapterId:Z.adapterId,displayName:K.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return X.runtimes.push(J),J})}async function xW(Z){return j0((X)=>{let Q={id:_7(),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 PW(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 fW(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 yW(Z){Z.boardId,await j0((X)=>{if(Z.runtimeConfigId===null){delete X.cardOverrides[Z.cardId];return}if(!X.runtimes.some((J)=>J.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 OW(Z){let Q=(await W0()).runtimes.find((j)=>j.id===Z.runtimeConfigId);if(!Q)throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);let K=F0(Q),J=await K.resolveSpawnConfig(Q),Y=Q.runFolder??e2.homedir();try{let j=await O3({spawn:{...J,cwd:Y},modelId:Z.modelId??Q.defaultModelId??null,configValues:Z.configValues??Q.defaultConfigValues??{}}),U=i1({adapterId:K.id,models:j.models,currentModelId:j.currentModelId}),B=new Date().toISOString();return await j0((z)=>{let q=z.runtimes.find((R)=>R.id===Z.runtimeConfigId);if(q)q.discoveredModels=U,q.discoveredConfigOptions=j.configOptions,q.discoveredAt=B}),{ok:!0,models:U,configOptions:j.configOptions,currentModelId:j.currentModelId}}catch(j){if(j instanceof c0)throw Error(`${j.message}${K.authHint?` ${K.authHint}`:""}`);if(j instanceof T||j instanceof U0)throw Error(j.message);throw j}}async function bW(Z){let X=e2.homedir(),Q=Z.path?.trim()?Z.path.trim():X,K=R4.resolve(Q),J=!0;try{if(!(await v4.stat(K)).isDirectory())K=R4.dirname(K)}catch{J=!1,K=X}let Y=[];try{Y=(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,z)=>B.name.localeCompare(z.name))}catch{Y=[]}let j=R4.dirname(K);return{path:K,parent:j===K?null:j,home:X,exists:J,entries:Y}}var S7={list:BW,getEffectiveForCard:LW,registerRegistered:qW,registerCustom:xW,unregister:PW,setUserDefault:fW,setCardOverride:yW,refreshModels:OW,browseFolder:bW};var vW=[{id:"claude-code",displayName:"Claude Code"},{id:"codex",displayName:"Codex"},{id:"copilot",displayName:"Copilot"},{id:"opencode",displayName:"OpenCode"}];function RW(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function I7(){try{let Z=await W0();if(Z.globalDefaultConfigId){if(Z.runtimes.some((Q)=>Q.id===Z.globalDefaultConfigId))return Z.globalDefaultConfigId}for(let X of vW){if((await s6(X.id))?.status!=="ready")continue;let K=null;if(await j0((J)=>{if(J.globalDefaultConfigId){if(J.runtimes.some((U)=>U.id===J.globalDefaultConfigId)){K=J.globalDefaultConfigId;return}}let Y=J.runtimes.find((j)=>j.kind==="registered"&&j.adapterId===X.id);if(!Y){let j={id:RW(),kind:"registered",adapterId:X.id,displayName:X.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};J.runtimes.push(j),Y=j}J.globalDefaultConfigId=Y.id,K=Y.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 CW=120000;function hW(){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??hW,this.toolCallTimeoutMs=Z.toolCallTimeoutMs??CW}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,J){if(!Z)return Promise.reject(Error("MCP tool call is missing a frontend session id"));let Y=this.sessions.get(Z);if(!Y)return Promise.reject(Error(`Frontend session ${Z} is not connected`));let j=this.createCallId();return new Promise((U,B)=>{let z=K??(J?this.getActiveRunIdForCard(Y,J):this.getSoleActiveRunId(Y)),q=J??(z?Y.activeRunCardIds.get(z):void 0),R=Date.now(),h=setTimeout(()=>{Y.pendingToolCalls.delete(j),m("tool_queue.timeout",{frontendSessionId:Z,runId:z,cardId:q,callId:j,toolName:X,elapsedMs:Date.now()-R,queueDepth:Y.pendingToolCalls.size}),B(Error(`Tool "${X}" timed out waiting for the frontend`))},this.toolCallTimeoutMs);Y.pendingToolCalls.set(j,{resolve:U,reject:B,timer:h,name:X,runId:z??null,cardId:q??null,startedAt:R}),m("tool_queue.forwarded_to_browser",{frontendSessionId:Z,runId:z,cardId:q,callId:j,toolName:X,queueDepth:Y.pendingToolCalls.size}),Y.send({type:"tool_call",callId:j,name:X,args:Q,...z?{runId:z}:{},...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 J=X.result;if(J&&typeof J==="object"&&Array.isArray(J.content)){K.resolve({...J,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,J])=>Z.activeRunIds.has(K)&&J===X).map(([K])=>K);return Q.length===1?Q[0]:void 0}}function A7(){return"0.0.66".trim()?"0.0.66":"dev"}var MW=process.argv.slice(2),u7=[];for(let Z of MW){if(Z==="--dev"){process.env[y4]="1";continue}u7.push(Z)}var $0=u7[0],M1=process.env.APP_ENV==="development"||process.env[y4]==="1";if($0==="--help"||$0==="-h"||$0==="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($0==="--version"||$0==="-v"||$0==="version")console.log(A7()),process.exit(0);if($0)console.error(`Unknown command: ${$0}`),console.error("Run `ideawave --help` for usage."),process.exit(1);var C1=new Z6,f0=null,c7=M1?{phase:"ready",message:"Local browser-kit proxy is ready"}:{phase:"idle"},K6=new I2(new V1((Z)=>{c7=Z,f0?.sendStatus()})),C4=new l1,X6=M1?C4:K6;function A0(Z,X){C1.sendToSession(Z,X)}async function NW(Z,X){try{let Q=S7[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 k7(C1);w6({...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 I7(),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 O7();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)V7().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 b7({registry:C1,runtime:null,mcpReady:()=>h1,capabilities:M1?[F6]:["browser-proxy-v1",z6,U6],cliVersion:A7(),browserRuntimeStatus:()=>c7,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 D3(X,(Q)=>A0(Z,Q))})().catch(()=>{return}).finally(()=>C1.markRunSettled(Z,X.runId))},onCancelRun:(Z,X)=>{F2(X)},onRuntimeRpc:(Z,X)=>{NW(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 g3({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),h3(Z);for(let Q of X)F2(Q);m("bridge.frontend_disconnected",{frontendSessionId:Z,activeRuns:X.length}),Y6(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 T7=!1;for(let Z of["SIGINT","SIGTERM"])process.once(Z,()=>{if(T7)return;T7=!0,M3(),(async()=>{await K6.close(),await C4.close(),await w7(),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)})()});