granclaw 0.0.1-beta.54 → 0.0.1-beta.55
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.
|
@@ -186,7 +186,7 @@ function main() {
|
|
|
186
186
|
// appears inline in the streaming response.
|
|
187
187
|
broadcastToChannel(job.channelId, {
|
|
188
188
|
type: 'chunk',
|
|
189
|
-
chunk: { type: 'text', text: `\n\n🔗 **Takeover link:** ${takeoverUrl}` },
|
|
189
|
+
chunk: { type: 'text', text: `\n\n🔗 **Takeover link:** ${takeoverUrl}\n\n` },
|
|
190
190
|
});
|
|
191
191
|
}
|
|
192
192
|
}
|
|
@@ -87,7 +87,7 @@ Esto eliminará permanentemente:
|
|
|
87
87
|
• Memoria de sesión de Claude
|
|
88
88
|
• Archivos del espacio de trabajo
|
|
89
89
|
|
|
90
|
-
Esta acción no se puede deshacer.`,guardian:"Guardián",comingSoon:"Próximamente",guardianBlurb1:"Configura un agente guardián para controlar lo que puede hacer tu agente principal.",guardianBlurb2:"Define restricciones, bloquea acciones y exige aprobación antes de operaciones sensibles.",guardianChatBlurb:"Chat del guardián.<br />Configura restricciones aquí.",guardianDisconnected:"○ desconectado"},fM={sessionExpiredLabel:"toma de control",sessionExpired:"Sesión expirada",sessionExpiredBlurb:"Este enlace de toma de control ya fue usado o expiró.",completeLabel:"completo",controlReturned:"Control devuelto al agente",closeTab:"Puedes cerrar esta pestaña.",connecting:"conectando…",agentNeedsHelp:"El agente necesita tu ayuda",liveLabel:"en vivo",waitingStream:"esperando transmisión del navegador…",whatDidYouDo:"¿Qué hiciste?",optional:"(opcional)",describeActionPlaceholder:"Describe tu acción para el agente…",returning:"Devolviendo…",completed:"Completado"},pM={columns:{backlog:"PENDIENTE",inProgress:"EN PROGRESO",scheduled:"PROGRAMADO",toReview:"EN REVISIÓN",done:"COMPLETADO"},statusLabels:{backlog:"Pendiente",inProgress:"En progreso",scheduled:"Programado",toReview:"En revisión",done:"Completado"},editedBy:"editado por {name}",relativeNow:"ahora",relativeMinutes:"hace {n}m",relativeHours:"hace {n}h",relativeDays:"hace {n}d",titlePlaceholder:"Título de tarea…",descPlaceholder:"Descripción (markdown)…",add:"Agregar",cancel:"Cancelar"},gM={saving:"guardando…",close:"Cerrar",status:"Estado",sourceLabel:"fuente",editedByLabel:"editado por",created:"creado",updated:"actualizado",description:"Descripción",descPlaceholder:"Agregar una descripción…",save:"Guardar",cancel:"Cancelar",descEmpty:"Sin descripción — clic para agregar",commentsLabel:"Comentarios ({count})",noComments:"Sin comentarios aún",addComment:"Agregar comentario",commentPlaceholder:"Escribe un comentario… (markdown soportado)",publishComment:"Publicar comentario",publishing:"Publicando…",dangerZone:"Zona peligrosa",deleteTask:"[PELIGROSO] Eliminar tarea",deleting:"eliminando…",deleteConfirm:'¿Eliminar tarea "{title}"? Esta acción no se puede deshacer.'},mM={backToRuns:"← Volver a ejecuciones",loading:"Cargando…",waitingResponse:"Esperando respuesta…",triggering:"Iniciando…",runNow:"Ejecutar ahora",runHistory:"Historial de ejecuciones",noRuns:"Sin ejecuciones aún.",loadingList:"Cargando programados…",emptyIcon:"⏰",emptyText:"Sin programados aún. Pídele al agente que configure tareas recurrentes.",title:"Programados",activeCountOne:"{count} activo",activeCountOther:"{count} activos",next:"Próximo: {time}",last:"Último: {time}",pause:"Pausar",resume:"Reanudar",delete:"Eliminar",deleteConfirm:'¿Eliminar programado "{name}"?'},xM={title:"Flujos de trabajo",emptyText:"Sin flujos de trabajo aún. Pídele al agente que cree uno via chat.",running:"Ejecutando…",run:"Ejecutar",createdOn:"{id} · Creado {date}",back:"← Volver a flujos",run_button:"Ejecutar",stepsTitle:"Pasos ({count})",conditionsOne:"{count} condición",conditionsOther:"{count} condiciones",stepType:"Tipo: {type}",stepTimeout:"Límite de tiempo: {seconds}s",stepId:"ID: {id}",runHistoryTitle:"Historial de ejecuciones ({count})",noRuns:"Sin ejecuciones aún."},vM={loading:"Cargando ejecución…",back:"← Volver al flujo",runLabel:"Ejecución —",errorPrefix:"Error:",input:"Entrada",output:"Salida"},yM={loading:"Cargando monitor…",title:"Monitor",idle:"inactivo",claudeSessionsOne:"{count} sesión claude",claudeSessionsOther:"{count} sesiones claude",processes:"Procesos",agentProcess:"Proceso del Agente",guardianProcess:"Guardián (Big Brother)",browserDaemon:"Demonio de Navegador",activeClaudeSessions:"Sesiones Claude Activas — {count}",jobQueue:"Cola de trabajos — {processing} en proceso, {pending} en espera",noActiveJobs:"Sin trabajos activos",processing:"procesando",queued:"en cola",terminate:"Terminar",cancel:"Cancelar",runningWorkflows:"Flujos de trabajo en ejecución",cpu:"CPU",mem:"MEM",rss:"RSS",uptime:"Tiempo activo"},bM={title:"Integraciones",blurb:"Conecta servicios externos. Cada integración almacena un token como secreto y se activa automáticamente.",moreSoon:"Más integraciones próximamente. Para otras claves API y credenciales, usa la sección de Secretos en la barra lateral.",connected:"Conectado",disconnect:"Desconectar",connect:"Conectar",saveAndConnect:"Guardar y conectar",saving:"Guardando…",cancel:"Cancelar",newPrefix:"Nuevo {label}",pasteNewToken:"Pega el nuevo token",updateToken:"Actualizar token",rotateToken:"Rotar token",errorSave:"Error al guardar — revisa la consola",disconnectConfirm:"¿Desconectar {name}? El agente dejará de usarlo inmediatamente.",telegramDescription:"Recibe y responde mensajes a través de un bot de Telegram.",telegramHelp:"Crea un bot mediante @BotFather en Telegram, luego pega el token aquí.",telegramTokenLabel:"Token del bot"},_M={loading:"Escaneando sesiones…",title:"Uso",totalTokens:"Tokens totales",cachedSuffix:"{amount} en caché",sessions:"Sesiones",modelsCount:"{count} modelos",estCost:"Costo est.",periodDays:"Período de {days} días",avgDay:"Prom/Día",sessionsPerDay:"{count} sesiones/día",dailyTokenUsage:"Uso diario de tokens",noUsageData:"Sin datos de uso",dailyCost:"Costo estimado diario",noCostData:"Sin datos de costo",byModel:"Por modelo",modelSessionsBlurb:"{sessions} sesiones · {input} entrada · {output} salida",tokenBreakdown:"Desglose de tokens",inputTokens:"Tokens de entrada",outputTokens:"Tokens de salida",cacheRead:"Lectura de caché",cacheWrite:"Escritura de caché",toolInvocations:"Invocaciones de herramientas",dailyBreakdown:"Desglose diario",date:"Fecha",tableSessions:"Sesiones",tableInput:"Entrada",tableOutput:"Salida",tableCache:"Caché",tableCost:"Costo"},wM={searchPlaceholder:"Buscar registros…",apply:"Aplicar",live:"En vivo",loading:"cargando…",noResults:'sin resultados para "{query}"',noEntries:"sin entradas de registro",loadOlder:"Cargar {count} entradas anteriores…"},kM={views:{chat:"Chat",tasks:"Tareas",browser:"Navegador",files:"Archivos",workflows:"Flujos de trabajo",schedules:"Programados",monitor:"Monitor",usage:"Uso",logs:"Registros",integrations:"Integraciones",guardian:"Guardián"},comingSoon:"Pronto",secrets:"Secretos",noSecrets:"Sin secretos configurados",updating:"Actualizando {name}",newValue:"nuevo valor",save:"Guardar",secretNamePlaceholder:"NOMBRE",secretValuePlaceholder:"valor",guardrails:"Restricciones",guardrailsBlurb:"Configurado via chat guardián",exportAgent:"📦 Exportar agente",exportTitle:"Descargar una copia de seguridad completa del espacio de trabajo del agente como zip",wipeAgent:"🗑 Borrar agente",wiping:"borrando…"},SM={workspace:"espacio-de-trabajo",savingLabel:"guardando…",saveButton:"Guardar",emptyDir:"Directorio vacío"},CM={common:lM,shell:uM,dashboard:cM,settings:dM,chat:hM,takeover:fM,tasks:pM,taskDetail:gM,schedules:mM,workflows:xM,runDetail:vM,monitor:yM,integrations:bM,usage:_M,logs:wM,agentSettings:kM,files:SM},Ey={en:aM,es:CM},Hk="granclaw:lang";function EM(){if(typeof window>"u")return"en";try{const t=window.localStorage.getItem(Hk);if(t==="en"||t==="es")return t}catch{}return(typeof navigator<"u"?navigator.language:"").toLowerCase().startsWith("es")?"es":"en"}function Py(e,t){const n=t.split(".");let r=e;for(const i of n)if(r&&typeof r=="object"&&i in r)r=r[i];else return;return typeof r=="string"?r:void 0}function PM(e,t){return t?e.replace(/\{(\w+)\}/g,(n,r)=>{const i=t[r];return i==null?`{${r}}`:String(i)}):e}const Wk=N.createContext(null);function NM({children:e}){const[t,n]=N.useState(()=>EM()),r=N.useCallback(o=>{n(o);try{window.localStorage.setItem(Hk,o)}catch{}},[]);N.useEffect(()=>{try{document.documentElement.lang=t}catch{}},[t]);const i=N.useCallback((o,a)=>{const l=Ey[t],u=Py(l,o)??Py(Ey.en,o)??o;return PM(u,a)},[t]),s=N.useMemo(()=>({lang:t,setLang:r,t:i}),[t,r,i]);return f.jsx(Wk.Provider,{value:s,children:e})}function Se(){const e=N.useContext(Wk);if(!e)throw new Error("useT must be used inside <LanguageProvider>");return e}function jM({className:e}){const{lang:t,setLang:n}=Se();return f.jsx("div",{className:`flex items-center gap-0.5 rounded-full bg-surface-container/40 p-[2px] ${e??""}`,children:["en","es"].map(r=>f.jsx("button",{onClick:()=>n(r),className:`px-2 py-[2px] rounded-full text-[10px] font-mono uppercase tracking-wider transition-colors ${t===r?"bg-primary/30 text-primary":"text-on-surface-variant/70 hover:text-on-surface"}`,"aria-pressed":t===r,children:r},r))})}function TM(){const e=Ji(),t=Qi(),n=e.pathname.includes("/chat"),{t:r}=Se();return f.jsxs("div",{className:"flex h-screen flex-col overflow-hidden bg-surface",children:[f.jsxs("header",{className:"flex h-11 flex-shrink-0 items-center justify-between border-b border-outline-variant/20 bg-surface-low px-3 sm:px-5",children:[f.jsxs("button",{onClick:()=>t("/dashboard"),className:"flex items-center gap-2 hover:opacity-80 transition-opacity min-w-0",children:[f.jsx("img",{src:"/granclaw-logo.png",alt:"GranClaw",className:"h-6 w-6 rounded flex-shrink-0"}),f.jsx("span",{className:"font-display font-semibold text-on-surface tracking-tight truncate",children:"GranClaw"}),f.jsxs("span",{className:"text-xs font-mono text-on-surface/60 flex-shrink-0",children:["v","0.0.1-beta.54"]})]}),f.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[f.jsx(jM,{}),f.jsxs("span",{className:"flex items-center gap-1.5 rounded-full bg-secondary-container/20 px-2 sm:px-3 py-1 text-xs font-mono text-secondary flex-shrink-0",children:[f.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-secondary animate-pulse flex-shrink-0"}),f.jsx("span",{className:"hidden sm:inline",children:r("shell.systemPrefix")}),r("shell.onlineSuffix")]})]})]}),f.jsx("main",{className:`flex-1 overflow-auto min-w-0 ${n?"":"p-3 sm:p-5"}`,children:f.jsx(NN,{})})]})}const oe="";async function Ny(){const e=await fetch(`${oe}/agents`);if(!e.ok)throw new Error(`fetchAgents: ${e.status}`);return e.json()}async function MM(e,t,n,r,i){const s=await fetch(`${oe}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e,name:t,model:n,provider:r,...i?{workspaceDir:i}:{}})});if(!s.ok){const o=await s.json().catch(()=>({error:s.statusText}));throw new Error(o.error)}}async function RM(e){const t=await fetch(`${oe}/agents/${e}`,{method:"DELETE"});if(!t.ok)throw new Error(`deleteAgent: ${t.status}`)}async function jy(e){const t=await fetch(`${oe}/agents/${e}`);if(!t.ok)throw new Error(`fetchAgent: ${t.status}`);return t.json()}async function Ty(e,t="ui"){const n=await fetch(`${oe}/agents/${e}/messages?channelId=${t}&sortBy=asc&limit=200`);if(!n.ok)throw new Error(`fetchMessages: ${n.status}`);return n.json()}async function DM(e){const t=await fetch(`${oe}/agents/${e}/reset`,{method:"DELETE"});if(!t.ok)throw new Error(`resetAgent: ${t.status}`)}async function AM(e,t=""){const n=await fetch(`${oe}/agents/${e}/files?path=${encodeURIComponent(t)}`);if(!n.ok)throw new Error(`fetchFiles: ${n.status}`);return(await n.json()).entries}async function IM(e,t){const n=await fetch(`${oe}/agents/${e}/files/read?path=${encodeURIComponent(t)}`);if(!n.ok)throw new Error(`readFile: ${n.status}`);return(await n.json()).content}async function OM(e,t,n){const r=await fetch(`${oe}/agents/${e}/files/write?path=${encodeURIComponent(t)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:n})});if(!r.ok)throw new Error(`writeFile: ${r.status}`)}async function LM(e){const t=await fetch(`${oe}/agents/${e}/secrets`);if(!t.ok)throw new Error(`fetchSecrets: ${t.status}`);return t.json()}async function kp(e,t,n){const r=await fetch(`${oe}/agents/${e}/secrets`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t,value:n})});if(!r.ok)throw new Error(`addSecret: ${r.status}`)}async function Uk(e,t){const n=await fetch(`${oe}/agents/${e}/secrets/${encodeURIComponent(t)}`,{method:"DELETE"});if(!n.ok)throw new Error(`deleteSecret: ${n.status}`)}async function FM(e,t){const r=await fetch(`${oe}/agents/${e}/tasks`);if(!r.ok)throw new Error(`fetchTasks: ${r.status}`);return r.json()}async function $M(e,t){const n=await fetch(`${oe}/agents/${e}/tasks/${t}`);if(!n.ok)throw new Error(`fetchTask: ${n.status}`);return n.json()}async function zM(e,t){const n=await fetch(`${oe}/agents/${e}/tasks`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok)throw new Error(`createTask: ${n.status}`);return n.json()}async function My(e,t,n){const r=await fetch(`${oe}/agents/${e}/tasks/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!r.ok)throw new Error(`updateTask: ${r.status}`);return r.json()}async function BM(e,t){const n=await fetch(`${oe}/agents/${e}/tasks/${t}`,{method:"DELETE"});if(!n.ok)throw new Error(`deleteTask: ${n.status}`)}async function HM(e,t,n){const r=await fetch(`${oe}/agents/${e}/tasks/${t}/comments`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({body:n})});if(!r.ok)throw new Error(`addTaskComment: ${r.status}`);return r.json()}async function WM(e){const t=await fetch(`${oe}/agents/${e}/browser-sessions`);if(!t.ok)throw new Error(`fetchBrowserSessions: ${t.status}`);return t.json()}async function Vk(e,t){const n=await fetch(`${oe}/agents/${e}/browser-sessions/${t}`);if(!n.ok)throw new Error(`fetchBrowserSession: ${n.status}`);return n.json()}function UM(e,t){return`${oe}/agents/${e}/browser-sessions/${t}/video`}function qk(e,t){const n=window.location;return`${n.protocol==="https:"?"wss:":"ws:"}//${n.host}/browser-live/${e}/${t}`}function VM(e){return`${oe}/agents/${e}/export`}async function Ry(e,t){const n=new URL(`${oe}/agents/import`,window.location.origin);t!=null&&t.id&&n.searchParams.set("id",t.id);const r=await fetch(n.toString().replace(window.location.origin,""),{method:"POST",headers:{"Content-Type":"application/zip"},body:e});if(!r.ok){const i=await r.json().catch(()=>({error:r.statusText}));throw new Error(i.error)}return r.json()}async function Dy(e,t){const n=await fetch(`${oe}/agents/${e}/monitor/jobs/${t}`,{method:"DELETE"});if(!n.ok)throw new Error(`killJob: ${n.status}`)}async function qM(e){const t=await fetch(`${oe}/agents/${e}/monitor`);if(!t.ok)throw new Error(`fetchMonitor: ${t.status}`);return t.json()}async function GM(e,t=30){const n=await fetch(`${oe}/agents/${e}/usage?days=${t}`);if(!n.ok)throw new Error(`fetchUsage: ${n.status}`);return n.json()}async function KM(e){const t=await fetch(`${oe}/agents/${e}/schedules`);if(!t.ok)throw new Error(`fetchSchedules: ${t.status}`);return t.json()}async function YM(e,t,n){const r=await fetch(`${oe}/agents/${e}/schedules/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!r.ok)throw new Error(`updateSchedule: ${r.status}`);return r.json()}async function XM(e,t){const n=await fetch(`${oe}/agents/${e}/schedules/${t}`,{method:"DELETE"});if(!n.ok)throw new Error(`deleteSchedule: ${n.status}`)}async function JM(e,t){const n=await fetch(`${oe}/agents/${e}/schedules/${t}/trigger`,{method:"POST"});if(!n.ok)throw new Error(`triggerSchedule: ${n.status}`);return n.json()}async function QM(e,t){const n=await fetch(`${oe}/agents/${e}/schedules/${t}/runs`);if(!n.ok)throw new Error(`fetchScheduleRuns: ${n.status}`);return n.json()}async function ZM(e,t){const n=await fetch(`${oe}/agents/${e}/messages?channelId=${encodeURIComponent(t)}&sortBy=asc&limit=200`);if(!n.ok)throw new Error(`fetchScheduleRunMessages: ${n.status}`);return n.json()}async function eR(e){const t=await fetch(`${oe}/agents/${e}/workflows`);if(!t.ok)throw new Error(`fetchWorkflows: ${t.status}`);return t.json()}async function tR(e,t){const n=await fetch(`${oe}/agents/${e}/workflows/${t}`);if(!n.ok)throw new Error(`fetchWorkflow: ${n.status}`);return n.json()}async function mh(e,t){const n=await fetch(`${oe}/agents/${e}/workflows/${t}/runs`);if(!n.ok)throw new Error(`fetchWorkflowRuns: ${n.status}`);return n.json()}async function nR(e,t,n){const r=await fetch(`${oe}/agents/${e}/workflows/${t}/runs/${n}`);if(!r.ok)throw new Error(`fetchWorkflowRun: ${r.status}`);return r.json()}async function rR(e,t){const n=await fetch(`${oe}/agents/${e}/workflows/${t}/run`,{method:"POST"});if(!n.ok)throw new Error(`triggerWorkflowRun: ${n.status}`);return n.json()}async function iR(e){const t=new URLSearchParams;e!=null&&e.agentId&&t.set("agentId",e.agentId),e!=null&&e.type&&t.set("type",e.type),e!=null&&e.search&&t.set("search",e.search),(e==null?void 0:e.limit)!=null&&t.set("limit",String(e.limit)),(e==null?void 0:e.offset)!=null&&t.set("offset",String(e.offset));const n=await fetch(`${oe}/logs?${t}`);if(!n.ok)throw new Error(`fetchLogs: ${n.status}`);return n.json()}async function Gk(){const e=await fetch(`${oe}/settings/provider`);if(!e.ok)throw new Error("Failed to fetch provider settings");return e.json()}async function Kk(){try{const e=await fetch(`${oe}/settings/app`);return e.ok?e.json():{showWorkspaceDirConfig:!0,showBraveSearchConfig:!0}}catch{return{showWorkspaceDirConfig:!0,showBraveSearchConfig:!0}}}async function Ay(e,t,n){if(!(await fetch(`${oe}/settings/provider`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e,model:t,apiKey:n})})).ok)throw new Error("Failed to save provider settings")}async function sR(e){if(!(await fetch(`${oe}/settings/providers/${encodeURIComponent(e)}`,{method:"DELETE"})).ok)throw new Error("Failed to remove provider")}async function oR(){const e=await fetch(`${oe}/settings/search`);return e.ok?e.json():{provider:"brave",configured:!1}}async function aR(e,t){const n=await fetch(`${oe}/settings/search`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t})});if(!n.ok)throw new Error(`Failed to save search settings: ${n.status}`)}async function lR(){const e=await fetch(`${oe}/settings/search`,{method:"DELETE"});if(!e.ok&&e.status!==204&&e.status!==404)throw new Error(`Failed to clear search settings: ${e.status}`)}const uR={google:[{value:"gemini-2.5-flash",label:"Gemini 2.5 Flash — fast + smart (recommended)"},{value:"gemini-2.5-pro",label:"Gemini 2.5 Pro — most capable"},{value:"gemini-2.5-flash-lite",label:"Gemini 2.5 Flash Lite — cheapest"},{value:"gemini-3-flash-preview",label:"Gemini 3 Flash — preview"},{value:"gemini-3.1-pro-preview",label:"Gemini 3.1 Pro — preview"}],openai:[{value:"gpt-4.1",label:"GPT-4.1 — recommended, 1M ctx"},{value:"gpt-4.1-mini",label:"GPT-4.1 Mini — fast, efficient"},{value:"gpt-4.1-nano",label:"GPT-4.1 Nano — cheapest"}],anthropic:[{value:"claude-sonnet-4-6",label:"Claude Sonnet 4.6 — recommended"},{value:"claude-opus-4-6",label:"Claude Opus 4.6 — most capable"},{value:"claude-haiku-4-5-20251001",label:"Claude Haiku 4.5 — fastest"}],groq:[{value:"openai/gpt-oss-120b",label:"GPT-OSS 120B — flagship, ~500 tok/s"},{value:"openai/gpt-oss-20b",label:"GPT-OSS 20B — fast, efficient"},{value:"llama-3.3-70b-versatile",label:"Llama 3.3 70B — versatile"},{value:"llama-3.1-8b-instant",label:"Llama 3.1 8B — fastest/cheapest"}],openrouter:[{value:"google/gemini-2.5-flash",label:"Gemini 2.5 Flash — best price/perf ($0.30/$2.50 /M)"},{value:"google/gemini-3-flash-preview",label:"Gemini 3 Flash — fast, 1M ctx ($0.50/$3 /M)"},{value:"google/gemini-3.1-pro-preview",label:"Gemini 3.1 Pro — frontier ($2/$12 /M)"},{value:"deepseek/deepseek-v3.2",label:"DeepSeek V3.2 — cheap output ($0.26/$0.38 /M)"},{value:"xiaomi/mimo-v2-pro",label:"MiMo V2 Pro — agentic, 1T params ($1/$3 /M)"},{value:"qwen/qwen3.6-plus",label:"Qwen 3.6 Plus — throughput leader ($0.33/$1.95 /M)"},{value:"minimax/minimax-m2.7",label:"MiniMax M2.7 — agentic ($0.30/$1.20 /M)"},{value:"x-ai/grok-4",label:"Grok 4 — reasoning, 256k ctx ($3/$15 /M)"}],freetier:[{value:"google/gemini-3-flash-preview",label:"Gemini 3 Flash — fast, 1M ctx"}]},Yk=[{value:"google",label:"Google Gemini"},{value:"openai",label:"OpenAI"},{value:"anthropic",label:"Anthropic"},{value:"groq",label:"Groq"},{value:"openrouter",label:"OpenRouter"}];function ad(e){return uR[e]??[]}function Sp(e){var t;return((t=ad(e)[0])==null?void 0:t.value)??""}const xa="inline-flex items-center justify-center gap-2 bg-primary text-on-primary px-5 py-2.5 text-sm font-label font-semibold uppercase tracking-widest rounded shadow-sm transition-all hover:bg-surface-tint hover:shadow-md active:scale-[0.98] disabled:opacity-40 disabled:pointer-events-none",cR="inline-flex items-center justify-center gap-2 border border-outline-variant text-on-surface px-5 py-2.5 text-sm font-label font-semibold uppercase tracking-widest rounded transition-all hover:bg-surface-container hover:border-outline active:scale-[0.98] disabled:opacity-40 disabled:pointer-events-none",Xk="inline-flex items-center justify-center gap-1.5 text-on-surface-variant px-2.5 py-1.5 text-xs font-label font-medium uppercase tracking-wider rounded transition-colors hover:bg-surface-container hover:text-on-surface disabled:opacity-40 disabled:pointer-events-none",dR="inline-flex items-center justify-center gap-1.5 text-error px-2.5 py-1.5 text-xs font-label font-medium uppercase tracking-wider rounded transition-colors hover:bg-error/10 disabled:opacity-40 disabled:pointer-events-none",Eu="w-full bg-surface-container-lowest text-on-surface placeholder:text-on-surface-variant border border-outline-variant rounded-lg px-3 py-2 text-sm focus:outline-none focus:border-primary focus:ring-2 focus:ring-primary/20 transition-colors",Iy=Eu.replace("text-sm","text-sm font-mono"),Ja="bg-surface-container-lowest border border-outline-variant/40 rounded-xl shadow-callout",zs="inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-label font-medium uppercase tracking-wider",Cp=`${zs} bg-surface-container border border-outline-variant/40 text-on-surface-variant`,Jk=`${zs} bg-success/10 border border-success/20 text-success`,hR=`${zs} bg-warning/10 border border-warning/20 text-warning`;function fR({agent:e,onDelete:t}){const n=Qi(),{t:r}=Se(),i=e.status==="active",s=e.busy===!0;return f.jsxs("div",{onClick:()=>n(`/agents/${e.id}/chat`),className:"group flex items-center gap-4 rounded-xl bg-surface-container-lowest border border-outline-variant/40 p-4 cursor-pointer transition-all hover:border-primary/40 hover:shadow-callout",children:[f.jsxs("div",{className:"flex-1 min-w-0",children:[f.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[f.jsx("span",{className:"font-headline text-lg font-bold text-on-surface",children:e.name}),s?f.jsxs("span",{"data-testid":"busy-badge",className:"inline-flex items-center gap-1 rounded-full bg-secondary/15 border border-secondary/30 px-2 py-0.5 text-[10px] font-label font-semibold uppercase tracking-wider text-secondary",children:[f.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-secondary animate-pulse"}),"busy"]}):f.jsx("span",{className:i?Jk:Cp,children:e.status})]}),f.jsxs("div",{className:"flex items-center gap-3 mt-1",children:[f.jsx("span",{className:"font-mono text-[10px] text-primary/70",children:e.model}),f.jsxs("span",{className:"font-mono text-[10px] text-on-surface-variant/60 hidden sm:inline",children:["id: ",e.id]})]})]}),f.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[f.jsx("div",{className:"hidden sm:flex flex-wrap gap-1",children:e.allowedTools.slice(0,3).map(o=>f.jsx("span",{className:"font-mono text-[9px] text-on-surface-variant bg-surface-container rounded px-1.5 py-0.5",children:o},o))}),f.jsx("button",{onClick:o=>{o.stopPropagation(),t()},className:`${dR} sm:opacity-0 sm:group-hover:opacity-100`,children:r("dashboard.delete")})]})]})}function pR(){const{t:e}=Se(),[t,n]=N.useState([]),[r,i]=N.useState(!0),[s,o]=N.useState(null),[a,l]=N.useState({showWorkspaceDirConfig:!0,showBraveSearchConfig:!0}),[u,c]=N.useState(!1),[d,h]=N.useState(""),[p,g]=N.useState(""),[m,y]=N.useState(""),[x,v]=N.useState(""),[b,S]=N.useState(""),[k,w]=N.useState(!1),[E,P]=N.useState(!1),[T,C]=N.useState(null),M=N.useRef(null);async function R(_){var W,j;const V=(W=_.target.files)==null?void 0:W[0];if(V){P(!0),C(null);try{let te;try{te=await Ry(V)}catch(le){const ie=le instanceof Error?le.message:String(le);if(ie.includes("already exists")){const H=(j=prompt(`${ie}
|
|
90
|
+
Esta acción no se puede deshacer.`,guardian:"Guardián",comingSoon:"Próximamente",guardianBlurb1:"Configura un agente guardián para controlar lo que puede hacer tu agente principal.",guardianBlurb2:"Define restricciones, bloquea acciones y exige aprobación antes de operaciones sensibles.",guardianChatBlurb:"Chat del guardián.<br />Configura restricciones aquí.",guardianDisconnected:"○ desconectado"},fM={sessionExpiredLabel:"toma de control",sessionExpired:"Sesión expirada",sessionExpiredBlurb:"Este enlace de toma de control ya fue usado o expiró.",completeLabel:"completo",controlReturned:"Control devuelto al agente",closeTab:"Puedes cerrar esta pestaña.",connecting:"conectando…",agentNeedsHelp:"El agente necesita tu ayuda",liveLabel:"en vivo",waitingStream:"esperando transmisión del navegador…",whatDidYouDo:"¿Qué hiciste?",optional:"(opcional)",describeActionPlaceholder:"Describe tu acción para el agente…",returning:"Devolviendo…",completed:"Completado"},pM={columns:{backlog:"PENDIENTE",inProgress:"EN PROGRESO",scheduled:"PROGRAMADO",toReview:"EN REVISIÓN",done:"COMPLETADO"},statusLabels:{backlog:"Pendiente",inProgress:"En progreso",scheduled:"Programado",toReview:"En revisión",done:"Completado"},editedBy:"editado por {name}",relativeNow:"ahora",relativeMinutes:"hace {n}m",relativeHours:"hace {n}h",relativeDays:"hace {n}d",titlePlaceholder:"Título de tarea…",descPlaceholder:"Descripción (markdown)…",add:"Agregar",cancel:"Cancelar"},gM={saving:"guardando…",close:"Cerrar",status:"Estado",sourceLabel:"fuente",editedByLabel:"editado por",created:"creado",updated:"actualizado",description:"Descripción",descPlaceholder:"Agregar una descripción…",save:"Guardar",cancel:"Cancelar",descEmpty:"Sin descripción — clic para agregar",commentsLabel:"Comentarios ({count})",noComments:"Sin comentarios aún",addComment:"Agregar comentario",commentPlaceholder:"Escribe un comentario… (markdown soportado)",publishComment:"Publicar comentario",publishing:"Publicando…",dangerZone:"Zona peligrosa",deleteTask:"[PELIGROSO] Eliminar tarea",deleting:"eliminando…",deleteConfirm:'¿Eliminar tarea "{title}"? Esta acción no se puede deshacer.'},mM={backToRuns:"← Volver a ejecuciones",loading:"Cargando…",waitingResponse:"Esperando respuesta…",triggering:"Iniciando…",runNow:"Ejecutar ahora",runHistory:"Historial de ejecuciones",noRuns:"Sin ejecuciones aún.",loadingList:"Cargando programados…",emptyIcon:"⏰",emptyText:"Sin programados aún. Pídele al agente que configure tareas recurrentes.",title:"Programados",activeCountOne:"{count} activo",activeCountOther:"{count} activos",next:"Próximo: {time}",last:"Último: {time}",pause:"Pausar",resume:"Reanudar",delete:"Eliminar",deleteConfirm:'¿Eliminar programado "{name}"?'},xM={title:"Flujos de trabajo",emptyText:"Sin flujos de trabajo aún. Pídele al agente que cree uno via chat.",running:"Ejecutando…",run:"Ejecutar",createdOn:"{id} · Creado {date}",back:"← Volver a flujos",run_button:"Ejecutar",stepsTitle:"Pasos ({count})",conditionsOne:"{count} condición",conditionsOther:"{count} condiciones",stepType:"Tipo: {type}",stepTimeout:"Límite de tiempo: {seconds}s",stepId:"ID: {id}",runHistoryTitle:"Historial de ejecuciones ({count})",noRuns:"Sin ejecuciones aún."},vM={loading:"Cargando ejecución…",back:"← Volver al flujo",runLabel:"Ejecución —",errorPrefix:"Error:",input:"Entrada",output:"Salida"},yM={loading:"Cargando monitor…",title:"Monitor",idle:"inactivo",claudeSessionsOne:"{count} sesión claude",claudeSessionsOther:"{count} sesiones claude",processes:"Procesos",agentProcess:"Proceso del Agente",guardianProcess:"Guardián (Big Brother)",browserDaemon:"Demonio de Navegador",activeClaudeSessions:"Sesiones Claude Activas — {count}",jobQueue:"Cola de trabajos — {processing} en proceso, {pending} en espera",noActiveJobs:"Sin trabajos activos",processing:"procesando",queued:"en cola",terminate:"Terminar",cancel:"Cancelar",runningWorkflows:"Flujos de trabajo en ejecución",cpu:"CPU",mem:"MEM",rss:"RSS",uptime:"Tiempo activo"},bM={title:"Integraciones",blurb:"Conecta servicios externos. Cada integración almacena un token como secreto y se activa automáticamente.",moreSoon:"Más integraciones próximamente. Para otras claves API y credenciales, usa la sección de Secretos en la barra lateral.",connected:"Conectado",disconnect:"Desconectar",connect:"Conectar",saveAndConnect:"Guardar y conectar",saving:"Guardando…",cancel:"Cancelar",newPrefix:"Nuevo {label}",pasteNewToken:"Pega el nuevo token",updateToken:"Actualizar token",rotateToken:"Rotar token",errorSave:"Error al guardar — revisa la consola",disconnectConfirm:"¿Desconectar {name}? El agente dejará de usarlo inmediatamente.",telegramDescription:"Recibe y responde mensajes a través de un bot de Telegram.",telegramHelp:"Crea un bot mediante @BotFather en Telegram, luego pega el token aquí.",telegramTokenLabel:"Token del bot"},_M={loading:"Escaneando sesiones…",title:"Uso",totalTokens:"Tokens totales",cachedSuffix:"{amount} en caché",sessions:"Sesiones",modelsCount:"{count} modelos",estCost:"Costo est.",periodDays:"Período de {days} días",avgDay:"Prom/Día",sessionsPerDay:"{count} sesiones/día",dailyTokenUsage:"Uso diario de tokens",noUsageData:"Sin datos de uso",dailyCost:"Costo estimado diario",noCostData:"Sin datos de costo",byModel:"Por modelo",modelSessionsBlurb:"{sessions} sesiones · {input} entrada · {output} salida",tokenBreakdown:"Desglose de tokens",inputTokens:"Tokens de entrada",outputTokens:"Tokens de salida",cacheRead:"Lectura de caché",cacheWrite:"Escritura de caché",toolInvocations:"Invocaciones de herramientas",dailyBreakdown:"Desglose diario",date:"Fecha",tableSessions:"Sesiones",tableInput:"Entrada",tableOutput:"Salida",tableCache:"Caché",tableCost:"Costo"},wM={searchPlaceholder:"Buscar registros…",apply:"Aplicar",live:"En vivo",loading:"cargando…",noResults:'sin resultados para "{query}"',noEntries:"sin entradas de registro",loadOlder:"Cargar {count} entradas anteriores…"},kM={views:{chat:"Chat",tasks:"Tareas",browser:"Navegador",files:"Archivos",workflows:"Flujos de trabajo",schedules:"Programados",monitor:"Monitor",usage:"Uso",logs:"Registros",integrations:"Integraciones",guardian:"Guardián"},comingSoon:"Pronto",secrets:"Secretos",noSecrets:"Sin secretos configurados",updating:"Actualizando {name}",newValue:"nuevo valor",save:"Guardar",secretNamePlaceholder:"NOMBRE",secretValuePlaceholder:"valor",guardrails:"Restricciones",guardrailsBlurb:"Configurado via chat guardián",exportAgent:"📦 Exportar agente",exportTitle:"Descargar una copia de seguridad completa del espacio de trabajo del agente como zip",wipeAgent:"🗑 Borrar agente",wiping:"borrando…"},SM={workspace:"espacio-de-trabajo",savingLabel:"guardando…",saveButton:"Guardar",emptyDir:"Directorio vacío"},CM={common:lM,shell:uM,dashboard:cM,settings:dM,chat:hM,takeover:fM,tasks:pM,taskDetail:gM,schedules:mM,workflows:xM,runDetail:vM,monitor:yM,integrations:bM,usage:_M,logs:wM,agentSettings:kM,files:SM},Ey={en:aM,es:CM},Hk="granclaw:lang";function EM(){if(typeof window>"u")return"en";try{const t=window.localStorage.getItem(Hk);if(t==="en"||t==="es")return t}catch{}return(typeof navigator<"u"?navigator.language:"").toLowerCase().startsWith("es")?"es":"en"}function Py(e,t){const n=t.split(".");let r=e;for(const i of n)if(r&&typeof r=="object"&&i in r)r=r[i];else return;return typeof r=="string"?r:void 0}function PM(e,t){return t?e.replace(/\{(\w+)\}/g,(n,r)=>{const i=t[r];return i==null?`{${r}}`:String(i)}):e}const Wk=N.createContext(null);function NM({children:e}){const[t,n]=N.useState(()=>EM()),r=N.useCallback(o=>{n(o);try{window.localStorage.setItem(Hk,o)}catch{}},[]);N.useEffect(()=>{try{document.documentElement.lang=t}catch{}},[t]);const i=N.useCallback((o,a)=>{const l=Ey[t],u=Py(l,o)??Py(Ey.en,o)??o;return PM(u,a)},[t]),s=N.useMemo(()=>({lang:t,setLang:r,t:i}),[t,r,i]);return f.jsx(Wk.Provider,{value:s,children:e})}function Se(){const e=N.useContext(Wk);if(!e)throw new Error("useT must be used inside <LanguageProvider>");return e}function jM({className:e}){const{lang:t,setLang:n}=Se();return f.jsx("div",{className:`flex items-center gap-0.5 rounded-full bg-surface-container/40 p-[2px] ${e??""}`,children:["en","es"].map(r=>f.jsx("button",{onClick:()=>n(r),className:`px-2 py-[2px] rounded-full text-[10px] font-mono uppercase tracking-wider transition-colors ${t===r?"bg-primary/30 text-primary":"text-on-surface-variant/70 hover:text-on-surface"}`,"aria-pressed":t===r,children:r},r))})}function TM(){const e=Ji(),t=Qi(),n=e.pathname.includes("/chat"),{t:r}=Se();return f.jsxs("div",{className:"flex h-screen flex-col overflow-hidden bg-surface",children:[f.jsxs("header",{className:"flex h-11 flex-shrink-0 items-center justify-between border-b border-outline-variant/20 bg-surface-low px-3 sm:px-5",children:[f.jsxs("button",{onClick:()=>t("/dashboard"),className:"flex items-center gap-2 hover:opacity-80 transition-opacity min-w-0",children:[f.jsx("img",{src:"/granclaw-logo.png",alt:"GranClaw",className:"h-6 w-6 rounded flex-shrink-0"}),f.jsx("span",{className:"font-display font-semibold text-on-surface tracking-tight truncate",children:"GranClaw"}),f.jsxs("span",{className:"text-xs font-mono text-on-surface/60 flex-shrink-0",children:["v","0.0.1-beta.55"]})]}),f.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[f.jsx(jM,{}),f.jsxs("span",{className:"flex items-center gap-1.5 rounded-full bg-secondary-container/20 px-2 sm:px-3 py-1 text-xs font-mono text-secondary flex-shrink-0",children:[f.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-secondary animate-pulse flex-shrink-0"}),f.jsx("span",{className:"hidden sm:inline",children:r("shell.systemPrefix")}),r("shell.onlineSuffix")]})]})]}),f.jsx("main",{className:`flex-1 overflow-auto min-w-0 ${n?"":"p-3 sm:p-5"}`,children:f.jsx(NN,{})})]})}const oe="";async function Ny(){const e=await fetch(`${oe}/agents`);if(!e.ok)throw new Error(`fetchAgents: ${e.status}`);return e.json()}async function MM(e,t,n,r,i){const s=await fetch(`${oe}/agents`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e,name:t,model:n,provider:r,...i?{workspaceDir:i}:{}})});if(!s.ok){const o=await s.json().catch(()=>({error:s.statusText}));throw new Error(o.error)}}async function RM(e){const t=await fetch(`${oe}/agents/${e}`,{method:"DELETE"});if(!t.ok)throw new Error(`deleteAgent: ${t.status}`)}async function jy(e){const t=await fetch(`${oe}/agents/${e}`);if(!t.ok)throw new Error(`fetchAgent: ${t.status}`);return t.json()}async function Ty(e,t="ui"){const n=await fetch(`${oe}/agents/${e}/messages?channelId=${t}&sortBy=asc&limit=200`);if(!n.ok)throw new Error(`fetchMessages: ${n.status}`);return n.json()}async function DM(e){const t=await fetch(`${oe}/agents/${e}/reset`,{method:"DELETE"});if(!t.ok)throw new Error(`resetAgent: ${t.status}`)}async function AM(e,t=""){const n=await fetch(`${oe}/agents/${e}/files?path=${encodeURIComponent(t)}`);if(!n.ok)throw new Error(`fetchFiles: ${n.status}`);return(await n.json()).entries}async function IM(e,t){const n=await fetch(`${oe}/agents/${e}/files/read?path=${encodeURIComponent(t)}`);if(!n.ok)throw new Error(`readFile: ${n.status}`);return(await n.json()).content}async function OM(e,t,n){const r=await fetch(`${oe}/agents/${e}/files/write?path=${encodeURIComponent(t)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:n})});if(!r.ok)throw new Error(`writeFile: ${r.status}`)}async function LM(e){const t=await fetch(`${oe}/agents/${e}/secrets`);if(!t.ok)throw new Error(`fetchSecrets: ${t.status}`);return t.json()}async function kp(e,t,n){const r=await fetch(`${oe}/agents/${e}/secrets`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t,value:n})});if(!r.ok)throw new Error(`addSecret: ${r.status}`)}async function Uk(e,t){const n=await fetch(`${oe}/agents/${e}/secrets/${encodeURIComponent(t)}`,{method:"DELETE"});if(!n.ok)throw new Error(`deleteSecret: ${n.status}`)}async function FM(e,t){const r=await fetch(`${oe}/agents/${e}/tasks`);if(!r.ok)throw new Error(`fetchTasks: ${r.status}`);return r.json()}async function $M(e,t){const n=await fetch(`${oe}/agents/${e}/tasks/${t}`);if(!n.ok)throw new Error(`fetchTask: ${n.status}`);return n.json()}async function zM(e,t){const n=await fetch(`${oe}/agents/${e}/tasks`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok)throw new Error(`createTask: ${n.status}`);return n.json()}async function My(e,t,n){const r=await fetch(`${oe}/agents/${e}/tasks/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!r.ok)throw new Error(`updateTask: ${r.status}`);return r.json()}async function BM(e,t){const n=await fetch(`${oe}/agents/${e}/tasks/${t}`,{method:"DELETE"});if(!n.ok)throw new Error(`deleteTask: ${n.status}`)}async function HM(e,t,n){const r=await fetch(`${oe}/agents/${e}/tasks/${t}/comments`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({body:n})});if(!r.ok)throw new Error(`addTaskComment: ${r.status}`);return r.json()}async function WM(e){const t=await fetch(`${oe}/agents/${e}/browser-sessions`);if(!t.ok)throw new Error(`fetchBrowserSessions: ${t.status}`);return t.json()}async function Vk(e,t){const n=await fetch(`${oe}/agents/${e}/browser-sessions/${t}`);if(!n.ok)throw new Error(`fetchBrowserSession: ${n.status}`);return n.json()}function UM(e,t){return`${oe}/agents/${e}/browser-sessions/${t}/video`}function qk(e,t){const n=window.location;return`${n.protocol==="https:"?"wss:":"ws:"}//${n.host}/browser-live/${e}/${t}`}function VM(e){return`${oe}/agents/${e}/export`}async function Ry(e,t){const n=new URL(`${oe}/agents/import`,window.location.origin);t!=null&&t.id&&n.searchParams.set("id",t.id);const r=await fetch(n.toString().replace(window.location.origin,""),{method:"POST",headers:{"Content-Type":"application/zip"},body:e});if(!r.ok){const i=await r.json().catch(()=>({error:r.statusText}));throw new Error(i.error)}return r.json()}async function Dy(e,t){const n=await fetch(`${oe}/agents/${e}/monitor/jobs/${t}`,{method:"DELETE"});if(!n.ok)throw new Error(`killJob: ${n.status}`)}async function qM(e){const t=await fetch(`${oe}/agents/${e}/monitor`);if(!t.ok)throw new Error(`fetchMonitor: ${t.status}`);return t.json()}async function GM(e,t=30){const n=await fetch(`${oe}/agents/${e}/usage?days=${t}`);if(!n.ok)throw new Error(`fetchUsage: ${n.status}`);return n.json()}async function KM(e){const t=await fetch(`${oe}/agents/${e}/schedules`);if(!t.ok)throw new Error(`fetchSchedules: ${t.status}`);return t.json()}async function YM(e,t,n){const r=await fetch(`${oe}/agents/${e}/schedules/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!r.ok)throw new Error(`updateSchedule: ${r.status}`);return r.json()}async function XM(e,t){const n=await fetch(`${oe}/agents/${e}/schedules/${t}`,{method:"DELETE"});if(!n.ok)throw new Error(`deleteSchedule: ${n.status}`)}async function JM(e,t){const n=await fetch(`${oe}/agents/${e}/schedules/${t}/trigger`,{method:"POST"});if(!n.ok)throw new Error(`triggerSchedule: ${n.status}`);return n.json()}async function QM(e,t){const n=await fetch(`${oe}/agents/${e}/schedules/${t}/runs`);if(!n.ok)throw new Error(`fetchScheduleRuns: ${n.status}`);return n.json()}async function ZM(e,t){const n=await fetch(`${oe}/agents/${e}/messages?channelId=${encodeURIComponent(t)}&sortBy=asc&limit=200`);if(!n.ok)throw new Error(`fetchScheduleRunMessages: ${n.status}`);return n.json()}async function eR(e){const t=await fetch(`${oe}/agents/${e}/workflows`);if(!t.ok)throw new Error(`fetchWorkflows: ${t.status}`);return t.json()}async function tR(e,t){const n=await fetch(`${oe}/agents/${e}/workflows/${t}`);if(!n.ok)throw new Error(`fetchWorkflow: ${n.status}`);return n.json()}async function mh(e,t){const n=await fetch(`${oe}/agents/${e}/workflows/${t}/runs`);if(!n.ok)throw new Error(`fetchWorkflowRuns: ${n.status}`);return n.json()}async function nR(e,t,n){const r=await fetch(`${oe}/agents/${e}/workflows/${t}/runs/${n}`);if(!r.ok)throw new Error(`fetchWorkflowRun: ${r.status}`);return r.json()}async function rR(e,t){const n=await fetch(`${oe}/agents/${e}/workflows/${t}/run`,{method:"POST"});if(!n.ok)throw new Error(`triggerWorkflowRun: ${n.status}`);return n.json()}async function iR(e){const t=new URLSearchParams;e!=null&&e.agentId&&t.set("agentId",e.agentId),e!=null&&e.type&&t.set("type",e.type),e!=null&&e.search&&t.set("search",e.search),(e==null?void 0:e.limit)!=null&&t.set("limit",String(e.limit)),(e==null?void 0:e.offset)!=null&&t.set("offset",String(e.offset));const n=await fetch(`${oe}/logs?${t}`);if(!n.ok)throw new Error(`fetchLogs: ${n.status}`);return n.json()}async function Gk(){const e=await fetch(`${oe}/settings/provider`);if(!e.ok)throw new Error("Failed to fetch provider settings");return e.json()}async function Kk(){try{const e=await fetch(`${oe}/settings/app`);return e.ok?e.json():{showWorkspaceDirConfig:!0,showBraveSearchConfig:!0}}catch{return{showWorkspaceDirConfig:!0,showBraveSearchConfig:!0}}}async function Ay(e,t,n){if(!(await fetch(`${oe}/settings/provider`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:e,model:t,apiKey:n})})).ok)throw new Error("Failed to save provider settings")}async function sR(e){if(!(await fetch(`${oe}/settings/providers/${encodeURIComponent(e)}`,{method:"DELETE"})).ok)throw new Error("Failed to remove provider")}async function oR(){const e=await fetch(`${oe}/settings/search`);return e.ok?e.json():{provider:"brave",configured:!1}}async function aR(e,t){const n=await fetch(`${oe}/settings/search`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:t})});if(!n.ok)throw new Error(`Failed to save search settings: ${n.status}`)}async function lR(){const e=await fetch(`${oe}/settings/search`,{method:"DELETE"});if(!e.ok&&e.status!==204&&e.status!==404)throw new Error(`Failed to clear search settings: ${e.status}`)}const uR={google:[{value:"gemini-2.5-flash",label:"Gemini 2.5 Flash — fast + smart (recommended)"},{value:"gemini-2.5-pro",label:"Gemini 2.5 Pro — most capable"},{value:"gemini-2.5-flash-lite",label:"Gemini 2.5 Flash Lite — cheapest"},{value:"gemini-3-flash-preview",label:"Gemini 3 Flash — preview"},{value:"gemini-3.1-pro-preview",label:"Gemini 3.1 Pro — preview"}],openai:[{value:"gpt-4.1",label:"GPT-4.1 — recommended, 1M ctx"},{value:"gpt-4.1-mini",label:"GPT-4.1 Mini — fast, efficient"},{value:"gpt-4.1-nano",label:"GPT-4.1 Nano — cheapest"}],anthropic:[{value:"claude-sonnet-4-6",label:"Claude Sonnet 4.6 — recommended"},{value:"claude-opus-4-6",label:"Claude Opus 4.6 — most capable"},{value:"claude-haiku-4-5-20251001",label:"Claude Haiku 4.5 — fastest"}],groq:[{value:"openai/gpt-oss-120b",label:"GPT-OSS 120B — flagship, ~500 tok/s"},{value:"openai/gpt-oss-20b",label:"GPT-OSS 20B — fast, efficient"},{value:"llama-3.3-70b-versatile",label:"Llama 3.3 70B — versatile"},{value:"llama-3.1-8b-instant",label:"Llama 3.1 8B — fastest/cheapest"}],openrouter:[{value:"google/gemini-2.5-flash",label:"Gemini 2.5 Flash — best price/perf ($0.30/$2.50 /M)"},{value:"google/gemini-3-flash-preview",label:"Gemini 3 Flash — fast, 1M ctx ($0.50/$3 /M)"},{value:"google/gemini-3.1-pro-preview",label:"Gemini 3.1 Pro — frontier ($2/$12 /M)"},{value:"deepseek/deepseek-v3.2",label:"DeepSeek V3.2 — cheap output ($0.26/$0.38 /M)"},{value:"xiaomi/mimo-v2-pro",label:"MiMo V2 Pro — agentic, 1T params ($1/$3 /M)"},{value:"qwen/qwen3.6-plus",label:"Qwen 3.6 Plus — throughput leader ($0.33/$1.95 /M)"},{value:"minimax/minimax-m2.7",label:"MiniMax M2.7 — agentic ($0.30/$1.20 /M)"},{value:"x-ai/grok-4",label:"Grok 4 — reasoning, 256k ctx ($3/$15 /M)"}],freetier:[{value:"google/gemini-3-flash-preview",label:"Gemini 3 Flash — fast, 1M ctx"}]},Yk=[{value:"google",label:"Google Gemini"},{value:"openai",label:"OpenAI"},{value:"anthropic",label:"Anthropic"},{value:"groq",label:"Groq"},{value:"openrouter",label:"OpenRouter"}];function ad(e){return uR[e]??[]}function Sp(e){var t;return((t=ad(e)[0])==null?void 0:t.value)??""}const xa="inline-flex items-center justify-center gap-2 bg-primary text-on-primary px-5 py-2.5 text-sm font-label font-semibold uppercase tracking-widest rounded shadow-sm transition-all hover:bg-surface-tint hover:shadow-md active:scale-[0.98] disabled:opacity-40 disabled:pointer-events-none",cR="inline-flex items-center justify-center gap-2 border border-outline-variant text-on-surface px-5 py-2.5 text-sm font-label font-semibold uppercase tracking-widest rounded transition-all hover:bg-surface-container hover:border-outline active:scale-[0.98] disabled:opacity-40 disabled:pointer-events-none",Xk="inline-flex items-center justify-center gap-1.5 text-on-surface-variant px-2.5 py-1.5 text-xs font-label font-medium uppercase tracking-wider rounded transition-colors hover:bg-surface-container hover:text-on-surface disabled:opacity-40 disabled:pointer-events-none",dR="inline-flex items-center justify-center gap-1.5 text-error px-2.5 py-1.5 text-xs font-label font-medium uppercase tracking-wider rounded transition-colors hover:bg-error/10 disabled:opacity-40 disabled:pointer-events-none",Eu="w-full bg-surface-container-lowest text-on-surface placeholder:text-on-surface-variant border border-outline-variant rounded-lg px-3 py-2 text-sm focus:outline-none focus:border-primary focus:ring-2 focus:ring-primary/20 transition-colors",Iy=Eu.replace("text-sm","text-sm font-mono"),Ja="bg-surface-container-lowest border border-outline-variant/40 rounded-xl shadow-callout",zs="inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-label font-medium uppercase tracking-wider",Cp=`${zs} bg-surface-container border border-outline-variant/40 text-on-surface-variant`,Jk=`${zs} bg-success/10 border border-success/20 text-success`,hR=`${zs} bg-warning/10 border border-warning/20 text-warning`;function fR({agent:e,onDelete:t}){const n=Qi(),{t:r}=Se(),i=e.status==="active",s=e.busy===!0;return f.jsxs("div",{onClick:()=>n(`/agents/${e.id}/chat`),className:"group flex items-center gap-4 rounded-xl bg-surface-container-lowest border border-outline-variant/40 p-4 cursor-pointer transition-all hover:border-primary/40 hover:shadow-callout",children:[f.jsxs("div",{className:"flex-1 min-w-0",children:[f.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[f.jsx("span",{className:"font-headline text-lg font-bold text-on-surface",children:e.name}),s?f.jsxs("span",{"data-testid":"busy-badge",className:"inline-flex items-center gap-1 rounded-full bg-secondary/15 border border-secondary/30 px-2 py-0.5 text-[10px] font-label font-semibold uppercase tracking-wider text-secondary",children:[f.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-secondary animate-pulse"}),"busy"]}):f.jsx("span",{className:i?Jk:Cp,children:e.status})]}),f.jsxs("div",{className:"flex items-center gap-3 mt-1",children:[f.jsx("span",{className:"font-mono text-[10px] text-primary/70",children:e.model}),f.jsxs("span",{className:"font-mono text-[10px] text-on-surface-variant/60 hidden sm:inline",children:["id: ",e.id]})]})]}),f.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[f.jsx("div",{className:"hidden sm:flex flex-wrap gap-1",children:e.allowedTools.slice(0,3).map(o=>f.jsx("span",{className:"font-mono text-[9px] text-on-surface-variant bg-surface-container rounded px-1.5 py-0.5",children:o},o))}),f.jsx("button",{onClick:o=>{o.stopPropagation(),t()},className:`${dR} sm:opacity-0 sm:group-hover:opacity-100`,children:r("dashboard.delete")})]})]})}function pR(){const{t:e}=Se(),[t,n]=N.useState([]),[r,i]=N.useState(!0),[s,o]=N.useState(null),[a,l]=N.useState({showWorkspaceDirConfig:!0,showBraveSearchConfig:!0}),[u,c]=N.useState(!1),[d,h]=N.useState(""),[p,g]=N.useState(""),[m,y]=N.useState(""),[x,v]=N.useState(""),[b,S]=N.useState(""),[k,w]=N.useState(!1),[E,P]=N.useState(!1),[T,C]=N.useState(null),M=N.useRef(null);async function R(_){var W,j;const V=(W=_.target.files)==null?void 0:W[0];if(V){P(!0),C(null);try{let te;try{te=await Ry(V)}catch(le){const ie=le instanceof Error?le.message:String(le);if(ie.includes("already exists")){const H=(j=prompt(`${ie}
|
|
91
91
|
|
|
92
92
|
Enter a new id for the imported agent:`,""))==null?void 0:j.trim();if(!H){P(!1);return}te=await Ry(V,{id:H})}else throw le}await L(),U(`/agents/${te.id}/chat`)}catch(te){C(te instanceof Error?te.message:e("dashboard.importFailed"))}finally{P(!1),M.current&&(M.current.value="")}}}const L=()=>{Promise.all([Ny(),Gk(),Kk()]).then(([_,V,W])=>{var j;if(n(_),o(V),l(W),!m){const te=(j=V.providers)==null?void 0:j[0];te&&(y(te.provider),v(te.model))}}).catch(console.error).finally(()=>i(!1))};N.useEffect(()=>{L();const _=setInterval(()=>{Ny().then(n).catch(()=>{})},2e3);return()=>clearInterval(_)},[]);const U=Qi(),O=(s==null?void 0:s.providers)??[],J=m?ad(m):[];function Q(_){y(_),v(Sp(_))}async function A(){if(!(!d.trim()||!p.trim())){w(!0),C(null);try{const _=d.trim();await MM(_,p.trim(),x,m||void 0,b.trim()||void 0),U(`/agents/${_}/chat`)}catch(_){C(_ instanceof Error?_.message:e("common.errorCreate")),w(!1)}}}async function F(_,V){confirm(e("dashboard.deleteConfirm",{name:V,id:_}))&&(await RM(_),L())}return r?f.jsx("div",{className:"font-mono text-xs text-on-surface-variant p-8",children:e("dashboard.loadingAgents")}):s&&!s.configured&&t.length===0?f.jsx("div",{className:"max-w-3xl mx-auto py-16 px-4",children:f.jsxs("div",{className:"text-center",children:[f.jsxs("h1",{className:"font-headline text-4xl font-bold text-on-surface mb-4",children:[e("dashboard.getStartedWith")," ",f.jsx("span",{className:"highlight-marker",children:"GranClaw"})]}),f.jsx("p",{className:"font-mono text-xs text-on-surface-variant mb-8",children:e("dashboard.configureProviderBlurb")}),f.jsx(hv,{to:"/settings",className:xa,children:e("dashboard.configureProvider")})]})}):f.jsxs("div",{className:"max-w-4xl mx-auto py-6 sm:py-8 px-4",children:[s&&!s.configured&&f.jsxs("div",{className:"rounded-xl bg-warning/10 border border-warning/30 px-4 py-3 mb-6 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2",children:[f.jsx("p",{className:"font-mono text-[11px] text-warning",children:e("dashboard.noProviderWarning")}),f.jsx(hv,{to:"/settings",className:"font-label text-[11px] font-semibold uppercase tracking-widest text-primary hover:text-surface-tint flex-shrink-0",children:e("dashboard.configureArrow")})]}),f.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-start sm:justify-between gap-4 mb-6 sm:mb-8",children:[f.jsxs("div",{children:[f.jsx("h1",{className:"font-headline text-3xl sm:text-4xl font-bold text-on-surface",children:e("dashboard.title")}),f.jsx("p",{className:"font-mono text-[11px] text-on-surface-variant mt-1",children:e(t.length===1?"dashboard.agentsCountOne":"dashboard.agentsCountOther",{count:t.length})})]}),f.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[f.jsx("input",{ref:M,type:"file",accept:".zip,application/zip",onChange:R,className:"hidden"}),f.jsx("button",{onClick:()=>{var _;return(_=M.current)==null?void 0:_.click()},disabled:E||!(s!=null&&s.configured),className:cR,title:e("dashboard.importTitle"),children:e(E?"dashboard.importing":"dashboard.import")}),f.jsx("button",{onClick:()=>c(_=>!_),disabled:!(s!=null&&s.configured),className:xa,children:e(u?"dashboard.cancel":"dashboard.newAgent")})]})]}),u&&f.jsxs("div",{className:`${Ja} p-5 mb-6 space-y-3`,children:[f.jsx("p",{className:"font-label text-[10px] font-semibold uppercase tracking-widest text-on-surface-variant",children:e("dashboard.createNewAgent")}),f.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:[f.jsx("input",{className:Iy,placeholder:e("dashboard.agentIdPlaceholder"),value:d,onChange:_=>h(_.target.value.toLowerCase().replace(/[^a-z0-9-]/g,""))}),f.jsx("input",{className:Eu,placeholder:e("dashboard.displayNamePlaceholder"),value:p,onChange:_=>g(_.target.value)})]}),f.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:[f.jsx("select",{className:`${Eu} appearance-none`,value:m,onChange:_=>Q(_.target.value),children:O.map(_=>f.jsx("option",{value:_.provider,children:_.label??_.provider},_.provider))}),f.jsx("select",{className:`${Eu} appearance-none`,value:x,onChange:_=>v(_.target.value),children:J.map(_=>f.jsx("option",{value:_.value,children:_.label},_.value))})]}),a.showWorkspaceDirConfig&&f.jsx("input",{className:Iy,placeholder:e("dashboard.workspacePlaceholder",{id:d||e("dashboard.workspacePlaceholderDefault")}),value:b,onChange:_=>S(_.target.value)}),f.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[f.jsx("button",{onClick:A,disabled:k||!d.trim()||!p.trim()||!x,className:xa,children:e(k?"dashboard.creating":"dashboard.create")}),T&&f.jsx("span",{className:"font-mono text-[10px] text-error",children:T})]})]}),f.jsx("div",{className:"space-y-3",children:t.length===0?f.jsxs("div",{className:"text-center py-16",children:[f.jsx("span",{className:"text-3xl opacity-30",children:"🤖"}),f.jsx("p",{className:"font-mono text-[11px] text-on-surface-variant mt-3",children:e("dashboard.noAgents")})]}):t.map(_=>f.jsx(fR,{agent:_,onDelete:()=>F(_.id,_.name)},_.id))})]})}function gR(e,t){const n={};return(e[e.length-1]===""?[...e,""]:e).join((n.padRight?" ":"")+","+(n.padLeft===!1?"":" ")).trim()}const mR=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,xR=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,vR={};function Oy(e,t){return(vR.jsx?xR:mR).test(e)}const yR=/[ \t\n\f\r]/g;function bR(e){return typeof e=="object"?e.type==="text"?Ly(e.value):!1:Ly(e)}function Ly(e){return e.replace(yR,"")===""}class fl{constructor(t,n,r){this.normal=n,this.property=t,r&&(this.space=r)}}fl.prototype.normal={};fl.prototype.property={};fl.prototype.space=void 0;function Qk(e,t){const n={},r={};for(const i of e)Object.assign(n,i.property),Object.assign(r,i.normal);return new fl(n,r,t)}function Ep(e){return e.toLowerCase()}class Yt{constructor(t,n){this.attribute=n,this.property=t}}Yt.prototype.attribute="";Yt.prototype.booleanish=!1;Yt.prototype.boolean=!1;Yt.prototype.commaOrSpaceSeparated=!1;Yt.prototype.commaSeparated=!1;Yt.prototype.defined=!1;Yt.prototype.mustUseProperty=!1;Yt.prototype.number=!1;Yt.prototype.overloadedBoolean=!1;Yt.prototype.property="";Yt.prototype.spaceSeparated=!1;Yt.prototype.space=void 0;let _R=0;const ce=Zi(),et=Zi(),Pp=Zi(),B=Zi(),Me=Zi(),Bs=Zi(),Qt=Zi();function Zi(){return 2**++_R}const Np=Object.freeze(Object.defineProperty({__proto__:null,boolean:ce,booleanish:et,commaOrSpaceSeparated:Qt,commaSeparated:Bs,number:B,overloadedBoolean:Pp,spaceSeparated:Me},Symbol.toStringTag,{value:"Module"})),xh=Object.keys(Np);class fm extends Yt{constructor(t,n,r,i){let s=-1;if(super(t,n),Fy(this,"space",i),typeof r=="number")for(;++s<xh.length;){const o=xh[s];Fy(this,xh[s],(r&Np[o])===Np[o])}}}fm.prototype.defined=!0;function Fy(e,t,n){n&&(e[t]=n)}function co(e){const t={},n={};for(const[r,i]of Object.entries(e.properties)){const s=new fm(r,e.transform(e.attributes||{},r),i,e.space);e.mustUseProperty&&e.mustUseProperty.includes(r)&&(s.mustUseProperty=!0),t[r]=s,n[Ep(r)]=r,n[Ep(s.attribute)]=r}return new fl(t,n,e.space)}const Zk=co({properties:{ariaActiveDescendant:null,ariaAtomic:et,ariaAutoComplete:null,ariaBusy:et,ariaChecked:et,ariaColCount:B,ariaColIndex:B,ariaColSpan:B,ariaControls:Me,ariaCurrent:null,ariaDescribedBy:Me,ariaDetails:null,ariaDisabled:et,ariaDropEffect:Me,ariaErrorMessage:null,ariaExpanded:et,ariaFlowTo:Me,ariaGrabbed:et,ariaHasPopup:null,ariaHidden:et,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:Me,ariaLevel:B,ariaLive:null,ariaModal:et,ariaMultiLine:et,ariaMultiSelectable:et,ariaOrientation:null,ariaOwns:Me,ariaPlaceholder:null,ariaPosInSet:B,ariaPressed:et,ariaReadOnly:et,ariaRelevant:null,ariaRequired:et,ariaRoleDescription:Me,ariaRowCount:B,ariaRowIndex:B,ariaRowSpan:B,ariaSelected:et,ariaSetSize:B,ariaSort:null,ariaValueMax:B,ariaValueMin:B,ariaValueNow:B,ariaValueText:null,role:null},transform(e,t){return t==="role"?t:"aria-"+t.slice(4).toLowerCase()}});function eS(e,t){return t in e?e[t]:t}function tS(e,t){return eS(e,t.toLowerCase())}const wR=co({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:Bs,acceptCharset:Me,accessKey:Me,action:null,allow:null,allowFullScreen:ce,allowPaymentRequest:ce,allowUserMedia:ce,alt:null,as:null,async:ce,autoCapitalize:null,autoComplete:Me,autoFocus:ce,autoPlay:ce,blocking:Me,capture:null,charSet:null,checked:ce,cite:null,className:Me,cols:B,colSpan:null,content:null,contentEditable:et,controls:ce,controlsList:Me,coords:B|Bs,crossOrigin:null,data:null,dateTime:null,decoding:null,default:ce,defer:ce,dir:null,dirName:null,disabled:ce,download:Pp,draggable:et,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:ce,formTarget:null,headers:Me,height:B,hidden:Pp,high:B,href:null,hrefLang:null,htmlFor:Me,httpEquiv:Me,id:null,imageSizes:null,imageSrcSet:null,inert:ce,inputMode:null,integrity:null,is:null,isMap:ce,itemId:null,itemProp:Me,itemRef:Me,itemScope:ce,itemType:Me,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:ce,low:B,manifest:null,max:null,maxLength:B,media:null,method:null,min:null,minLength:B,multiple:ce,muted:ce,name:null,nonce:null,noModule:ce,noValidate:ce,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:ce,optimum:B,pattern:null,ping:Me,placeholder:null,playsInline:ce,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:ce,referrerPolicy:null,rel:Me,required:ce,reversed:ce,rows:B,rowSpan:B,sandbox:Me,scope:null,scoped:ce,seamless:ce,selected:ce,shadowRootClonable:ce,shadowRootDelegatesFocus:ce,shadowRootMode:null,shape:null,size:B,sizes:null,slot:null,span:B,spellCheck:et,src:null,srcDoc:null,srcLang:null,srcSet:null,start:B,step:null,style:null,tabIndex:B,target:null,title:null,translate:null,type:null,typeMustMatch:ce,useMap:null,value:et,width:B,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:Me,axis:null,background:null,bgColor:null,border:B,borderColor:null,bottomMargin:B,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:ce,declare:ce,event:null,face:null,frame:null,frameBorder:null,hSpace:B,leftMargin:B,link:null,longDesc:null,lowSrc:null,marginHeight:B,marginWidth:B,noResize:ce,noHref:ce,noShade:ce,noWrap:ce,object:null,profile:null,prompt:null,rev:null,rightMargin:B,rules:null,scheme:null,scrolling:et,standby:null,summary:null,text:null,topMargin:B,valueType:null,version:null,vAlign:null,vLink:null,vSpace:B,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:ce,disableRemotePlayback:ce,prefix:null,property:null,results:B,security:null,unselectable:null},space:"html",transform:tS}),kR=co({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:Qt,accentHeight:B,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:B,amplitude:B,arabicForm:null,ascent:B,attributeName:null,attributeType:null,azimuth:B,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:B,by:null,calcMode:null,capHeight:B,className:Me,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:B,diffuseConstant:B,direction:null,display:null,dur:null,divisor:B,dominantBaseline:null,download:ce,dx:null,dy:null,edgeMode:null,editable:null,elevation:B,enableBackground:null,end:null,event:null,exponent:B,externalResourcesRequired:null,fill:null,fillOpacity:B,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:Bs,g2:Bs,glyphName:Bs,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:B,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:B,horizOriginX:B,horizOriginY:B,id:null,ideographic:B,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:B,k:B,k1:B,k2:B,k3:B,k4:B,kernelMatrix:Qt,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:B,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:B,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:B,overlineThickness:B,paintOrder:null,panose1:null,path:null,pathLength:B,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:Me,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:B,pointsAtY:B,pointsAtZ:B,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:Qt,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:Qt,rev:Qt,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:Qt,requiredFeatures:Qt,requiredFonts:Qt,requiredFormats:Qt,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:B,specularExponent:B,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:B,strikethroughThickness:B,string:null,stroke:null,strokeDashArray:Qt,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:B,strokeOpacity:B,strokeWidth:null,style:null,surfaceScale:B,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:Qt,tabIndex:B,tableValues:null,target:null,targetX:B,targetY:B,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:Qt,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:B,underlineThickness:B,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:B,values:null,vAlphabetic:B,vMathematical:B,vectorEffect:null,vHanging:B,vIdeographic:B,version:null,vertAdvY:B,vertOriginX:B,vertOriginY:B,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:B,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:eS}),nS=co({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform(e,t){return"xlink:"+t.slice(5).toLowerCase()}}),rS=co({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:tS}),iS=co({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform(e,t){return"xml:"+t.slice(3).toLowerCase()}}),SR={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"},CR=/[A-Z]/g,$y=/-[a-z]/g,ER=/^data[-\w.:]+$/i;function PR(e,t){const n=Ep(t);let r=t,i=Yt;if(n in e.normal)return e.property[e.normal[n]];if(n.length>4&&n.slice(0,4)==="data"&&ER.test(t)){if(t.charAt(4)==="-"){const s=t.slice(5).replace($y,jR);r="data"+s.charAt(0).toUpperCase()+s.slice(1)}else{const s=t.slice(4);if(!$y.test(s)){let o=s.replace(CR,NR);o.charAt(0)!=="-"&&(o="-"+o),t="data"+o}}i=fm}return new i(r,t)}function NR(e){return"-"+e.toLowerCase()}function jR(e){return e.charAt(1).toUpperCase()}const TR=Qk([Zk,wR,nS,rS,iS],"html"),pm=Qk([Zk,kR,nS,rS,iS],"svg");function MR(e){return e.join(" ").trim()}var gm={},zy=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,RR=/\n/g,DR=/^\s*/,AR=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,IR=/^:\s*/,OR=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,LR=/^[;\s]*/,FR=/^\s+|\s+$/g,$R=`
|
|
93
93
|
`,By="/",Hy="*",ji="",zR="comment",BR="declaration";function HR(e,t){if(typeof e!="string")throw new TypeError("First argument must be a string");if(!e)return[];t=t||{};var n=1,r=1;function i(g){var m=g.match(RR);m&&(n+=m.length);var y=g.lastIndexOf($R);r=~y?g.length-y:r+g.length}function s(){var g={line:n,column:r};return function(m){return m.position=new o(g),u(),m}}function o(g){this.start=g,this.end={line:n,column:r},this.source=t.source}o.prototype.content=e;function a(g){var m=new Error(t.source+":"+n+":"+r+": "+g);if(m.reason=g,m.filename=t.source,m.line=n,m.column=r,m.source=e,!t.silent)throw m}function l(g){var m=g.exec(e);if(m){var y=m[0];return i(y),e=e.slice(y.length),m}}function u(){l(DR)}function c(g){var m;for(g=g||[];m=d();)m!==!1&&g.push(m);return g}function d(){var g=s();if(!(By!=e.charAt(0)||Hy!=e.charAt(1))){for(var m=2;ji!=e.charAt(m)&&(Hy!=e.charAt(m)||By!=e.charAt(m+1));)++m;if(m+=2,ji===e.charAt(m-1))return a("End of comment missing");var y=e.slice(2,m-2);return r+=2,i(y),e=e.slice(m),r+=2,g({type:zR,comment:y})}}function h(){var g=s(),m=l(AR);if(m){if(d(),!l(IR))return a("property missing ':'");var y=l(OR),x=g({type:BR,property:Wy(m[0].replace(zy,ji)),value:y?Wy(y[0].replace(zy,ji)):ji});return l(LR),x}}function p(){var g=[];c(g);for(var m;m=h();)m!==!1&&(g.push(m),c(g));return g}return u(),p()}function Wy(e){return e?e.replace(FR,ji):ji}var WR=HR,UR=Fu&&Fu.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(gm,"__esModule",{value:!0});gm.default=qR;const VR=UR(WR);function qR(e,t){let n=null;if(!e||typeof e!="string")return n;const r=(0,VR.default)(e),i=typeof t=="function";return r.forEach(s=>{if(s.type!=="declaration")return;const{property:o,value:a}=s;i?t(o,a,s):a&&(n=n||{},n[o]=a)}),n}var ld={};Object.defineProperty(ld,"__esModule",{value:!0});ld.camelCase=void 0;var GR=/^--[a-zA-Z0-9_-]+$/,KR=/-([a-z])/g,YR=/^[^-]+$/,XR=/^-(webkit|moz|ms|o|khtml)-/,JR=/^-(ms)-/,QR=function(e){return!e||YR.test(e)||GR.test(e)},ZR=function(e,t){return t.toUpperCase()},Uy=function(e,t){return"".concat(t,"-")},eD=function(e,t){return t===void 0&&(t={}),QR(e)?e:(e=e.toLowerCase(),t.reactCompat?e=e.replace(JR,Uy):e=e.replace(XR,Uy),e.replace(KR,ZR))};ld.camelCase=eD;var tD=Fu&&Fu.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},nD=tD(gm),rD=ld;function jp(e,t){var n={};return!e||typeof e!="string"||(0,nD.default)(e,function(r,i){r&&i&&(n[(0,rD.camelCase)(r,t)]=i)}),n}jp.default=jp;var iD=jp;const sD=tg(iD),sS=oS("end"),mm=oS("start");function oS(e){return t;function t(n){const r=n&&n.position&&n.position[e]||{};if(typeof r.line=="number"&&r.line>0&&typeof r.column=="number"&&r.column>0)return{line:r.line,column:r.column,offset:typeof r.offset=="number"&&r.offset>-1?r.offset:void 0}}}function oD(e){const t=mm(e),n=sS(e);if(t&&n)return{start:t,end:n}}function va(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?Vy(e.position):"start"in e||"end"in e?Vy(e):"line"in e||"column"in e?Tp(e):""}function Tp(e){return qy(e&&e.line)+":"+qy(e&&e.column)}function Vy(e){return Tp(e&&e.start)+"-"+Tp(e&&e.end)}function qy(e){return e&&typeof e=="number"?e:1}class Pt extends Error{constructor(t,n,r){super(),typeof n=="string"&&(r=n,n=void 0);let i="",s={},o=!1;if(n&&("line"in n&&"column"in n?s={place:n}:"start"in n&&"end"in n?s={place:n}:"type"in n?s={ancestors:[n],place:n.position}:s={...n}),typeof t=="string"?i=t:!s.cause&&t&&(o=!0,i=t.message,s.cause=t),!s.ruleId&&!s.source&&typeof r=="string"){const l=r.indexOf(":");l===-1?s.ruleId=r:(s.source=r.slice(0,l),s.ruleId=r.slice(l+1))}if(!s.place&&s.ancestors&&s.ancestors){const l=s.ancestors[s.ancestors.length-1];l&&(s.place=l.position)}const a=s.place&&"start"in s.place?s.place.start:s.place;this.ancestors=s.ancestors||void 0,this.cause=s.cause||void 0,this.column=a?a.column:void 0,this.fatal=void 0,this.file="",this.message=i,this.line=a?a.line:void 0,this.name=va(s.place)||"1:1",this.place=s.place||void 0,this.reason=this.message,this.ruleId=s.ruleId||void 0,this.source=s.source||void 0,this.stack=o&&s.cause&&typeof s.cause.stack=="string"?s.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Pt.prototype.file="";Pt.prototype.name="";Pt.prototype.reason="";Pt.prototype.message="";Pt.prototype.stack="";Pt.prototype.column=void 0;Pt.prototype.line=void 0;Pt.prototype.ancestors=void 0;Pt.prototype.cause=void 0;Pt.prototype.fatal=void 0;Pt.prototype.place=void 0;Pt.prototype.ruleId=void 0;Pt.prototype.source=void 0;const xm={}.hasOwnProperty,aD=new Map,lD=/[A-Z]/g,uD=new Set(["table","tbody","thead","tfoot","tr"]),cD=new Set(["td","th"]),aS="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function dD(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const n=t.filePath||void 0;let r;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");r=yD(n,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");r=vD(n,t.jsx,t.jsxs)}const i={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:r,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?pm:TR,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},s=lS(i,e,void 0);return s&&typeof s!="string"?s:i.create(e,i.Fragment,{children:s||void 0},void 0)}function lS(e,t,n){if(t.type==="element")return hD(e,t,n);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return fD(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return gD(e,t,n);if(t.type==="mdxjsEsm")return pD(e,t);if(t.type==="root")return mD(e,t,n);if(t.type==="text")return xD(e,t)}function hD(e,t,n){const r=e.schema;let i=r;t.tagName.toLowerCase()==="svg"&&r.space==="html"&&(i=pm,e.schema=i),e.ancestors.push(t);const s=cS(e,t.tagName,!1),o=bD(e,t);let a=ym(e,t);return uD.has(t.tagName)&&(a=a.filter(function(l){return typeof l=="string"?!bR(l):!0})),uS(e,o,s,t),vm(o,a),e.ancestors.pop(),e.schema=r,e.create(t,s,o,n)}function fD(e,t){if(t.data&&t.data.estree&&e.evaluater){const r=t.data.estree.body[0];return r.type,e.evaluater.evaluateExpression(r.expression)}Qa(e,t.position)}function pD(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);Qa(e,t.position)}function gD(e,t,n){const r=e.schema;let i=r;t.name==="svg"&&r.space==="html"&&(i=pm,e.schema=i),e.ancestors.push(t);const s=t.name===null?e.Fragment:cS(e,t.name,!0),o=_D(e,t),a=ym(e,t);return uS(e,o,s,t),vm(o,a),e.ancestors.pop(),e.schema=r,e.create(t,s,o,n)}function mD(e,t,n){const r={};return vm(r,ym(e,t)),e.create(t,e.Fragment,r,n)}function xD(e,t){return t.value}function uS(e,t,n,r){typeof n!="string"&&n!==e.Fragment&&e.passNode&&(t.node=r)}function vm(e,t){if(t.length>0){const n=t.length>1?t:t[0];n&&(e.children=n)}}function vD(e,t,n){return r;function r(i,s,o,a){const u=Array.isArray(o.children)?n:t;return a?u(s,o,a):u(s,o)}}function yD(e,t){return n;function n(r,i,s,o){const a=Array.isArray(s.children),l=mm(r);return t(i,s,o,a,{columnNumber:l?l.column-1:void 0,fileName:e,lineNumber:l?l.line:void 0},void 0)}}function bD(e,t){const n={};let r,i;for(i in t.properties)if(i!=="children"&&xm.call(t.properties,i)){const s=wD(e,i,t.properties[i]);if(s){const[o,a]=s;e.tableCellAlignToStyle&&o==="align"&&typeof a=="string"&&cD.has(t.tagName)?r=a:n[o]=a}}if(r){const s=n.style||(n.style={});s[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=r}return n}function _D(e,t){const n={};for(const r of t.attributes)if(r.type==="mdxJsxExpressionAttribute")if(r.data&&r.data.estree&&e.evaluater){const s=r.data.estree.body[0];s.type;const o=s.expression;o.type;const a=o.properties[0];a.type,Object.assign(n,e.evaluater.evaluateExpression(a.argument))}else Qa(e,t.position);else{const i=r.name;let s;if(r.value&&typeof r.value=="object")if(r.value.data&&r.value.data.estree&&e.evaluater){const a=r.value.data.estree.body[0];a.type,s=e.evaluater.evaluateExpression(a.expression)}else Qa(e,t.position);else s=r.value===null?!0:r.value;n[i]=s}return n}function ym(e,t){const n=[];let r=-1;const i=e.passKeys?new Map:aD;for(;++r<t.children.length;){const s=t.children[r];let o;if(e.passKeys){const l=s.type==="element"?s.tagName:s.type==="mdxJsxFlowElement"||s.type==="mdxJsxTextElement"?s.name:void 0;if(l){const u=i.get(l)||0;o=l+"-"+u,i.set(l,u+1)}}const a=lS(e,s,o);a!==void 0&&n.push(a)}return n}function wD(e,t,n){const r=PR(e.schema,t);if(!(n==null||typeof n=="number"&&Number.isNaN(n))){if(Array.isArray(n)&&(n=r.commaSeparated?gR(n):MR(n)),r.property==="style"){let i=typeof n=="object"?n:kD(e,String(n));return e.stylePropertyNameCase==="css"&&(i=SD(i)),["style",i]}return[e.elementAttributeNameCase==="react"&&r.space?SR[r.property]||r.property:r.attribute,n]}}function kD(e,t){try{return sD(t,{reactCompat:!0})}catch(n){if(e.ignoreInvalidStyle)return{};const r=n,i=new Pt("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:r,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw i.file=e.filePath||void 0,i.url=aS+"#cannot-parse-style-attribute",i}}function cS(e,t,n){let r;if(!n)r={type:"Literal",value:t};else if(t.includes(".")){const i=t.split(".");let s=-1,o;for(;++s<i.length;){const a=Oy(i[s])?{type:"Identifier",name:i[s]}:{type:"Literal",value:i[s]};o=o?{type:"MemberExpression",object:o,property:a,computed:!!(s&&a.type==="Literal"),optional:!1}:a}r=o}else r=Oy(t)&&!/^[a-z]/.test(t)?{type:"Identifier",name:t}:{type:"Literal",value:t};if(r.type==="Literal"){const i=r.value;return xm.call(e.components,i)?e.components[i]:i}if(e.evaluater)return e.evaluater.evaluateExpression(r);Qa(e)}function Qa(e,t){const n=new Pt("Cannot handle MDX estrees without `createEvaluater`",{ancestors:e.ancestors,place:t,ruleId:"mdx-estree",source:"hast-util-to-jsx-runtime"});throw n.file=e.filePath||void 0,n.url=aS+"#cannot-handle-mdx-estrees-without-createevaluater",n}function SD(e){const t={};let n;for(n in e)xm.call(e,n)&&(t[CD(n)]=e[n]);return t}function CD(e){let t=e.replace(lD,ED);return t.slice(0,3)==="ms-"&&(t="-"+t),t}function ED(e){return"-"+e.toLowerCase()}const vh={action:["form"],cite:["blockquote","del","ins","q"],data:["object"],formAction:["button","input"],href:["a","area","base","link"],icon:["menuitem"],itemId:null,manifest:["html"],ping:["a","area"],poster:["video"],src:["audio","embed","iframe","img","input","script","source","track","video"]},PD={};function bm(e,t){const n=PD,r=typeof n.includeImageAlt=="boolean"?n.includeImageAlt:!0,i=typeof n.includeHtml=="boolean"?n.includeHtml:!0;return dS(e,r,i)}function dS(e,t,n){if(ND(e)){if("value"in e)return e.type==="html"&&!n?"":e.value;if(t&&"alt"in e&&e.alt)return e.alt;if("children"in e)return Gy(e.children,t,n)}return Array.isArray(e)?Gy(e,t,n):""}function Gy(e,t,n){const r=[];let i=-1;for(;++i<e.length;)r[i]=dS(e[i],t,n);return r.join("")}function ND(e){return!!(e&&typeof e=="object")}const Ky=document.createElement("i");function _m(e){const t="&"+e+";";Ky.innerHTML=t;const n=Ky.textContent;return n.charCodeAt(n.length-1)===59&&e!=="semi"||n===t?!1:n}function an(e,t,n,r){const i=e.length;let s=0,o;if(t<0?t=-t>i?0:i+t:t=t>i?i:t,n=n>0?n:0,r.length<1e4)o=Array.from(r),o.unshift(t,n),e.splice(...o);else for(n&&e.splice(t,n);s<r.length;)o=r.slice(s,s+1e4),o.unshift(t,0),e.splice(...o),s+=1e4,t+=1e4}function xn(e,t){return e.length>0?(an(e,e.length,0,t),e):t}const Yy={}.hasOwnProperty;function hS(e){const t={};let n=-1;for(;++n<e.length;)jD(t,e[n]);return t}function jD(e,t){let n;for(n in t){const i=(Yy.call(e,n)?e[n]:void 0)||(e[n]={}),s=t[n];let o;if(s)for(o in s){Yy.call(i,o)||(i[o]=[]);const a=s[o];TD(i[o],Array.isArray(a)?a:a?[a]:[])}}}function TD(e,t){let n=-1;const r=[];for(;++n<t.length;)(t[n].add==="after"?e:r).push(t[n]);an(e,0,0,r)}function fS(e,t){const n=Number.parseInt(e,t);return n<9||n===11||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)===65535||(n&65535)===65534||n>1114111?"�":String.fromCodePoint(n)}function An(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Dt=hi(/[A-Za-z]/),kt=hi(/[\dA-Za-z]/),MD=hi(/[#-'*+\--9=?A-Z^-~]/);function Pc(e){return e!==null&&(e<32||e===127)}const Mp=hi(/\d/),RD=hi(/[\dA-Fa-f]/),DD=hi(/[!-/:-@[-`{-~]/);function se(e){return e!==null&&e<-2}function Te(e){return e!==null&&(e<0||e===32)}function fe(e){return e===-2||e===-1||e===32}const ud=hi(new RegExp("\\p{P}|\\p{S}","u")),qi=hi(/\s/);function hi(e){return t;function t(n){return n!==null&&n>-1&&e.test(String.fromCharCode(n))}}function ho(e){const t=[];let n=-1,r=0,i=0;for(;++n<e.length;){const s=e.charCodeAt(n);let o="";if(s===37&&kt(e.charCodeAt(n+1))&&kt(e.charCodeAt(n+2)))i=2;else if(s<128)/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(s))||(o=String.fromCharCode(s));else if(s>55295&&s<57344){const a=e.charCodeAt(n+1);s<56320&&a>56319&&a<57344?(o=String.fromCharCode(s,a),i=1):o="�"}else o=String.fromCharCode(s);o&&(t.push(e.slice(r,n),encodeURIComponent(o)),r=n+i+1,o=""),i&&(n+=i,i=0)}return t.join("")+e.slice(r)}function ye(e,t,n,r){const i=r?r-1:Number.POSITIVE_INFINITY;let s=0;return o;function o(l){return fe(l)?(e.enter(n),a(l)):t(l)}function a(l){return fe(l)&&s++<i?(e.consume(l),a):(e.exit(n),t(l))}}const AD={tokenize:ID};function ID(e){const t=e.attempt(this.parser.constructs.contentInitial,r,i);let n;return t;function r(a){if(a===null){e.consume(a);return}return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),ye(e,t,"linePrefix")}function i(a){return e.enter("paragraph"),s(a)}function s(a){const l=e.enter("chunkText",{contentType:"text",previous:n});return n&&(n.next=l),n=l,o(a)}function o(a){if(a===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(a);return}return se(a)?(e.consume(a),e.exit("chunkText"),s):(e.consume(a),o)}}const OD={tokenize:LD},Xy={tokenize:FD};function LD(e){const t=this,n=[];let r=0,i,s,o;return a;function a(b){if(r<n.length){const S=n[r];return t.containerState=S[1],e.attempt(S[0].continuation,l,u)(b)}return u(b)}function l(b){if(r++,t.containerState._closeFlow){t.containerState._closeFlow=void 0,i&&v();const S=t.events.length;let k=S,w;for(;k--;)if(t.events[k][0]==="exit"&&t.events[k][1].type==="chunkFlow"){w=t.events[k][1].end;break}x(r);let E=S;for(;E<t.events.length;)t.events[E][1].end={...w},E++;return an(t.events,k+1,0,t.events.slice(S)),t.events.length=E,u(b)}return a(b)}function u(b){if(r===n.length){if(!i)return h(b);if(i.currentConstruct&&i.currentConstruct.concrete)return g(b);t.interrupt=!!(i.currentConstruct&&!i._gfmTableDynamicInterruptHack)}return t.containerState={},e.check(Xy,c,d)(b)}function c(b){return i&&v(),x(r),h(b)}function d(b){return t.parser.lazy[t.now().line]=r!==n.length,o=t.now().offset,g(b)}function h(b){return t.containerState={},e.attempt(Xy,p,g)(b)}function p(b){return r++,n.push([t.currentConstruct,t.containerState]),h(b)}function g(b){if(b===null){i&&v(),x(0),e.consume(b);return}return i=i||t.parser.flow(t.now()),e.enter("chunkFlow",{_tokenizer:i,contentType:"flow",previous:s}),m(b)}function m(b){if(b===null){y(e.exit("chunkFlow"),!0),x(0),e.consume(b);return}return se(b)?(e.consume(b),y(e.exit("chunkFlow")),r=0,t.interrupt=void 0,a):(e.consume(b),m)}function y(b,S){const k=t.sliceStream(b);if(S&&k.push(null),b.previous=s,s&&(s.next=b),s=b,i.defineSkip(b.start),i.write(k),t.parser.lazy[b.start.line]){let w=i.events.length;for(;w--;)if(i.events[w][1].start.offset<o&&(!i.events[w][1].end||i.events[w][1].end.offset>o))return;const E=t.events.length;let P=E,T,C;for(;P--;)if(t.events[P][0]==="exit"&&t.events[P][1].type==="chunkFlow"){if(T){C=t.events[P][1].end;break}T=!0}for(x(r),w=E;w<t.events.length;)t.events[w][1].end={...C},w++;an(t.events,P+1,0,t.events.slice(E)),t.events.length=w}}function x(b){let S=n.length;for(;S-- >b;){const k=n[S];t.containerState=k[1],k[0].exit.call(t,e)}n.length=b}function v(){i.write([null]),s=void 0,i=void 0,t.containerState._closeFlow=void 0}}function FD(e,t,n){return ye(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function to(e){if(e===null||Te(e)||qi(e))return 1;if(ud(e))return 2}function cd(e,t,n){const r=[];let i=-1;for(;++i<e.length;){const s=e[i].resolveAll;s&&!r.includes(s)&&(t=s(t,n),r.push(s))}return t}const Rp={name:"attention",resolveAll:$D,tokenize:zD};function $D(e,t){let n=-1,r,i,s,o,a,l,u,c;for(;++n<e.length;)if(e[n][0]==="enter"&&e[n][1].type==="attentionSequence"&&e[n][1]._close){for(r=n;r--;)if(e[r][0]==="exit"&&e[r][1].type==="attentionSequence"&&e[r][1]._open&&t.sliceSerialize(e[r][1]).charCodeAt(0)===t.sliceSerialize(e[n][1]).charCodeAt(0)){if((e[r][1]._close||e[n][1]._open)&&(e[n][1].end.offset-e[n][1].start.offset)%3&&!((e[r][1].end.offset-e[r][1].start.offset+e[n][1].end.offset-e[n][1].start.offset)%3))continue;l=e[r][1].end.offset-e[r][1].start.offset>1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;const d={...e[r][1].end},h={...e[n][1].start};Jy(d,-l),Jy(h,l),o={type:l>1?"strongSequence":"emphasisSequence",start:d,end:{...e[r][1].end}},a={type:l>1?"strongSequence":"emphasisSequence",start:{...e[n][1].start},end:h},s={type:l>1?"strongText":"emphasisText",start:{...e[r][1].end},end:{...e[n][1].start}},i={type:l>1?"strong":"emphasis",start:{...o.start},end:{...a.end}},e[r][1].end={...o.start},e[n][1].start={...a.end},u=[],e[r][1].end.offset-e[r][1].start.offset&&(u=xn(u,[["enter",e[r][1],t],["exit",e[r][1],t]])),u=xn(u,[["enter",i,t],["enter",o,t],["exit",o,t],["enter",s,t]]),u=xn(u,cd(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),u=xn(u,[["exit",s,t],["enter",a,t],["exit",a,t],["exit",i,t]]),e[n][1].end.offset-e[n][1].start.offset?(c=2,u=xn(u,[["enter",e[n][1],t],["exit",e[n][1],t]])):c=0,an(e,r-1,n-r+3,u),n=r+u.length-c-2;break}}for(n=-1;++n<e.length;)e[n][1].type==="attentionSequence"&&(e[n][1].type="data");return e}function zD(e,t){const n=this.parser.constructs.attentionMarkers.null,r=this.previous,i=to(r);let s;return o;function o(l){return s=l,e.enter("attentionSequence"),a(l)}function a(l){if(l===s)return e.consume(l),a;const u=e.exit("attentionSequence"),c=to(l),d=!c||c===2&&i||n.includes(l),h=!i||i===2&&c||n.includes(r);return u._open=!!(s===42?d:d&&(i||!h)),u._close=!!(s===42?h:h&&(c||!d)),t(l)}}function Jy(e,t){e.column+=t,e.offset+=t,e._bufferIndex+=t}const BD={name:"autolink",tokenize:HD};function HD(e,t,n){let r=0;return i;function i(p){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(p),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),s}function s(p){return Dt(p)?(e.consume(p),o):p===64?n(p):u(p)}function o(p){return p===43||p===45||p===46||kt(p)?(r=1,a(p)):u(p)}function a(p){return p===58?(e.consume(p),r=0,l):(p===43||p===45||p===46||kt(p))&&r++<32?(e.consume(p),a):(r=0,u(p))}function l(p){return p===62?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(p),e.exit("autolinkMarker"),e.exit("autolink"),t):p===null||p===32||p===60||Pc(p)?n(p):(e.consume(p),l)}function u(p){return p===64?(e.consume(p),c):MD(p)?(e.consume(p),u):n(p)}function c(p){return kt(p)?d(p):n(p)}function d(p){return p===46?(e.consume(p),r=0,c):p===62?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(p),e.exit("autolinkMarker"),e.exit("autolink"),t):h(p)}function h(p){if((p===45||kt(p))&&r++<63){const g=p===45?h:d;return e.consume(p),g}return n(p)}}const pl={partial:!0,tokenize:WD};function WD(e,t,n){return r;function r(s){return fe(s)?ye(e,i,"linePrefix")(s):i(s)}function i(s){return s===null||se(s)?t(s):n(s)}}const pS={continuation:{tokenize:VD},exit:qD,name:"blockQuote",tokenize:UD};function UD(e,t,n){const r=this;return i;function i(o){if(o===62){const a=r.containerState;return a.open||(e.enter("blockQuote",{_container:!0}),a.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(o),e.exit("blockQuoteMarker"),s}return n(o)}function s(o){return fe(o)?(e.enter("blockQuotePrefixWhitespace"),e.consume(o),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(o))}}function VD(e,t,n){const r=this;return i;function i(o){return fe(o)?ye(e,s,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(o):s(o)}function s(o){return e.attempt(pS,t,n)(o)}}function qD(e){e.exit("blockQuote")}const gS={name:"characterEscape",tokenize:GD};function GD(e,t,n){return r;function r(s){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(s),e.exit("escapeMarker"),i}function i(s){return DD(s)?(e.enter("characterEscapeValue"),e.consume(s),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):n(s)}}const mS={name:"characterReference",tokenize:KD};function KD(e,t,n){const r=this;let i=0,s,o;return a;function a(d){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(d),e.exit("characterReferenceMarker"),l}function l(d){return d===35?(e.enter("characterReferenceMarkerNumeric"),e.consume(d),e.exit("characterReferenceMarkerNumeric"),u):(e.enter("characterReferenceValue"),s=31,o=kt,c(d))}function u(d){return d===88||d===120?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(d),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),s=6,o=RD,c):(e.enter("characterReferenceValue"),s=7,o=Mp,c(d))}function c(d){if(d===59&&i){const h=e.exit("characterReferenceValue");return o===kt&&!_m(r.sliceSerialize(h))?n(d):(e.enter("characterReferenceMarker"),e.consume(d),e.exit("characterReferenceMarker"),e.exit("characterReference"),t)}return o(d)&&i++<s?(e.consume(d),c):n(d)}}const Qy={partial:!0,tokenize:XD},Zy={concrete:!0,name:"codeFenced",tokenize:YD};function YD(e,t,n){const r=this,i={partial:!0,tokenize:k};let s=0,o=0,a;return l;function l(w){return u(w)}function u(w){const E=r.events[r.events.length-1];return s=E&&E[1].type==="linePrefix"?E[2].sliceSerialize(E[1],!0).length:0,a=w,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),c(w)}function c(w){return w===a?(o++,e.consume(w),c):o<3?n(w):(e.exit("codeFencedFenceSequence"),fe(w)?ye(e,d,"whitespace")(w):d(w))}function d(w){return w===null||se(w)?(e.exit("codeFencedFence"),r.interrupt?t(w):e.check(Qy,m,S)(w)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),h(w))}function h(w){return w===null||se(w)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),d(w)):fe(w)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),ye(e,p,"whitespace")(w)):w===96&&w===a?n(w):(e.consume(w),h)}function p(w){return w===null||se(w)?d(w):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),g(w))}function g(w){return w===null||se(w)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),d(w)):w===96&&w===a?n(w):(e.consume(w),g)}function m(w){return e.attempt(i,S,y)(w)}function y(w){return e.enter("lineEnding"),e.consume(w),e.exit("lineEnding"),x}function x(w){return s>0&&fe(w)?ye(e,v,"linePrefix",s+1)(w):v(w)}function v(w){return w===null||se(w)?e.check(Qy,m,S)(w):(e.enter("codeFlowValue"),b(w))}function b(w){return w===null||se(w)?(e.exit("codeFlowValue"),v(w)):(e.consume(w),b)}function S(w){return e.exit("codeFenced"),t(w)}function k(w,E,P){let T=0;return C;function C(O){return w.enter("lineEnding"),w.consume(O),w.exit("lineEnding"),M}function M(O){return w.enter("codeFencedFence"),fe(O)?ye(w,R,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(O):R(O)}function R(O){return O===a?(w.enter("codeFencedFenceSequence"),L(O)):P(O)}function L(O){return O===a?(T++,w.consume(O),L):T>=o?(w.exit("codeFencedFenceSequence"),fe(O)?ye(w,U,"whitespace")(O):U(O)):P(O)}function U(O){return O===null||se(O)?(w.exit("codeFencedFence"),E(O)):P(O)}}}function XD(e,t,n){const r=this;return i;function i(o){return o===null?n(o):(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),s)}function s(o){return r.parser.lazy[r.now().line]?n(o):t(o)}}const yh={name:"codeIndented",tokenize:QD},JD={partial:!0,tokenize:ZD};function QD(e,t,n){const r=this;return i;function i(u){return e.enter("codeIndented"),ye(e,s,"linePrefix",5)(u)}function s(u){const c=r.events[r.events.length-1];return c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?o(u):n(u)}function o(u){return u===null?l(u):se(u)?e.attempt(JD,o,l)(u):(e.enter("codeFlowValue"),a(u))}function a(u){return u===null||se(u)?(e.exit("codeFlowValue"),o(u)):(e.consume(u),a)}function l(u){return e.exit("codeIndented"),t(u)}}function ZD(e,t,n){const r=this;return i;function i(o){return r.parser.lazy[r.now().line]?n(o):se(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),i):ye(e,s,"linePrefix",5)(o)}function s(o){const a=r.events[r.events.length-1];return a&&a[1].type==="linePrefix"&&a[2].sliceSerialize(a[1],!0).length>=4?t(o):se(o)?i(o):n(o)}}const eA={name:"codeText",previous:nA,resolve:tA,tokenize:rA};function tA(e){let t=e.length-4,n=3,r,i;if((e[n][1].type==="lineEnding"||e[n][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(r=n;++r<t;)if(e[r][1].type==="codeTextData"){e[n][1].type="codeTextPadding",e[t][1].type="codeTextPadding",n+=2,t-=2;break}}for(r=n-1,t++;++r<=t;)i===void 0?r!==t&&e[r][1].type!=="lineEnding"&&(i=r):(r===t||e[r][1].type==="lineEnding")&&(e[i][1].type="codeTextData",r!==i+2&&(e[i][1].end=e[r-1][1].end,e.splice(i+2,r-i-2),t-=r-i-2,r=i+2),i=void 0);return e}function nA(e){return e!==96||this.events[this.events.length-1][1].type==="characterEscape"}function rA(e,t,n){let r=0,i,s;return o;function o(d){return e.enter("codeText"),e.enter("codeTextSequence"),a(d)}function a(d){return d===96?(e.consume(d),r++,a):(e.exit("codeTextSequence"),l(d))}function l(d){return d===null?n(d):d===32?(e.enter("space"),e.consume(d),e.exit("space"),l):d===96?(s=e.enter("codeTextSequence"),i=0,c(d)):se(d)?(e.enter("lineEnding"),e.consume(d),e.exit("lineEnding"),l):(e.enter("codeTextData"),u(d))}function u(d){return d===null||d===32||d===96||se(d)?(e.exit("codeTextData"),l(d)):(e.consume(d),u)}function c(d){return d===96?(e.consume(d),i++,c):i===r?(e.exit("codeTextSequence"),e.exit("codeText"),t(d)):(s.type="codeTextData",u(d))}}class iA{constructor(t){this.left=t?[...t]:[],this.right=[]}get(t){if(t<0||t>=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return t<this.left.length?this.left[t]:this.right[this.right.length-t+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(t,n){const r=n??Number.POSITIVE_INFINITY;return r<this.left.length?this.left.slice(t,r):t>this.left.length?this.right.slice(this.right.length-r+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-r+this.left.length).reverse())}splice(t,n,r){const i=n||0;this.setCursor(Math.trunc(t));const s=this.right.splice(this.right.length-i,Number.POSITIVE_INFINITY);return r&&Ao(this.left,r),s.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Ao(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Ao(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t<this.left.length){const n=this.left.splice(t,Number.POSITIVE_INFINITY);Ao(this.right,n.reverse())}else{const n=this.right.splice(this.left.length+this.right.length-t,Number.POSITIVE_INFINITY);Ao(this.left,n.reverse())}}}function Ao(e,t){let n=0;if(t.length<1e4)e.push(...t);else for(;n<t.length;)e.push(...t.slice(n,n+1e4)),n+=1e4}function xS(e){const t={};let n=-1,r,i,s,o,a,l,u;const c=new iA(e);for(;++n<c.length;){for(;n in t;)n=t[n];if(r=c.get(n),n&&r[1].type==="chunkFlow"&&c.get(n-1)[1].type==="listItemPrefix"&&(l=r[1]._tokenizer.events,s=0,s<l.length&&l[s][1].type==="lineEndingBlank"&&(s+=2),s<l.length&&l[s][1].type==="content"))for(;++s<l.length&&l[s][1].type!=="content";)l[s][1].type==="chunkText"&&(l[s][1]._isInFirstContentOfListItem=!0,s++);if(r[0]==="enter")r[1].contentType&&(Object.assign(t,sA(c,n)),n=t[n],u=!0);else if(r[1]._container){for(s=n,i=void 0;s--;)if(o=c.get(s),o[1].type==="lineEnding"||o[1].type==="lineEndingBlank")o[0]==="enter"&&(i&&(c.get(i)[1].type="lineEndingBlank"),o[1].type="lineEnding",i=s);else if(!(o[1].type==="linePrefix"||o[1].type==="listItemIndent"))break;i&&(r[1].end={...c.get(i)[1].start},a=c.slice(i,n),a.unshift(r),c.splice(i,n-i+1,a))}}return an(e,0,Number.POSITIVE_INFINITY,c.slice(0)),!u}function sA(e,t){const n=e.get(t)[1],r=e.get(t)[2];let i=t-1;const s=[];let o=n._tokenizer;o||(o=r.parser[n.contentType](n.start),n._contentTypeTextTrailing&&(o._contentTypeTextTrailing=!0));const a=o.events,l=[],u={};let c,d,h=-1,p=n,g=0,m=0;const y=[m];for(;p;){for(;e.get(++i)[1]!==p;);s.push(i),p._tokenizer||(c=r.sliceStream(p),p.next||c.push(null),d&&o.defineSkip(p.start),p._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=!0),o.write(c),p._isInFirstContentOfListItem&&(o._gfmTasklistFirstContentOfListItem=void 0)),d=p,p=p.next}for(p=n;++h<a.length;)a[h][0]==="exit"&&a[h-1][0]==="enter"&&a[h][1].type===a[h-1][1].type&&a[h][1].start.line!==a[h][1].end.line&&(m=h+1,y.push(m),p._tokenizer=void 0,p.previous=void 0,p=p.next);for(o.events=[],p?(p._tokenizer=void 0,p.previous=void 0):y.pop(),h=y.length;h--;){const x=a.slice(y[h],y[h+1]),v=s.pop();l.push([v,v+x.length-1]),e.splice(v,2,x)}for(l.reverse(),h=-1;++h<l.length;)u[g+l[h][0]]=g+l[h][1],g+=l[h][1]-l[h][0]-1;return u}const oA={resolve:lA,tokenize:uA},aA={partial:!0,tokenize:cA};function lA(e){return xS(e),e}function uA(e,t){let n;return r;function r(a){return e.enter("content"),n=e.enter("chunkContent",{contentType:"content"}),i(a)}function i(a){return a===null?s(a):se(a)?e.check(aA,o,s)(a):(e.consume(a),i)}function s(a){return e.exit("chunkContent"),e.exit("content"),t(a)}function o(a){return e.consume(a),e.exit("chunkContent"),n.next=e.enter("chunkContent",{contentType:"content",previous:n}),n=n.next,i}}function cA(e,t,n){const r=this;return i;function i(o){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),ye(e,s,"linePrefix")}function s(o){if(o===null||se(o))return n(o);const a=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes("codeIndented")&&a&&a[1].type==="linePrefix"&&a[2].sliceSerialize(a[1],!0).length>=4?t(o):e.interrupt(r.parser.constructs.flow,n,t)(o)}}function vS(e,t,n,r,i,s,o,a,l){const u=l||Number.POSITIVE_INFINITY;let c=0;return d;function d(x){return x===60?(e.enter(r),e.enter(i),e.enter(s),e.consume(x),e.exit(s),h):x===null||x===32||x===41||Pc(x)?n(x):(e.enter(r),e.enter(o),e.enter(a),e.enter("chunkString",{contentType:"string"}),m(x))}function h(x){return x===62?(e.enter(s),e.consume(x),e.exit(s),e.exit(i),e.exit(r),t):(e.enter(a),e.enter("chunkString",{contentType:"string"}),p(x))}function p(x){return x===62?(e.exit("chunkString"),e.exit(a),h(x)):x===null||x===60||se(x)?n(x):(e.consume(x),x===92?g:p)}function g(x){return x===60||x===62||x===92?(e.consume(x),p):p(x)}function m(x){return!c&&(x===null||x===41||Te(x))?(e.exit("chunkString"),e.exit(a),e.exit(o),e.exit(r),t(x)):c<u&&x===40?(e.consume(x),c++,m):x===41?(e.consume(x),c--,m):x===null||x===32||x===40||Pc(x)?n(x):(e.consume(x),x===92?y:m)}function y(x){return x===40||x===41||x===92?(e.consume(x),m):m(x)}}function yS(e,t,n,r,i,s){const o=this;let a=0,l;return u;function u(p){return e.enter(r),e.enter(i),e.consume(p),e.exit(i),e.enter(s),c}function c(p){return a>999||p===null||p===91||p===93&&!l||p===94&&!a&&"_hiddenFootnoteSupport"in o.parser.constructs?n(p):p===93?(e.exit(s),e.enter(i),e.consume(p),e.exit(i),e.exit(r),t):se(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),c):(e.enter("chunkString",{contentType:"string"}),d(p))}function d(p){return p===null||p===91||p===93||se(p)||a++>999?(e.exit("chunkString"),c(p)):(e.consume(p),l||(l=!fe(p)),p===92?h:d)}function h(p){return p===91||p===92||p===93?(e.consume(p),a++,d):d(p)}}function bS(e,t,n,r,i,s){let o;return a;function a(h){return h===34||h===39||h===40?(e.enter(r),e.enter(i),e.consume(h),e.exit(i),o=h===40?41:h,l):n(h)}function l(h){return h===o?(e.enter(i),e.consume(h),e.exit(i),e.exit(r),t):(e.enter(s),u(h))}function u(h){return h===o?(e.exit(s),l(o)):h===null?n(h):se(h)?(e.enter("lineEnding"),e.consume(h),e.exit("lineEnding"),ye(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),c(h))}function c(h){return h===o||h===null||se(h)?(e.exit("chunkString"),u(h)):(e.consume(h),h===92?d:c)}function d(h){return h===o||h===92?(e.consume(h),c):c(h)}}function ya(e,t){let n;return r;function r(i){return se(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),n=!0,r):fe(i)?ye(e,r,n?"linePrefix":"lineSuffix")(i):t(i)}}const dA={name:"definition",tokenize:fA},hA={partial:!0,tokenize:pA};function fA(e,t,n){const r=this;let i;return s;function s(p){return e.enter("definition"),o(p)}function o(p){return yS.call(r,e,a,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function a(p){return i=An(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),l):n(p)}function l(p){return Te(p)?ya(e,u)(p):u(p)}function u(p){return vS(e,c,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function c(p){return e.attempt(hA,d,d)(p)}function d(p){return fe(p)?ye(e,h,"whitespace")(p):h(p)}function h(p){return p===null||se(p)?(e.exit("definition"),r.parser.defined.push(i),t(p)):n(p)}}function pA(e,t,n){return r;function r(a){return Te(a)?ya(e,i)(a):n(a)}function i(a){return bS(e,s,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(a)}function s(a){return fe(a)?ye(e,o,"whitespace")(a):o(a)}function o(a){return a===null||se(a)?t(a):n(a)}}const gA={name:"hardBreakEscape",tokenize:mA};function mA(e,t,n){return r;function r(s){return e.enter("hardBreakEscape"),e.consume(s),i}function i(s){return se(s)?(e.exit("hardBreakEscape"),t(s)):n(s)}}const xA={name:"headingAtx",resolve:vA,tokenize:yA};function vA(e,t){let n=e.length-2,r=3,i,s;return e[r][1].type==="whitespace"&&(r+=2),n-2>r&&e[n][1].type==="whitespace"&&(n-=2),e[n][1].type==="atxHeadingSequence"&&(r===n-1||n-4>r&&e[n-2][1].type==="whitespace")&&(n-=r+1===n?2:4),n>r&&(i={type:"atxHeadingText",start:e[r][1].start,end:e[n][1].end},s={type:"chunkText",start:e[r][1].start,end:e[n][1].end,contentType:"text"},an(e,r,n-r+1,[["enter",i,t],["enter",s,t],["exit",s,t],["exit",i,t]])),e}function yA(e,t,n){let r=0;return i;function i(c){return e.enter("atxHeading"),s(c)}function s(c){return e.enter("atxHeadingSequence"),o(c)}function o(c){return c===35&&r++<6?(e.consume(c),o):c===null||Te(c)?(e.exit("atxHeadingSequence"),a(c)):n(c)}function a(c){return c===35?(e.enter("atxHeadingSequence"),l(c)):c===null||se(c)?(e.exit("atxHeading"),t(c)):fe(c)?ye(e,a,"whitespace")(c):(e.enter("atxHeadingText"),u(c))}function l(c){return c===35?(e.consume(c),l):(e.exit("atxHeadingSequence"),a(c))}function u(c){return c===null||c===35||Te(c)?(e.exit("atxHeadingText"),a(c)):(e.consume(c),u)}}const bA=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],e0=["pre","script","style","textarea"],_A={concrete:!0,name:"htmlFlow",resolveTo:SA,tokenize:CA},wA={partial:!0,tokenize:PA},kA={partial:!0,tokenize:EA};function SA(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function CA(e,t,n){const r=this;let i,s,o,a,l;return u;function u(j){return c(j)}function c(j){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(j),d}function d(j){return j===33?(e.consume(j),h):j===47?(e.consume(j),s=!0,m):j===63?(e.consume(j),i=3,r.interrupt?t:_):Dt(j)?(e.consume(j),o=String.fromCharCode(j),y):n(j)}function h(j){return j===45?(e.consume(j),i=2,p):j===91?(e.consume(j),i=5,a=0,g):Dt(j)?(e.consume(j),i=4,r.interrupt?t:_):n(j)}function p(j){return j===45?(e.consume(j),r.interrupt?t:_):n(j)}function g(j){const te="CDATA[";return j===te.charCodeAt(a++)?(e.consume(j),a===te.length?r.interrupt?t:R:g):n(j)}function m(j){return Dt(j)?(e.consume(j),o=String.fromCharCode(j),y):n(j)}function y(j){if(j===null||j===47||j===62||Te(j)){const te=j===47,le=o.toLowerCase();return!te&&!s&&e0.includes(le)?(i=1,r.interrupt?t(j):R(j)):bA.includes(o.toLowerCase())?(i=6,te?(e.consume(j),x):r.interrupt?t(j):R(j)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(j):s?v(j):b(j))}return j===45||kt(j)?(e.consume(j),o+=String.fromCharCode(j),y):n(j)}function x(j){return j===62?(e.consume(j),r.interrupt?t:R):n(j)}function v(j){return fe(j)?(e.consume(j),v):C(j)}function b(j){return j===47?(e.consume(j),C):j===58||j===95||Dt(j)?(e.consume(j),S):fe(j)?(e.consume(j),b):C(j)}function S(j){return j===45||j===46||j===58||j===95||kt(j)?(e.consume(j),S):k(j)}function k(j){return j===61?(e.consume(j),w):fe(j)?(e.consume(j),k):b(j)}function w(j){return j===null||j===60||j===61||j===62||j===96?n(j):j===34||j===39?(e.consume(j),l=j,E):fe(j)?(e.consume(j),w):P(j)}function E(j){return j===l?(e.consume(j),l=null,T):j===null||se(j)?n(j):(e.consume(j),E)}function P(j){return j===null||j===34||j===39||j===47||j===60||j===61||j===62||j===96||Te(j)?k(j):(e.consume(j),P)}function T(j){return j===47||j===62||fe(j)?b(j):n(j)}function C(j){return j===62?(e.consume(j),M):n(j)}function M(j){return j===null||se(j)?R(j):fe(j)?(e.consume(j),M):n(j)}function R(j){return j===45&&i===2?(e.consume(j),J):j===60&&i===1?(e.consume(j),Q):j===62&&i===4?(e.consume(j),V):j===63&&i===3?(e.consume(j),_):j===93&&i===5?(e.consume(j),F):se(j)&&(i===6||i===7)?(e.exit("htmlFlowData"),e.check(wA,W,L)(j)):j===null||se(j)?(e.exit("htmlFlowData"),L(j)):(e.consume(j),R)}function L(j){return e.check(kA,U,W)(j)}function U(j){return e.enter("lineEnding"),e.consume(j),e.exit("lineEnding"),O}function O(j){return j===null||se(j)?L(j):(e.enter("htmlFlowData"),R(j))}function J(j){return j===45?(e.consume(j),_):R(j)}function Q(j){return j===47?(e.consume(j),o="",A):R(j)}function A(j){if(j===62){const te=o.toLowerCase();return e0.includes(te)?(e.consume(j),V):R(j)}return Dt(j)&&o.length<8?(e.consume(j),o+=String.fromCharCode(j),A):R(j)}function F(j){return j===93?(e.consume(j),_):R(j)}function _(j){return j===62?(e.consume(j),V):j===45&&i===2?(e.consume(j),_):R(j)}function V(j){return j===null||se(j)?(e.exit("htmlFlowData"),W(j)):(e.consume(j),V)}function W(j){return e.exit("htmlFlow"),t(j)}}function EA(e,t,n){const r=this;return i;function i(o){return se(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),s):n(o)}function s(o){return r.parser.lazy[r.now().line]?n(o):t(o)}}function PA(e,t,n){return r;function r(i){return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),e.attempt(pl,t,n)}}const NA={name:"htmlText",tokenize:jA};function jA(e,t,n){const r=this;let i,s,o;return a;function a(_){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(_),l}function l(_){return _===33?(e.consume(_),u):_===47?(e.consume(_),k):_===63?(e.consume(_),b):Dt(_)?(e.consume(_),P):n(_)}function u(_){return _===45?(e.consume(_),c):_===91?(e.consume(_),s=0,g):Dt(_)?(e.consume(_),v):n(_)}function c(_){return _===45?(e.consume(_),p):n(_)}function d(_){return _===null?n(_):_===45?(e.consume(_),h):se(_)?(o=d,Q(_)):(e.consume(_),d)}function h(_){return _===45?(e.consume(_),p):d(_)}function p(_){return _===62?J(_):_===45?h(_):d(_)}function g(_){const V="CDATA[";return _===V.charCodeAt(s++)?(e.consume(_),s===V.length?m:g):n(_)}function m(_){return _===null?n(_):_===93?(e.consume(_),y):se(_)?(o=m,Q(_)):(e.consume(_),m)}function y(_){return _===93?(e.consume(_),x):m(_)}function x(_){return _===62?J(_):_===93?(e.consume(_),x):m(_)}function v(_){return _===null||_===62?J(_):se(_)?(o=v,Q(_)):(e.consume(_),v)}function b(_){return _===null?n(_):_===63?(e.consume(_),S):se(_)?(o=b,Q(_)):(e.consume(_),b)}function S(_){return _===62?J(_):b(_)}function k(_){return Dt(_)?(e.consume(_),w):n(_)}function w(_){return _===45||kt(_)?(e.consume(_),w):E(_)}function E(_){return se(_)?(o=E,Q(_)):fe(_)?(e.consume(_),E):J(_)}function P(_){return _===45||kt(_)?(e.consume(_),P):_===47||_===62||Te(_)?T(_):n(_)}function T(_){return _===47?(e.consume(_),J):_===58||_===95||Dt(_)?(e.consume(_),C):se(_)?(o=T,Q(_)):fe(_)?(e.consume(_),T):J(_)}function C(_){return _===45||_===46||_===58||_===95||kt(_)?(e.consume(_),C):M(_)}function M(_){return _===61?(e.consume(_),R):se(_)?(o=M,Q(_)):fe(_)?(e.consume(_),M):T(_)}function R(_){return _===null||_===60||_===61||_===62||_===96?n(_):_===34||_===39?(e.consume(_),i=_,L):se(_)?(o=R,Q(_)):fe(_)?(e.consume(_),R):(e.consume(_),U)}function L(_){return _===i?(e.consume(_),i=void 0,O):_===null?n(_):se(_)?(o=L,Q(_)):(e.consume(_),L)}function U(_){return _===null||_===34||_===39||_===60||_===61||_===96?n(_):_===47||_===62||Te(_)?T(_):(e.consume(_),U)}function O(_){return _===47||_===62||Te(_)?T(_):n(_)}function J(_){return _===62?(e.consume(_),e.exit("htmlTextData"),e.exit("htmlText"),t):n(_)}function Q(_){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(_),e.exit("lineEnding"),A}function A(_){return fe(_)?ye(e,F,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(_):F(_)}function F(_){return e.enter("htmlTextData"),o(_)}}const wm={name:"labelEnd",resolveAll:DA,resolveTo:AA,tokenize:IA},TA={tokenize:OA},MA={tokenize:LA},RA={tokenize:FA};function DA(e){let t=-1;const n=[];for(;++t<e.length;){const r=e[t][1];if(n.push(e[t]),r.type==="labelImage"||r.type==="labelLink"||r.type==="labelEnd"){const i=r.type==="labelImage"?4:2;r.type="data",t+=i}}return e.length!==n.length&&an(e,0,e.length,n),e}function AA(e,t){let n=e.length,r=0,i,s,o,a;for(;n--;)if(i=e[n][1],s){if(i.type==="link"||i.type==="labelLink"&&i._inactive)break;e[n][0]==="enter"&&i.type==="labelLink"&&(i._inactive=!0)}else if(o){if(e[n][0]==="enter"&&(i.type==="labelImage"||i.type==="labelLink")&&!i._balanced&&(s=n,i.type!=="labelLink")){r=2;break}}else i.type==="labelEnd"&&(o=n);const l={type:e[s][1].type==="labelLink"?"link":"image",start:{...e[s][1].start},end:{...e[e.length-1][1].end}},u={type:"label",start:{...e[s][1].start},end:{...e[o][1].end}},c={type:"labelText",start:{...e[s+r+2][1].end},end:{...e[o-2][1].start}};return a=[["enter",l,t],["enter",u,t]],a=xn(a,e.slice(s+1,s+r+3)),a=xn(a,[["enter",c,t]]),a=xn(a,cd(t.parser.constructs.insideSpan.null,e.slice(s+r+4,o-3),t)),a=xn(a,[["exit",c,t],e[o-2],e[o-1],["exit",u,t]]),a=xn(a,e.slice(o+1)),a=xn(a,[["exit",l,t]]),an(e,s,e.length,a),e}function IA(e,t,n){const r=this;let i=r.events.length,s,o;for(;i--;)if((r.events[i][1].type==="labelImage"||r.events[i][1].type==="labelLink")&&!r.events[i][1]._balanced){s=r.events[i][1];break}return a;function a(h){return s?s._inactive?d(h):(o=r.parser.defined.includes(An(r.sliceSerialize({start:s.end,end:r.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(h),e.exit("labelMarker"),e.exit("labelEnd"),l):n(h)}function l(h){return h===40?e.attempt(TA,c,o?c:d)(h):h===91?e.attempt(MA,c,o?u:d)(h):o?c(h):d(h)}function u(h){return e.attempt(RA,c,d)(h)}function c(h){return t(h)}function d(h){return s._balanced=!0,n(h)}}function OA(e,t,n){return r;function r(d){return e.enter("resource"),e.enter("resourceMarker"),e.consume(d),e.exit("resourceMarker"),i}function i(d){return Te(d)?ya(e,s)(d):s(d)}function s(d){return d===41?c(d):vS(e,o,a,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(d)}function o(d){return Te(d)?ya(e,l)(d):c(d)}function a(d){return n(d)}function l(d){return d===34||d===39||d===40?bS(e,u,n,"resourceTitle","resourceTitleMarker","resourceTitleString")(d):c(d)}function u(d){return Te(d)?ya(e,c)(d):c(d)}function c(d){return d===41?(e.enter("resourceMarker"),e.consume(d),e.exit("resourceMarker"),e.exit("resource"),t):n(d)}}function LA(e,t,n){const r=this;return i;function i(a){return yS.call(r,e,s,o,"reference","referenceMarker","referenceString")(a)}function s(a){return r.parser.defined.includes(An(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)))?t(a):n(a)}function o(a){return n(a)}}function FA(e,t,n){return r;function r(s){return e.enter("reference"),e.enter("referenceMarker"),e.consume(s),e.exit("referenceMarker"),i}function i(s){return s===93?(e.enter("referenceMarker"),e.consume(s),e.exit("referenceMarker"),e.exit("reference"),t):n(s)}}const $A={name:"labelStartImage",resolveAll:wm.resolveAll,tokenize:zA};function zA(e,t,n){const r=this;return i;function i(a){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(a),e.exit("labelImageMarker"),s}function s(a){return a===91?(e.enter("labelMarker"),e.consume(a),e.exit("labelMarker"),e.exit("labelImage"),o):n(a)}function o(a){return a===94&&"_hiddenFootnoteSupport"in r.parser.constructs?n(a):t(a)}}const BA={name:"labelStartLink",resolveAll:wm.resolveAll,tokenize:HA};function HA(e,t,n){const r=this;return i;function i(o){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(o),e.exit("labelMarker"),e.exit("labelLink"),s}function s(o){return o===94&&"_hiddenFootnoteSupport"in r.parser.constructs?n(o):t(o)}}const bh={name:"lineEnding",tokenize:WA};function WA(e,t){return n;function n(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),ye(e,t,"linePrefix")}}const Pu={name:"thematicBreak",tokenize:UA};function UA(e,t,n){let r=0,i;return s;function s(u){return e.enter("thematicBreak"),o(u)}function o(u){return i=u,a(u)}function a(u){return u===i?(e.enter("thematicBreakSequence"),l(u)):r>=3&&(u===null||se(u))?(e.exit("thematicBreak"),t(u)):n(u)}function l(u){return u===i?(e.consume(u),r++,l):(e.exit("thematicBreakSequence"),fe(u)?ye(e,a,"whitespace")(u):a(u))}}const zt={continuation:{tokenize:KA},exit:XA,name:"list",tokenize:GA},VA={partial:!0,tokenize:JA},qA={partial:!0,tokenize:YA};function GA(e,t,n){const r=this,i=r.events[r.events.length-1];let s=i&&i[1].type==="linePrefix"?i[2].sliceSerialize(i[1],!0).length:0,o=0;return a;function a(p){const g=r.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(g==="listUnordered"?!r.containerState.marker||p===r.containerState.marker:Mp(p)){if(r.containerState.type||(r.containerState.type=g,e.enter(g,{_container:!0})),g==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Pu,n,u)(p):u(p);if(!r.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),l(p)}return n(p)}function l(p){return Mp(p)&&++o<10?(e.consume(p),l):(!r.interrupt||o<2)&&(r.containerState.marker?p===r.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),u(p)):n(p)}function u(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||p,e.check(pl,r.interrupt?n:c,e.attempt(VA,h,d))}function c(p){return r.containerState.initialBlankLine=!0,s++,h(p)}function d(p){return fe(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),h):n(p)}function h(p){return r.containerState.size=s+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(p)}}function KA(e,t,n){const r=this;return r.containerState._closeFlow=void 0,e.check(pl,i,s);function i(a){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,ye(e,t,"listItemIndent",r.containerState.size+1)(a)}function s(a){return r.containerState.furtherBlankLines||!fe(a)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,o(a)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(qA,t,o)(a))}function o(a){return r.containerState._closeFlow=!0,r.interrupt=void 0,ye(e,e.attempt(zt,t,n),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(a)}}function YA(e,t,n){const r=this;return ye(e,i,"listItemIndent",r.containerState.size+1);function i(s){const o=r.events[r.events.length-1];return o&&o[1].type==="listItemIndent"&&o[2].sliceSerialize(o[1],!0).length===r.containerState.size?t(s):n(s)}}function XA(e){e.exit(this.containerState.type)}function JA(e,t,n){const r=this;return ye(e,i,"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function i(s){const o=r.events[r.events.length-1];return!fe(s)&&o&&o[1].type==="listItemPrefixWhitespace"?t(s):n(s)}}const t0={name:"setextUnderline",resolveTo:QA,tokenize:ZA};function QA(e,t){let n=e.length,r,i,s;for(;n--;)if(e[n][0]==="enter"){if(e[n][1].type==="content"){r=n;break}e[n][1].type==="paragraph"&&(i=n)}else e[n][1].type==="content"&&e.splice(n,1),!s&&e[n][1].type==="definition"&&(s=n);const o={type:"setextHeading",start:{...e[r][1].start},end:{...e[e.length-1][1].end}};return e[i][1].type="setextHeadingText",s?(e.splice(i,0,["enter",o,t]),e.splice(s+1,0,["exit",e[r][1],t]),e[r][1].end={...e[s][1].end}):e[r][1]=o,e.push(["exit",o,t]),e}function ZA(e,t,n){const r=this;let i;return s;function s(u){let c=r.events.length,d;for(;c--;)if(r.events[c][1].type!=="lineEnding"&&r.events[c][1].type!=="linePrefix"&&r.events[c][1].type!=="content"){d=r.events[c][1].type==="paragraph";break}return!r.parser.lazy[r.now().line]&&(r.interrupt||d)?(e.enter("setextHeadingLine"),i=u,o(u)):n(u)}function o(u){return e.enter("setextHeadingLineSequence"),a(u)}function a(u){return u===i?(e.consume(u),a):(e.exit("setextHeadingLineSequence"),fe(u)?ye(e,l,"lineSuffix")(u):l(u))}function l(u){return u===null||se(u)?(e.exit("setextHeadingLine"),t(u)):n(u)}}const eI={tokenize:tI};function tI(e){const t=this,n=e.attempt(pl,r,e.attempt(this.parser.constructs.flowInitial,i,ye(e,e.attempt(this.parser.constructs.flow,i,e.attempt(oA,i)),"linePrefix")));return n;function r(s){if(s===null){e.consume(s);return}return e.enter("lineEndingBlank"),e.consume(s),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}function i(s){if(s===null){e.consume(s);return}return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),t.currentConstruct=void 0,n}}const nI={resolveAll:wS()},rI=_S("string"),iI=_S("text");function _S(e){return{resolveAll:wS(e==="text"?sI:void 0),tokenize:t};function t(n){const r=this,i=this.parser.constructs[e],s=n.attempt(i,o,a);return o;function o(c){return u(c)?s(c):a(c)}function a(c){if(c===null){n.consume(c);return}return n.enter("data"),n.consume(c),l}function l(c){return u(c)?(n.exit("data"),s(c)):(n.consume(c),l)}function u(c){if(c===null)return!0;const d=i[c];let h=-1;if(d)for(;++h<d.length;){const p=d[h];if(!p.previous||p.previous.call(r,r.previous))return!0}return!1}}}function wS(e){return t;function t(n,r){let i=-1,s;for(;++i<=n.length;)s===void 0?n[i]&&n[i][1].type==="data"&&(s=i,i++):(!n[i]||n[i][1].type!=="data")&&(i!==s+2&&(n[s][1].end=n[i-1][1].end,n.splice(s+2,i-s-2),i=s+2),s=void 0);return e?e(n,r):n}}function sI(e,t){let n=0;for(;++n<=e.length;)if((n===e.length||e[n][1].type==="lineEnding")&&e[n-1][1].type==="data"){const r=e[n-1][1],i=t.sliceStream(r);let s=i.length,o=-1,a=0,l;for(;s--;){const u=i[s];if(typeof u=="string"){for(o=u.length;u.charCodeAt(o-1)===32;)a++,o--;if(o)break;o=-1}else if(u===-2)l=!0,a++;else if(u!==-1){s++;break}}if(t._contentTypeTextTrailing&&n===e.length&&(a=0),a){const u={type:n===e.length||l||a<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:s?o:r.start._bufferIndex+o,_index:r.start._index+s,line:r.end.line,column:r.end.column-a,offset:r.end.offset-a},end:{...r.end}};r.end={...u.start},r.start.offset===r.end.offset?Object.assign(r,u):(e.splice(n,0,["enter",u,t],["exit",u,t]),n+=2)}n++}return e}const oI={42:zt,43:zt,45:zt,48:zt,49:zt,50:zt,51:zt,52:zt,53:zt,54:zt,55:zt,56:zt,57:zt,62:pS},aI={91:dA},lI={[-2]:yh,[-1]:yh,32:yh},uI={35:xA,42:Pu,45:[t0,Pu],60:_A,61:t0,95:Pu,96:Zy,126:Zy},cI={38:mS,92:gS},dI={[-5]:bh,[-4]:bh,[-3]:bh,33:$A,38:mS,42:Rp,60:[BD,NA],91:BA,92:[gA,gS],93:wm,95:Rp,96:eA},hI={null:[Rp,nI]},fI={null:[42,95]},pI={null:[]},gI=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:fI,contentInitial:aI,disable:pI,document:oI,flow:uI,flowInitial:lI,insideSpan:hI,string:cI,text:dI},Symbol.toStringTag,{value:"Module"}));function mI(e,t,n){let r={_bufferIndex:-1,_index:0,line:n&&n.line||1,column:n&&n.column||1,offset:n&&n.offset||0};const i={},s=[];let o=[],a=[];const l={attempt:E(k),check:E(w),consume:v,enter:b,exit:S,interrupt:E(w,{interrupt:!0})},u={code:null,containerState:{},defineSkip:m,events:[],now:g,parser:e,previous:null,sliceSerialize:h,sliceStream:p,write:d};let c=t.tokenize.call(u,l);return t.resolveAll&&s.push(t),u;function d(M){return o=xn(o,M),y(),o[o.length-1]!==null?[]:(P(t,0),u.events=cd(s,u.events,u),u.events)}function h(M,R){return vI(p(M),R)}function p(M){return xI(o,M)}function g(){const{_bufferIndex:M,_index:R,line:L,column:U,offset:O}=r;return{_bufferIndex:M,_index:R,line:L,column:U,offset:O}}function m(M){i[M.line]=M.column,C()}function y(){let M;for(;r._index<o.length;){const R=o[r._index];if(typeof R=="string")for(M=r._index,r._bufferIndex<0&&(r._bufferIndex=0);r._index===M&&r._bufferIndex<R.length;)x(R.charCodeAt(r._bufferIndex));else x(R)}}function x(M){c=c(M)}function v(M){se(M)?(r.line++,r.column=1,r.offset+=M===-3?2:1,C()):M!==-1&&(r.column++,r.offset++),r._bufferIndex<0?r._index++:(r._bufferIndex++,r._bufferIndex===o[r._index].length&&(r._bufferIndex=-1,r._index++)),u.previous=M}function b(M,R){const L=R||{};return L.type=M,L.start=g(),u.events.push(["enter",L,u]),a.push(L),L}function S(M){const R=a.pop();return R.end=g(),u.events.push(["exit",R,u]),R}function k(M,R){P(M,R.from)}function w(M,R){R.restore()}function E(M,R){return L;function L(U,O,J){let Q,A,F,_;return Array.isArray(U)?W(U):"tokenize"in U?W([U]):V(U);function V(ie){return H;function H(z){const re=z!==null&&ie[z],de=z!==null&&ie.null,ke=[...Array.isArray(re)?re:re?[re]:[],...Array.isArray(de)?de:de?[de]:[]];return W(ke)(z)}}function W(ie){return Q=ie,A=0,ie.length===0?J:j(ie[A])}function j(ie){return H;function H(z){return _=T(),F=ie,ie.partial||(u.currentConstruct=ie),ie.name&&u.parser.constructs.disable.null.includes(ie.name)?le():ie.tokenize.call(R?Object.assign(Object.create(u),R):u,l,te,le)(z)}}function te(ie){return M(F,_),O}function le(ie){return _.restore(),++A<Q.length?j(Q[A]):J}}}function P(M,R){M.resolveAll&&!s.includes(M)&&s.push(M),M.resolve&&an(u.events,R,u.events.length-R,M.resolve(u.events.slice(R),u)),M.resolveTo&&(u.events=M.resolveTo(u.events,u))}function T(){const M=g(),R=u.previous,L=u.currentConstruct,U=u.events.length,O=Array.from(a);return{from:U,restore:J};function J(){r=M,u.previous=R,u.currentConstruct=L,u.events.length=U,a=O,C()}}function C(){r.line in i&&r.column<2&&(r.column=i[r.line],r.offset+=i[r.line]-1)}}function xI(e,t){const n=t.start._index,r=t.start._bufferIndex,i=t.end._index,s=t.end._bufferIndex;let o;if(n===i)o=[e[n].slice(r,s)];else{if(o=e.slice(n,i),r>-1){const a=o[0];typeof a=="string"?o[0]=a.slice(r):o.shift()}s>0&&o.push(e[i].slice(0,s))}return o}function vI(e,t){let n=-1;const r=[];let i;for(;++n<e.length;){const s=e[n];let o;if(typeof s=="string")o=s;else switch(s){case-5:{o="\r";break}case-4:{o=`
|
|
@@ -154,4 +154,4 @@ ${Ft}`:"");S(null),h(dn=>dn.map(Xt=>Xt.id===de?{...Xt,isStreaming:!1,text:Pe}:Xt
|
|
|
154
154
|
prose-table:border-collapse prose-table:text-xs prose-table:w-full
|
|
155
155
|
prose-th:border prose-th:border-outline-variant/40 prose-th:px-2 prose-th:py-1 prose-th:bg-surface-dim prose-th:text-left prose-th:font-medium
|
|
156
156
|
prose-td:border prose-td:border-outline-variant/40 prose-td:px-2 prose-td:py-1`,children:f.jsx(jm,{remarkPlugins:[r$,o$],children:z.text})}):f.jsx(u6,{})})]},z.id)}),f.jsx("div",{ref:E})]}),b&&f.jsxs("div",{"data-testid":"pending-approval",className:"flex items-center gap-3 border-t border-amber-800/50 bg-amber-950/40 px-4 py-3",children:[f.jsx(Kh,{className:"h-5 w-5 text-warning flex-shrink-0 animate-pulse"}),f.jsxs("div",{className:"flex-1 min-w-0",children:[f.jsx("p",{className:"font-mono text-xs text-warning font-semibold",children:e("chat.waitingApproval")}),f.jsx("p",{className:"font-mono text-[11px] text-warning/80 mt-0.5",children:b.reason}),f.jsx("p",{className:"font-mono text-[10px] text-amber-500/60 mt-1",children:e("chat.respondInGuardian")})]})]}),f.jsxs("div",{className:"flex gap-2 border-t border-outline-variant/20 p-2 sm:p-3",children:[f.jsx("textarea",{className:"flex-1 min-w-0 rounded bg-surface-container-high px-3 py-2 text-sm text-on-surface placeholder-on-surface-variant outline-none focus:ring-1 focus:ring-primary/40 font-mono resize-none",placeholder:e("chat.messagePlaceholder",{name:u??(a==null?void 0:a.name)??e("chat.roleAgentFallback")}),value:p,onChange:z=>g(z.target.value),onKeyDown:z=>{z.key==="Enter"&&!z.shiftKey&&(z.preventDefault(),W())},disabled:m,rows:Math.min(p.split(`
|
|
157
|
-
`).length,8),style:{minHeight:"2.5rem",maxHeight:"12rem",overflow:"auto"}}),m?f.jsx("button",{onClick:A,className:"rounded bg-red-500/20 px-4 py-2 text-sm font-medium text-red-400 transition-opacity hover:bg-red-500/30",children:e("chat.stop")}):f.jsx("button",{onClick:W,disabled:!p.trim()||!Q,className:"rounded bg-primary px-4 py-2 text-sm font-medium text-on-primary transition-opacity disabled:opacity-40 hover:opacity-90",children:e("chat.send")})]})]})]}),te&&s==="chat"&&f.jsxs("div",{"data-testid":"bb-panel",className:`hidden md:flex relative flex-shrink-0 flex-col rounded-lg bg-surface-container-lowest overflow-hidden transition-all duration-200 ${P?"w-96":"w-10"}`,children:[f.jsxs("div",{"data-testid":"guardian-coming-soon-overlay",className:"absolute inset-0 z-20 flex flex-col items-center justify-center bg-surface-container-lowest/90 backdrop-blur-sm rounded-lg",children:[f.jsx(Kh,{className:"h-12 w-12 text-warning/30 mb-4"}),P&&f.jsxs(f.Fragment,{children:[f.jsx("p",{className:"font-headline text-lg font-semibold text-on-surface tracking-tight mb-2",children:e("chat.guardian")}),f.jsx("span",{className:"rounded-full bg-warning/10 border border-warning/30 px-3 py-1 font-label text-[10px] font-semibold text-warning uppercase tracking-widest mb-4",children:e("chat.comingSoon")}),f.jsxs("p",{className:"max-w-[260px] text-center font-mono text-[10px] text-on-surface-variant/50 leading-relaxed px-4",children:[e("chat.guardianBlurb1")," ",e("chat.guardianBlurb2")]})]})]}),f.jsxs("div",{className:"flex items-center gap-2 px-3 py-3 border-b border-outline-variant/20",children:[f.jsx(Kh,{className:"h-4 w-4 flex-shrink-0 text-on-surface-variant"}),P&&f.jsx(f.Fragment,{children:f.jsxs("div",{className:"flex-1 min-w-0",children:[f.jsx("p",{className:"font-headline text-xs font-semibold text-on-surface truncate",children:"Guardian"}),f.jsx("p",{className:"font-mono text-[9px] text-on-surface-variant",children:e("chat.guardianDisconnected")})]})})]}),P&&f.jsx("div",{className:"flex-1 overflow-hidden p-3 flex flex-col gap-2",children:f.jsx("p",{className:"font-mono text-[10px] text-on-surface-variant/20 m-auto text-center leading-relaxed",dangerouslySetInnerHTML:{__html:e("chat.guardianChatBlurb")}})})]})]})}const Ti="rounded bg-surface-container px-3 py-2 text-[12px] text-on-surface placeholder:text-on-surface-variant/60 outline-none focus:ring-1 focus:ring-primary/25 font-mono transition-shadow w-full",rE=Object.fromEntries(Yk.map(e=>[e.value,e.label]));function h6({entry:e}){const{t}=Se();return f.jsxs("div",{className:"rounded-lg bg-surface-container-lowest border border-outline-variant/40 p-4",children:[f.jsxs("div",{className:"flex items-center justify-between",children:[f.jsxs("div",{className:"flex items-center gap-2",children:[f.jsx("span",{className:"font-mono text-[13px] text-on-surface font-semibold",children:e.label??e.provider}),f.jsx("span",{className:"font-mono text-[10px] text-on-surface-variant/70",children:e.model}),f.jsx("span",{className:"text-success text-[10px] font-mono",children:"✓"})]}),f.jsx("span",{className:"rounded px-2 py-0.5 text-[10px] font-mono bg-primary/10 text-primary",children:"managed"})]}),f.jsx("p",{className:"font-mono text-[10px] text-on-surface-variant/60 mt-2",children:t("settings.managedBlurb")})]})}function f6({entry:e,onRemove:t,onReplaceKey:n}){const{t:r}=Se(),[i,s]=N.useState(!1),[o,a]=N.useState(e.model),[l,u]=N.useState(""),[c,d]=N.useState(!1),[h,p]=N.useState(null),[g,m]=N.useState(!1);async function y(){if(!l.trim()){p(r("common.apiKeyRequired"));return}d(!0),p(null),m(!1);try{await n(e.provider,o,l.trim()),m(!0),u(""),s(!1)}catch(x){p(x instanceof Error?x.message:r("common.errorSave"))}finally{d(!1)}}return f.jsxs("div",{className:"rounded-lg bg-surface-container-lowest border border-outline-variant/40 p-4 space-y-3",children:[f.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[f.jsxs("div",{className:"min-w-0",children:[f.jsx("span",{className:"font-mono text-[13px] text-on-surface font-semibold",children:rE[e.provider]??e.provider}),f.jsx("span",{className:"font-mono text-[10px] text-on-surface-variant/70 ml-2",children:e.model}),f.jsx("span",{className:"ml-2 text-success text-[10px] font-mono",children:"✓"})]}),f.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[!i&&f.jsx("button",{onClick:()=>{s(!0),m(!1)},className:"rounded px-2 py-1 text-[11px] font-mono text-on-surface-variant hover:text-on-surface bg-surface-container transition-colors",children:r("settings.replaceKey")}),f.jsx("button",{onClick:t,className:"rounded px-2 py-1 text-[11px] font-mono text-error/60 hover:text-error hover:bg-error/10 transition-colors",children:r("settings.delete")})]})]}),i&&f.jsxs("div",{className:"space-y-2 pt-1 border-t border-outline-variant/40",children:[f.jsxs("div",{children:[f.jsx("label",{className:"block text-[10px] uppercase tracking-[0.14em] text-on-surface-variant font-medium mb-1",children:r("settings.model")}),f.jsx("select",{className:`${Ti} appearance-none`,value:o,onChange:x=>a(x.target.value),children:ad(e.provider).map(x=>f.jsx("option",{value:x.value,children:x.label},x.value))})]}),f.jsxs("div",{children:[f.jsx("label",{className:"block text-[10px] uppercase tracking-[0.14em] text-on-surface-variant font-medium mb-1",children:r("settings.newApiKey")}),f.jsx("input",{type:"password",className:Ti,placeholder:r("settings.pasteNewKey"),value:l,onChange:x=>{u(x.target.value),p(null)},autoComplete:"off",autoFocus:!0})]}),f.jsxs("div",{className:"flex items-center gap-2",children:[f.jsx("button",{onClick:y,disabled:c,className:"rounded bg-primary px-3 py-1.5 text-[12px] font-medium text-on-primary transition-opacity disabled:opacity-40 hover:opacity-90",children:r(c?"common.saving":"common.save")}),f.jsx("button",{onClick:()=>{s(!1),u(""),p(null)},className:"rounded px-3 py-1.5 text-[12px] font-mono text-on-surface-variant hover:text-on-surface transition-colors",children:r("common.cancel")}),g&&f.jsx("span",{className:"font-mono text-[11px] text-success",children:r("common.saved")}),h&&f.jsx("span",{className:"font-mono text-[10px] text-error",children:h})]})]})]})}function p6(){const{t:e}=Se(),t=Qi(),[n,r]=N.useState(!0),[i,s]=N.useState([]),[o,a]=N.useState({showWorkspaceDirConfig:!0,showBraveSearchConfig:!0}),[l,u]=N.useState(""),[c,d]=N.useState(""),[h,p]=N.useState(""),[g,m]=N.useState(!1),[y,x]=N.useState(null),[v,b]=N.useState(!1),[S,k]=N.useState(""),[w,E]=N.useState(!1),[P,T]=N.useState(null),[C,M]=N.useState(!1),[R,L]=N.useState(!1),[U,O]=N.useState(!1);N.useEffect(()=>{Promise.all([Gk(),oR(),Kk()]).then(([H,z,re])=>{s(H.providers??[]),L(z.configured),a(re)}).catch(console.error).finally(()=>r(!1))},[]);const J=i.filter(H=>H.managed),Q=i.filter(H=>!H.managed),A=new Set(Q.map(H=>H.provider)),F=new Set(J.map(H=>H.provider)),_=Yk.filter(H=>!A.has(H.value)&&!F.has(H.value));N.useEffect(()=>{if(_.length>0&&!_.find(H=>H.value===l)){const H=_[0].value;u(H),d(Sp(H))}},[i.length]);function V(H){u(H),d(Sp(H))}async function W(){if(!l||!c||!h.trim()){x(e("common.allFieldsRequired"));return}m(!0),x(null),b(!1);try{await Ay(l,c,h.trim()),s(H=>[...H.filter(re=>re.provider!==l),{provider:l,model:c}]),b(!0),p("")}catch(H){x(H instanceof Error?H.message:e("common.errorSave"))}finally{m(!1)}}async function j(H,z,re){await Ay(H,z,re),s(de=>de.map(ke=>ke.provider===H&&!ke.managed?{provider:H,model:z}:ke))}async function te(H){confirm(e("settings.removeConfirm",{name:rE[H]??H}))&&(await sR(H),s(z=>z.filter(re=>re.provider!==H)))}async function le(){if(!S.trim()){T(e("common.apiKeyRequired"));return}E(!0),T(null),M(!1);try{await aR("brave",S.trim()),M(!0),L(!0),k(""),O(!1)}catch(H){T(H instanceof Error?H.message:e("common.errorSave"))}finally{E(!1)}}async function ie(){E(!0),T(null);try{await lR(),L(!1),k(""),M(!1),O(!1)}catch(H){T(H instanceof Error?H.message:e("common.errorReset"))}finally{E(!1)}}return n?f.jsx("div",{className:"text-on-surface-variant/70 font-mono text-xs p-8",children:e("common.loading")}):f.jsxs("div",{className:"max-w-2xl mx-auto py-6 sm:py-8 px-4",children:[f.jsxs("button",{type:"button",onClick:()=>t(-1),className:"flex items-center gap-1.5 mb-6 font-mono text-[12px] text-on-surface-variant hover:text-on-surface transition-colors",children:[f.jsx("span",{className:"material-symbols-outlined text-[16px]",children:"arrow_back"}),e("settings.backToAgent")]}),f.jsxs("div",{className:"mb-8",children:[f.jsxs("h1",{className:"font-headline text-4xl font-bold text-on-surface",children:[f.jsx("span",{className:"highlight-marker",children:e("settings.titleHighlight")})," ",e("settings.titleSuffix")]}),f.jsx("p",{className:"font-mono text-[11px] text-on-surface-variant mt-2",children:e("settings.blurb")})]}),J.length>0&&f.jsx("div",{className:"space-y-2 mb-4",children:J.map(H=>f.jsx(h6,{entry:H},`managed-${H.provider}`))}),Q.length===0&&J.length===0?f.jsx("p",{className:"font-mono text-[11px] text-warning/80 mb-4",children:e("settings.noProvidersWarning")}):Q.length>0?f.jsx("div",{className:"space-y-2 mb-6",children:Q.map(H=>f.jsx(f6,{entry:H,onRemove:()=>te(H.provider),onReplaceKey:j},H.provider))}):null,_.length>0&&f.jsxs("div",{className:"rounded-lg bg-surface-container-lowest border border-outline-variant/40 p-5 space-y-4",children:[f.jsx("p",{className:"text-[10px] uppercase tracking-[0.14em] text-on-surface-variant font-medium",children:e("settings.addProvider")}),f.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[f.jsxs("div",{children:[f.jsx("label",{className:"block text-[10px] uppercase tracking-[0.14em] text-on-surface-variant font-medium mb-1.5",children:e("settings.provider")}),f.jsx("select",{className:`${Ti} appearance-none`,value:l,onChange:H=>V(H.target.value),children:_.map(H=>f.jsx("option",{value:H.value,children:H.label},H.value))})]}),f.jsxs("div",{children:[f.jsx("label",{className:"block text-[10px] uppercase tracking-[0.14em] text-on-surface-variant font-medium mb-1.5",children:e("settings.model")}),f.jsx("select",{className:`${Ti} appearance-none`,value:c,onChange:H=>d(H.target.value),children:ad(l).map(H=>f.jsx("option",{value:H.value,children:H.label},H.value))})]})]}),f.jsxs("div",{children:[f.jsx("label",{className:"block text-[10px] uppercase tracking-[0.14em] text-on-surface-variant font-medium mb-1.5",children:e("settings.apiKey")}),f.jsx("input",{type:"password",className:Ti,placeholder:e("settings.pasteApiKey"),value:h,onChange:H=>{p(H.target.value),x(null),b(!1)},autoComplete:"off"})]}),f.jsxs("div",{className:"flex items-center gap-3",children:[f.jsx("button",{onClick:W,disabled:g||!h.trim(),className:"rounded bg-primary px-4 py-2 text-sm font-medium text-on-primary transition-opacity disabled:opacity-40 hover:opacity-90",children:e(g?"common.adding":"common.add")}),v&&f.jsx("span",{className:"font-mono text-[11px] text-success",children:e("settings.added")}),y&&f.jsx("span",{className:"font-mono text-[10px] text-error",children:y})]})]}),f.jsxs("div",{className:"mt-8 pt-8 border-t border-outline-variant/40",children:[f.jsx("h2",{className:"font-headline text-2xl font-bold text-on-surface mb-1",children:e("settings.webSearch")}),o.showBraveSearchConfig?f.jsxs(f.Fragment,{children:[f.jsxs("p",{className:"font-mono text-[11px] text-on-surface-variant/70 mb-6",children:[e("settings.braveBlurbPrefix")," ",R?f.jsx("span",{className:"text-success",children:e("settings.configured")}):f.jsx("span",{className:"text-warning",children:e("settings.notConfigured")})]}),f.jsxs("div",{className:"space-y-4",children:[f.jsxs("div",{children:[f.jsx("label",{className:"block font-mono text-[11px] text-on-surface-variant mb-1",children:e("settings.braveKeyLabel")}),R&&!U?f.jsxs("div",{className:"flex items-center gap-2",children:[f.jsx("input",{type:"password",className:Ti,value:"••••••••••••••••••••",readOnly:!0}),f.jsx("button",{type:"button",onClick:()=>{O(!0),M(!1)},className:"shrink-0 rounded px-3 py-2 text-[11px] font-mono text-on-surface-variant hover:text-on-surface bg-surface-container transition-colors",children:e("common.replace")})]}):f.jsx("input",{type:"password",className:Ti,placeholder:e("settings.enterBraveKey"),value:S,onChange:H=>{k(H.target.value),M(!1)},autoComplete:"off",autoFocus:U})]}),f.jsxs("div",{className:"flex items-center gap-3",children:[(!R||U)&&f.jsx("button",{onClick:le,disabled:w||!S.trim(),className:"rounded-lg bg-primary px-4 py-2 text-sm font-medium text-on-primary transition-opacity hover:opacity-90 disabled:opacity-40 disabled:cursor-not-allowed",children:e(w?"common.saving":"common.save")}),U&&f.jsx("button",{onClick:()=>{O(!1),k(""),T(null)},className:"rounded px-3 py-1.5 text-[12px] font-mono text-on-surface-variant hover:text-on-surface transition-colors",children:e("common.cancel")}),R&&f.jsx("button",{onClick:ie,disabled:w,className:"rounded px-3 py-2 text-[12px] font-mono text-on-surface-variant hover:text-error hover:bg-error/10 transition-colors disabled:opacity-40",children:e("common.delete")}),C&&f.jsx("span",{className:"font-mono text-[11px] text-success",children:e("common.saved")}),P&&f.jsx("span",{className:"font-mono text-[10px] text-error",children:P})]})]})]}):f.jsxs("p",{className:"font-mono text-[11px] text-on-surface-variant/70 mt-2",children:[e("settings.braveManagedBlurb")," ",f.jsx("span",{className:"text-success",children:e("settings.active")})]})]})]})}const g6=1280,m6=800,l_=500,u_=5,c_={Backspace:8,Tab:9,Enter:13,Shift:16,Control:17,Alt:18,Pause:19,CapsLock:20,Escape:27,PageUp:33,PageDown:34,End:35,Home:36,ArrowLeft:37,ArrowUp:38,ArrowRight:39,ArrowDown:40,Insert:45,Delete:46,Meta:91,ContextMenu:93,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123};function x6(){const{t:e}=Se(),{token:t}=Uf(),[n,r]=N.useState(null),[i,s]=N.useState(!1),[o,a]=N.useState(null),[l,u]=N.useState(!1),[c,d]=N.useState(!1),[h,p]=N.useState(""),[g,m]=N.useState(""),[y,x]=N.useState(""),v=N.useRef(null),b=N.useRef(null),S=N.useRef(null),k=N.useRef(null),w=N.useRef({time:0,x:0,y:0});N.useEffect(()=>{t&&fetch(`/api/takeover/${t}`).then(_=>_.status===404?(s(!0),null):_.json()).then(_=>{_&&(r(_),_.url&&m(_.url))}).catch(()=>s(!0))},[t]),N.useEffect(()=>{if(!n)return;const _=new WebSocket(qk(n.agentId,n.sessionId));return b.current=_,_.onmessage=V=>{try{const W=JSON.parse(V.data);W.type==="frame"&&W.data?a(`data:image/jpeg;base64,${W.data}`):(W.type==="attached"||W.type==="tab_changed")&&(W.url&&m(W.url),W.title&&x(W.title))}catch{}},()=>{_.onmessage=null,_.close()}},[n]),N.useEffect(()=>{var _;(_=S.current)==null||_.focus()},[n]);const E=N.useCallback(_=>{var V;((V=b.current)==null?void 0:V.readyState)===WebSocket.OPEN&&b.current.send(JSON.stringify(_))},[]),P=N.useCallback((_,V)=>{const W=v.current;if(!W)return{x:0,y:0};const j=W.getBoundingClientRect();if(j.width===0||j.height===0)return{x:0,y:0};const te=W.naturalWidth||g6,le=W.naturalHeight||m6,ie=Math.max(0,Math.min(j.width,_-j.left)),H=Math.max(0,Math.min(j.height,V-j.top));return{x:Math.round(ie/j.width*te),y:Math.round(H/j.height*le)}},[]),T=N.useCallback(_=>(_.shiftKey?8:0)|(_.ctrlKey?2:0)|(_.altKey?1:0)|(_.metaKey?4:0),[]),C=_=>_===2?"right":_===1?"middle":"left",M=_=>{const{x:V,y:W}=P(_.clientX,_.clientY);E({type:"mouse",eventType:"mouseMoved",x:V,y:W,button:k.current??"none",clickCount:0,modifiers:T(_.nativeEvent)})},R=_=>{var re;(re=S.current)==null||re.focus();const{x:V,y:W}=P(_.clientX,_.clientY),j=C(_.button),te=Date.now(),le=te-w.current.time,ie=Math.abs(V-w.current.x),H=Math.abs(W-w.current.y),z=le<l_&&ie<u_&&H<u_?2:1;w.current={time:te,x:V,y:W},k.current=j,E({type:"mouse",eventType:"mousePressed",x:V,y:W,button:j,clickCount:z,modifiers:T(_.nativeEvent)})},L=_=>{const{x:V,y:W}=P(_.clientX,_.clientY),j=C(_.button),te=w.current.time===0?1:Date.now()-w.current.time<l_?2:1;k.current=null,E({type:"mouse",eventType:"mouseReleased",x:V,y:W,button:j,clickCount:te,modifiers:T(_.nativeEvent)})},U=()=>{k.current&&(k.current=null)},O=_=>{E({type:"scroll",...P(_.clientX,_.clientY),deltaY:_.deltaY})},J=_=>{var W;if(((W=_.target)==null?void 0:W.tagName)==="INPUT")return;_.preventDefault();const V=c_[_.key];_.key.length===1?(E({type:"key",eventType:"rawKeyDown",key:_.key,code:_.code,modifiers:T(_.nativeEvent),windowsVirtualKeyCode:_.key.toUpperCase().charCodeAt(0)}),E({type:"insertText",text:_.key})):E({type:"key",eventType:"rawKeyDown",key:_.key,code:_.code,modifiers:T(_.nativeEvent),windowsVirtualKeyCode:V??0})},Q=_=>{var W;if(((W=_.target)==null?void 0:W.tagName)==="INPUT")return;const V=_.key.length===1?_.key.toUpperCase().charCodeAt(0):c_[_.key]??0;E({type:"key",eventType:"keyUp",key:_.key,code:_.code,modifiers:T(_.nativeEvent),windowsVirtualKeyCode:V})},A=_=>{var W;if(((W=_.target)==null?void 0:W.tagName)==="INPUT")return;_.preventDefault();const V=_.clipboardData.getData("text/plain");V&&E({type:"insertText",text:V})},F=async()=>{var _;if(!(!t||c)){d(!0);try{await fetch(`/api/takeover/${t}/resolve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({note:h.trim()||void 0})}),(_=b.current)==null||_.close(),u(!0)}catch{d(!1)}}};return i?f.jsx("div",{className:"flex h-screen items-center justify-center bg-background font-body text-on-surface px-6",children:f.jsxs("div",{className:"text-center max-w-md",children:[f.jsx("p",{className:"text-[11px] font-label uppercase tracking-[0.15em] text-secondary/70 mb-2",children:e("takeover.sessionExpiredLabel")}),f.jsx("h1",{className:"font-headline text-[32px] leading-tight text-on-surface mb-3",children:e("takeover.sessionExpired")}),f.jsx("p",{className:"text-[15px] leading-relaxed text-on-surface-variant italic",children:e("takeover.sessionExpiredBlurb")})]})}):l?f.jsx("div",{className:"flex h-screen items-center justify-center bg-background font-body text-on-surface px-6",children:f.jsxs("div",{className:"text-center max-w-md",children:[f.jsx("p",{className:"text-[11px] font-label uppercase tracking-[0.15em] text-primary/70 mb-2",children:e("takeover.completeLabel")}),f.jsx("h1",{className:"font-headline text-[32px] leading-tight text-on-surface mb-3",children:e("takeover.controlReturned")}),f.jsx("p",{className:"text-[15px] leading-relaxed text-on-surface-variant italic",children:e("takeover.closeTab")})]})}):n?f.jsxs("div",{className:"flex flex-col h-screen bg-background font-body text-on-surface overflow-hidden",children:[f.jsxs("div",{className:"flex items-start gap-4 px-8 py-5 bg-surface-container-low flex-shrink-0",children:[f.jsx("div",{className:"flex-shrink-0 mt-1 w-7 h-7 rounded-full bg-primary-fixed flex items-center justify-center",children:f.jsx("span",{className:"font-headline italic text-[15px] text-primary",children:"!"})}),f.jsxs("div",{className:"flex-1 min-w-0",children:[f.jsx("p",{className:"text-[10px] font-label uppercase tracking-[0.15em] text-primary/70 mb-1",children:e("takeover.agentNeedsHelp")}),f.jsx("p",{className:"font-headline text-[17px] leading-snug text-on-surface",children:n.reason})]})]}),f.jsxs("div",{className:"flex items-center gap-3 px-6 py-3 bg-surface-container flex-shrink-0",children:[f.jsxs("div",{className:"flex gap-1.5 flex-shrink-0",children:[f.jsx("span",{className:"w-3 h-3 rounded-full bg-secondary/60"}),f.jsx("span",{className:"w-3 h-3 rounded-full bg-tertiary-fixed"}),f.jsx("span",{className:"w-3 h-3 rounded-full bg-primary/40"})]}),f.jsxs("div",{className:"flex-1 flex items-center gap-2 bg-surface-container-lowest rounded-md px-3 py-1.5 min-w-0",children:[f.jsx("span",{className:"text-[11px] text-primary flex-shrink-0","aria-hidden":!0,children:"∎"}),f.jsx("span",{className:"text-[12px] font-mono text-on-surface truncate",children:g||n.url||"about:blank"}),y&&f.jsxs("span",{className:"text-[11px] font-body italic text-on-surface-variant/70 flex-shrink-0 hidden md:inline",children:["— ",y]})]}),f.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0",children:[f.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-secondary animate-pulse"}),f.jsx("span",{className:"text-[10px] font-label uppercase tracking-[0.15em] text-secondary",children:e("takeover.liveLabel")})]})]}),f.jsx("div",{ref:S,tabIndex:0,className:"flex-1 flex items-center justify-center overflow-hidden outline-none cursor-default bg-surface-container-highest",onMouseMove:M,onMouseDown:R,onMouseUp:L,onMouseLeave:U,onWheel:O,onKeyDown:J,onKeyUp:Q,onPaste:A,onContextMenu:_=>_.preventDefault(),children:o?f.jsx("img",{ref:v,src:o,alt:"live browser",className:"max-w-full max-h-full object-contain select-none",draggable:!1,style:{pointerEvents:"none"}}):f.jsx("p",{className:"font-mono text-[10px] text-on-surface-variant/50 animate-pulse",children:e("takeover.waitingStream")})}),f.jsxs("div",{className:"flex items-end gap-4 px-8 py-5 bg-surface-container-low flex-shrink-0",children:[f.jsxs("div",{className:"flex-1 flex flex-col",children:[f.jsxs("label",{className:"text-[10px] font-label uppercase tracking-[0.15em] text-on-surface-variant/70 mb-1",children:[e("takeover.whatDidYouDo")," ",f.jsx("span",{className:"italic text-on-surface-variant/50",children:e("takeover.optional")})]}),f.jsx("input",{type:"text",value:h,onChange:_=>p(_.target.value),onKeyDown:_=>{_.key==="Enter"&&!_.shiftKey&&(_.preventDefault(),F())},placeholder:e("takeover.describeActionPlaceholder"),disabled:c,className:"bg-transparent border-0 border-b border-outline-variant/30 focus:border-primary focus:outline-none font-body text-[15px] text-on-surface placeholder:text-on-surface-variant/40 placeholder:italic px-0 py-2 disabled:opacity-50"})]}),f.jsx("button",{onClick:F,disabled:c,className:"flex-shrink-0 rounded-sm bg-primary text-on-primary font-label text-[11px] uppercase tracking-[0.15em] px-5 py-3 hover:bg-primary/90 transition-colors disabled:opacity-40 disabled:cursor-not-allowed",children:e(c?"takeover.returning":"takeover.completed")})]})]}):f.jsx("div",{className:"flex h-screen items-center justify-center bg-background font-body",children:f.jsx("p",{className:"font-mono text-[11px] text-on-surface-variant/60 animate-pulse",children:e("takeover.connecting")})})}function v6(){const e=Ji();return N.useEffect(()=>{wp("page_viewed",{path:e.pathname})},[e.pathname]),f.jsxs(TN,{children:[f.jsx(Dr,{path:"takeover/:token",element:f.jsx(x6,{})}),f.jsxs(Dr,{element:f.jsx(TM,{}),children:[f.jsx(Dr,{index:!0,element:f.jsx(cv,{to:"/dashboard",replace:!0})}),f.jsx(Dr,{path:"dashboard",element:f.jsx(pR,{})}),f.jsx(Dr,{path:"agents/:id/*",element:f.jsx(d6,{})}),f.jsx(Dr,{path:"settings",element:f.jsx(p6,{})}),f.jsx(Dr,{path:"*",element:f.jsx(cv,{to:"/dashboard",replace:!0})})]})]})}WT();Yh.createRoot(document.getElementById("root")).render(f.jsx(__.StrictMode,{children:f.jsx(NM,{children:f.jsx(LN,{children:f.jsx(v6,{})})})}));
|
|
157
|
+
`).length,8),style:{minHeight:"2.5rem",maxHeight:"12rem",overflow:"auto"}}),m?f.jsx("button",{onClick:A,className:"rounded bg-red-500/20 px-4 py-2 text-sm font-medium text-red-400 transition-opacity hover:bg-red-500/30",children:e("chat.stop")}):f.jsx("button",{onClick:W,disabled:!p.trim()||!Q,className:"rounded bg-primary px-4 py-2 text-sm font-medium text-on-primary transition-opacity disabled:opacity-40 hover:opacity-90",children:e("chat.send")})]})]})]}),te&&s==="chat"&&f.jsxs("div",{"data-testid":"bb-panel",className:`hidden md:flex relative flex-shrink-0 flex-col rounded-lg bg-surface-container-lowest overflow-hidden transition-all duration-200 ${P?"w-96":"w-10"}`,children:[f.jsxs("div",{"data-testid":"guardian-coming-soon-overlay",className:"absolute inset-0 z-20 flex flex-col items-center justify-center bg-surface-container-lowest/90 backdrop-blur-sm rounded-lg",children:[f.jsx(Kh,{className:"h-12 w-12 text-warning/30 mb-4"}),P&&f.jsxs(f.Fragment,{children:[f.jsx("p",{className:"font-headline text-lg font-semibold text-on-surface tracking-tight mb-2",children:e("chat.guardian")}),f.jsx("span",{className:"rounded-full bg-warning/10 border border-warning/30 px-3 py-1 font-label text-[10px] font-semibold text-warning uppercase tracking-widest mb-4",children:e("chat.comingSoon")}),f.jsxs("p",{className:"max-w-[260px] text-center font-mono text-[10px] text-on-surface-variant/50 leading-relaxed px-4",children:[e("chat.guardianBlurb1")," ",e("chat.guardianBlurb2")]})]})]}),f.jsxs("div",{className:"flex items-center gap-2 px-3 py-3 border-b border-outline-variant/20",children:[f.jsx(Kh,{className:"h-4 w-4 flex-shrink-0 text-on-surface-variant"}),P&&f.jsx(f.Fragment,{children:f.jsxs("div",{className:"flex-1 min-w-0",children:[f.jsx("p",{className:"font-headline text-xs font-semibold text-on-surface truncate",children:"Guardian"}),f.jsx("p",{className:"font-mono text-[9px] text-on-surface-variant",children:e("chat.guardianDisconnected")})]})})]}),P&&f.jsx("div",{className:"flex-1 overflow-hidden p-3 flex flex-col gap-2",children:f.jsx("p",{className:"font-mono text-[10px] text-on-surface-variant/20 m-auto text-center leading-relaxed",dangerouslySetInnerHTML:{__html:e("chat.guardianChatBlurb")}})})]})]})}const Ti="rounded bg-surface-container px-3 py-2 text-[12px] text-on-surface placeholder:text-on-surface-variant/60 outline-none focus:ring-1 focus:ring-primary/25 font-mono transition-shadow w-full",rE=Object.fromEntries(Yk.map(e=>[e.value,e.label]));function h6({entry:e}){const{t}=Se();return f.jsxs("div",{className:"rounded-lg bg-surface-container-lowest border border-outline-variant/40 p-4",children:[f.jsxs("div",{className:"flex items-center justify-between",children:[f.jsxs("div",{className:"flex items-center gap-2",children:[f.jsx("span",{className:"font-mono text-[13px] text-on-surface font-semibold",children:e.label??e.provider}),f.jsx("span",{className:"font-mono text-[10px] text-on-surface-variant/70",children:e.model}),f.jsx("span",{className:"text-success text-[10px] font-mono",children:"✓"})]}),f.jsx("span",{className:"rounded px-2 py-0.5 text-[10px] font-mono bg-primary/10 text-primary",children:"managed"})]}),f.jsx("p",{className:"font-mono text-[10px] text-on-surface-variant/60 mt-2",children:t("settings.managedBlurb")})]})}function f6({entry:e,onRemove:t,onReplaceKey:n}){const{t:r}=Se(),[i,s]=N.useState(!1),[o,a]=N.useState(e.model),[l,u]=N.useState(""),[c,d]=N.useState(!1),[h,p]=N.useState(null),[g,m]=N.useState(!1);async function y(){if(!l.trim()){p(r("common.apiKeyRequired"));return}d(!0),p(null),m(!1);try{await n(e.provider,o,l.trim()),m(!0),u(""),s(!1)}catch(x){p(x instanceof Error?x.message:r("common.errorSave"))}finally{d(!1)}}return f.jsxs("div",{className:"rounded-lg bg-surface-container-lowest border border-outline-variant/40 p-4 space-y-3",children:[f.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[f.jsxs("div",{className:"min-w-0",children:[f.jsx("span",{className:"font-mono text-[13px] text-on-surface font-semibold",children:rE[e.provider]??e.provider}),f.jsx("span",{className:"font-mono text-[10px] text-on-surface-variant/70 ml-2",children:e.model}),f.jsx("span",{className:"ml-2 text-success text-[10px] font-mono",children:"✓"})]}),f.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[!i&&f.jsx("button",{onClick:()=>{s(!0),m(!1)},className:"rounded px-2 py-1 text-[11px] font-mono text-on-surface-variant hover:text-on-surface bg-surface-container transition-colors",children:r("settings.replaceKey")}),f.jsx("button",{onClick:t,className:"rounded px-2 py-1 text-[11px] font-mono text-error/60 hover:text-error hover:bg-error/10 transition-colors",children:r("settings.delete")})]})]}),i&&f.jsxs("div",{className:"space-y-2 pt-1 border-t border-outline-variant/40",children:[f.jsxs("div",{children:[f.jsx("label",{className:"block text-[10px] uppercase tracking-[0.14em] text-on-surface-variant font-medium mb-1",children:r("settings.model")}),f.jsx("select",{className:`${Ti} appearance-none`,value:o,onChange:x=>a(x.target.value),children:ad(e.provider).map(x=>f.jsx("option",{value:x.value,children:x.label},x.value))})]}),f.jsxs("div",{children:[f.jsx("label",{className:"block text-[10px] uppercase tracking-[0.14em] text-on-surface-variant font-medium mb-1",children:r("settings.newApiKey")}),f.jsx("input",{type:"password",className:Ti,placeholder:r("settings.pasteNewKey"),value:l,onChange:x=>{u(x.target.value),p(null)},autoComplete:"off",autoFocus:!0})]}),f.jsxs("div",{className:"flex items-center gap-2",children:[f.jsx("button",{onClick:y,disabled:c,className:"rounded bg-primary px-3 py-1.5 text-[12px] font-medium text-on-primary transition-opacity disabled:opacity-40 hover:opacity-90",children:r(c?"common.saving":"common.save")}),f.jsx("button",{onClick:()=>{s(!1),u(""),p(null)},className:"rounded px-3 py-1.5 text-[12px] font-mono text-on-surface-variant hover:text-on-surface transition-colors",children:r("common.cancel")}),g&&f.jsx("span",{className:"font-mono text-[11px] text-success",children:r("common.saved")}),h&&f.jsx("span",{className:"font-mono text-[10px] text-error",children:h})]})]})]})}function p6(){const{t:e}=Se(),t=Qi(),[n,r]=N.useState(!0),[i,s]=N.useState([]),[o,a]=N.useState({showWorkspaceDirConfig:!0,showBraveSearchConfig:!0}),[l,u]=N.useState(""),[c,d]=N.useState(""),[h,p]=N.useState(""),[g,m]=N.useState(!1),[y,x]=N.useState(null),[v,b]=N.useState(!1),[S,k]=N.useState(""),[w,E]=N.useState(!1),[P,T]=N.useState(null),[C,M]=N.useState(!1),[R,L]=N.useState(!1),[U,O]=N.useState(!1);N.useEffect(()=>{Promise.all([Gk(),oR(),Kk()]).then(([H,z,re])=>{s(H.providers??[]),L(z.configured),a(re)}).catch(console.error).finally(()=>r(!1))},[]);const J=i.filter(H=>H.managed),Q=i.filter(H=>!H.managed),A=new Set(Q.map(H=>H.provider)),F=new Set(J.map(H=>H.provider)),_=Yk.filter(H=>!A.has(H.value)&&!F.has(H.value));N.useEffect(()=>{if(_.length>0&&!_.find(H=>H.value===l)){const H=_[0].value;u(H),d(Sp(H))}},[i.length]);function V(H){u(H),d(Sp(H))}async function W(){if(!l||!c||!h.trim()){x(e("common.allFieldsRequired"));return}m(!0),x(null),b(!1);try{await Ay(l,c,h.trim()),s(H=>[...H.filter(re=>re.provider!==l),{provider:l,model:c}]),b(!0),p("")}catch(H){x(H instanceof Error?H.message:e("common.errorSave"))}finally{m(!1)}}async function j(H,z,re){await Ay(H,z,re),s(de=>de.map(ke=>ke.provider===H&&!ke.managed?{provider:H,model:z}:ke))}async function te(H){confirm(e("settings.removeConfirm",{name:rE[H]??H}))&&(await sR(H),s(z=>z.filter(re=>re.provider!==H)))}async function le(){if(!S.trim()){T(e("common.apiKeyRequired"));return}E(!0),T(null),M(!1);try{await aR("brave",S.trim()),M(!0),L(!0),k(""),O(!1)}catch(H){T(H instanceof Error?H.message:e("common.errorSave"))}finally{E(!1)}}async function ie(){E(!0),T(null);try{await lR(),L(!1),k(""),M(!1),O(!1)}catch(H){T(H instanceof Error?H.message:e("common.errorReset"))}finally{E(!1)}}return n?f.jsx("div",{className:"text-on-surface-variant/70 font-mono text-xs p-8",children:e("common.loading")}):f.jsxs("div",{className:"max-w-2xl mx-auto py-6 sm:py-8 px-4",children:[f.jsxs("button",{type:"button",onClick:()=>t(-1),className:"flex items-center gap-1.5 mb-6 font-mono text-[12px] text-on-surface-variant hover:text-on-surface transition-colors",children:[f.jsx("span",{className:"material-symbols-outlined text-[16px]",children:"arrow_back"}),e("settings.backToAgent")]}),f.jsxs("div",{className:"mb-8",children:[f.jsxs("h1",{className:"font-headline text-4xl font-bold text-on-surface",children:[f.jsx("span",{className:"highlight-marker",children:e("settings.titleHighlight")})," ",e("settings.titleSuffix")]}),f.jsx("p",{className:"font-mono text-[11px] text-on-surface-variant mt-2",children:e("settings.blurb")})]}),J.length>0&&f.jsx("div",{className:"space-y-2 mb-4",children:J.map(H=>f.jsx(h6,{entry:H},`managed-${H.provider}`))}),Q.length===0&&J.length===0?f.jsx("p",{className:"font-mono text-[11px] text-warning/80 mb-4",children:e("settings.noProvidersWarning")}):Q.length>0?f.jsx("div",{className:"space-y-2 mb-6",children:Q.map(H=>f.jsx(f6,{entry:H,onRemove:()=>te(H.provider),onReplaceKey:j},H.provider))}):null,_.length>0&&f.jsxs("div",{className:"rounded-lg bg-surface-container-lowest border border-outline-variant/40 p-5 space-y-4",children:[f.jsx("p",{className:"text-[10px] uppercase tracking-[0.14em] text-on-surface-variant font-medium",children:e("settings.addProvider")}),f.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[f.jsxs("div",{children:[f.jsx("label",{className:"block text-[10px] uppercase tracking-[0.14em] text-on-surface-variant font-medium mb-1.5",children:e("settings.provider")}),f.jsx("select",{className:`${Ti} appearance-none`,value:l,onChange:H=>V(H.target.value),children:_.map(H=>f.jsx("option",{value:H.value,children:H.label},H.value))})]}),f.jsxs("div",{children:[f.jsx("label",{className:"block text-[10px] uppercase tracking-[0.14em] text-on-surface-variant font-medium mb-1.5",children:e("settings.model")}),f.jsx("select",{className:`${Ti} appearance-none`,value:c,onChange:H=>d(H.target.value),children:ad(l).map(H=>f.jsx("option",{value:H.value,children:H.label},H.value))})]})]}),f.jsxs("div",{children:[f.jsx("label",{className:"block text-[10px] uppercase tracking-[0.14em] text-on-surface-variant font-medium mb-1.5",children:e("settings.apiKey")}),f.jsx("input",{type:"password",className:Ti,placeholder:e("settings.pasteApiKey"),value:h,onChange:H=>{p(H.target.value),x(null),b(!1)},autoComplete:"off"})]}),f.jsxs("div",{className:"flex items-center gap-3",children:[f.jsx("button",{onClick:W,disabled:g||!h.trim(),className:"rounded bg-primary px-4 py-2 text-sm font-medium text-on-primary transition-opacity disabled:opacity-40 hover:opacity-90",children:e(g?"common.adding":"common.add")}),v&&f.jsx("span",{className:"font-mono text-[11px] text-success",children:e("settings.added")}),y&&f.jsx("span",{className:"font-mono text-[10px] text-error",children:y})]})]}),f.jsxs("div",{className:"mt-8 pt-8 border-t border-outline-variant/40",children:[f.jsx("h2",{className:"font-headline text-2xl font-bold text-on-surface mb-1",children:e("settings.webSearch")}),o.showBraveSearchConfig?f.jsxs(f.Fragment,{children:[f.jsxs("p",{className:"font-mono text-[11px] text-on-surface-variant/70 mb-6",children:[e("settings.braveBlurbPrefix")," ",R?f.jsx("span",{className:"text-success",children:e("settings.configured")}):f.jsx("span",{className:"text-warning",children:e("settings.notConfigured")})]}),f.jsxs("div",{className:"space-y-4",children:[f.jsxs("div",{children:[f.jsx("label",{className:"block font-mono text-[11px] text-on-surface-variant mb-1",children:e("settings.braveKeyLabel")}),R&&!U?f.jsxs("div",{className:"flex items-center gap-2",children:[f.jsx("input",{type:"password",className:Ti,value:"••••••••••••••••••••",readOnly:!0}),f.jsx("button",{type:"button",onClick:()=>{O(!0),M(!1)},className:"shrink-0 rounded px-3 py-2 text-[11px] font-mono text-on-surface-variant hover:text-on-surface bg-surface-container transition-colors",children:e("common.replace")})]}):f.jsx("input",{type:"password",className:Ti,placeholder:e("settings.enterBraveKey"),value:S,onChange:H=>{k(H.target.value),M(!1)},autoComplete:"off",autoFocus:U})]}),f.jsxs("div",{className:"flex items-center gap-3",children:[(!R||U)&&f.jsx("button",{onClick:le,disabled:w||!S.trim(),className:"rounded-lg bg-primary px-4 py-2 text-sm font-medium text-on-primary transition-opacity hover:opacity-90 disabled:opacity-40 disabled:cursor-not-allowed",children:e(w?"common.saving":"common.save")}),U&&f.jsx("button",{onClick:()=>{O(!1),k(""),T(null)},className:"rounded px-3 py-1.5 text-[12px] font-mono text-on-surface-variant hover:text-on-surface transition-colors",children:e("common.cancel")}),R&&f.jsx("button",{onClick:ie,disabled:w,className:"rounded px-3 py-2 text-[12px] font-mono text-on-surface-variant hover:text-error hover:bg-error/10 transition-colors disabled:opacity-40",children:e("common.delete")}),C&&f.jsx("span",{className:"font-mono text-[11px] text-success",children:e("common.saved")}),P&&f.jsx("span",{className:"font-mono text-[10px] text-error",children:P})]})]})]}):f.jsxs("p",{className:"font-mono text-[11px] text-on-surface-variant/70 mt-2",children:[e("settings.braveManagedBlurb")," ",f.jsx("span",{className:"text-success",children:e("settings.active")})]})]})]})}const g6=1280,m6=800,l_=500,u_=5,c_={Backspace:8,Tab:9,Enter:13,Shift:16,Control:17,Alt:18,Pause:19,CapsLock:20,Escape:27,PageUp:33,PageDown:34,End:35,Home:36,ArrowLeft:37,ArrowUp:38,ArrowRight:39,ArrowDown:40,Insert:45,Delete:46,Meta:91,ContextMenu:93,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123};function x6(){const{t:e}=Se(),{token:t}=Uf(),[n,r]=N.useState(null),[i,s]=N.useState(!1),[o,a]=N.useState(null),[l,u]=N.useState(!1),[c,d]=N.useState(!1),[h,p]=N.useState(""),[g,m]=N.useState(""),[y,x]=N.useState(""),v=N.useRef(null),b=N.useRef(null),S=N.useRef(null),k=N.useRef(null),w=N.useRef({time:0,x:0,y:0});N.useEffect(()=>{t&&fetch(`/api/takeover/${t}`).then(_=>_.status===404?(s(!0),null):_.json()).then(_=>{_&&(r(_),_.url&&m(_.url))}).catch(()=>s(!0))},[t]),N.useEffect(()=>{if(!n)return;const _=new WebSocket(qk(n.agentId,n.sessionId));return b.current=_,_.onmessage=V=>{try{const W=JSON.parse(V.data);W.type==="frame"&&W.data?a(`data:image/jpeg;base64,${W.data}`):(W.type==="attached"||W.type==="tab_changed")&&(W.url&&m(W.url),W.title&&x(W.title))}catch{}},()=>{_.onmessage=null,_.close()}},[n]),N.useEffect(()=>{var _;(_=S.current)==null||_.focus()},[n]);const E=N.useCallback(_=>{var V;((V=b.current)==null?void 0:V.readyState)===WebSocket.OPEN&&b.current.send(JSON.stringify(_))},[]),P=N.useCallback((_,V)=>{const W=v.current;if(!W)return{x:0,y:0};const j=W.getBoundingClientRect();if(j.width===0||j.height===0)return{x:0,y:0};const te=W.naturalWidth||g6,le=W.naturalHeight||m6,ie=Math.max(0,Math.min(j.width,_-j.left)),H=Math.max(0,Math.min(j.height,V-j.top));return{x:Math.round(ie/j.width*te),y:Math.round(H/j.height*le)}},[]),T=N.useCallback(_=>(_.shiftKey?8:0)|(_.ctrlKey?2:0)|(_.altKey?1:0)|(_.metaKey?4:0),[]),C=_=>_===2?"right":_===1?"middle":"left",M=_=>{const{x:V,y:W}=P(_.clientX,_.clientY);E({type:"mouse",eventType:"mouseMoved",x:V,y:W,button:k.current??"none",clickCount:0,modifiers:T(_.nativeEvent)})},R=_=>{var re;(re=S.current)==null||re.focus();const{x:V,y:W}=P(_.clientX,_.clientY),j=C(_.button),te=Date.now(),le=te-w.current.time,ie=Math.abs(V-w.current.x),H=Math.abs(W-w.current.y),z=le<l_&&ie<u_&&H<u_?2:1;w.current={time:te,x:V,y:W},k.current=j,E({type:"mouse",eventType:"mousePressed",x:V,y:W,button:j,clickCount:z,modifiers:T(_.nativeEvent)})},L=_=>{const{x:V,y:W}=P(_.clientX,_.clientY),j=C(_.button),te=w.current.time===0?1:Date.now()-w.current.time<l_?2:1;k.current=null,E({type:"mouse",eventType:"mouseReleased",x:V,y:W,button:j,clickCount:te,modifiers:T(_.nativeEvent)})},U=()=>{k.current&&(k.current=null)},O=_=>{E({type:"scroll",...P(_.clientX,_.clientY),deltaY:_.deltaY})},J=_=>{var W;if(((W=_.target)==null?void 0:W.tagName)==="INPUT")return;_.preventDefault();const V=c_[_.key];_.key.length===1?(E({type:"key",eventType:"rawKeyDown",key:_.key,code:_.code,modifiers:T(_.nativeEvent),windowsVirtualKeyCode:_.key.toUpperCase().charCodeAt(0)}),E({type:"insertText",text:_.key})):E({type:"key",eventType:"rawKeyDown",key:_.key,code:_.code,modifiers:T(_.nativeEvent),windowsVirtualKeyCode:V??0})},Q=_=>{var W;if(((W=_.target)==null?void 0:W.tagName)==="INPUT")return;const V=_.key.length===1?_.key.toUpperCase().charCodeAt(0):c_[_.key]??0;E({type:"key",eventType:"keyUp",key:_.key,code:_.code,modifiers:T(_.nativeEvent),windowsVirtualKeyCode:V})},A=_=>{var W;if(((W=_.target)==null?void 0:W.tagName)==="INPUT")return;_.preventDefault();const V=_.clipboardData.getData("text/plain");V&&E({type:"insertText",text:V})},F=async()=>{var _;if(!(!t||c)){d(!0);try{await fetch(`/api/takeover/${t}/resolve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({note:h.trim()||void 0})}),(_=b.current)==null||_.close(),u(!0)}catch{d(!1)}}};return i?f.jsx("div",{className:"flex h-screen items-center justify-center bg-background font-body text-on-surface px-6",children:f.jsxs("div",{className:"text-center max-w-md",children:[f.jsx("p",{className:"text-[11px] font-label uppercase tracking-[0.15em] text-secondary/70 mb-2",children:e("takeover.sessionExpiredLabel")}),f.jsx("h1",{className:"font-headline text-[32px] leading-tight text-on-surface mb-3",children:e("takeover.sessionExpired")}),f.jsx("p",{className:"text-[15px] leading-relaxed text-on-surface-variant italic",children:e("takeover.sessionExpiredBlurb")})]})}):l?f.jsx("div",{className:"flex h-screen items-center justify-center bg-background font-body text-on-surface px-6",children:f.jsxs("div",{className:"text-center max-w-md",children:[f.jsx("p",{className:"text-[11px] font-label uppercase tracking-[0.15em] text-primary/70 mb-2",children:e("takeover.completeLabel")}),f.jsx("h1",{className:"font-headline text-[32px] leading-tight text-on-surface mb-3",children:e("takeover.controlReturned")}),f.jsx("p",{className:"text-[15px] leading-relaxed text-on-surface-variant italic",children:e("takeover.closeTab")})]})}):n?f.jsxs("div",{className:"flex flex-col h-screen bg-background font-body text-on-surface overflow-hidden",children:[f.jsxs("div",{className:"flex items-start gap-4 px-8 py-5 bg-surface-container-low flex-shrink-0",children:[f.jsx("div",{className:"flex-shrink-0 mt-1 w-7 h-7 rounded-full bg-primary-fixed flex items-center justify-center",children:f.jsx("span",{className:"font-headline italic text-[15px] text-primary",children:"!"})}),f.jsxs("div",{className:"flex-1 min-w-0",children:[f.jsx("p",{className:"text-[10px] font-label uppercase tracking-[0.15em] text-primary/70 mb-1",children:e("takeover.agentNeedsHelp")}),f.jsx("p",{className:"font-headline text-[17px] leading-snug text-on-surface",children:n.reason})]})]}),f.jsxs("div",{className:"flex items-center gap-3 px-6 py-3 bg-surface-container flex-shrink-0",children:[f.jsxs("div",{className:"flex gap-1.5 flex-shrink-0",children:[f.jsx("span",{className:"w-3 h-3 rounded-full bg-secondary/60"}),f.jsx("span",{className:"w-3 h-3 rounded-full bg-tertiary-fixed"}),f.jsx("span",{className:"w-3 h-3 rounded-full bg-primary/40"})]}),f.jsxs("div",{className:"flex-1 flex items-center gap-2 bg-surface-container-lowest rounded-md px-3 py-1.5 min-w-0",children:[f.jsx("span",{className:"text-[11px] text-primary flex-shrink-0","aria-hidden":!0,children:"∎"}),f.jsx("span",{className:"text-[12px] font-mono text-on-surface truncate",children:g||n.url||""}),y&&f.jsxs("span",{className:"text-[11px] font-body italic text-on-surface-variant/70 flex-shrink-0 hidden md:inline",children:["— ",y]})]}),f.jsxs("div",{className:"flex items-center gap-1.5 flex-shrink-0",children:[f.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-secondary animate-pulse"}),f.jsx("span",{className:"text-[10px] font-label uppercase tracking-[0.15em] text-secondary",children:e("takeover.liveLabel")})]})]}),f.jsx("div",{ref:S,tabIndex:0,className:"flex-1 flex items-center justify-center overflow-hidden outline-none cursor-default bg-surface-container-highest",onMouseMove:M,onMouseDown:R,onMouseUp:L,onMouseLeave:U,onWheel:O,onKeyDown:J,onKeyUp:Q,onPaste:A,onContextMenu:_=>_.preventDefault(),children:o?f.jsx("img",{ref:v,src:o,alt:"live browser",className:"max-w-full max-h-full object-contain select-none",draggable:!1,style:{pointerEvents:"none"}}):f.jsx("p",{className:"font-mono text-[10px] text-on-surface-variant/50 animate-pulse",children:e("takeover.waitingStream")})}),f.jsxs("div",{className:"flex items-end gap-4 px-8 py-5 bg-surface-container-low flex-shrink-0",children:[f.jsxs("div",{className:"flex-1 flex flex-col",children:[f.jsxs("label",{className:"text-[10px] font-label uppercase tracking-[0.15em] text-on-surface-variant/70 mb-1",children:[e("takeover.whatDidYouDo")," ",f.jsx("span",{className:"italic text-on-surface-variant/50",children:e("takeover.optional")})]}),f.jsx("input",{type:"text",value:h,onChange:_=>p(_.target.value),onKeyDown:_=>{_.key==="Enter"&&!_.shiftKey&&(_.preventDefault(),F())},placeholder:e("takeover.describeActionPlaceholder"),disabled:c,className:"bg-transparent border-0 border-b border-outline-variant/30 focus:border-primary focus:outline-none font-body text-[15px] text-on-surface placeholder:text-on-surface-variant/40 placeholder:italic px-0 py-2 disabled:opacity-50"})]}),f.jsx("button",{onClick:F,disabled:c,className:"flex-shrink-0 rounded-sm bg-primary text-on-primary font-label text-[11px] uppercase tracking-[0.15em] px-5 py-3 hover:bg-primary/90 transition-colors disabled:opacity-40 disabled:cursor-not-allowed",children:e(c?"takeover.returning":"takeover.completed")})]})]}):f.jsx("div",{className:"flex h-screen items-center justify-center bg-background font-body",children:f.jsx("p",{className:"font-mono text-[11px] text-on-surface-variant/60 animate-pulse",children:e("takeover.connecting")})})}function v6(){const e=Ji();return N.useEffect(()=>{wp("page_viewed",{path:e.pathname})},[e.pathname]),f.jsxs(TN,{children:[f.jsx(Dr,{path:"takeover/:token",element:f.jsx(x6,{})}),f.jsxs(Dr,{element:f.jsx(TM,{}),children:[f.jsx(Dr,{index:!0,element:f.jsx(cv,{to:"/dashboard",replace:!0})}),f.jsx(Dr,{path:"dashboard",element:f.jsx(pR,{})}),f.jsx(Dr,{path:"agents/:id/*",element:f.jsx(d6,{})}),f.jsx(Dr,{path:"settings",element:f.jsx(p6,{})}),f.jsx(Dr,{path:"*",element:f.jsx(cv,{to:"/dashboard",replace:!0})})]})]})}WT();Yh.createRoot(document.getElementById("root")).render(f.jsx(__.StrictMode,{children:f.jsx(NM,{children:f.jsx(LN,{children:f.jsx(v6,{})})})}));
|
package/dist/frontend/index.html
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
} catch (_) { /* SSR / blocked storage — ignore */ }
|
|
28
28
|
})();
|
|
29
29
|
</script>
|
|
30
|
-
<script type="module" crossorigin src="/assets/index-
|
|
30
|
+
<script type="module" crossorigin src="/assets/index-aOmMmTYZ.js"></script>
|
|
31
31
|
<link rel="stylesheet" crossorigin href="/assets/index-Bk8kmOwH.css">
|
|
32
32
|
</head>
|
|
33
33
|
<body class="bg-background text-on-surface">
|