@townco/gui-template 0.1.76 → 0.1.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/acp-sdk-BPJAiXAT.js +1 -0
- package/dist/assets/{framer-motion-CZge_vRQ.js → framer-motion-CG8fRfWs.js} +2 -2
- package/dist/assets/{icons-Bnyv_yj2.js → icons-BzukJGLW.js} +1 -1
- package/dist/assets/{index-Bjes2WDZ.js → index-B_P_9iMa.js} +1 -1
- package/dist/assets/index-TToiz9B0.css +1 -0
- package/dist/assets/{katex-D_C5EOCM.js → katex-Dnem94XJ.js} +8 -8
- package/dist/assets/{katex-CyAuISp2.css → katex-DvXFAOB1.css} +1 -1
- package/dist/assets/{markdown-DxfY7oCC.js → markdown-BdUZ9kJE.js} +13 -13
- package/dist/assets/{radix-htOb34Il.js → radix-Zq6vt5Ln.js} +2 -2
- package/dist/assets/{react-B42e77sA.js → react-CTCEofFK.js} +1 -1
- package/dist/assets/{vendor-DJ_E-kWT.js → vendor-LcGNELL1.js} +280 -280
- package/dist/index.html +11 -11
- package/package.json +4 -4
- package/dist/assets/acp-sdk-gsCuRd1n.js +0 -1
- package/dist/assets/index-BTP0uDMO.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as c,j as e,M as En,b as dt,h as Mn}from"./react-
|
|
1
|
+
import{r as c,j as e,M as En,b as dt,h as Mn}from"./react-CTCEofFK.js";import{b2 as Ne,b3 as An,b4 as _t,b5 as U,b6 as X,b7 as v,b8 as P,b9 as J,ba as Le,bb as F,bc as V,bd as be,be as te,bf as Dn,bg as Be,bh as mt,bi as Pn,bj as Un,bk as Ln,bl as de,bm as zn,bn as $n,bo as Rt}from"./vendor-LcGNELL1.js";import{P as Et,a as On}from"./acp-sdk-BPJAiXAT.js";import{S as re,a as Qt,b as Yt,P as Fn,C as Xt,I as Jt,c as Zt,d as es,R as ts,L as ss,e as ns,f as Bn,T as Hn,g as as,h as Wn,i as Vn,j as qn,k as os,l as rs,m as is,n as Kn,O as Ve,o as ls,p as qe,q as cs,r as Ke,D as Ge,s as ds,t as us,u as Gn,v as ps,w as ms,x as Qn,y as fs,V as Yn,z as gs,A as hs,B as Xn,E as Jn,F as xs}from"./radix-Zq6vt5Ln.js";import{c as Me,d as bs,e as Qe,P as Zn,E as ea,S as ta,f as sa,g as na,h as ft,i as aa,j as oa,k as ra,A as ia,l as Ye,F as la,m as ca,n as da,o as ua,p as ce,q as Xe,r as Je,s as gt,t as ys,u as vs,B as Mt,v as pa,w as ma,x as ht,y as He,T as fa,z as at,G as At,H as Dt,I as Pe,J as Ue,K as xt,N as ga,W as ha,O as xa,Q as ba,U as ya,V as va,Y as wa,_ as ja,$ as Na,a0 as Sa,a1 as ka}from"./icons-BzukJGLW.js";import{A as ut,m as ae,u as Ca}from"./framer-motion-CG8fRfWs.js";import{g as Ta}from"./markdown-BdUZ9kJE.js";import"./katex-Dnem94XJ.js";(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))n(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const r of i.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&n(r)}).observe(document,{childList:!0,subtree:!0});function a(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(o){if(o.ep)return;o.ep=!0;const i=a(o);fetch(o.href,i)}})();var Ia={};const $e=typeof process<"u"&&process.versions?.node;let _a,Ra=0;const Ea=new Set;function Ma(t){for(const s of Ea)s(t)}const Pt={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},Aa={trace:Ne.TRACE,debug:Ne.DEBUG,info:Ne.INFO,warn:Ne.WARN,error:Ne.ERROR,fatal:Ne.FATAL};class Da{service;minLevel;logFilePath;logsDir;writeQueue=[];isWriting=!1;enableConsoleOutput;constructor(s,a="debug"){this.service=s,this.minLevel=a,typeof process<"u"&&(this.minLevel="info"),this.enableConsoleOutput=typeof process<"u"&&Ia?.TOWN_LOG_CONSOLE==="true"||!1}setupFileLogging(){}async writeToFile(s){if(!(!this.logFilePath||!$e)&&(this.writeQueue.push(s),!this.isWriting)){for(this.isWriting=!0;this.writeQueue.length>0;){const n=`${this.writeQueue.splice(0,this.writeQueue.length).join(`
|
|
2
2
|
`)}
|
|
3
3
|
`;try{await require("node:fs").promises.appendFile(this.logFilePath,n,"utf-8")}catch{}}this.isWriting=!1}}shouldLog(s){return Pt[s]>=Pt[this.minLevel]}log(s,a,n){if(!this.shouldLog(s))return;const o={id:`log_${++Ra}`,timestamp:new Date().toISOString(),level:s,service:this.service,message:a,...n&&{metadata:n}};if(Ma(o),$e&&this.logFilePath,$e&&this.logFilePath){const u={timestamp:o.timestamp,level:o.level,service:o.service,message:o.message,...o.metadata&&{metadata:o.metadata}};this.writeToFile(JSON.stringify(u)).catch(()=>{})}if($e&&this.enableConsoleOutput){const u=o.timestamp,p=o.level.toUpperCase().padEnd(5),d=`[${this.service}]`,l=o.metadata?` ${JSON.stringify(o.metadata)}`:"";console.log(`${u} ${p} ${d} ${o.message}${l}`)}const i=An.getLogger(this.service),r=_t.trace.getSpan(_t.context.active());i.emit({severityNumber:Aa[s],severityText:s.toUpperCase(),body:a,attributes:{service:this.service,...n&&Object.fromEntries(Object.entries(n).map(([u,p])=>[`log.${u}`,typeof p=="object"?JSON.stringify(p):p])),...r&&{trace_id:r.spanContext().traceId,span_id:r.spanContext().spanId}}})}trace(s,a){this.log("trace",s,a)}debug(s,a){this.log("debug",s,a)}info(s,a){this.log("info",s,a)}warn(s,a){this.log("warn",s,a)}error(s,a){this.log("error",s,a)}fatal(s,a){this.log("fatal",s,a)}}function ie(t,s="debug"){return new Da(t,s)}const Pa=U({baseUrl:v().url("Invalid base URL. Must be a valid URL (e.g., http://localhost:3000)").refine(t=>{try{const s=new URL(t);return!(s.port&&s.hostname.includes(":"))}catch{return!1}},{message:"Invalid URL format. Check for typos like duplicate ports (e.g., http://localhost:3102:3100)"}),apiKey:v().optional(),timeout:P().optional(),headers:X(v(),v()).optional()}),$=ie("http-transport");class Ua{connected=!1;sessionUpdateCallbacks=new Set;errorCallbacks=new Set;messageQueue=[];currentSessionId=null;chunkResolvers=[];streamComplete=!1;sseAbortController=null;reconnectAttempts=0;maxReconnectAttempts=5;reconnectDelay=1e3;reconnecting=!1;abortController=null;options;isReceivingMessages=!1;isInReplayMode=!1;agentInfo;constructor(s){const a=Pa.safeParse(s);if(!a.success){const n=a.error.issues.map(o=>`${o.path.join(".")}: ${o.message}`).join("; ");throw new Error(`Invalid HTTP transport configuration: ${n}`)}this.options={...s,baseUrl:s.baseUrl.replace(/\/$/,"")}}async connect(){if(!this.connected)try{this.abortController=new AbortController;const s={protocolVersion:Et,clientCapabilities:{fs:{readTextFile:!0,writeTextFile:!0}}},a=await this.sendRpcRequest("initialize",s);if(a.agentInfo){const i=a._meta,r=i&&typeof i=="object",u=r&&"agentDescription"in i?String(i.agentDescription):void 0,p=r&&"suggestedPrompts"in i&&Array.isArray(i.suggestedPrompts)?i.suggestedPrompts:void 0,d=r&&"tools"in i&&Array.isArray(i.tools)?i.tools:void 0,l=r&&"mcps"in i&&Array.isArray(i.mcps)?i.mcps:void 0,f=r&&"subagents"in i&&Array.isArray(i.subagents)?i.subagents:void 0,m=r&&"initialMessage"in i&&i.initialMessage&&typeof i.initialMessage=="object"?i.initialMessage:void 0,h=r&&"uiConfig"in i&&i.uiConfig&&typeof i.uiConfig=="object"?i.uiConfig:void 0;this.agentInfo={name:a.agentInfo.name,...a.agentInfo.title?{displayName:a.agentInfo.title}:{},version:a.agentInfo.version,...u?{description:u}:{},...p?{suggestedPrompts:p}:{},...m?{initialMessage:m}:{},...h?{uiConfig:h}:{},...d?{tools:d}:{},...l?{mcps:l}:{},...f?{subagents:f}:{}}}$.info("ACP connection initialized",{initResponse:a});const n={cwd:"/",mcpServers:[]},o=await this.sendRpcRequest("session/new",n);this.currentSessionId=o.sessionId,$.info("Session created",{sessionId:this.currentSessionId}),await this.connectSSE(),this.connected=!0,this.reconnectAttempts=0}catch(s){this.connected=!1;const a=s instanceof Error?s:new Error(String(s));throw this.notifyError(a),a}}async loadSession(s){this.connected&&($.warn("Transport already connected, disconnecting first",{sessionId:s}),await this.disconnect());try{this.abortController=new AbortController;const a={protocolVersion:Et,clientCapabilities:{fs:{readTextFile:!0,writeTextFile:!0}}};$.info("Loading session - initializing connection",{sessionId:s});const n=await this.sendRpcRequest("initialize",a);if(n.agentInfo){const r=n._meta,u=r&&typeof r=="object",p=u&&"agentDescription"in r?String(r.agentDescription):void 0,d=u&&"suggestedPrompts"in r&&Array.isArray(r.suggestedPrompts)?r.suggestedPrompts:void 0,l=u&&"tools"in r&&Array.isArray(r.tools)?r.tools:void 0,f=u&&"mcps"in r&&Array.isArray(r.mcps)?r.mcps:void 0,m=u&&"subagents"in r&&Array.isArray(r.subagents)?r.subagents:void 0,h=u&&"initialMessage"in r&&r.initialMessage&&typeof r.initialMessage=="object"?r.initialMessage:void 0,x=u&&"uiConfig"in r&&r.uiConfig&&typeof r.uiConfig=="object"?r.uiConfig:void 0;this.agentInfo={name:n.agentInfo.name,...n.agentInfo.title?{displayName:n.agentInfo.title}:{},version:n.agentInfo.version,...p?{description:p}:{},...d?{suggestedPrompts:d}:{},...h?{initialMessage:h}:{},...x?{uiConfig:x}:{},...l?{tools:l}:{},...f?{mcps:f}:{},...m?{subagents:m}:{}}}if(!n.agentCapabilities?.loadSession)throw $.error("Agent does not support loading sessions",{capabilities:n.agentCapabilities}),new Error("Agent does not support loading sessions");$.info("ACP connection initialized, loading session",{sessionId:s,capabilities:n.agentCapabilities}),this.isInReplayMode=!0,this.currentSessionId=s,await this.connectSSE();const o={sessionId:s,cwd:"/",mcpServers:[]};$.info("Sending session/load request",{loadRequest:o});const i=await this.sendRpcRequest("session/load",o);$.info("Session loaded successfully",{sessionId:this.currentSessionId,loadResponse:i}),this.connected=!0,this.reconnectAttempts=0}catch(a){this.connected=!1;const n=a instanceof Error?a:new Error(String(a));throw $.error("Failed to load session",{sessionId:s,error:n.message,stack:n.stack}),this.notifyError(n),n}}async listSessions(){try{const s={method:"GET"};this.options.headers&&(s.headers=this.options.headers);const a=await fetch(`${this.options.baseUrl}/sessions`,s);if(!a.ok)throw new Error(`HTTP ${a.status}: ${await a.text()}`);return(await a.json()).sessions||[]}catch(s){return $.error("Failed to list sessions",{error:s}),[]}}async disconnect(){if(this.connected)try{this.abortController&&(this.abortController.abort(),this.abortController=null),this.sseAbortController&&(this.sseAbortController.abort(),this.sseAbortController=null),this.connected=!1,this.currentSessionId=null,this.messageQueue=[],this.chunkResolvers=[],this.streamComplete=!1,this.reconnecting=!1,this.reconnectAttempts=0}catch(s){const a=s instanceof Error?s:new Error(String(s));throw this.notifyError(a),a}}async send(s){if(!this.connected||!this.currentSessionId)throw new Error("Transport not connected");this.isInReplayMode&&($.info("Exiting replay mode - user sent a message"),this.isInReplayMode=!1);try{this.streamComplete=!1,this.messageQueue=[];const a=s.content.map(r=>r.type==="text"?{type:"text",text:r.text}:r.type==="image"?"source"in r&&r.source?{type:"image",data:r.source.data,mimeType:r.source.media_type}:"data"in r&&"mimeType"in r?{type:"image",data:r.data,mimeType:r.mimeType}:r:r),n={sessionId:this.currentSessionId,prompt:a},o=await this.sendRpcRequest("session/prompt",n);$.debug("Prompt sent",{promptResponse:o}),this.streamComplete=!0;const i=this.chunkResolvers.shift();i?i({type:"content",id:this.currentSessionId||"unknown",role:"assistant",contentDelta:{type:"text",text:""},isComplete:!0}):this.messageQueue.push({type:"content",id:this.currentSessionId||"unknown",role:"assistant",contentDelta:{type:"text",text:""},isComplete:!0})}catch(a){this.streamComplete=!0;const n=a instanceof Error?a:new Error(String(a));throw this.notifyError(n),n}}async*receive(){this.isReceivingMessages=!0;try{for(;!this.streamComplete;)if(this.messageQueue.length>0){const s=this.messageQueue.shift();if(s&&(yield s,s.type==="content"&&s.isComplete))return}else{const s=await new Promise(a=>{this.chunkResolvers.push(a)});if(s.type==="content"&&s.isComplete){yield s;return}else yield s}for(;this.messageQueue.length>0;){const s=this.messageQueue.shift();s&&(yield s)}yield{type:"content",id:this.currentSessionId||"unknown",role:"assistant",contentDelta:{type:"text",text:""},isComplete:!0}}finally{this.isReceivingMessages=!1}}isConnected(){return this.connected}onSessionUpdate(s){return this.sessionUpdateCallbacks.add(s),()=>{this.sessionUpdateCallbacks.delete(s)}}onError(s){return this.errorCallbacks.add(s),()=>{this.errorCallbacks.delete(s)}}getAgentInfo(){return this.agentInfo||{}}async sendRpcRequest(s,a){const o={jsonrpc:"2.0",id:this.generateRequestId(),method:s,params:a};$.debug("Sending RPC request",{method:s,params:a,request:o});const i={"Content-Type":"application/json",...this.options.headers},r=this.options.timeout??600*1e3,u=new AbortController,p=setTimeout(()=>u.abort(),r);try{const d=await fetch(`${this.options.baseUrl}/rpc`,{method:"POST",headers:i,body:JSON.stringify(o),signal:u.signal});if(clearTimeout(p),!d.ok){const f=await d.text();throw new Error(`HTTP ${d.status}: ${f}`)}const l=await d.json();if(l.error)throw new Error(`ACP error: ${l.error.message||JSON.stringify(l.error)}`);return l.result||l}catch(d){throw clearTimeout(p),d instanceof Error&&d.name==="AbortError"?new Error(`Request timeout after ${r}ms`):d}}async connectSSE(){if(!this.currentSessionId)throw new Error("Cannot connect SSE without a session ID");const s=`${this.options.baseUrl}/events`,a={"X-Session-ID":this.currentSessionId,...this.options.headers};this.sseAbortController=new AbortController;try{const n=await fetch(s,{method:"GET",headers:a,signal:this.sseAbortController.signal});if(!n.ok)throw new Error(`SSE connection failed: HTTP ${n.status}`);if(!n.body)throw new Error("Response body is null");$.debug("SSE connection opened"),this.reconnectAttempts=0,this.reconnectDelay=1e3;const o=n.body.getReader(),i=new TextDecoder;let r="";(async()=>{try{for(;;){const{done:u,value:p}=await o.read();if(u){$.debug("SSE stream closed by server"),this.connected&&await this.handleSSEDisconnect();break}r+=i.decode(p,{stream:!0});const d=r.split(`
|
|
4
4
|
`);r=d.pop()||"";let l={event:"message",data:""};for(const f of d)f.startsWith("event:")?l.event=f.substring(6).trim():f.startsWith("data:")?l.data=f.substring(5).trim():f===""&&(l.event==="message"&&l.data&&this.handleSSEMessage(l.data),l={event:"message",data:""})}}catch(u){if(u instanceof Error&&u.name==="AbortError"){$.debug("SSE stream aborted");return}$.error("Error reading SSE stream",{error:u}),this.connected&&!this.reconnecting&&await this.handleSSEDisconnect()}})()}catch(n){throw $.error("SSE connection error",{error:n}),n}}async handleSSEDisconnect(){if(this.reconnecting||!this.connected)return;if(this.reconnecting=!0,this.sseAbortController&&(this.sseAbortController.abort(),this.sseAbortController=null),this.reconnectAttempts>=this.maxReconnectAttempts){const a=new Error(`SSE reconnection failed after ${this.maxReconnectAttempts} attempts`);this.notifyError(a),this.connected=!1,this.reconnecting=!1;return}this.reconnectAttempts++;const s=Math.min(this.reconnectDelay*2**(this.reconnectAttempts-1),32e3);$.debug("SSE reconnecting",{delay:s,attempt:this.reconnectAttempts,maxAttempts:this.maxReconnectAttempts}),await new Promise(a=>setTimeout(a,s));try{await this.connectSSE(),$.info("SSE reconnected successfully"),this.reconnecting=!1}catch(a){$.error("SSE reconnection failed",{error:a}),this.reconnecting=!1}}handleSSEMessage(s){try{const a=JSON.parse(s);$.debug("Received SSE message",{message:a});const n=On.safeParse(a);if(!n.success){$.error("Invalid ACP message from SSE",{issues:n.error.issues});return}const o=n.data;$.debug("Parsed ACP message",{method:"method"in o?o.method:"(no method)"}),"method"in o&&o.method==="session/update"&&($.debug("Received session/update notification"),"params"in o&&o.params&&($.debug("Calling handleSessionNotification",{params:o.params}),this.handleSessionNotification(o.params)))}catch(a){$.error("Error parsing SSE message",{error:a}),this.notifyError(a instanceof Error?a:new Error(String(a)))}}handleSessionNotification(s){$.debug("handleSessionNotification called",{params:s});const n=s.update,o=this.currentSessionId||s.sessionId;if($.debug("Update session type",{sessionUpdate:n?.sessionUpdate}),n?.sessionUpdate==="tool_call"){$.debug("Tool call notification",{tokenUsage:n.tokenUsage});const i=n._meta&&typeof n._meta=="object"&&"messageId"in n._meta?String(n._meta.messageId):void 0,r=n._meta&&typeof n._meta=="object"&&"prettyName"in n._meta&&typeof n._meta.prettyName=="string"?n._meta.prettyName:void 0,u=n._meta&&typeof n._meta=="object"&&"icon"in n._meta&&typeof n._meta.icon=="string"?n._meta.icon:void 0,p=n._meta&&typeof n._meta=="object"&&"subline"in n._meta&&typeof n._meta.subline=="string"?n._meta.subline:void 0,d=n._meta&&typeof n._meta=="object"&&"batchId"in n._meta&&typeof n._meta.batchId=="string"?n._meta.batchId:void 0,l=n._meta&&typeof n._meta=="object"&&"subagentPort"in n._meta&&typeof n._meta.subagentPort=="number"?n._meta.subagentPort:void 0,f=n._meta&&typeof n._meta=="object"&&"subagentSessionId"in n._meta&&typeof n._meta.subagentSessionId=="string"?n._meta.subagentSessionId:void 0,m=n._meta&&typeof n._meta=="object"&&"subagentMessages"in n._meta&&Array.isArray(n._meta.subagentMessages)?n._meta.subagentMessages:void 0,h=n._meta&&typeof n._meta=="object"&&"compactionAction"in n._meta&&typeof n._meta.compactionAction=="string"?n._meta.compactionAction:void 0,x=n._meta&&typeof n._meta=="object"&&"originalTokens"in n._meta&&typeof n._meta.originalTokens=="number"?n._meta.originalTokens:void 0,g=n._meta&&typeof n._meta=="object"&&"finalTokens"in n._meta&&typeof n._meta.finalTokens=="number"?n._meta.finalTokens:void 0,w=n._meta&&typeof n._meta=="object"&&"originalContentPreview"in n._meta&&typeof n._meta.originalContentPreview=="string"?n._meta.originalContentPreview:void 0,y=n._meta&&typeof n._meta=="object"&&"originalContentPath"in n._meta&&typeof n._meta.originalContentPath=="string"?n._meta.originalContentPath:void 0,S={id:n.toolCallId??"",batchId:d,title:n.title??"",prettyName:r,icon:u,subline:p,kind:n.kind||"other",status:n.status||"pending",locations:n.locations,rawInput:n.rawInput,tokenUsage:n.tokenUsage,content:n.content?.map(_=>{if(typeof _!="object"||_===null)return{type:"text",text:""};const C=_;if(C.type==="content"&&typeof C.content=="object"&&C.content!==null){const D=C.content;if(D.type==="text")return{type:"content",content:{type:"text",text:typeof D.text=="string"?D.text:""}}}return C.type==="text"?{type:"text",text:typeof C.text=="string"?C.text:""}:C.type==="diff"?{type:"diff",path:typeof C.path=="string"?C.path:"",oldText:typeof C.oldText=="string"?C.oldText:"",newText:typeof C.newText=="string"?C.newText:"",line:typeof C.line=="number"?C.line:null}:C.type==="terminal"?{type:"terminal",terminalId:typeof C.terminalId=="string"?C.terminalId:""}:{type:"text",text:""}}),startedAt:Date.now(),subagentPort:l,subagentSessionId:f,subagentMessages:m,_meta:h||x||g||w||y?{compactionAction:h,originalTokens:x,finalTokens:g,originalContentPreview:w,originalContentPath:y}:void 0},N={type:"tool_call",sessionId:o,status:"active",toolCall:S,messageId:i},k=n._meta&&typeof n._meta=="object"&&"isReplay"in n._meta&&n._meta.isReplay===!0;if($.info("Creating tool_call session update",{toolCallId:S.id,title:S.title,hasSubagentPort:!!l,hasSubagentSessionId:!!f,hasSubagentMessages:!!m,subagentMessagesCount:m?.length,isReplay:k,isInReplayMode:this.isInReplayMode}),k||this.isInReplayMode)this.notifySessionUpdate(N);else{const _={type:"tool_call",id:o,toolCall:S,messageId:i},C=this.chunkResolvers.shift();C?C(_):this.messageQueue.push(_)}}else if(n?.sessionUpdate==="tool_call_update"){const i=n._meta&&typeof n._meta=="object"&&"messageId"in n._meta?String(n._meta.messageId):void 0,r=n._meta&&typeof n._meta=="object"&&"prettyName"in n._meta&&typeof n._meta.prettyName=="string"?n._meta.prettyName:void 0,u=n._meta&&typeof n._meta=="object"&&"icon"in n._meta&&typeof n._meta.icon=="string"?n._meta.icon:void 0,p=n._meta&&typeof n._meta=="object"&&"batchId"in n._meta&&typeof n._meta.batchId=="string"?n._meta.batchId:void 0,d=n._meta&&typeof n._meta=="object"&&"subagentPort"in n._meta&&typeof n._meta.subagentPort=="number"?n._meta.subagentPort:void 0,l=n._meta&&typeof n._meta=="object"&&"subagentSessionId"in n._meta&&typeof n._meta.subagentSessionId=="string"?n._meta.subagentSessionId:void 0,f=n._meta&&typeof n._meta=="object"&&"subagentMessages"in n._meta&&Array.isArray(n._meta.subagentMessages)?n._meta.subagentMessages:void 0;(d||l||f)&&$.info("Extracted subagent info from tool_call_update",{toolCallId:n.toolCallId,subagentPort:d,subagentSessionId:l,subagentMessagesCount:f?.length});const m=n._meta&&typeof n._meta=="object"&&"compactionAction"in n._meta&&typeof n._meta.compactionAction=="string"?n._meta.compactionAction:void 0,h=n._meta&&typeof n._meta=="object"&&"originalTokens"in n._meta&&typeof n._meta.originalTokens=="number"?n._meta.originalTokens:void 0,x=n._meta&&typeof n._meta=="object"&&"finalTokens"in n._meta&&typeof n._meta.finalTokens=="number"?n._meta.finalTokens:void 0,g=n._meta&&typeof n._meta=="object"&&"originalContentPreview"in n._meta&&typeof n._meta.originalContentPreview=="string"?n._meta.originalContentPreview:void 0,w=n._meta&&typeof n._meta=="object"&&"originalContentPath"in n._meta&&typeof n._meta.originalContentPath=="string"?n._meta.originalContentPath:void 0,y={id:n.toolCallId??"",status:n.status,title:n.title,prettyName:r,icon:u,batchId:p,rawInput:n.rawInput,locations:n.locations,rawOutput:n.rawOutput,tokenUsage:n.tokenUsage,content:n.content?.map(N=>{if(typeof N!="object"||N===null)return{type:"text",text:""};const k=N;if(k.type==="content"&&typeof k.content=="object"&&k.content!==null){const _=k.content;if(_.type==="text")return{type:"content",content:{type:"text",text:typeof _.text=="string"?_.text:""}}}return k.type==="text"?{type:"text",text:typeof k.text=="string"?k.text:""}:k.type==="diff"?{type:"diff",path:typeof k.path=="string"?k.path:"",oldText:typeof k.oldText=="string"?k.oldText:"",newText:typeof k.newText=="string"?k.newText:"",line:typeof k.line=="number"?k.line:null}:k.type==="terminal"?{type:"terminal",terminalId:typeof k.terminalId=="string"?k.terminalId:""}:{type:"text",text:""}}),error:n.error,completedAt:n.status==="completed"||n.status==="failed"?Date.now():void 0,subagentPort:d,subagentSessionId:l,subagentMessages:f,_meta:m||h||x||g||w?{compactionAction:m,originalTokens:h,finalTokens:x,originalContentPreview:g,originalContentPath:w}:void 0},S={type:"tool_call_update",sessionId:o,status:"active",toolCallUpdate:y,messageId:i};if(this.isInReplayMode)this.notifySessionUpdate(S);else{const N={type:"tool_call_update",id:o,toolCallUpdate:y,messageId:i},k=this.chunkResolvers.shift();k?k(N):this.messageQueue.push(N)}$.debug("Processed tool_call_update",{sessionUpdate:S,isReplay:this.isInReplayMode})}else if(n&&"sessionUpdate"in n&&n.sessionUpdate==="hook_notification"){const i=n;$.debug("Received hook_notification",{id:i.id,notificationType:i.notification.type,hookType:i.notification.hookType});const r={type:"hook_notification",id:i.id,notification:i.notification,messageId:i.messageId},u=this.chunkResolvers.shift();u?u(r):this.messageQueue.push(r)}else if(n&&"sessionUpdate"in n&&n.sessionUpdate==="tool_output"){const i=n,r=i._meta&&typeof i._meta=="object"&&"messageId"in i._meta?String(i._meta.messageId):void 0,u={id:i.toolCallId??"",rawOutput:i.rawOutput,content:i.content?.map(d=>{if(typeof d!="object"||d===null)return{type:"text",text:""};const l=d;if(l.type==="content"&&typeof l.content=="object"&&l.content!==null){const f=l.content;if(f.type==="text")return{type:"content",content:{type:"text",text:typeof f.text=="string"?f.text:""}}}return l.type==="text"?{type:"text",text:typeof l.text=="string"?l.text:""}:l.type==="diff"?{type:"diff",path:typeof l.path=="string"?l.path:"",oldText:typeof l.oldText=="string"?l.oldText:"",newText:typeof l.newText=="string"?l.newText:"",line:typeof l.line=="number"?l.line:null}:l.type==="terminal"?{type:"terminal",terminalId:typeof l.terminalId=="string"?l.terminalId:""}:l.type==="image"?{type:"image",data:typeof l.data=="string"?l.data:"",mimeType:typeof l.mimeType=="string"?l.mimeType:"image/png",alt:typeof l.alt=="string"?l.alt:void 0}:{type:"text",text:""}})},p={type:"tool_call_update",sessionId:o,status:"active",toolCallUpdate:u,messageId:r};if(this.isInReplayMode)this.notifySessionUpdate(p);else{const d={type:"tool_call_update",id:o,toolCallUpdate:u,messageId:r},l=this.chunkResolvers.shift();l?l(d):this.messageQueue.push(d)}$.debug("Queued tool_output as tool_call_update chunk",{sessionUpdate:p})}else if(n?.sessionUpdate==="agent_message_chunk"){const i=n._meta&&typeof n._meta=="object"&&"isReplay"in n._meta&&n._meta.isReplay===!0;if(this.isInReplayMode&&!i)return;const r=n._meta&&typeof n._meta=="object"&&"tokenUsage"in n._meta?n._meta.tokenUsage:void 0,u=n._meta&&typeof n._meta=="object"&&"contextInputTokens"in n._meta&&typeof n._meta.contextInputTokens=="number"?n._meta.contextInputTokens:void 0,p=n._meta&&typeof n._meta=="object"&&"context_size"in n._meta?n._meta.context_size:void 0,d={type:"generic",sessionId:o,status:"active",_meta:n._meta},l=n.content;if(l&&typeof l=="object"){const m=l;let h=null;if(m.type==="text"&&typeof m.text=="string"&&(h={type:"content",id:s.sessionId,role:"assistant",contentDelta:{type:"text",text:m.text},tokenUsage:r,contextInputTokens:u,_meta:p?{context_size:p}:void 0,isComplete:!1}),h&&!i){const x=this.chunkResolvers.shift();x?x(h):this.messageQueue.push(h)}if(h&&typeof m.text=="string"&&(i||!this.isReceivingMessages)){const x={type:"generic",sessionId:o,status:"active",message:{id:`msg_${Date.now()}_assistant`,role:"assistant",content:[{type:"text",text:m.text}],timestamp:new Date().toISOString()}};this.notifySessionUpdate(x)}}const f=d._meta&&"context_size"in d._meta;(!i||f)&&this.notifySessionUpdate(d)}else if(n?.sessionUpdate==="user_message_chunk"){$.debug("Received user_message_chunk",{update:n});const i=n.content;if(i&&typeof i=="object"){const r=i;if(r.type==="text"&&typeof r.text=="string"){const u={type:"generic",sessionId:o,status:"active",message:{id:`msg_${Date.now()}_user`,role:"user",content:[{type:"text",text:r.text}],timestamp:new Date().toISOString()}};$.debug("Notifying session update for user message"),this.notifySessionUpdate(u)}}}else{const i={type:"generic",sessionId:o,status:"active"};this.notifySessionUpdate(i)}}generateRequestId(){return`req-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}notifySessionUpdate(s){for(const a of this.sessionUpdateCallbacks)try{a(s)}catch(n){$.error("Error in session update callback",{error:n})}}notifyError(s){for(const a of this.errorCallbacks)try{a(s)}catch(n){$.error("Error in error callback",{error:n})}}}class La{constructor(){throw new Error("StdioTransport is not available in the browser. Use HttpTransport or WebSocketTransport instead.")}async connect(){throw new Error("StdioTransport not available in browser")}async disconnect(){}async send(){throw new Error("StdioTransport not available in browser")}async*receive(){throw new Error("StdioTransport not available in browser")}isConnected(){return!1}onSessionUpdate(){return()=>{}}onError(){return()=>{}}}class za{ws=null;connected=!1;sessionUpdateCallbacks=new Set;errorCallbacks=new Set;constructor(s){}async connect(){throw new Error("WebSocketTransport not yet implemented. Waiting for HTTP ACP server.")}async disconnect(){this.ws&&(this.ws.close(),this.ws=null),this.connected=!1}async send(s){throw!this.connected||!this.ws?new Error("Transport not connected"):new Error("WebSocketTransport not yet implemented. Waiting for HTTP ACP server.")}async*receive(){throw new Error("WebSocketTransport not yet implemented. Waiting for HTTP ACP server.")}isConnected(){return this.connected}onSessionUpdate(s){return this.sessionUpdateCallbacks.add(s),()=>{this.sessionUpdateCallbacks.delete(s)}}onError(s){return this.errorCallbacks.add(s),()=>{this.errorCallbacks.delete(s)}}}const ot=ie("acp-client","debug");class $a{constructor(s){this.config=s,this.transport=this.createTransport(),this.setupTransportListeners(),s.autoConnect&&this.connect().catch(a=>{ot.error("Failed to auto-connect",{error:a instanceof Error?a.message:String(a)})})}transport;sessions=new Map;currentSessionId=null;sessionUpdateHandlers=new Set;errorHandlers=new Set;async connect(){await this.transport.connect()}async disconnect(){await this.transport.disconnect(),this.currentSessionId=null}isConnected(){return this.transport.isConnected()}async startSession(s){const a="currentSessionId"in this.transport?this.transport.currentSessionId:void 0;if(a){const u=new Date().toISOString(),p=this.transport.getAgentInfo?.()?.name,d={id:a,status:"connected",config:s?{...s,agentPath:s.agentPath||""}:{agentPath:""},messages:[],metadata:{startedAt:u,agentName:p}};return this.sessions.set(a,d),this.currentSessionId=a,a}const n=this.generateSessionId(),o=new Date().toISOString(),i=this.transport.getAgentInfo?.()?.name,r={id:n,status:"connecting",config:s?{...s,agentPath:s.agentPath||""}:{agentPath:""},messages:[],metadata:{startedAt:o,agentName:i}};return this.sessions.set(n,r),this.currentSessionId=n,this.updateSessionStatus(n,"connected"),n}async loadSession(s,a){if(!this.transport.loadSession)throw new Error("Transport does not support loading sessions");const n=new Date().toISOString(),o={id:s,status:"connecting",config:a?{...a,agentPath:a.agentPath||""}:{agentPath:""},messages:[],metadata:{startedAt:n}};if(this.sessions.set(s,o),this.currentSessionId=s,await this.transport.loadSession(s),this.transport.getAgentInfo){const i=this.transport.getAgentInfo();i.name&&o.metadata&&(o.metadata.agentName=i.name)}return this.updateSessionStatus(s,"connected"),s}async listSessions(){return this.transport.listSessions?this.transport.listSessions():[]}async sendMessage(s,a,n){const o=a||this.currentSessionId;if(!o)throw new Error("No active session. Start a session first.");if(!this.transport.isConnected())throw new Error("Transport not connected");const i=this.sessions.get(o);if(!i)throw new Error(`Session ${o} not found`);const r=[];if(n&&n.length>0)for(const p of n)p.mimeType.startsWith("image/")&&r.push({type:"image",source:{type:"base64",media_type:p.mimeType,data:p.data}});r.push({type:"text",text:s});const u={id:this.generateMessageId(),role:"user",content:r,timestamp:new Date().toISOString()};i.messages.push(u),this.updateSessionStatus(o,"active"),await this.transport.send(u)}async*receiveMessages(){if(!this.transport.isConnected())throw new Error("Transport not connected");yield*this.transport.receive()}getSession(s){return this.sessions.get(s)}getCurrentSession(){return this.currentSessionId?this.sessions.get(this.currentSessionId):void 0}getAllSessions(){return Array.from(this.sessions.values())}onSessionUpdate(s){return this.sessionUpdateHandlers.add(s),()=>{this.sessionUpdateHandlers.delete(s)}}onError(s){return this.errorHandlers.add(s),()=>{this.errorHandlers.delete(s)}}getAgentInfo(){return this.transport.getAgentInfo?.()||{}}createTransport(){switch(this.config.type){case"stdio":return new La(this.config.options);case"http":return new Ua(this.config.options);case"websocket":return new za(this.config.options);default:throw new Error(`Unknown transport type: ${this.config.type}`)}}setupTransportListeners(){this.transport.onSessionUpdate(s=>{this.handleSessionUpdate(s)}),this.transport.onError(s=>{this.handleError(s)})}handleSessionUpdate(s){if(s.sessionId){const a=this.sessions.get(s.sessionId);a&&(s.status&&(a.status=s.status),s.message&&a.messages.push(s.message),s.error&&(a.error=s.error))}for(const a of this.sessionUpdateHandlers)try{a(s)}catch(n){ot.error("Error in session update handler",{error:n instanceof Error?n.message:String(n)})}}handleError(s){for(const a of this.errorHandlers)try{a(s)}catch(n){ot.error("Error in error handler",{error:n instanceof Error?n.message:String(n)})}}updateSessionStatus(s,a){const n=this.sessions.get(s);n&&(n.status=a,this.handleSessionUpdate({sessionId:s,status:a}))}generateSessionId(){return`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}generateMessageId(){return`msg_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}}const Se=ie("acp-client-hook");function Oa(t){const[s,a]=c.useState(null),[n,o]=c.useState(null),[i,r]=c.useState(null);return c.useEffect(()=>{const p=new URLSearchParams(window.location.search).get("session");p&&(Se.info("Session ID found in URL",{sessionId:p}),r(p));try{Se.info("Initializing ACP client",{serverUrl:t.serverUrl});const d=new $a({type:"http",options:{baseUrl:t.serverUrl}});return a(d),Se.info("ACP client initialized successfully"),()=>{Se.debug("Disconnecting ACP client"),d.disconnect().catch(l=>{Se.error("Failed to disconnect ACP client",{error:l instanceof Error?l.message:String(l)})})}}catch(d){const l=d instanceof Error?d.message:"Failed to initialize ACP client";o(l),Se.error("Failed to initialize ACP client",{error:d instanceof Error?d.message:String(d),stack:d instanceof Error?d.stack:void 0});return}},[t.serverUrl]),{client:s,error:n,sessionId:i}}const bt=J(["pending","in_progress","completed","failed"]),Fa=J(["read","edit","delete","move","search","execute","think","fetch","switch_mode","other"]),ws=U({path:v(),line:P().nullable().optional()}),yt=U({inputTokens:P().optional(),outputTokens:P().optional(),totalTokens:P().optional()}),vt=Le("type",[U({type:F("content"),content:U({type:F("text"),text:v()})}),U({type:F("text"),text:v()}),U({type:F("image"),data:v(),mimeType:v().optional(),alt:v().optional()}),U({type:F("image"),url:v(),alt:v().optional()}),U({type:F("diff"),path:v(),oldText:v(),newText:v(),line:P().nullable().optional()}),U({type:F("terminal"),terminalId:v()})]),js=U({id:v(),title:v(),prettyName:v().optional(),icon:v().optional(),status:bt,content:V(vt).optional()}),Ba=Le("type",[U({type:F("text"),text:v()}),U({type:F("tool_call"),toolCall:js})]),Ns=U({id:v(),content:v(),toolCalls:V(js).optional(),contentBlocks:V(Ba).optional(),isStreaming:be().optional()}),Ss=U({id:v(),batchId:v().optional(),title:v(),prettyName:v().optional(),icon:v().optional(),verbiage:U({active:v(),past:v(),paramKey:v().optional()}).optional(),subline:v().optional(),kind:Fa,status:bt,contentPosition:P().optional(),locations:V(ws).optional(),rawInput:X(v(),te()).optional(),rawOutput:X(v(),te()).optional(),content:V(vt).optional(),error:v().optional(),startedAt:P().optional(),completedAt:P().optional(),tokenUsage:yt.optional(),_meta:U({truncationWarning:v().optional(),compactionAction:J(["compacted","truncated"]).optional(),originalTokens:P().optional(),finalTokens:P().optional(),originalContentPreview:v().optional(),originalContentPath:v().optional()}).optional(),subagentPort:P().optional(),subagentSessionId:v().optional(),subagentMessages:V(Ns).optional(),subagentStreaming:be().optional()}),Ha=U({id:v(),status:bt.optional(),title:v().optional(),prettyName:v().optional(),icon:v().optional(),batchId:v().optional(),rawInput:X(v(),te()).optional(),locations:V(ws).optional(),rawOutput:X(v(),te()).optional(),content:V(vt).optional(),error:v().optional(),completedAt:P().optional(),tokenUsage:yt.optional(),subagentPort:P().optional(),subagentSessionId:v().optional(),subagentMessages:V(Ns).optional(),_meta:U({truncationWarning:v().optional(),compactionAction:J(["compacted","truncated"]).optional(),originalTokens:P().optional(),finalTokens:P().optional(),originalContentPreview:v().optional(),originalContentPath:v().optional()}).optional()});function Ut(t,s){return{...t,status:s.status??t.status,title:s.title??t.title,prettyName:s.prettyName??t.prettyName,icon:s.icon??t.icon,batchId:s.batchId??t.batchId,rawInput:s.rawInput??t.rawInput,locations:s.locations??t.locations,rawOutput:s.rawOutput??t.rawOutput,content:s.content?[...t.content??[],...s.content]:t.content,error:s.error??t.error,completedAt:s.completedAt??t.completedAt,tokenUsage:s.tokenUsage??t.tokenUsage,subagentPort:s.subagentPort??t.subagentPort,subagentSessionId:s.subagentSessionId??t.subagentSessionId,subagentMessages:s.subagentMessages??t.subagentMessages,_meta:s._meta??t._meta}}const ne=ie("chat-store","debug"),Fe=[];function rt(t){const s={id:`hook_${Date.now()}_${t.hookType}_${t.callback}`,hookType:t.hookType,callback:t.callback,...t.toolCallId?{toolCallId:t.toolCallId}:{}};switch(t.type){case"hook_triggered":return{...s,status:"triggered",threshold:t.threshold,currentPercentage:t.currentPercentage,triggeredAt:t.triggeredAt??Date.now()};case"hook_completed":return{...s,status:"completed",metadata:t.metadata,completedAt:t.completedAt??Date.now()};case"hook_error":return{...s,status:"error",error:t.error,completedAt:t.completedAt??Date.now()}}}let Oe={sessionId:null,toolCallId:null,todos:Fe};const Wa=t=>{const s=t.sessionId;if(!s)return Fe;const n=(t.toolCalls[s]||[]).filter(r=>r.title==="todo_write").sort((r,u)=>(u.startedAt||0)-(r.startedAt||0));if(n.length===0)return Fe;const o=n[0];if(!o?.rawInput?.todos||!Array.isArray(o.rawInput.todos))return Fe;if(Oe.sessionId===s&&Oe.toolCallId===o.id)return Oe.todos;const i=o.rawInput.todos.map((r,u)=>({id:`${o.id}-${u}`,text:r.status==="in_progress"?r.activeForm:r.content,status:r.status}));return Oe={sessionId:s,toolCallId:o.id,todos:i},i},L=Dn(t=>({connectionStatus:"disconnected",sessionId:null,error:null,messages:[],isStreaming:!1,streamingStartTime:null,toolCalls:{},totalBilled:{inputTokens:0,outputTokens:0,totalTokens:0},currentContext:{inputTokens:0,outputTokens:0,totalTokens:0},latestContextSize:null,currentModel:"claude-sonnet-4-5-20250929",tokenDisplayMode:"context",logs:[],activeTab:"chat",input:{value:"",isSubmitting:!1,attachedFiles:[]},setConnectionStatus:s=>t({connectionStatus:s}),setSessionId:s=>t({sessionId:s}),setError:s=>t({error:s}),addMessage:s=>t(a=>({messages:[...a.messages,s]})),updateMessage:(s,a)=>t(n=>{const o=n.messages.find(d=>d.id===s);let i=n.totalBilled,r=n.currentContext,u=a;if(a.tokenUsage){const d=o?.tokenUsage;ne.debug("updateMessage: incoming tokenUsage",{incoming:a.tokenUsage,existing:d});const l={inputTokens:Math.max(a.tokenUsage.inputTokens??0,d?.inputTokens??0),outputTokens:Math.max(a.tokenUsage.outputTokens??0,d?.outputTokens??0),totalTokens:Math.max(a.tokenUsage.inputTokens??0,d?.inputTokens??0)+Math.max(a.tokenUsage.outputTokens??0,d?.outputTokens??0)};ne.debug("updateMessage: merged tokenUsage",{merged:l}),u={...a,tokenUsage:l};const f=l.inputTokens-(d?.inputTokens??0),m=l.outputTokens-(d?.outputTokens??0),h=l.totalTokens-(d?.totalTokens??0);i={inputTokens:n.totalBilled.inputTokens+f,outputTokens:n.totalBilled.outputTokens+m,totalTokens:n.totalBilled.totalTokens+h},r={inputTokens:l.inputTokens,outputTokens:n.currentContext.outputTokens+m,totalTokens:l.totalTokens}}const p=n.messages.map(d=>d.id===s?{...d,...u}:d);if(a.tokenUsage&&u.tokenUsage){const d=o?.tokenUsage,l=u.tokenUsage,f=(l.inputTokens??0)-(d?.inputTokens??0),m=(l.outputTokens??0)-(d?.outputTokens??0),h=(l.totalTokens??0)-(d?.totalTokens??0),x=p.filter(y=>y.tokenUsage).map(y=>({id:y.id,role:y.role,tokens:y.tokenUsage})),g=p.reduce((y,S)=>({inputTokens:y.inputTokens+(S.tokenUsage?.inputTokens??0),outputTokens:y.outputTokens+(S.tokenUsage?.outputTokens??0),totalTokens:y.totalTokens+(S.tokenUsage?.totalTokens??0)}),{inputTokens:0,outputTokens:0,totalTokens:0}),w=g.inputTokens===i.inputTokens&&g.outputTokens===i.outputTokens&&g.totalTokens===i.totalTokens;ne.debug("updateMessage: tokenUsage update",{messageId:s,updates:a.tokenUsage,existing:d,messageMax:l,delta:{inputDelta:f,outputDelta:m,totalDelta:h},totalBilled:i,currentContext:r,actualSum:g,billedCorrect:w?"✅":"❌",messageCount:p.length,messagesWithTokens:x.length,breakdown:x})}return{messages:p,totalBilled:i,currentContext:r}}),clearMessages:()=>t({messages:[]}),setIsStreaming:s=>t({isStreaming:s}),setStreamingStartTime:s=>t({streamingStartTime:s}),addToolCall:(s,a)=>t(n=>({toolCalls:{...n.toolCalls,[s]:[...n.toolCalls[s]||[],a]}})),addToolCallToCurrentMessage:s=>t(a=>{const n=a.messages.findLastIndex(p=>p.role==="assistant");if(n===-1){ne.debug("No assistant message found, creating one for tool call at position 0");const p={id:`msg_${Date.now()}_assistant`,role:"assistant",content:"",timestamp:new Date().toISOString(),isStreaming:!1,toolCalls:[{...s,contentPosition:0}]};return{messages:[...a.messages,p]}}const o=[...a.messages],i=o[n];if(!i)return a;const r=i.content.length,u={...s,contentPosition:r};return o[n]={...i,toolCalls:[...i.toolCalls||[],u]},{messages:o}}),updateToolCallInCurrentMessage:s=>t(a=>{const n=a.messages.findLastIndex(l=>l.role==="assistant");if(n===-1)return ne.warn("No assistant message found to update tool call in"),a;const o=[...a.messages],i=o[n];if(!i)return a;const r=i.toolCalls||[],u=r.findIndex(l=>l.id===s.id);if(u===-1)return ne.warn(`Tool call ${s.id} not found in message`),a;const p=r[u];if(!p)return a;const d=[...r];return d[u]=Ut(p,s),o[n]={...i,toolCalls:d},{messages:o}}),addHookNotificationToCurrentMessage:s=>t(a=>{const n=a.messages.findLastIndex(l=>l.role==="assistant");if(n===-1){ne.debug("No assistant message found, creating one for hook notification");const l={...rt(s),contentPosition:0},f={id:`msg_${Date.now()}_assistant`,role:"assistant",content:"",timestamp:new Date().toISOString(),isStreaming:!1,hookNotifications:[l]};return{messages:[...a.messages,f]}}const o=[...a.messages],i=o[n];if(!i)return a;const r=i.hookNotifications||[],u=i.content.length;if(s.type==="hook_triggered"){ne.debug("Adding hook_triggered notification for loading state",{hookType:s.hookType,callback:s.callback,contentPosition:u});const l={...rt(s),contentPosition:u},f=[...r,l];return o[n]={...i,hookNotifications:f},{messages:o}}let p;const d=r.findIndex(l=>l.hookType===s.hookType&&l.callback===s.callback&&l.status==="triggered");if(d!==-1){const l=r[d];p=[...r];const f=s.type==="hook_completed"||s.type==="hook_error"?s.completedAt??Date.now():Date.now();p[d]={...l,status:s.type==="hook_completed"?"completed":"error",completedAt:f,...s.type==="hook_completed"&&s.metadata?{metadata:s.metadata}:{},...s.type==="hook_error"?{error:s.error}:{}},ne.debug("Merged hook notification with triggered state",{hookType:s.hookType,status:p[d]?.status})}else{const l={...rt(s),contentPosition:u};p=[...r,l],ne.debug("Added hook notification without prior triggered state",{hookType:s.hookType,callback:s.callback,contentPosition:u})}return o[n]={...i,hookNotifications:p},{messages:o}}),updateToolCall:(s,a)=>t(n=>{const o=n.toolCalls[s]||[],i=o.findIndex(p=>p.id===a.id);if(i===-1)return n;const r=o[i];if(!r)return n;const u=[...o];return u[i]=Ut(r,a),{toolCalls:{...n.toolCalls,[s]:u}}}),setInputValue:s=>t(a=>({input:{...a.input,value:s}})),setInputSubmitting:s=>t(a=>({input:{...a.input,isSubmitting:s}})),addFileAttachment:s=>t(a=>({input:{...a.input,attachedFiles:[...a.input.attachedFiles,s]}})),removeFileAttachment:s=>t(a=>({input:{...a.input,attachedFiles:a.input.attachedFiles.filter((n,o)=>o!==s)}})),clearInput:()=>t(s=>({input:{value:"",isSubmitting:!1,attachedFiles:[]}})),addTokenUsage:s=>t(a=>({totalBilled:{inputTokens:a.totalBilled.inputTokens+(s.inputTokens??0),outputTokens:a.totalBilled.outputTokens+(s.outputTokens??0),totalTokens:a.totalBilled.totalTokens+(s.totalTokens??0)},currentContext:{inputTokens:s.inputTokens??a.currentContext.inputTokens,outputTokens:a.currentContext.outputTokens+(s.outputTokens??0),totalTokens:(s.inputTokens??a.currentContext.inputTokens)+(a.currentContext.outputTokens+(s.outputTokens??0))}})),setLatestContextSize:s=>t({latestContextSize:s}),setCurrentModel:s=>t({currentModel:s}),resetTokens:()=>t({totalBilled:{inputTokens:0,outputTokens:0,totalTokens:0},currentContext:{inputTokens:0,outputTokens:0,totalTokens:0},latestContextSize:null}),cycleTokenDisplayMode:()=>t(s=>{const a=["context","input","output"],o=(a.indexOf(s.tokenDisplayMode)+1)%a.length,i=a[o];return i?{tokenDisplayMode:i}:s}),addLog:s=>t(a=>({logs:[...a.logs,s]})),clearLogs:()=>t({logs:[]}),setActiveTab:s=>t({activeTab:s})})),ee=ie("use-chat-messages","debug");function ks(t,s){const a=L(y=>y.messages),n=L(y=>y.isStreaming),o=L(y=>y.sessionId),i=L(y=>y.setIsStreaming),r=L(y=>y.setStreamingStartTime),u=L(y=>y.addMessage),p=L(y=>y.updateMessage),d=L(y=>y.setError),l=L(y=>y.setLatestContextSize),f=L(y=>y.addToolCall),m=L(y=>y.updateToolCall),h=L(y=>y.addToolCallToCurrentMessage),x=L(y=>y.updateToolCallInCurrentMessage),g=L(y=>y.addHookNotificationToCurrentMessage),w=c.useCallback(async(y,S)=>{if(ee.debug("[sendMessage] Called with",{contentLength:y.length,attachmentsCount:S?.length||0,hasAttachments:!!S&&S.length>0}),!t){ee.error("No client available"),d("No client available");return}let N=o;if(!N){ee.info("Creating new session before sending first message");const _=await s();if(!_){ee.error("Failed to create session"),d("Failed to create session");return}N=_,ee.info("Session created successfully",{sessionId:_})}const k=`msg_${Date.now()}_assistant`;try{const _=Date.now();i(!0),r(_);const C={id:`msg_${Date.now()}_user`,role:"user",content:y,timestamp:new Date().toISOString(),isStreaming:!1,...S&&S.length>0?{images:S.filter(A=>A.mimeType.startsWith("image/")).map(A=>({mimeType:A.mimeType,data:A.data}))}:{}};u(C);const D={id:k,role:"assistant",content:"",timestamp:new Date().toISOString(),isStreaming:!0,streamingStartTime:_};u(D);const R=t.receiveMessages();t.sendMessage(y,N,S).catch(A=>{const B=A instanceof Error?A.message:String(A);d(B),i(!1),r(null)});let z="",q=!1;for await(const A of R)if(A.type==="content"){const B=A._meta,K=B?.context_size||A.context_size;if(K!=null){const H=K;ee.info("✅ Received context_size from backend",{context_size:H,totalEstimated:H.totalEstimated,source:B?.context_size?"_meta":"direct"}),l(H)}else ee.debug("Chunk does not have context_size",{hasContextSize:"context_size"in A,hasMeta:"_meta"in A,metaKeys:B?Object.keys(B):null});if(A.tokenUsage&&ee.debug("Received tokenUsage from backend",{tokenUsage:A.tokenUsage}),A.isComplete){p(k,{content:z,isStreaming:!1,streamingStartTime:void 0,...A.tokenUsage?{tokenUsage:A.tokenUsage}:{}}),i(!1),r(null),q=!0;break}else A.contentDelta.type==="text"&&(z+=A.contentDelta.text,p(k,{content:z,...A.tokenUsage?{tokenUsage:A.tokenUsage}:{}}),await new Promise(H=>setTimeout(H,16)))}else A.type==="tool_call"?(ee.debug("Received tool_call chunk",{chunk:A}),f(N,A.toolCall),h(A.toolCall)):A.type==="tool_call_update"?(ee.debug("Received tool_call_update chunk",{chunk:A}),m(N,A.toolCallUpdate),x(A.toolCallUpdate)):A.type==="hook_notification"&&(ee.debug("Received hook_notification chunk",{chunk:A}),g(A.notification));q||(ee.warn("Stream ended without isComplete flag"),p(k,{isStreaming:!1,streamingStartTime:void 0}),i(!1),r(null))}catch(_){const C=_ instanceof Error?_.message:String(_);d(C),i(!1),r(null),p(k,{isStreaming:!1,streamingStartTime:void 0})}},[t,o,s,u,p,i,r,d,l,f,m,h,x,g]);return{messages:a,isStreaming:n,sendMessage:w}}const Lt=ie("use-chat-input","debug");function Va(t,s){const a=L(m=>m.input),n=L(m=>m.setInputValue),o=L(m=>m.setInputSubmitting),i=L(m=>m.addFileAttachment),r=L(m=>m.removeFileAttachment),{sendMessage:u}=ks(t,s),p=c.useCallback(m=>{n(m)},[n]),d=c.useCallback(async()=>{if(!a.value.trim()||a.isSubmitting)return;const m=a.value,h=a.attachedFiles;Lt.debug("Submitting message with attachments",{messageLength:m.length,attachmentCount:h.length,hasAttachments:h.length>0}),n(""),o(!0);try{await u(m,h.length>0?h:void 0),L.setState(x=>({input:{...x.input,attachedFiles:[]}}))}catch(x){Lt.error("Failed to send message",{error:x instanceof Error?x.message:String(x)})}finally{o(!1)}},[a,n,o,u]),l=c.useCallback(m=>{i(m)},[i]),f=c.useCallback(m=>{r(m)},[r]);return{value:a.value,isSubmitting:a.isSubmitting,attachedFiles:a.attachedFiles,onChange:p,onSubmit:d,onAttachFile:l,onRemoveFile:f}}const ue=ie("use-chat-session","debug");function qa(t,s){const a=L(g=>g.connectionStatus),n=L(g=>g.sessionId),o=L(g=>g.setConnectionStatus),i=L(g=>g.setSessionId),r=L(g=>g.setError),u=L(g=>g.clearMessages),p=L(g=>g.resetTokens),d=L(g=>g.addMessage),l=L(g=>g.setLatestContextSize);c.useEffect(()=>t?t.onSessionUpdate(w=>{const y=w._meta,S=y?.context_size||w.context_size;if(S!=null){const N=S;ue.info("✅ Received context_size from session update",{context_size:N,totalEstimated:N.totalEstimated,isReplay:y?.isReplay}),l(N)}if(w.message&&(ue.debug("Session update with message",{message:w.message}),w.message.role!=="tool")){const N=w.message.content.map(D=>D.type==="text"?D.text:"").join(""),k=[];for(const D of w.message.content)if(D.type==="image"){const R=D;R.source?.data?k.push({mimeType:R.source.media_type||"image/png",data:R.source.data}):R.data&&k.push({mimeType:R.mimeType||"image/png",data:R.data})}const _=L.getState().messages,C=_[_.length-1];if(w.message.role==="assistant"&&C?.role==="assistant"&&C.content===""&&N)ue.debug("Appending text to existing assistant message"),L.getState().updateMessage(C.id,{content:C.content+N});else{const D={id:w.message.id,role:w.message.role,content:N,timestamp:w.message.timestamp,isStreaming:!1,...k.length>0?{images:k}:{}};d(D)}}}):void 0,[t,d,l]);const f=c.useCallback(async()=>{if(!t){r("No client available");return}try{o("connecting"),r(null),await t.connect();const g=t.getCurrentSession();if(g?.id&&(i(g.id),typeof window<"u")){const w=new URL(window.location.href);w.searchParams.set("session",g.id),window.history.replaceState({},"",w.toString())}o("connected")}catch(g){ue.error("Failed to connect",{error:g instanceof Error?g.message:String(g)});const w=g instanceof Error?g.message:String(g);r(w),o("error")}},[t,o,i,r]),m=c.useCallback(async g=>{if(!t){r("No client available");return}try{o("connecting"),r(null),u(),p();const w=await t.loadSession(g);i(w),o("connected"),ue.info("Session loaded successfully",{sessionId:w})}catch(w){ue.warn("Failed to load session, creating new one instead",{sessionId:g,error:w instanceof Error?w.message:String(w)});try{await f();const y=await t.startSession();if(i(y),u(),p(),typeof window<"u"){const S=new URL(window.location.href);S.searchParams.set("session",y),window.history.replaceState({},"",S.toString())}ue.info("Created new session after failed load",{sessionId:y})}catch(y){const S=y instanceof Error?y.message:String(y);r(`Failed to load or create session: ${S}`),o("error")}}},[t,o,i,r,u,p,f]),h=c.useCallback(async()=>{if(!t)return r("No client available"),null;try{const g=await t.startSession();if(i(g),L.getState().messages.length===0&&(u(),p()),typeof window<"u"){const y=new URL(window.location.href);y.searchParams.set("session",g),window.history.pushState({},"",y.toString())}return g}catch(g){const w=g instanceof Error?g.message:String(g);return r(w),null}},[t,i,r,u,p]),x=c.useCallback(async()=>{if(t)try{await t.disconnect(),o("disconnected"),i(null)}catch(g){const w=g instanceof Error?g.message:String(g);r(w)}},[t,o,i,r]);return c.useEffect(()=>{!t||a!=="disconnected"||(s?(ue.info("Loading initial session from URL",{sessionId:s}),m(s)):f())},[t,a,s,f,m]),{connectionStatus:a,sessionId:n,connect:f,loadSession:m,startSession:h,disconnect:x}}const zt="town-message-history",Ka=100;function Ga(){const[t,s]=c.useState(-1),[a,n]=c.useState(""),o=c.useCallback(()=>{try{const l=localStorage.getItem(zt);return l?JSON.parse(l):[]}catch{return[]}},[]),i=c.useCallback(l=>{const f=l.trim();if(f){try{const m=o();if(m[0]===f)return;const h=[f,...m].slice(0,Ka);localStorage.setItem(zt,JSON.stringify(h))}catch{}s(-1),n("")}},[o]),r=c.useCallback(l=>{const f=o();if(f.length===0)return null;t===-1&&n(l);const m=Math.min(t+1,f.length-1);if(m===t)return null;const h=f[m];return h===void 0?null:(s(m),h)},[t,o]),u=c.useCallback(()=>{if(t===-1)return null;const l=o();if(t===0){s(-1);const h=a;return n(""),h}const f=t-1,m=l[f];return m===void 0?null:(s(f),m)},[t,a,o]),p=c.useCallback(()=>{t!==-1&&(s(-1),n(""))},[t]);return{addToHistory:i,navigatePrevious:r,navigateNext:u,resetNavigation:p,isBrowsingHistory:t!==-1,historyIndex:t}}const se=ie("subagent-stream");function Qa(t){const[s,a]=c.useState([]),[n,o]=c.useState(!!t),[i,r]=c.useState(!1),[u,p]=c.useState(null),d=c.useRef(null),l=c.useRef(null),f=c.useRef(null),m=c.useCallback(()=>{f.current||(f.current=setTimeout(()=>{f.current=null,l.current&&a([{...l.current}])},250))},[]),h=c.useCallback(N=>{try{const k=JSON.parse(N);if(se.debug("Processing SSE message",{method:k.method,hasParams:!!k.params}),k.method==="session/update"&&k.params?.update){const _=k.params.update;if(se.debug("Got session update",{sessionUpdate:_.sessionUpdate}),_.sessionUpdate==="agent_message_chunk"){const C=_.content;if(C?.type==="text"&&typeof C.text=="string"&&l.current){l.current.content+=C.text;const D=l.current.contentBlocks??[],R=D[D.length-1];R&&R.type==="text"?R.text+=C.text:D.push({type:"text",text:C.text}),l.current.contentBlocks=D,m()}}else if(_.sessionUpdate==="tool_call"){const C={id:_.toolCallId??`tc-${Date.now()}`,title:_.title??"Tool call",prettyName:_._meta?.prettyName,icon:_._meta?.icon,status:_.status??"pending",content:[]};if(l.current){l.current.toolCalls=[...l.current.toolCalls??[],C];const D=l.current.contentBlocks??[];D.push({type:"tool_call",toolCall:C}),l.current.contentBlocks=D,m()}}else if(_.sessionUpdate==="tool_call_update"&&l.current?.toolCalls){const C=_.toolCallId,D=R=>R.id===C?{...R,status:_.status??R.status,content:_.content??R.content}:R;l.current.toolCalls=l.current.toolCalls.map(D),l.current.contentBlocks&&(l.current.contentBlocks=l.current.contentBlocks.map(R=>R.type==="tool_call"?{...R,toolCall:D(R.toolCall)}:R)),m()}}}catch(k){se.error("Failed to parse sub-agent SSE message",{error:k instanceof Error?k.message:String(k)})}},[m]),x=c.useCallback(async(N,k,_)=>{const C=`http://${_}:${N}`;se.info("Connecting to sub-agent SSE",{baseUrl:C,sessionId:k}),o(!0),p(null);const D=new AbortController;d.current=D;try{se.info("Fetching SSE endpoint",{url:`${C}/events`,sessionId:k});const R=await fetch(`${C}/events`,{method:"GET",headers:{"X-Session-ID":k},signal:D.signal});if(se.info("SSE response received",{status:R.status,ok:R.ok}),!R.ok)throw new Error(`SSE connection failed: HTTP ${R.status}`);if(!R.body)throw new Error("Response body is null");se.info("Sub-agent SSE connection opened, starting to read stream");const z=R.body.getReader(),q=new TextDecoder;let A="";for(l.current={id:`subagent-${Date.now()}`,content:"",toolCalls:[],contentBlocks:[],isStreaming:!0},a([l.current]);;){const{done:B,value:K}=await z.read();if(B){se.debug("Sub-agent SSE stream closed");break}A+=q.decode(K,{stream:!0});const H=A.split(`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-space-x-reverse:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-yellow-950:oklch(28.6% .066 53.813);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-blue-500:oklch(62.3% .214 259.815);--color-zinc-400:oklch(70.5% .015 286.067);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-100:oklch(97% 0 0);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-neutral-950:oklch(14.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-normal:1.5;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--radius:.5rem;--max-width-prose:477px;--color-background:var(--background);--color-foreground:var(--foreground);--color-card:var(--card);--color-card-foreground:var(--card-foreground);--color-popover:var(--popover);--color-popover-foreground:var(--popover-foreground);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-primary-hover:var(--primary-hover);--color-secondary:var(--secondary);--color-secondary-foreground:var(--secondary-foreground);--color-secondary-hover:var(--secondary-hover);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-accent:var(--accent);--color-accent-foreground:var(--accent-foreground);--color-accent-hover:var(--accent-hover);--color-destructive:var(--destructive);--color-destructive-foreground:var(--destructive-foreground);--color-destructive-hover:var(--destructive-hover);--color-border:var(--border);--color-border-dark:var(--border-dark);--color-input:var(--input);--color-input-background:var(--input-background);--color-ring:var(--ring);--color-text-primary:var(--text-primary);--color-text-secondary:var(--text-secondary);--color-text-tertiary:var(--text-tertiary);--color-sidebar:var(--sidebar);--color-sidebar-foreground:var(--sidebar-foreground);--color-sidebar-accent:var(--sidebar-accent);--color-sidebar-accent-foreground:var(--sidebar-accent-foreground);--color-sidebar-border:var(--sidebar-border);--color-sidebar-ring:var(--sidebar-ring);--max-width-chat:720px;--max-width-prompt-container:393px;--letter-spacing-tight:-.48px;--letter-spacing-heading:-.4px;--letter-spacing-uppercase:1.12px;--font-size-heading-1:3rem;--line-height-heading-1:1;--font-size-heading-2:1.875rem;--line-height-heading-2:1;--font-size-heading-3:1.5rem;--line-height-heading-3:1.2;--font-size-heading-4:1.25rem;--line-height-heading-4:1.2;--font-size-heading-5:1rem;--line-height-heading-5:1.2;--font-size-subheading:1.25rem;--line-height-subheading:1.5;--font-size-label:.875rem;--line-height-label:1.5;--font-size-paragraph:1rem;--line-height-paragraph:1.5;--font-size-paragraph-sm:.875rem;--line-height-paragraph-sm:1.5;--font-size-paragraph-mini:.75rem;--line-height-paragraph-mini:1.5;--font-size-caption:.75rem;--line-height-caption:1.5;--font-size-code:.875rem;--line-height-code:1.5;--letter-spacing-wide:.07em}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border)}body{background-color:var(--background);color:var(--foreground)}button{cursor:pointer}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-3{top:calc(var(--spacing)*3)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-\[50\%\]{top:50%}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-\[50\%\]{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mr-0\.5{margin-right:calc(var(--spacing)*.5)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-auto{margin-right:auto}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-3{margin-left:calc(var(--spacing)*-3)}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-5{margin-left:calc(var(--spacing)*5)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-full{width:100%;height:100%}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[6lh\]{max-height:6lh}.max-h-\[200px\]{max-height:200px}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[44px\]{min-height:44px}.min-h-\[80px\]{min-height:80px}.min-h-svh{min-height:100svh}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-7{width:calc(var(--spacing)*7)}.w-10{width:calc(var(--spacing)*10)}.w-20{width:calc(var(--spacing)*20)}.w-40{width:calc(var(--spacing)*40)}.w-64{width:calc(var(--spacing)*64)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\[80\%\]{max-width:80%}.max-w-\[90\%\]{max-width:90%}.max-w-\[200px\]{max-width:200px}.max-w-chat{max-width:var(--max-width-chat)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-prompt-container{max-width:var(--max-width-prompt-container)}.max-w-prose{max-width:var(--max-width-prose)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.-rotate-90{rotate:-90deg}.rotate-0{rotate:none}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-\[4px\]{gap:4px}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:var(--radius)}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[3px\]{border-radius:3px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-\[primary\]{border-color:primary}.border-border{border-color:var(--color-border)}.border-border-dark{border-color:var(--color-border-dark)}.border-border\/50{border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.border-border\/50{border-color:color-mix(in oklab,var(--color-border)50%,transparent)}}.border-destructive,.border-destructive\/20{border-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/20{border-color:color-mix(in oklab,var(--color-destructive)20%,transparent)}}.border-green-500{border-color:var(--color-green-500)}.border-input{border-color:var(--color-input)}.border-sidebar-border{border-color:var(--color-sidebar-border)}.border-yellow-200{border-color:var(--color-yellow-200)}.bg-accent{background-color:var(--color-accent)}.bg-background,.bg-background\/80{background-color:var(--color-background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/80{background-color:color-mix(in oklab,var(--color-background)80%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.bg-border{background-color:var(--color-border)}.bg-card{background-color:var(--color-card)}.bg-destructive,.bg-destructive\/10{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--color-destructive)10%,transparent)}}.bg-foreground{background-color:var(--color-foreground)}.bg-input-background{background-color:var(--color-input-background)}.bg-muted,.bg-muted\/30{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--color-muted)30%,transparent)}}.bg-muted\/50{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.bg-popover{background-color:var(--color-popover)}.bg-primary,.bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--color-primary)10%,transparent)}}.bg-primary\/70{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/70{background-color:color-mix(in oklab,var(--color-primary)70%,transparent)}}.bg-secondary{background-color:var(--color-secondary)}.bg-sidebar{background-color:var(--color-sidebar)}.bg-sidebar-accent-foreground\/10{background-color:var(--color-sidebar-accent-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-sidebar-accent-foreground\/10{background-color:color-mix(in oklab,var(--color-sidebar-accent-foreground)10%,transparent)}}.bg-sidebar-border{background-color:var(--color-sidebar-border)}.bg-transparent{background-color:#0000}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-500\/5{background-color:#edb2000d}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/5{background-color:color-mix(in oklab,var(--color-yellow-500)5%,transparent)}}.bg-linear-to-t{--tw-gradient-position:to top}@supports (background-image:linear-gradient(in lab,red,red)){.bg-linear-to-t{--tw-gradient-position:to top in oklab}}.bg-linear-to-t{background-image:linear-gradient(var(--tw-gradient-stops))}.from-background{--tw-gradient-from:var(--color-background);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.fill-current{fill:currentColor}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-4{padding-right:calc(var(--spacing)*4)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-4\.5{padding-left:calc(var(--spacing)*4.5)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-16{padding-left:calc(var(--spacing)*16)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-\[var\(--font-family\)\]{--tw-font-weight:var(--font-family);font-weight:var(--font-family)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--font-size\)\]{color:var(--font-size)}.text-blue-500{color:var(--color-blue-500)}.text-card-foreground{color:var(--color-card-foreground)}.text-destructive{color:var(--color-destructive)}.text-destructive-foreground{color:var(--color-destructive-foreground)}.text-destructive\/70{color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.text-destructive\/70{color:color-mix(in oklab,var(--color-destructive)70%,transparent)}}.text-foreground{color:var(--color-foreground)}.text-green-500{color:var(--color-green-500)}.text-muted-foreground,.text-muted-foreground\/50{color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/50{color:color-mix(in oklab,var(--color-muted-foreground)50%,transparent)}}.text-muted-foreground\/70{color:var(--color-muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/70{color:color-mix(in oklab,var(--color-muted-foreground)70%,transparent)}}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-400{color:var(--color-neutral-400)}.text-popover-foreground{color:var(--color-popover-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-red-500{color:var(--color-red-500)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--color-sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--color-sidebar-foreground)70%,transparent)}}.text-text-primary{color:var(--color-text-primary)}.text-text-secondary,.text-text-secondary\/50{color:var(--color-text-secondary)}@supports (color:color-mix(in lab,red,red)){.text-text-secondary\/50{color:color-mix(in oklab,var(--color-text-secondary)50%,transparent)}}.text-text-secondary\/70{color:var(--color-text-secondary)}@supports (color:color-mix(in lab,red,red)){.text-text-secondary\/70{color:color-mix(in oklab,var(--color-text-secondary)70%,transparent)}}.text-text-tertiary{color:var(--color-text-tertiary)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.text-zinc-400{color:var(--color-zinc-400)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline-offset-4{text-underline-offset:4px}.accent-\[primary\]{accent-color:primary}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 8px 24px -16px var(--tw-shadow-color,#0000000a),0 4px 16px 0 var(--tw-shadow-color,#0000000a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 8px 24px -16px var(--tw-shadow-color,#0000000a),0 4px 16px 0 var(--tw-shadow-color,#0000000a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-primary{--tw-ring-color:var(--color-primary)}.ring-sidebar-ring{--tw-ring-color:var(--color-sidebar-ring)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-background{--tw-ring-offset-color:var(--color-background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.delay-300{transition-delay:.3s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media(hover:hover){.group-hover\:text-text-secondary:is(:where(.group):hover *){color:var(--color-text-secondary)}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/item\:opacity-100:is(:where(.group\/item):hover *),.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:\!size-8:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:\!p-0:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:\!p-2:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r-0:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:0}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-\[\.toast\]\:bg-muted:is(:where(.group).toast *){background-color:var(--color-muted)}.group-\[\.toast\]\:bg-primary:is(:where(.group).toast *){background-color:var(--color-primary)}.group-\[\.toast\]\:text-muted-foreground:is(:where(.group).toast *){color:var(--color-muted-foreground)}.group-\[\.toast\]\:text-primary-foreground:is(:where(.group).toast *){color:var(--color-primary-foreground)}.group-\[\.toaster\]\:border-border:is(:where(.group).toaster *){border-color:var(--color-border)}.group-\[\.toaster\]\:bg-background:is(:where(.group).toaster *){background-color:var(--color-background)}.group-\[\.toaster\]\:text-foreground:is(:where(.group).toaster *){color:var(--color-foreground)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--color-sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--color-sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=default\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=default]~*),.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--color-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--color-muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-r-0:last-child{border-right-style:var(--tw-border-style);border-right-width:0}@media(hover:hover){.hover\:border-border\/80:hover{border-color:var(--color-border)}@supports (color:color-mix(in lab,red,red)){.hover\:border-border\/80:hover{border-color:color-mix(in oklab,var(--color-border)80%,transparent)}}.hover\:bg-accent:hover{background-color:var(--color-accent)}.hover\:bg-accent-hover:hover{background-color:var(--color-accent-hover)}.hover\:bg-background:hover{background-color:var(--color-background)}.hover\:bg-card:hover,.hover\:bg-card\/80:hover{background-color:var(--color-card)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-card\/80:hover{background-color:color-mix(in oklab,var(--color-card)80%,transparent)}}.hover\:bg-card\/90:hover{background-color:var(--color-card)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-card\/90:hover{background-color:color-mix(in oklab,var(--color-card)90%,transparent)}}.hover\:bg-destructive-hover:hover{background-color:var(--color-destructive-hover)}.hover\:bg-muted:hover{background-color:var(--color-muted)}.hover\:bg-primary-hover:hover{background-color:var(--color-primary-hover)}.hover\:bg-primary\/5:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/5:hover{background-color:color-mix(in oklab,var(--color-primary)5%,transparent)}}.hover\:bg-secondary-hover:hover{background-color:var(--color-secondary-hover)}.hover\:bg-secondary\/80:hover{background-color:var(--color-secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--color-secondary)80%,transparent)}}.hover\:bg-sidebar-accent:hover{background-color:var(--color-sidebar-accent)}.hover\:text-accent-foreground:hover{color:var(--color-accent-foreground)}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:text-sidebar-accent-foreground:hover{color:var(--color-sidebar-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow:0 8px 24px -16px var(--tw-shadow-color,#0000000a),0 4px 16px 0 var(--tw-shadow-color,#0000000a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:is(:where(.group)[data-collapsible=offcanvas] *):hover{background-color:var(--color-sidebar)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--color-sidebar-border)}}.focus\:bg-accent:focus{background-color:var(--color-accent)}.focus\:bg-destructive\/15:focus{background-color:var(--color-destructive)}@supports (color:color-mix(in lab,red,red)){.focus\:bg-destructive\/15:focus{background-color:color-mix(in oklab,var(--color-destructive)15%,transparent)}}.focus\:bg-muted:focus{background-color:var(--color-muted)}.focus\:text-accent-foreground:focus{color:var(--color-accent-foreground)}.focus\:text-destructive:focus{color:var(--color-destructive)}.focus\:text-foreground:focus{color:var(--color-foreground)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--color-ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-border-dark:focus-visible{--tw-ring-color:var(--color-border-dark)}.focus-visible\:ring-destructive:focus-visible{--tw-ring-color:var(--color-destructive)}.focus-visible\:ring-green-500:focus-visible{--tw-ring-color:var(--color-green-500)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--color-ring)}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color:var(--color-sidebar-ring)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:bg-sidebar-accent:active{background-color:var(--color-sidebar-accent)}.active\:text-sidebar-accent-foreground:active{color:var(--color-sidebar-accent-foreground)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--color-sidebar)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--color-sidebar-accent)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--color-sidebar-accent-foreground)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=active\]\:bg-accent[data-state=active]{background-color:var(--color-accent)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--color-background)}.data-\[state\=active\]\:bg-transparent[data-state=active]{background-color:#0000}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--color-foreground)}.data-\[state\=active\]\:opacity-100[data-state=active]{opacity:1}.data-\[state\=active\]\:shadow-none[data-state=active]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 8px 24px -16px var(--tw-shadow-color,#0000000a),0 4px 16px 0 var(--tw-shadow-color,#0000000a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=inactive\]\:text-muted-foreground[data-state=inactive]{color:var(--color-muted-foreground)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--color-accent)}.data-\[state\=open\]\:bg-muted[data-state=open]{background-color:var(--color-muted)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--color-secondary)}.data-\[state\=open\]\:bg-sidebar-accent[data-state=open]{background-color:var(--color-sidebar-accent)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--color-muted-foreground)}.data-\[state\=open\]\:text-sidebar-accent-foreground[data-state=open]{color:var(--color-sidebar-accent-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}@media(hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--color-sidebar-accent)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--color-sidebar-accent-foreground)}}@media(min-width:40rem){.sm\:block{display:block}.sm\:flex{display:flex}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:text-left{text-align:left}}@media(min-width:48rem){.md\:block{display:block}.md\:hidden{display:none}.md\:pl-64{padding-left:calc(var(--spacing)*64)}.md\:opacity-0{opacity:0}}.after\:md\:hidden:after{content:var(--tw-content)}@media(min-width:48rem){.after\:md\:hidden:after{display:none}}@media(min-width:64rem){.lg\:block{display:block}.lg\:px-4{padding-inline:calc(var(--spacing)*4)}}@media(min-width:80rem){.xl\:block{display:block}}@media(min-width:96rem){.\32xl\:block{display:block}}@media(prefers-color-scheme:dark){.dark\:scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.dark\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.dark\:-rotate-90{rotate:-90deg}.dark\:rotate-0{rotate:none}.dark\:border-yellow-900{border-color:var(--color-yellow-900)}.dark\:bg-transparent{background-color:#0000}.dark\:bg-yellow-950\/20{background-color:#43200433}@supports (color:color-mix(in lab,red,red)){.dark\:bg-yellow-950\/20{background-color:color-mix(in oklab,var(--color-yellow-950)20%,transparent)}}.dark\:text-green-400{color:var(--color-green-400)}.dark\:text-red-400{color:var(--color-red-400)}.dark\:text-yellow-200{color:var(--color-yellow-200)}.dark\:text-yellow-400{color:var(--color-yellow-400)}.dark\:text-yellow-500{color:var(--color-yellow-500)}}.\[\&_code\]\:break-words code{overflow-wrap:break-word}.\[\&_code\]\:whitespace-pre-wrap code{white-space:pre-wrap}.\[\&_pre\]\:max-w-full pre{max-width:100%}.\[\&_pre\]\:overflow-x-auto pre{overflow-x:auto}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:calc(var(--spacing)*0)}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:calc(var(--spacing)*0)}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--color-sidebar-accent-foreground)}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize,[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}.text-heading-1{font-size:var(--font-size-heading-1);line-height:var(--line-height-heading-1);letter-spacing:var(--letter-spacing-tight);font-weight:600}.text-heading-2{font-size:var(--font-size-heading-2);line-height:var(--line-height-heading-2);letter-spacing:var(--letter-spacing-tight);font-weight:600}.text-heading-3{font-size:var(--font-size-heading-3);line-height:var(--line-height-heading-3);letter-spacing:var(--letter-spacing-tight);font-weight:600}.text-heading-4{font-size:var(--font-size-heading-4);line-height:var(--line-height-heading-4);letter-spacing:var(--letter-spacing-heading);font-weight:600}.text-heading-5{font-size:var(--font-size-heading-5);line-height:var(--line-height-heading-5);letter-spacing:var(--letter-spacing-heading);font-weight:600}.text-subheading{font-size:var(--font-size-subheading);line-height:var(--line-height-subheading);font-weight:400}.text-label{font-size:var(--font-size-label);line-height:var(--line-height-label);letter-spacing:var(--letter-spacing-uppercase);text-transform:uppercase;font-weight:500}.text-paragraph{font-size:var(--font-size-paragraph);line-height:var(--line-height-paragraph);font-weight:400}.text-paragraph-medium{font-size:var(--font-size-paragraph);line-height:var(--line-height-paragraph);font-weight:500}.text-paragraph-sm{font-size:var(--font-size-paragraph-sm);line-height:var(--line-height-paragraph-sm);font-weight:400}.text-paragraph-sm-medium{font-size:var(--font-size-paragraph-sm);line-height:var(--line-height-paragraph-sm);letter-spacing:var(--letter-spacing-wide);font-weight:500}.text-paragraph-mini{font-size:var(--font-size-paragraph-mini);line-height:var(--line-height-paragraph-mini);font-weight:400}.text-paragraph-mini-medium{font-size:var(--font-size-paragraph-mini);line-height:var(--line-height-paragraph-mini);font-weight:500}.text-caption{font-size:var(--font-size-caption);line-height:var(--line-height-caption);font-weight:400}.text-code{font-size:var(--font-size-code);line-height:var(--line-height-code);font-family:monospace}}:root{--background:var(--color-white);--foreground:var(--color-neutral-950);--card:var(--color-white);--card-foreground:var(--color-neutral-950);--popover:var(--color-white);--popover-foreground:var(--color-neutral-950);--primary:var(--color-neutral-900);--primary-foreground:var(--color-neutral-50);--primary-hover:var(--color-neutral-700);--secondary:var(--color-neutral-100);--secondary-foreground:var(--color-neutral-900);--secondary-hover:var(--color-neutral-50);--muted:var(--color-neutral-50);--muted-foreground:var(--color-neutral-500);--accent:var(--color-neutral-100);--accent-foreground:var(--color-neutral-900);--accent-hover:var(--color-neutral-50);--destructive:var(--color-red-500);--destructive-foreground:var(--color-neutral-50);--destructive-hover:var(--color-red-600);--border:var(--color-neutral-200);--border-dark:var(--color-neutral-300);--border-focus:var(--color-neutral-400);--border-error:var(--color-red-500);--input:var(--color-neutral-200);--input-background:var(--color-white);--ring:var(--color-neutral-900);--text-primary:var(--color-neutral-900);--text-secondary:var(--color-neutral-700);--text-tertiary:var(--color-neutral-500);--sidebar:var(--color-neutral-50);--sidebar-foreground:var(--color-neutral-950);--sidebar-accent:var(--color-neutral-100);--sidebar-accent-foreground:var(--color-neutral-900);--sidebar-border:var(--color-neutral-200);--sidebar-ring:var(--color-neutral-900)}.dark{--background:var(--color-neutral-950);--foreground:var(--color-neutral-50);--card:var(--color-neutral-950);--card-foreground:var(--color-neutral-50);--popover:var(--color-neutral-950);--popover-foreground:var(--color-neutral-50);--primary:var(--color-neutral-50);--primary-foreground:var(--color-neutral-900);--primary-hover:var(--color-neutral-200);--secondary:var(--color-neutral-800);--secondary-foreground:var(--color-neutral-50);--secondary-hover:var(--color-neutral-700);--muted:var(--color-neutral-800);--muted-foreground:var(--color-neutral-400);--accent:var(--color-neutral-800);--accent-foreground:var(--color-neutral-50);--accent-hover:var(--color-neutral-700);--destructive:var(--color-red-900);--destructive-foreground:var(--color-neutral-50);--destructive-hover:var(--color-red-800);--border:var(--color-neutral-800);--border-dark:var(--color-neutral-700);--border-focus:var(--color-neutral-600);--border-error:var(--color-red-500);--input:var(--color-neutral-800);--input-background:var(--color-neutral-950);--ring:var(--color-neutral-300);--text-primary:var(--color-neutral-50);--text-secondary:var(--color-neutral-400);--text-tertiary:var(--color-neutral-500);--sidebar:var(--color-neutral-900);--sidebar-foreground:var(--color-neutral-50);--sidebar-accent:var(--color-neutral-800);--sidebar-accent-foreground:var(--color-neutral-50);--sidebar-border:var(--color-neutral-800);--sidebar-ring:var(--color-neutral-300)}.dark [data-streamdown=code-block]{background-color:var(--shiki-dark-bg,#24292e)}.dark [data-streamdown=code-block-body]{background-color:var(--shiki-dark-bg,#24292e)!important;color:var(--shiki-dark,#e1e4e8)!important}.dark [data-streamdown=code-block-header]{background-color:var(--shiki-dark-bg,#24292e)}@supports (color:color-mix(in lab,red,red)){.dark [data-streamdown=code-block-header]{background-color:color-mix(in srgb,var(--shiki-dark-bg,#24292e)80%,transparent)}}.dark [data-streamdown=inline-code]{background-color:var(--muted);color:var(--foreground)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes enter{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes exit{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}@keyframes slideDownAndFade{0%{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:translateY(0)}}@keyframes slideLeftAndFade{0%{opacity:0;transform:translate(2px)}to{opacity:1;transform:translate(0)}}@keyframes slideUpAndFade{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}@keyframes slideRightAndFade{0%{opacity:0;transform:translate(-2px)}to{opacity:1;transform:translate(0)}}@keyframes pulse-scale{0%,to{background-color:var(--color-neutral-500);transform:scale(1)}50%{background-color:var(--color-neutral-500);transform:scale(.9)}}.animate-pulse-scale{animation:1s ease-in-out infinite pulse-scale}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate-fadeIn{animation:.2s ease-out fadeIn}@keyframes slideDown{0%{opacity:0;max-height:0;transform:translateY(-4px)}to{opacity:1;max-height:500px;transform:translateY(0)}}.animate-slideDown{animation:.25s ease-out slideDown}@keyframes collapseUp{0%{opacity:1;max-height:500px;transform:translateY(0)}to{opacity:0;max-height:0;transform:translateY(-4px)}}.animate-collapseUp{animation:.2s ease-in collapseUp}@keyframes pulse-subtle{0%,to{opacity:1}50%{opacity:.8}}.animate-pulse-subtle{animation:2s ease-in-out infinite pulse-subtle}@keyframes typing{0%,to{opacity:0}50%{opacity:1}}.animate-typing{animation:1.4s ease-in-out infinite typing}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.animate-shimmer{background:linear-gradient(90deg,#0000,#ffffff80,#0000) 0 0/200% 100%;animation:2s ease-in-out infinite shimmer}.dark .animate-shimmer{background:linear-gradient(90deg,#0000,#ffffff0d,#0000) 0 0/200% 100%}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes pulse{50%{opacity:.5}}
|