teodor-new-chat-ui 2.0.57 → 2.0.58

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/index.esm.js CHANGED
@@ -2256,7 +2256,7 @@ function $n({ children: e, apiConfig: t, onError: n, onThreadChange: r, initialT
2256
2256
  headers: t == null ? void 0 : t.headers,
2257
2257
  // any extra headers caller wants
2258
2258
  // Ensure the path matches the chat endpoint
2259
- streamPath: "/chat/stream"
2259
+ streamPath: "/chat/runs/stream"
2260
2260
  }), [m, v] = oe(() => typeof a.getAuthToken == "function" ? a.getAuthToken() : null);
2261
2261
  me(() => {
2262
2262
  p(typeof a.getAuthToken == "function" ? a.getAuthToken() : null);
package/dist/index.umd.js CHANGED
@@ -6,7 +6,7 @@
6
6
  `+s):n.stack=s}catch{}}throw n}}_request(t,r){typeof t=="string"?(r=r||{},r.url=t):r=t||{},r=ft(this.defaults,r);const{transitional:n,paramsSerializer:o,headers:s}=r;n!==void 0&&Er.assertOptions(n,{silentJSONParsing:je.transitional(je.boolean),forcedJSONParsing:je.transitional(je.boolean),clarifyTimeoutError:je.transitional(je.boolean)},!1),o!=null&&(S.isFunction(o)?r.paramsSerializer={serialize:o}:Er.assertOptions(o,{encode:je.function,serialize:je.function},!0)),r.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?r.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:r.allowAbsoluteUrls=!0),Er.assertOptions(r,{baseUrl:je.spelling("baseURL"),withXsrfToken:je.spelling("withXSRFToken")},!0),r.method=(r.method||this.defaults.method||"get").toLowerCase();let a=s&&S.merge(s.common,s[r.method]);s&&S.forEach(["delete","get","head","post","put","patch","common"],m=>{delete s[m]}),r.headers=Ce.concat(a,s);const c=[];let d=!0;this.interceptors.request.forEach(function(h){typeof h.runWhen=="function"&&h.runWhen(r)===!1||(d=d&&h.synchronous,c.unshift(h.fulfilled,h.rejected))});const f=[];this.interceptors.response.forEach(function(h){f.push(h.fulfilled,h.rejected)});let u,p=0,g;if(!d){const m=[Qs.bind(this),void 0];for(m.unshift(...c),m.push(...f),g=m.length,u=Promise.resolve(r);p<g;)u=u.then(m[p++],m[p++]);return u}g=c.length;let v=r;for(;p<g;){const m=c[p++],h=c[p++];try{v=m(v)}catch(b){h.call(this,b);break}}try{u=Qs.call(this,v)}catch(m){return Promise.reject(m)}for(p=0,g=f.length;p<g;)u=u.then(f[p++],f[p++]);return u}getUri(t){t=ft(this.defaults,t);const r=Ws(t.baseURL,t.url,t.allowAbsoluteUrls);return Ms(r,t.params,t.paramsSerializer)}};S.forEach(["delete","get","head","options"],function(t){pt.prototype[t]=function(r,n){return this.request(ft(n||{},{method:t,url:r,data:(n||{}).data}))}}),S.forEach(["post","put","patch"],function(t){function r(n){return function(s,a,c){return this.request(ft(c||{},{method:t,headers:n?{"Content-Type":"multipart/form-data"}:{},url:s,data:a}))}}pt.prototype[t]=r(),pt.prototype[t+"Form"]=r(!0)});let hf=class Vd{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let r;this.promise=new Promise(function(s){r=s});const n=this;this.promise.then(o=>{if(!n._listeners)return;let s=n._listeners.length;for(;s-- >0;)n._listeners[s](o);n._listeners=null}),this.promise.then=o=>{let s;const a=new Promise(c=>{n.subscribe(c),s=c}).then(o);return a.cancel=function(){n.unsubscribe(s)},a},t(function(s,a,c){n.reason||(n.reason=new Et(s,a,c),r(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const r=this._listeners.indexOf(t);r!==-1&&this._listeners.splice(r,1)}toAbortSignal(){const t=new AbortController,r=n=>{t.abort(n)};return this.subscribe(r),t.signal.unsubscribe=()=>this.unsubscribe(r),t.signal}static source(){let t;return{token:new Vd(function(o){t=o}),cancel:t}}};function gf(e){return function(r){return e.apply(null,r)}}function mf(e){return S.isObject(e)&&e.isAxiosError===!0}const Vn={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Vn).forEach(([e,t])=>{Vn[t]=e});function ra(e){const t=new pt(e),r=vs(pt.prototype.request,t);return S.extend(r,pt.prototype,t,{allOwnKeys:!0}),S.extend(r,t,null,{allOwnKeys:!0}),r.create=function(o){return ra(ft(e,o))},r}const ge=ra(Rt);ge.Axios=pt,ge.CanceledError=Et,ge.CancelToken=hf,ge.isCancel=Bs,ge.VERSION=ea,ge.toFormData=wr,ge.AxiosError=se,ge.Cancel=ge.CanceledError,ge.all=function(t){return Promise.all(t)},ge.spread=gf,ge.isAxiosError=mf,ge.mergeConfig=ft,ge.AxiosHeaders=Ce,ge.formToJSON=e=>Fs(S.isHTMLForm(e)?new FormData(e):e),ge.getAdapter=Zs.getAdapter,ge.HttpStatusCode=Vn,ge.default=ge;const{Axios:Iw,AxiosError:_w,CanceledError:Ow,isCancel:kw,CancelToken:Mw,VERSION:Dw,all:Lw,Cancel:Fw,isAxiosError:$w,spread:Bw,toFormData:Uw,AxiosHeaders:Hw,HttpStatusCode:zw,formToJSON:Ww,getAdapter:Vw,mergeConfig:jw}=ge,jn={};function Nr(){var e;try{return typeof window<"u"&&((e=window.localStorage)==null?void 0:e.getItem("chat-debug"))==="1"}catch{return!1}}const na=jn==null?void 0:jn.VITE_API_BASE_URL,oa=na?na.replace(/\/+$/,""):void 0;!oa&&typeof window<"u"&&console.warn("VITE_API_BASE_URL is not set. The API client will need to be configured via apiConfig prop.");let Tr=null;const Kn=new Set;function sa(){return Tr}function Rn(e){Tr=e,Kn.forEach(t=>t(e))}function aa(e){return Kn.add(e),()=>Kn.delete(e)}const rt=ge.create({baseURL:oa||"http://localhost:8000",timeout:3e4,withCredentials:!0});rt.interceptors.request.use(e=>(Tr&&(e.headers.Authorization=`Bearer ${Tr}`),e)),rt.interceptors.response.use(e=>e,e=>Promise.reject(e));async function Ke(e,t){return(await rt.get(e,t)).data}async function Ar(e,t,r){return(await rt.post(e,t,r)).data}async function ia(e,t,r){return(await rt.put(e,t,r)).data}async function ca(e,t){return(await rt.delete(e,t)).data}function Ee(e){return e&&typeof e=="object"&&"data"in e?e.data:e}class Pr{get baseUrl(){const t=rt.defaults.baseURL||"";return String(t).replace(/\/+$|^\s+|\s+$/g,"")}updateConfig(t){t.baseUrl&&(rt.defaults.baseURL=String(t.baseUrl).replace(/\/+$/g,"")),t.authToken!==void 0&&Rn(t.authToken)}getAuthToken(){return sa()}setAuthToken(t){Rn(t)}onTokenChange(t){return aa(t)}async listThreads(){const t=await Ke("/chat/threads"),r=Ee(t);return(r==null?void 0:r.items)??(t==null?void 0:t.items)??[]}async createThread(t){const n=await Ar("/chat/threads",t?{title:t}:void 0);return Ee(n)}async updateThread(t,r){const n=await ia(`/chat/threads/${t}`,{title:r});return Ee(n)}async deleteThread(t){const r=await ca(`/chat/threads/${t}`);return Ee(r)}async threadInfo(t){const r=await Ke(`/chat/threads/${t}/info`);return Ee(r)}async listAgents(){const t=await Ke("/chat/agents"),r=Ee(t);return(r==null?void 0:r.items)??[]}async getAgent(t){const r=await Ke(`/chat/agents/${t}`);return Ee(r)}async getAgentSchema(t){const r=await Ke(`/chat/agents/${t}/schema`);return Ee(r)}async getMessages(t){const r=await Ke(`/chat/threads/${t.threadId}/messages`,{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs,limit:t.limit,before_id:t.beforeId??void 0}});return Ee(r)}async getState(t){const r=await Ke(`/chat/threads/${t.threadId}/state`,{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return Ee(r)}async getStateHistory(t){const r=await Ke(`/chat/threads/${t.threadId}/state/history`,{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return Ee(r)}async listCheckpoints(t){const r=await Ke(`/chat/threads/${t}/checkpoints`,{params:{thread_id:t}});return Ee(r)}async uploadExcel(t,r={}){const n=new FormData,o=t.name.replace(/\.[^.]+$/,"").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||`excel_${Date.now()}`,s=(r.tableName??o).trim();n.append("file",t,t.name),n.append("table_name",s),r.sheetName&&n.append("sheet_name",r.sheetName);const a=r.path||"/api/upload_excel";Nr()&&console.debug("[api.uploadExcel] ->",a,{name:t.name,size:t.size,tableName:s,sheetName:r.sheetName});const c=await Ar(a,n,{headers:{Accept:"application/json"},maxBodyLength:1/0}),d=Ee(c);return Nr()&&console.debug("[api.uploadExcel] <-",d),d}async uploadImage(t,r="/upload"){const n=new FormData;n.append("file",t,t.name),Nr()&&console.debug("[api.uploadImage] ->",r,{name:t.name,type:t.type,size:t.size});const o=await Ar(r,n,{headers:{Accept:"application/json"},maxBodyLength:1/0}),s=Ee(o);if(Nr()&&console.debug("[api.uploadImage] <-",s),!(s!=null&&s.url))throw new Error("Invalid upload response: missing url");return{url:s.url,mimeType:s.mimeType??t.type,name:s.name??t.name,size:s.size??t.size}}}const Ze=new Pr;function la(e={}){const t=e.baseUrl??"/api/chat",r=e.streamPath??"/runs/stream",[n,o]=T.useState(e.token??null),s=T.useRef(e.headers??{}),[a,c]=T.useState(!1),[d,f]=T.useState(null),[u,p]=T.useState(""),[g,v]=T.useState(null),m=T.useRef(null),h=T.useCallback(y=>{o(y)},[]),b=T.useCallback(()=>{var y;(y=m.current)==null||y.abort(),m.current=null,c(!1)},[]),w=T.useCallback(()=>{p(""),v(null),f(null)},[]),x=T.useCallback((y,C,E)=>{m.current&&(m.current.abort(),m.current=null),c(!0),f(null),e.autoAppendAssistant!==!1&&p("");const _=new AbortController;return m.current=_,(async()=>{var $,I,B,G;const N=(()=>{var O;try{return typeof window<"u"&&((O=window.localStorage)==null?void 0:O.getItem("chat-debug"))==="1"}catch{return!1}})(),D=O=>{var L;try{const q=JSON.parse(JSON.stringify(O));return(L=q==null?void 0:q.payload)!=null&&L.files_info&&Array.isArray(q.payload.files_info)&&(q.payload.files_info=q.payload.files_info.map(F=>({...F,data:F!=null&&F.data?`<base64 ${String(F.data).length} chars>`:F==null?void 0:F.data}))),q}catch{return O}};try{let O={};try{if(n)O={Authorization:`Bearer ${n}`};else if(typeof window<"u"){const P=window.__AUTH_TOKEN__,ee=(($=window.localStorage)==null?void 0:$.getItem("authToken"))||null;let te=null;try{const H=(I=window.localStorage)==null?void 0:I.getItem("chat-settings");H&&(te=((B=JSON.parse(H))==null?void 0:B.apiKey)||null)}catch{}const oe=P||ee||te||null;oe&&(O={Authorization:`Bearer ${oe}`})}}catch{}N&&console.debug("[use-chat] POST",t+r,D(y));const L=await fetch(t+r,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream",...O,...s.current},body:JSON.stringify(y),signal:_.signal});if(!L.ok||!L.body){const M=await L.text().catch(()=>"");throw N&&console.debug("[use-chat] non-OK response",L.status,M==null?void 0:M.slice(0,500)),new Error(`stream ${L.status}${M?": "+M:""}`)}const q=L.body.getReader(),F=new TextDecoder;let U="";for(;;){const{value:M,done:P}=await q.read();if(P)break;U+=F.decode(M,{stream:!0});let ee;for(;(ee=U.indexOf(`
7
7
 
8
8
  `))>=0;){const te=U.slice(0,ee);U=U.slice(ee+2);const oe=vf(te);if(!oe)continue;let H;try{H=JSON.parse(oe)}catch{N&&console.debug("[use-chat] skip malformed SSE data:",oe==null?void 0:oe.slice(0,200));continue}const j=bf(H)?H.data:H;if(N&&console.debug("[use-chat] event:",j==null?void 0:j.type,j),C==null||C(j),j.type==="token")e.autoAppendAssistant!==!1&&p(fe=>fe+j.content);else if(j.type==="message_delta"){const fe=j.delta.filter(pe=>pe.type==="text").map(pe=>pe.text).join("");fe&&e.autoAppendAssistant!==!1&&p(pe=>pe+fe)}else j.type==="checkpoint"?v(j.checkpointId):j.type==="error"&&f(j.message)}}}catch(O){if((O==null?void 0:O.name)==="AbortError")return;const L=(O==null?void 0:O.message)||String(O);N&&console.debug("[use-chat] error:",L),f(L),(G=E==null?void 0:E.onError)==null||G.call(E,L)}finally{c(!1),m.current=null}})(),{close:()=>_.abort()}},[t,n,e.autoAppendAssistant]);return T.useEffect(()=>()=>{var y;return(y=m.current)==null?void 0:y.abort()},[]),{isStreaming:a,error:d,assistantText:u,lastCheckpointId:g,stream:x,stop:b,clear:w,setToken:h}}function bf(e){return!!e&&typeof e=="object"&&e.protocolVersion==="v1"&&"data"in e}function vf(e){const t=e.split(/\r?\n/),r=[];for(const n of t)if(n&&!n.startsWith(":")&&n.startsWith("data:")){const o=n.slice(5);r.push(o.startsWith(" ")?o.slice(1):o)}return r.length===0?null:r.join(`
9
- `)}const wf={messages:[],assemblingId:null,lastCheckpointId:null,toolIndex:{},lastBranch:null};function yf(e,t){var r,n;switch(t.type){case"reset":return{messages:Gn(((r=t.payload)==null?void 0:r.messages)??[]),assemblingId:null,lastCheckpointId:null,toolIndex:{},lastBranch:null};case"seed":return{...e,messages:Gn(t.payload.messages)};case"prepend":{const o=Gn(t.payload.messages);if(!o.length)return e;const s=new Set(e.messages.map(c=>c.id)),a=o.filter(c=>!s.has(c.id));return a.length?{...e,messages:[...a,...e.messages]}:e}case"user_message":{const o=t.payload.message;if(e.assemblingId){const s=e.messages.findIndex(a=>a.id===e.assemblingId&&a.role==="assistant");if(s>=0){const a=e.messages.slice(0,s),c=e.messages.slice(s);return{...e,messages:[...a,o,...c]}}}return{...e,messages:[...e.messages,o]}}case"event":{const o=t.payload.ev;if(o.type==="message_start"&&o.role==="assistant"){const s=o.id,a=Ef(o.model),c={id:s,role:"assistant",name:a||void 0,model:o.model,createdAt:new Date().toISOString(),content:[]};return{...e,assemblingId:s,messages:[...e.messages,c]}}if(o.type==="token"){const s=e.assemblingId??qn(e.messages);return s?{...e,messages:xf(e.messages,s,o.content)}:e}if(o.type==="message_delta"){const s=e.assemblingId??qn(e.messages);return s?{...e,messages:ua(e.messages,s,o.delta)}:e}if(o.type==="message_end"){const s=e.assemblingId??qn(e.messages);if(!s)return{...e,assemblingId:null};const a=e.messages,c=a.findIndex(d=>d.id===s&&d.role==="assistant");if(c>=0&&!((n=a[c].content)==null?void 0:n.some(u=>{var p;return(u==null?void 0:u.type)==="text"&&((p=u.text)==null?void 0:p.trim())}))){const u=[...a.slice(0,c),...a.slice(c+1)];return{...e,assemblingId:null,messages:u}}return{...e,assemblingId:null}}if(o.type==="tool_start"){const s=`tool-${o.id}`,a={type:"tool_call",id:o.id,name:o.name,args:o.args},c={id:s,role:"tool",name:o.name,createdAt:new Date().toISOString(),content:[a]};return{...e,messages:[...e.messages,c],toolIndex:{...e.toolIndex,[o.id]:s}}}if(o.type==="tool_result"){const s=e.toolIndex[o.id]??`tool-${o.id}`,a={type:"tool_result",toolCallId:o.id,output:o.output,error:o.error},c=e.messages.find(u=>u.id===s),d={id:s,role:"tool",content:[a],createdAt:new Date().toISOString()},f=c?ua(e.messages,s,[a]):[...e.messages,d];return{...e,messages:f}}if(o.type==="checkpoint"){const s=Cf(e.messages,o.checkpointId);return{...e,lastCheckpointId:o.checkpointId,messages:s}}if(o.type==="branch"){const s=o.checkpointId??e.lastCheckpointId;return{...e,lastBranch:o,lastCheckpointId:s??null}}if(o.type==="error"){const s={id:`err-${Date.now()}`,role:"system",content:[{type:"text",text:`Error: ${o.message}`}],createdAt:new Date().toISOString()};return{...e,messages:[...e.messages,s]}}return e}default:return e}}function da(e=[]){const[t,r]=T.useReducer(yf,{...wf,messages:e}),n=T.useCallback(s=>{r({type:"event",payload:{ev:s}})},[]),o=T.useMemo(()=>({reset:s=>r({type:"reset",payload:{messages:s}}),seed:s=>r({type:"seed",payload:{messages:s}}),prepend:s=>r({type:"prepend",payload:{messages:s}}),pushUser:s=>r({type:"user_message",payload:{message:s}}),onEvent:n}),[n]);return{state:t,dispatch:r,...o}}function Gn(e){return e.filter(t=>{if(t.role!=="assistant")return!0;const r=(t.content||[]).some(o=>{var s;return o&&o.type==="text"&&((s=o.text)==null?void 0:s.trim())}),n=(t.content||[]).some(o=>o&&o.type==="image_url");return!!(r||n)})}function qn(e){for(let t=e.length-1;t>=0;t--)if(e[t].role==="assistant")return e[t].id;return null}function xf(e,t,r){return e.map(n=>{if(n.id!==t)return n;const o=n.content.slice(),s=o[o.length-1];return s&&s.type==="text"?s.text+=r:o.push({type:"text",text:r}),{...n,content:o}})}function ua(e,t,r){return e.map(n=>n.id===t?{...n,content:Sf(n.content,r)}:n)}function Sf(e,t){const r=e.slice();for(const n of t)if(n.type==="text"){const o=r[r.length-1];(o==null?void 0:o.type)==="text"?o.text+=n.text:r.push({type:"text",text:n.text})}else r.push(n);return r}function Cf(e,t){for(let r=e.length-1;r>=0;r--)if(e[r].role==="assistant"){const o={...e[r],checkpointId:t};return[...e.slice(0,r),o,...e.slice(r+1)]}return e}function Ef(e){if(!e)return null;const t=e.split("/");return t[t.length-1]||null}const fa=T.createContext(null);function qt({children:e,apiConfig:t,onError:r,onThreadChange:n,initialThreadId:o=null,historyPageSize:s}){const a=Ze;T.useEffect(()=>{t&&a.updateConfig({baseUrl:t.baseUrl,authToken:t.apiKey})},[a,t]);const{isStreaming:c,error:d,stream:f,stop:u,setToken:p}=la({baseUrl:a.baseUrl,token:null,headers:t==null?void 0:t.headers,streamPath:"/chat/stream"}),[g,v]=T.useState(()=>typeof a.getAuthToken=="function"?a.getAuthToken():null);T.useEffect(()=>{p(typeof a.getAuthToken=="function"?a.getAuthToken():null);const W=a.onTokenChange(Y=>{v(Y),p(Y)});return()=>{W()}},[a,p]);const m=T.useCallback(W=>{a.setAuthToken(W)},[a]),{state:h,seed:b,prepend:w,pushUser:x,onEvent:y,reset:C}=da(),E=s&&s>0?s:6,[_,N]=T.useState(!1),[D,$]=T.useState(!1),[I,B]=T.useState(null),[G,O]=T.useState(void 0),L=T.useCallback((W,Y)=>{const he=Array.isArray(W==null?void 0:W.messages)?W.messages:[];Y==="replace"?b(he):Y==="prepend"&&he.length&&w(he),B((W==null?void 0:W.nextCursor)??null),N(!!(W!=null&&W.hasMore)),O(ve=>(W==null?void 0:W.checkpointId)??ve??void 0)},[b,w]),[q,F]=T.useState([]),[U,M]=T.useState(null),P=T.useCallback(async()=>{const W=await a.listThreads();F(W)},[a]);T.useEffect(()=>{P().catch(()=>{})},[P]),T.useEffect(()=>{n==null||n(U)},[U,n]);const ee=T.useRef(null);T.useEffect(()=>{o&&ee.current!==o&&(ee.current=o,oe(o).catch(()=>{}))},[o]);const te=T.useRef(null),oe=T.useCallback(async(W,Y,he)=>{if(te.current!==W){te.current=W;try{N(!1),B(null),O(void 0);const ve=await a.getMessages({threadId:W,checkpointId:Y,checkpointNs:he,limit:E});M(W),L(ve,"replace")}finally{te.current=null}}},[a,L]),H=T.useCallback(async W=>a.listCheckpoints(W),[a]),j=T.useCallback(async W=>{if(!U)throw new Error("No active thread");N(!1),B(null),O(void 0);const Y=await a.getMessages({threadId:U,checkpointId:W,limit:E});L(Y,"replace")},[a,U,L,E]),fe=T.useCallback(async()=>{if(!U)throw new Error("No active thread");await oe(U)},[U,oe]),pe=T.useRef(!1);T.useEffect(()=>{const W=pe.current;if(pe.current=c,W&&!c&&U){const Y=h.lastCheckpointId??void 0;(async()=>{try{const he=await a.getMessages({threadId:U,checkpointId:Y,limit:E});L(he,"replace")}catch{}try{await P()}catch{}})()}},[c,U,h.lastCheckpointId,a,L,P]);const R=T.useCallback(async W=>{const Y=await a.createThread(W);return await P(),await oe(Y.threadId),Y.threadId},[a,P,oe]),K=T.useCallback(async W=>{await a.deleteThread(W),await P(),U===W&&(M(null),C([]),N(!1),B(null),O(void 0))},[a,P,U,C]),ae=T.useCallback(async(W,Y)=>{await a.updateThread(W,Y),await P()},[a,P]),V=T.useCallback(async(W,Y)=>{var zt;if(!U)throw new Error("No active thread");async function he(ce){return await new Promise((Te,Ae)=>{const We=new FileReader;We.onload=()=>Te(String(We.result)),We.onerror=tt=>Ae(tt),We.readAsDataURL(ce)})}async function ve(ce){return await new Promise((Te,Ae)=>{const We=new FileReader;We.onload=()=>{try{const tt=We.result;let In="";const _n=new Uint8Array(tt),gs=_n.byteLength;for(let pr=0;pr<gs;pr++)In+=String.fromCharCode(_n[pr]);Te(btoa(In))}catch(tt){Ae(tt)}},We.onerror=tt=>Ae(tt),We.readAsArrayBuffer(ce)})}const ye=[];W&&ye.push({type:"text",text:W});const xt=(Y==null?void 0:Y.attachments)||[];let Oe=[];if(xt.length>0)for(const ce of xt)if(ce.type&&ce.type.startsWith("image/")){let Te=null;try{const Ae=await a.uploadImage(ce,(t==null?void 0:t.uploadPath)||"/upload").catch(()=>null);Te=(Ae==null?void 0:Ae.url)||null}catch{}if(!Te)try{Te=await he(ce)}catch{Te=null}if(Te){const Ae={type:"image_url",url:Te,mimeType:ce.type,alt:ce.name};ye.push(Ae)}try{Oe.push({filename:ce.name,data:await ve(ce),mime_type:ce.type||"application/octet-stream"})}catch{}}else{const Te=await he(ce).catch(()=>null),Ae={type:"file",url:String(Te),mimeType:ce.type||void 0,name:ce.name,size:ce.size};ye.push(Ae);try{Oe.push({filename:ce.name,data:await ve(ce),mime_type:ce.type||"application/octet-stream"})}catch{}}const Ut={id:((zt=crypto.randomUUID)==null?void 0:zt.call(crypto))||`user-${Date.now()}`,role:"user",content:ye,createdAt:new Date().toISOString(),checkpointId:(Y==null?void 0:Y.checkpointId)??h.lastCheckpointId??void 0};x(Ut);const fs={...Ut,content:Ut.content.filter(ce=>ce.type==="text"||ce.type==="image_url")},Ht={...(Y==null?void 0:Y.payloadExtras)??{}},ps=!!Ht.edit,An=Ht.originalMessageId,Pn=typeof An=="string"?An:void 0,hs={threadId:U,payload:{messages:[fs],attachments:Ut.content.filter(ce=>ce.type==="file").map(ce=>({type:"file",url:ce.url,mimeType:ce.mimeType,name:ce.name,size:ce.size})),files_info:Oe,...Ht},checkpointId:(Y==null?void 0:Y.checkpointId)??h.lastCheckpointId??void 0,checkpointNs:Y==null?void 0:Y.checkpointNs,nodeFilter:Y==null?void 0:Y.nodeFilter,config:Y==null?void 0:Y.config,edit:ps,originalMessageId:Pn};f(hs,ce=>y(ce),{onError:ce=>console.warn("stream error",ce)})},[U,x,f,y,h.lastCheckpointId,a,t==null?void 0:t.uploadPath]),Z=T.useCallback(async W=>{if(!U)throw new Error("No active thread");if(D||!_)return;const Y=I;if(Y){$(!0);try{const he=await a.getMessages({threadId:U,checkpointId:G,limit:(W==null?void 0:W.limit)??E,beforeId:Y});L(he,"prepend")}finally{$(!1)}}},[a,U,G,I,_,D,L]),J={baseUrl:a.baseUrl,token:g,setToken:m,api:a,threads:q,currentThreadId:U,setCurrentThreadId:M,messages:h.messages,isStreaming:c,error:d,lastCheckpointId:h.lastCheckpointId,streamingAssistantId:h.assemblingId,hasMoreHistory:_,isLoadingHistory:D,loadOlderMessages:Z,historyPageSize:E,listCheckpoints:H,navigateToCheckpoint:j,returnToLatest:fe,refreshThreads:P,createThread:R,deleteThread:K,renameThread:ae,loadThread:oe,send:V,stop:u};return i.jsx(fa.Provider,{value:J,children:e})}function Xn(){const e=T.useContext(fa);if(!e)throw new Error("useChat must be used within ChatProvider");return e}function A(...e){return Kd.twMerge(jd.clsx(e))}const Nf=Wt.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),ue=l.forwardRef(({className:e,variant:t,size:r,asChild:n=!1,...o},s)=>{const a=n?Pe.Slot:"button";return i.jsx(a,{className:A(Nf({variant:t,size:r,className:e})),ref:s,...o})});ue.displayName="Button";const pa=l.forwardRef(({className:e,...t},r)=>i.jsx("textarea",{className:A("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),ref:r,...t}));pa.displayName="Textarea";const Tf=Wt.cva("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function ha({className:e,variant:t,...r}){return i.jsx("div",{className:A(Tf({variant:t}),e),...r})}function z(e,t,{checkForDefaultPrevented:r=!0}={}){return function(o){if(e==null||e(o),r===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function Af(e,t){const r=l.createContext(t),n=s=>{const{children:a,...c}=s,d=l.useMemo(()=>c,Object.values(c));return i.jsx(r.Provider,{value:d,children:a})};n.displayName=e+"Provider";function o(s){const a=l.useContext(r);if(a)return a;if(t!==void 0)return t;throw new Error(`\`${s}\` must be used within \`${e}\``)}return[n,o]}function Fe(e,t=[]){let r=[];function n(s,a){const c=l.createContext(a),d=r.length;r=[...r,a];const f=p=>{var w;const{scope:g,children:v,...m}=p,h=((w=g==null?void 0:g[e])==null?void 0:w[d])||c,b=l.useMemo(()=>m,Object.values(m));return i.jsx(h.Provider,{value:b,children:v})};f.displayName=s+"Provider";function u(p,g){var h;const v=((h=g==null?void 0:g[e])==null?void 0:h[d])||c,m=l.useContext(v);if(m)return m;if(a!==void 0)return a;throw new Error(`\`${p}\` must be used within \`${s}\``)}return[f,u]}const o=()=>{const s=r.map(a=>l.createContext(a));return function(c){const d=(c==null?void 0:c[e])||s;return l.useMemo(()=>({[`__scope${e}`]:{...c,[e]:d}}),[c,d])}};return o.scopeName=e,[n,Pf(o,...t)]}function Pf(...e){const t=e[0];if(e.length===1)return t;const r=()=>{const n=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(s){const a=n.reduce((c,{useScope:d,scopeName:f})=>{const p=d(s)[`__scope${f}`];return{...c,...p}},{});return l.useMemo(()=>({[`__scope${t.scopeName}`]:a}),[a])}};return r.scopeName=t.scopeName,r}var me=globalThis!=null&&globalThis.document?l.useLayoutEffect:()=>{},If=l[" useInsertionEffect ".trim().toString()]||me;function nt({prop:e,defaultProp:t,onChange:r=()=>{},caller:n}){const[o,s,a]=_f({defaultProp:t,onChange:r}),c=e!==void 0,d=c?e:o;{const u=l.useRef(e!==void 0);l.useEffect(()=>{const p=u.current;p!==c&&console.warn(`${n} is changing from ${p?"controlled":"uncontrolled"} to ${c?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),u.current=c},[c,n])}const f=l.useCallback(u=>{var p;if(c){const g=Of(u)?u(e):u;g!==e&&((p=a.current)==null||p.call(a,g))}else s(u)},[c,e,s,a]);return[d,f]}function _f({defaultProp:e,onChange:t}){const[r,n]=l.useState(e),o=l.useRef(r),s=l.useRef(t);return If(()=>{s.current=t},[t]),l.useEffect(()=>{var a;o.current!==r&&((a=s.current)==null||a.call(s,r),o.current=r)},[r,o]),[r,n,s]}function Of(e){return typeof e=="function"}function ga(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Yn(...e){return t=>{let r=!1;const n=e.map(o=>{const s=ga(o,t);return!r&&typeof s=="function"&&(r=!0),s});if(r)return()=>{for(let o=0;o<n.length;o++){const s=n[o];typeof s=="function"?s():ga(e[o],null)}}}}function ie(...e){return l.useCallback(Yn(...e),e)}var kf=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Q=kf.reduce((e,t)=>{const r=Pe.createSlot(`Primitive.${t}`),n=l.forwardRef((o,s)=>{const{asChild:a,...c}=o,d=a?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),i.jsx(d,{...c,ref:s})});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});function ma(e,t){e&&hr.flushSync(()=>e.dispatchEvent(t))}function Mf(e,t){return l.useReducer((r,n)=>t[r][n]??r,e)}var Ne=e=>{const{present:t,children:r}=e,n=Df(t),o=typeof r=="function"?r({present:n.isPresent}):l.Children.only(r),s=ie(n.ref,Lf(o));return typeof r=="function"||n.isPresent?l.cloneElement(o,{ref:s}):null};Ne.displayName="Presence";function Df(e){const[t,r]=l.useState(),n=l.useRef(null),o=l.useRef(e),s=l.useRef("none"),a=e?"mounted":"unmounted",[c,d]=Mf(a,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return l.useEffect(()=>{const f=Ir(n.current);s.current=c==="mounted"?f:"none"},[c]),me(()=>{const f=n.current,u=o.current;if(u!==e){const g=s.current,v=Ir(f);e?d("MOUNT"):v==="none"||(f==null?void 0:f.display)==="none"?d("UNMOUNT"):d(u&&g!==v?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,d]),me(()=>{if(t){let f;const u=t.ownerDocument.defaultView??window,p=v=>{const h=Ir(n.current).includes(CSS.escape(v.animationName));if(v.target===t&&h&&(d("ANIMATION_END"),!o.current)){const b=t.style.animationFillMode;t.style.animationFillMode="forwards",f=u.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=b)})}},g=v=>{v.target===t&&(s.current=Ir(n.current))};return t.addEventListener("animationstart",g),t.addEventListener("animationcancel",p),t.addEventListener("animationend",p),()=>{u.clearTimeout(f),t.removeEventListener("animationstart",g),t.removeEventListener("animationcancel",p),t.removeEventListener("animationend",p)}}else d("ANIMATION_END")},[t,d]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:l.useCallback(f=>{n.current=f?getComputedStyle(f):null,r(f)},[])}}function Ir(e){return(e==null?void 0:e.animationName)||"none"}function Lf(e){var n,o;let t=(n=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:n.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}var Ff=l[" useId ".trim().toString()]||(()=>{}),$f=0;function $e(e){const[t,r]=l.useState(Ff());return me(()=>{r(n=>n??String($f++))},[e]),t?`radix-${t}`:""}var _r="Collapsible",[Bf,Kw]=Fe(_r),[Uf,Jn]=Bf(_r),ba=l.forwardRef((e,t)=>{const{__scopeCollapsible:r,open:n,defaultOpen:o,disabled:s,onOpenChange:a,...c}=e,[d,f]=nt({prop:n,defaultProp:o??!1,onChange:a,caller:_r});return i.jsx(Uf,{scope:r,disabled:s,contentId:$e(),open:d,onOpenToggle:l.useCallback(()=>f(u=>!u),[f]),children:i.jsx(Q.div,{"data-state":Qn(d),"data-disabled":s?"":void 0,...c,ref:t})})});ba.displayName=_r;var va="CollapsibleTrigger",wa=l.forwardRef((e,t)=>{const{__scopeCollapsible:r,...n}=e,o=Jn(va,r);return i.jsx(Q.button,{type:"button","aria-controls":o.contentId,"aria-expanded":o.open||!1,"data-state":Qn(o.open),"data-disabled":o.disabled?"":void 0,disabled:o.disabled,...n,ref:t,onClick:z(e.onClick,o.onOpenToggle)})});wa.displayName=va;var Zn="CollapsibleContent",Hf=l.forwardRef((e,t)=>{const{forceMount:r,...n}=e,o=Jn(Zn,e.__scopeCollapsible);return i.jsx(Ne,{present:r||o.open,children:({present:s})=>i.jsx(zf,{...n,ref:t,present:s})})});Hf.displayName=Zn;var zf=l.forwardRef((e,t)=>{const{__scopeCollapsible:r,present:n,children:o,...s}=e,a=Jn(Zn,r),[c,d]=l.useState(n),f=l.useRef(null),u=ie(t,f),p=l.useRef(0),g=p.current,v=l.useRef(0),m=v.current,h=a.open||c,b=l.useRef(h),w=l.useRef(void 0);return l.useEffect(()=>{const x=requestAnimationFrame(()=>b.current=!1);return()=>cancelAnimationFrame(x)},[]),me(()=>{const x=f.current;if(x){w.current=w.current||{transitionDuration:x.style.transitionDuration,animationName:x.style.animationName},x.style.transitionDuration="0s",x.style.animationName="none";const y=x.getBoundingClientRect();p.current=y.height,v.current=y.width,b.current||(x.style.transitionDuration=w.current.transitionDuration,x.style.animationName=w.current.animationName),d(n)}},[a.open,n]),i.jsx(Q.div,{"data-state":Qn(a.open),"data-disabled":a.disabled?"":void 0,id:a.contentId,hidden:!h,...s,ref:u,style:{"--radix-collapsible-content-height":g?`${g}px`:void 0,"--radix-collapsible-content-width":m?`${m}px`:void 0,...e.style},children:h&&o})});function Qn(e){return e?"open":"closed"}var Wf=ba;const ya=Wf,xa=wa;function Xt({content:e,className:t=""}){const r=T.useMemo(()=>({table:({node:f,className:u,...p})=>i.jsx("div",{className:"max-w-full",children:i.jsx("table",{...p,className:A("w-full table-fixed border-collapse break-words",u)})}),th:({node:f,className:u,...p})=>i.jsx("th",{...p,className:A("break-words whitespace-normal border-b border-border/60 px-3 py-2 text-left align-top",u)}),td:({node:f,className:u,...p})=>i.jsx("td",{...p,className:A("break-words whitespace-normal border-b border-border/30 px-3 py-2 align-top",u)}),pre:({node:f,className:u,...p})=>i.jsx("pre",{...p,className:A("whitespace-pre-wrap break-words",u)}),code:({node:f,className:u,children:p,...g})=>{const{inline:v,...m}=g;return v?i.jsx("code",{...m,className:A("break-words whitespace-normal",u),children:p}):i.jsx("code",{...m,className:A("block break-words whitespace-pre-wrap",u),children:p})}}),[]),n=A("prose prose-sm max-w-none break-words dark:prose-invert leading-relaxed","prose-headings:break-words prose-p:break-words prose-li:break-words prose-td:break-words prose-th:break-words","prose-a:break-all prose-blockquote:break-words prose-strong:break-words prose-em:break-words","prose-code:break-words prose-pre:rounded prose-pre:border prose-pre:bg-background/50","prose-code:bg-background/50 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-table:my-4 prose-th:px-2 prose-td:px-2",t);return i.jsx("div",{className:n,style:{wordBreak:"break-word",overflowWrap:"anywhere"},children:i.jsx(Rd,{remarkPlugins:[Gd],components:r,children:e})})}const Or="prose prose-sm max-w-none break-words dark:prose-invert prose-headings:break-words prose-p:break-words prose-li:break-words prose-td:break-words prose-th:break-words prose-a:break-all prose-code:break-words prose-blockquote:break-words";function Vf({className:e}){const[t,r]=T.useState(0);return T.useEffect(()=>{const n=setInterval(()=>r(o=>(o+1)%4),500);return()=>clearInterval(n)},[]),i.jsxs("span",{"aria-live":"polite",className:A("inline-block text-xs opacity-70 ml-1",e),children:["Is thinking",".".repeat(t)]})}function Sa({message:e,messageIndex:t,isStreamingMessage:r=!1,streamingDebounceMs:n=40,isEditing:o=!1,showActions:s=!0,showTimestamp:a=!0,showAgentName:c=!0,layoutSize:d="desktop",truncateToolMessages:f=!0,toolMessagePreviewLength:u=200,truncateUserMessages:p=!0,userMessagePreviewLength:g=200,customStyles:v={},onEdit:m,onRegenerate:h,onCancelEdit:b,onCopy:w}){const[x,y]=T.useState(!1),[C,E]=T.useState(!1),[_,N]=T.useState(!1),[D,$]=T.useState(!1),I=d==="phone"||d==="half-screen",B=e.role,G=B==="tool",O=T.useMemo(()=>{switch(B){case"user":return"text-[hsl(var(--chat-bubble-user-text))]";case"assistant":return"text-[hsl(var(--chat-bubble-ai-text))]";case"tool":return"text-secondary-foreground";case"system":return"text-muted-foreground";default:return"text-foreground"}},[B]),L=T.useMemo(()=>jf(e.content),[e.content]),q=T.useMemo(()=>Yf(e.content),[e.content]),F=T.useMemo(()=>e.content.filter(K=>K.type==="image_url"),[e.content]),U=T.useMemo(()=>e.content.filter(K=>K.type==="file"),[e.content]),M=Zf(L,r?n:0),P=async()=>{try{const K=G?Nt(e.content):L;await navigator.clipboard.writeText(K),y(!0),setTimeout(()=>y(!1),2e3),w==null||w(K)}catch(K){console.error("Failed to copy:",K)}},ee=()=>{if(!m)return;const K=G?Nt(e.content):L;m(e.id,K)},te=()=>h==null?void 0:h(t),oe=()=>{const ae=A(I?"h-3 w-3":"h-4 w-4","opacity-60 flex-shrink-0",O);switch(B){case"user":return i.jsx(X.User,{className:ae});case"assistant":return i.jsx(X.Bot,{className:ae});case"tool":return i.jsx(X.Wrench,{className:ae});default:return i.jsx(X.Bot,{className:ae})}},H=()=>{const K="group relative mb-4 flex w-full";switch(B){case"user":return A(K,"justify-end");case"assistant":case"tool":case"system":return A(K,"justify-start");default:return K}},j=()=>{const K=A("rounded-lg px-4 py-3 relative transition-all duration-200 min-w-0 max-w-full break-words",I&&"px-3 py-2 text-sm");switch(B){case"user":return A(K,"w-full md:max-w-[95%]","bg-[hsl(var(--chat-bubble-user))] text-[hsl(var(--chat-bubble-user-text))]","border border-transparent");case"assistant":return A(K,"w-full md:max-w-[95%]","bg-[hsl(var(--chat-bubble-ai))] text-[hsl(var(--chat-bubble-ai-text))]","border border-border/60 dark:border-border/40");case"tool":return A(K,"w-full md:max-w-[95%] bg-secondary/50 text-secondary-foreground border border-dashed");case"system":return A(K,"w-full md:max-w-[85%] bg-accent/40 text-muted-foreground border");default:return K}},fe=K=>{if(!K)return"";try{return new Date(K).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{return""}},pe=()=>{if(e.model==="reflection"){const V=L.trim(),Z=eo(V);if(Z&&typeof Z=="object")return i.jsx(Qf,{data:Z})}if(G&&q.name==="get_issues"){const V=e.content.find(W=>W.type==="tool_result"),Z=(V==null?void 0:V.output)??Nt(e.content),J=Ea(Z);if(J)return i.jsx(ep,{issues:J})}if(G&&!_){const V=Nt(e.content).slice(0,80).replace(/\s+/g," ");return i.jsx("div",{className:A("text-xs font-mono opacity-70 flex items-center justify-between gap-2 text-current",I&&"text-[10px]"),children:i.jsxs("span",{className:"truncate max-w-full text-current",children:[V,V.length>=80?"…":""]})})}if(G&&f){const V=Nt(e.content),Z=V.length>u;return i.jsx(ya,{open:C,onOpenChange:E,children:i.jsxs("div",{className:"font-mono text-sm text-current",children:[i.jsx("pre",{className:A("whitespace-pre-wrap break-words text-current",I&&"text-xs"),children:Z&&!C?V.substring(0,u)+"...":V}),Z&&i.jsx(xa,{asChild:!0,children:i.jsx(ue,{variant:"ghost",size:"sm",className:"h-6 text-xs text-current",children:C?i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronUp,{className:"h-3 w-3 mr-1"}),"Show less"]}):i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronDown,{className:"h-3 w-3 mr-1"}),"Show more (",V.length-u," chars)"]})})})]})})}if(G&&_&&!f){const V=Xf(e.content);if(V&&Kf(V))return i.jsx(Xt,{content:V.trim()});const Z=Nt(e.content);return i.jsx("div",{className:"font-mono text-sm text-current",children:i.jsx("pre",{className:A("whitespace-pre-wrap break-words text-current",I&&"text-xs"),children:Z})})}const K=F.length>0&&B!=="tool",ae=U.length>0&&B!=="tool";return i.jsxs("div",{children:[r?i.jsxs("div",{className:"relative",children:[(()=>{const V=eo(M);return V!==null?i.jsx(Ca,{data:V}):i.jsx(Xt,{content:Gf(Rf(M))})})(),i.jsx(Vf,{className:A(O,I?"text-xs":"text-sm")})]}):(()=>{const V=eo(L.trim());if(V!==null)return i.jsx(Ca,{data:V});if(B==="user"&&p){const Z=L.trim();if(Z.length>g)return i.jsxs(ya,{open:D,onOpenChange:$,children:[i.jsx("div",{className:A("text-sm text-[hsl(var(--chat-bubble-user-text))]",I&&"text-xs"),children:D?i.jsx(Xt,{content:Z}):i.jsxs("pre",{className:A("font-sans whitespace-pre-wrap break-words bg-transparent p-0 m-0 text-[hsl(var(--chat-bubble-user-text))]",I&&"text-xs"),children:[Z.substring(0,g),"..."]})}),i.jsx(xa,{asChild:!0,children:i.jsx(ue,{variant:"ghost",size:"sm",className:"h-6 text-xs !text-[hsl(var(--chat-bubble-user-text))]",children:D?i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronUp,{className:"h-3 w-3 mr-1"})," Show less"]}):i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronDown,{className:"h-3 w-3 mr-1"})," Show more (",Z.length-g," chars)"]})})})]})}return i.jsx(Xt,{content:L.trim()})})(),K&&i.jsx("div",{className:"mt-2 grid grid-cols-2 gap-2",children:F.map((V,Z)=>i.jsxs("div",{className:"relative border rounded overflow-hidden",children:[i.jsx("img",{src:V.url,alt:V.alt??"image",className:"w-full h-auto"}),i.jsxs("div",{className:"absolute top-1 right-1 bg-background/70 rounded px-1 py-0.5 text-[10px] flex items-center gap-1",children:[i.jsx(X.Image,{className:"h-3 w-3"}),i.jsx("span",{children:"image"})]})]},Z))}),ae&&i.jsx("div",{className:"mt-2 flex flex-wrap gap-2",children:U.map((V,Z)=>{const J=V,W=J.name||"file";return i.jsxs("a",{href:J.url,download:W,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-2 bg-gray-100 border border-gray-200 rounded px-2 py-1 text-xs hover:bg-gray-200",title:W,children:[i.jsx("span",{className:"inline-block w-1.5 h-1.5 rounded-full bg-gray-400"}),i.jsx("span",{className:"truncate max-w-[180px]",children:W})]},Z)})})]})},R=T.useMemo(()=>Jf(e),[e]);return i.jsx("div",{className:A(H(),v.container),children:i.jsxs("div",{className:A(j(),v.content),children:[(a||c||G)&&i.jsxs("div",{className:A("flex items-center justify-between mb-2 pb-2 border-b border-current/10",I&&"mb-1 pb-1",O,v.header),children:[i.jsxs("div",{className:"flex items-center gap-2",children:[oe(),c&&R&&i.jsx("span",{className:A("font-medium",I?"text-xs":"text-sm"),children:R}),G&&q.name&&i.jsxs(ha,{variant:"outline",className:A("text-xs flex items-center gap-1 cursor-pointer",O,"border border-current/40",I&&"text-xs h-4"),onClick:()=>N(K=>!K),children:[i.jsx("span",{children:q.name}),i.jsx("span",{className:"inline-flex items-center",children:_?i.jsx(X.ChevronUp,{className:"h-3 w-3"}):i.jsx(X.ChevronDown,{className:"h-3 w-3"})})]}),G&&!q.name&&i.jsx(ue,{variant:"ghost",size:"sm",className:A("h-6 px-1",O,"hover:bg-foreground/10"),onClick:()=>N(K=>!K),children:i.jsxs("span",{className:"text-xs flex items-center gap-1",children:["Tool Output ",_?i.jsx(X.ChevronUp,{className:"h-3 w-3"}):i.jsx(X.ChevronDown,{className:"h-3 w-3"})]})})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[a&&i.jsx("span",{className:A("text-xs opacity-60",O,I&&"text-xs"),children:fe(e.createdAt)}),s&&!o&&i.jsxs("div",{className:A("opacity-0 group-hover:opacity-100 transition-opacity","flex items-center gap-1",v.actions),children:[i.jsx(ue,{variant:"ghost",size:"sm",onClick:P,className:A("h-6 w-6 p-0 hover:bg-foreground/10",O,I&&"h-5 w-5"),children:i.jsx(X.Copy,{className:A(x?"text-success":O,I?"h-3 w-3":"h-4 w-4")})}),B==="user"&&m&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:ee,className:A("h-6 w-6 p-0 hover:bg-foreground/10",O,I&&"h-5 w-5"),children:i.jsx(X.Edit,{className:A(O,I?"h-3 w-3":"h-4 w-4")})}),B==="assistant"&&h&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:te,className:A("h-6 w-6 p-0 hover:bg-foreground/10",O,I&&"h-5 w-5"),children:i.jsx(X.RotateCcw,{className:A(O,I?"h-3 w-3":"h-4 w-4")})})]})]})]}),i.jsx("div",{className:"relative",children:pe()}),G&&_&&(q.toolCallId||q.name)&&i.jsxs("div",{className:A("mt-2 pt-2 border-t border-current/10 text-xs opacity-60",I&&"text-xs"),children:[q.name&&i.jsxs("div",{children:["Function: ",q.name]}),q.toolCallId&&i.jsxs("div",{children:["Call ID: ",q.toolCallId]})]}),!(a||c||G)&&s&&!o&&i.jsxs("div",{className:A("absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity","flex items-center gap-1",v.actions),children:[i.jsx(ue,{variant:"ghost",size:"sm",onClick:P,className:A("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.Copy,{className:A(x?"text-success":"text-current",I?"h-3 w-3":"h-4 w-4")})}),B==="user"&&m&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:ee,className:A("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.Edit,{className:A("text-current",I?"h-3 w-3":"h-4 w-4")})}),B==="assistant"&&h&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:te,className:A("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.RotateCcw,{className:A("text-current",I?"h-3 w-3":"h-4 w-4")})})]})]})})}function jf(e){const t=e.filter(r=>r.type==="text").map(r=>r.text).join("");return t||JSON.stringify(e)}function Kf(e){return e.includes(`
9
+ `)}const wf={messages:[],assemblingId:null,lastCheckpointId:null,toolIndex:{},lastBranch:null};function yf(e,t){var r,n;switch(t.type){case"reset":return{messages:Gn(((r=t.payload)==null?void 0:r.messages)??[]),assemblingId:null,lastCheckpointId:null,toolIndex:{},lastBranch:null};case"seed":return{...e,messages:Gn(t.payload.messages)};case"prepend":{const o=Gn(t.payload.messages);if(!o.length)return e;const s=new Set(e.messages.map(c=>c.id)),a=o.filter(c=>!s.has(c.id));return a.length?{...e,messages:[...a,...e.messages]}:e}case"user_message":{const o=t.payload.message;if(e.assemblingId){const s=e.messages.findIndex(a=>a.id===e.assemblingId&&a.role==="assistant");if(s>=0){const a=e.messages.slice(0,s),c=e.messages.slice(s);return{...e,messages:[...a,o,...c]}}}return{...e,messages:[...e.messages,o]}}case"event":{const o=t.payload.ev;if(o.type==="message_start"&&o.role==="assistant"){const s=o.id,a=Ef(o.model),c={id:s,role:"assistant",name:a||void 0,model:o.model,createdAt:new Date().toISOString(),content:[]};return{...e,assemblingId:s,messages:[...e.messages,c]}}if(o.type==="token"){const s=e.assemblingId??qn(e.messages);return s?{...e,messages:xf(e.messages,s,o.content)}:e}if(o.type==="message_delta"){const s=e.assemblingId??qn(e.messages);return s?{...e,messages:ua(e.messages,s,o.delta)}:e}if(o.type==="message_end"){const s=e.assemblingId??qn(e.messages);if(!s)return{...e,assemblingId:null};const a=e.messages,c=a.findIndex(d=>d.id===s&&d.role==="assistant");if(c>=0&&!((n=a[c].content)==null?void 0:n.some(u=>{var p;return(u==null?void 0:u.type)==="text"&&((p=u.text)==null?void 0:p.trim())}))){const u=[...a.slice(0,c),...a.slice(c+1)];return{...e,assemblingId:null,messages:u}}return{...e,assemblingId:null}}if(o.type==="tool_start"){const s=`tool-${o.id}`,a={type:"tool_call",id:o.id,name:o.name,args:o.args},c={id:s,role:"tool",name:o.name,createdAt:new Date().toISOString(),content:[a]};return{...e,messages:[...e.messages,c],toolIndex:{...e.toolIndex,[o.id]:s}}}if(o.type==="tool_result"){const s=e.toolIndex[o.id]??`tool-${o.id}`,a={type:"tool_result",toolCallId:o.id,output:o.output,error:o.error},c=e.messages.find(u=>u.id===s),d={id:s,role:"tool",content:[a],createdAt:new Date().toISOString()},f=c?ua(e.messages,s,[a]):[...e.messages,d];return{...e,messages:f}}if(o.type==="checkpoint"){const s=Cf(e.messages,o.checkpointId);return{...e,lastCheckpointId:o.checkpointId,messages:s}}if(o.type==="branch"){const s=o.checkpointId??e.lastCheckpointId;return{...e,lastBranch:o,lastCheckpointId:s??null}}if(o.type==="error"){const s={id:`err-${Date.now()}`,role:"system",content:[{type:"text",text:`Error: ${o.message}`}],createdAt:new Date().toISOString()};return{...e,messages:[...e.messages,s]}}return e}default:return e}}function da(e=[]){const[t,r]=T.useReducer(yf,{...wf,messages:e}),n=T.useCallback(s=>{r({type:"event",payload:{ev:s}})},[]),o=T.useMemo(()=>({reset:s=>r({type:"reset",payload:{messages:s}}),seed:s=>r({type:"seed",payload:{messages:s}}),prepend:s=>r({type:"prepend",payload:{messages:s}}),pushUser:s=>r({type:"user_message",payload:{message:s}}),onEvent:n}),[n]);return{state:t,dispatch:r,...o}}function Gn(e){return e.filter(t=>{if(t.role!=="assistant")return!0;const r=(t.content||[]).some(o=>{var s;return o&&o.type==="text"&&((s=o.text)==null?void 0:s.trim())}),n=(t.content||[]).some(o=>o&&o.type==="image_url");return!!(r||n)})}function qn(e){for(let t=e.length-1;t>=0;t--)if(e[t].role==="assistant")return e[t].id;return null}function xf(e,t,r){return e.map(n=>{if(n.id!==t)return n;const o=n.content.slice(),s=o[o.length-1];return s&&s.type==="text"?s.text+=r:o.push({type:"text",text:r}),{...n,content:o}})}function ua(e,t,r){return e.map(n=>n.id===t?{...n,content:Sf(n.content,r)}:n)}function Sf(e,t){const r=e.slice();for(const n of t)if(n.type==="text"){const o=r[r.length-1];(o==null?void 0:o.type)==="text"?o.text+=n.text:r.push({type:"text",text:n.text})}else r.push(n);return r}function Cf(e,t){for(let r=e.length-1;r>=0;r--)if(e[r].role==="assistant"){const o={...e[r],checkpointId:t};return[...e.slice(0,r),o,...e.slice(r+1)]}return e}function Ef(e){if(!e)return null;const t=e.split("/");return t[t.length-1]||null}const fa=T.createContext(null);function qt({children:e,apiConfig:t,onError:r,onThreadChange:n,initialThreadId:o=null,historyPageSize:s}){const a=Ze;T.useEffect(()=>{t&&a.updateConfig({baseUrl:t.baseUrl,authToken:t.apiKey})},[a,t]);const{isStreaming:c,error:d,stream:f,stop:u,setToken:p}=la({baseUrl:a.baseUrl,token:null,headers:t==null?void 0:t.headers,streamPath:"/chat/runs/stream"}),[g,v]=T.useState(()=>typeof a.getAuthToken=="function"?a.getAuthToken():null);T.useEffect(()=>{p(typeof a.getAuthToken=="function"?a.getAuthToken():null);const W=a.onTokenChange(Y=>{v(Y),p(Y)});return()=>{W()}},[a,p]);const m=T.useCallback(W=>{a.setAuthToken(W)},[a]),{state:h,seed:b,prepend:w,pushUser:x,onEvent:y,reset:C}=da(),E=s&&s>0?s:6,[_,N]=T.useState(!1),[D,$]=T.useState(!1),[I,B]=T.useState(null),[G,O]=T.useState(void 0),L=T.useCallback((W,Y)=>{const he=Array.isArray(W==null?void 0:W.messages)?W.messages:[];Y==="replace"?b(he):Y==="prepend"&&he.length&&w(he),B((W==null?void 0:W.nextCursor)??null),N(!!(W!=null&&W.hasMore)),O(ve=>(W==null?void 0:W.checkpointId)??ve??void 0)},[b,w]),[q,F]=T.useState([]),[U,M]=T.useState(null),P=T.useCallback(async()=>{const W=await a.listThreads();F(W)},[a]);T.useEffect(()=>{P().catch(()=>{})},[P]),T.useEffect(()=>{n==null||n(U)},[U,n]);const ee=T.useRef(null);T.useEffect(()=>{o&&ee.current!==o&&(ee.current=o,oe(o).catch(()=>{}))},[o]);const te=T.useRef(null),oe=T.useCallback(async(W,Y,he)=>{if(te.current!==W){te.current=W;try{N(!1),B(null),O(void 0);const ve=await a.getMessages({threadId:W,checkpointId:Y,checkpointNs:he,limit:E});M(W),L(ve,"replace")}finally{te.current=null}}},[a,L]),H=T.useCallback(async W=>a.listCheckpoints(W),[a]),j=T.useCallback(async W=>{if(!U)throw new Error("No active thread");N(!1),B(null),O(void 0);const Y=await a.getMessages({threadId:U,checkpointId:W,limit:E});L(Y,"replace")},[a,U,L,E]),fe=T.useCallback(async()=>{if(!U)throw new Error("No active thread");await oe(U)},[U,oe]),pe=T.useRef(!1);T.useEffect(()=>{const W=pe.current;if(pe.current=c,W&&!c&&U){const Y=h.lastCheckpointId??void 0;(async()=>{try{const he=await a.getMessages({threadId:U,checkpointId:Y,limit:E});L(he,"replace")}catch{}try{await P()}catch{}})()}},[c,U,h.lastCheckpointId,a,L,P]);const R=T.useCallback(async W=>{const Y=await a.createThread(W);return await P(),await oe(Y.threadId),Y.threadId},[a,P,oe]),K=T.useCallback(async W=>{await a.deleteThread(W),await P(),U===W&&(M(null),C([]),N(!1),B(null),O(void 0))},[a,P,U,C]),ae=T.useCallback(async(W,Y)=>{await a.updateThread(W,Y),await P()},[a,P]),V=T.useCallback(async(W,Y)=>{var zt;if(!U)throw new Error("No active thread");async function he(ce){return await new Promise((Te,Ae)=>{const We=new FileReader;We.onload=()=>Te(String(We.result)),We.onerror=tt=>Ae(tt),We.readAsDataURL(ce)})}async function ve(ce){return await new Promise((Te,Ae)=>{const We=new FileReader;We.onload=()=>{try{const tt=We.result;let In="";const _n=new Uint8Array(tt),gs=_n.byteLength;for(let pr=0;pr<gs;pr++)In+=String.fromCharCode(_n[pr]);Te(btoa(In))}catch(tt){Ae(tt)}},We.onerror=tt=>Ae(tt),We.readAsArrayBuffer(ce)})}const ye=[];W&&ye.push({type:"text",text:W});const xt=(Y==null?void 0:Y.attachments)||[];let Oe=[];if(xt.length>0)for(const ce of xt)if(ce.type&&ce.type.startsWith("image/")){let Te=null;try{const Ae=await a.uploadImage(ce,(t==null?void 0:t.uploadPath)||"/upload").catch(()=>null);Te=(Ae==null?void 0:Ae.url)||null}catch{}if(!Te)try{Te=await he(ce)}catch{Te=null}if(Te){const Ae={type:"image_url",url:Te,mimeType:ce.type,alt:ce.name};ye.push(Ae)}try{Oe.push({filename:ce.name,data:await ve(ce),mime_type:ce.type||"application/octet-stream"})}catch{}}else{const Te=await he(ce).catch(()=>null),Ae={type:"file",url:String(Te),mimeType:ce.type||void 0,name:ce.name,size:ce.size};ye.push(Ae);try{Oe.push({filename:ce.name,data:await ve(ce),mime_type:ce.type||"application/octet-stream"})}catch{}}const Ut={id:((zt=crypto.randomUUID)==null?void 0:zt.call(crypto))||`user-${Date.now()}`,role:"user",content:ye,createdAt:new Date().toISOString(),checkpointId:(Y==null?void 0:Y.checkpointId)??h.lastCheckpointId??void 0};x(Ut);const fs={...Ut,content:Ut.content.filter(ce=>ce.type==="text"||ce.type==="image_url")},Ht={...(Y==null?void 0:Y.payloadExtras)??{}},ps=!!Ht.edit,An=Ht.originalMessageId,Pn=typeof An=="string"?An:void 0,hs={threadId:U,payload:{messages:[fs],attachments:Ut.content.filter(ce=>ce.type==="file").map(ce=>({type:"file",url:ce.url,mimeType:ce.mimeType,name:ce.name,size:ce.size})),files_info:Oe,...Ht},checkpointId:(Y==null?void 0:Y.checkpointId)??h.lastCheckpointId??void 0,checkpointNs:Y==null?void 0:Y.checkpointNs,nodeFilter:Y==null?void 0:Y.nodeFilter,config:Y==null?void 0:Y.config,edit:ps,originalMessageId:Pn};f(hs,ce=>y(ce),{onError:ce=>console.warn("stream error",ce)})},[U,x,f,y,h.lastCheckpointId,a,t==null?void 0:t.uploadPath]),Z=T.useCallback(async W=>{if(!U)throw new Error("No active thread");if(D||!_)return;const Y=I;if(Y){$(!0);try{const he=await a.getMessages({threadId:U,checkpointId:G,limit:(W==null?void 0:W.limit)??E,beforeId:Y});L(he,"prepend")}finally{$(!1)}}},[a,U,G,I,_,D,L]),J={baseUrl:a.baseUrl,token:g,setToken:m,api:a,threads:q,currentThreadId:U,setCurrentThreadId:M,messages:h.messages,isStreaming:c,error:d,lastCheckpointId:h.lastCheckpointId,streamingAssistantId:h.assemblingId,hasMoreHistory:_,isLoadingHistory:D,loadOlderMessages:Z,historyPageSize:E,listCheckpoints:H,navigateToCheckpoint:j,returnToLatest:fe,refreshThreads:P,createThread:R,deleteThread:K,renameThread:ae,loadThread:oe,send:V,stop:u};return i.jsx(fa.Provider,{value:J,children:e})}function Xn(){const e=T.useContext(fa);if(!e)throw new Error("useChat must be used within ChatProvider");return e}function A(...e){return Kd.twMerge(jd.clsx(e))}const Nf=Wt.cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),ue=l.forwardRef(({className:e,variant:t,size:r,asChild:n=!1,...o},s)=>{const a=n?Pe.Slot:"button";return i.jsx(a,{className:A(Nf({variant:t,size:r,className:e})),ref:s,...o})});ue.displayName="Button";const pa=l.forwardRef(({className:e,...t},r)=>i.jsx("textarea",{className:A("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),ref:r,...t}));pa.displayName="Textarea";const Tf=Wt.cva("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function ha({className:e,variant:t,...r}){return i.jsx("div",{className:A(Tf({variant:t}),e),...r})}function z(e,t,{checkForDefaultPrevented:r=!0}={}){return function(o){if(e==null||e(o),r===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function Af(e,t){const r=l.createContext(t),n=s=>{const{children:a,...c}=s,d=l.useMemo(()=>c,Object.values(c));return i.jsx(r.Provider,{value:d,children:a})};n.displayName=e+"Provider";function o(s){const a=l.useContext(r);if(a)return a;if(t!==void 0)return t;throw new Error(`\`${s}\` must be used within \`${e}\``)}return[n,o]}function Fe(e,t=[]){let r=[];function n(s,a){const c=l.createContext(a),d=r.length;r=[...r,a];const f=p=>{var w;const{scope:g,children:v,...m}=p,h=((w=g==null?void 0:g[e])==null?void 0:w[d])||c,b=l.useMemo(()=>m,Object.values(m));return i.jsx(h.Provider,{value:b,children:v})};f.displayName=s+"Provider";function u(p,g){var h;const v=((h=g==null?void 0:g[e])==null?void 0:h[d])||c,m=l.useContext(v);if(m)return m;if(a!==void 0)return a;throw new Error(`\`${p}\` must be used within \`${s}\``)}return[f,u]}const o=()=>{const s=r.map(a=>l.createContext(a));return function(c){const d=(c==null?void 0:c[e])||s;return l.useMemo(()=>({[`__scope${e}`]:{...c,[e]:d}}),[c,d])}};return o.scopeName=e,[n,Pf(o,...t)]}function Pf(...e){const t=e[0];if(e.length===1)return t;const r=()=>{const n=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(s){const a=n.reduce((c,{useScope:d,scopeName:f})=>{const p=d(s)[`__scope${f}`];return{...c,...p}},{});return l.useMemo(()=>({[`__scope${t.scopeName}`]:a}),[a])}};return r.scopeName=t.scopeName,r}var me=globalThis!=null&&globalThis.document?l.useLayoutEffect:()=>{},If=l[" useInsertionEffect ".trim().toString()]||me;function nt({prop:e,defaultProp:t,onChange:r=()=>{},caller:n}){const[o,s,a]=_f({defaultProp:t,onChange:r}),c=e!==void 0,d=c?e:o;{const u=l.useRef(e!==void 0);l.useEffect(()=>{const p=u.current;p!==c&&console.warn(`${n} is changing from ${p?"controlled":"uncontrolled"} to ${c?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),u.current=c},[c,n])}const f=l.useCallback(u=>{var p;if(c){const g=Of(u)?u(e):u;g!==e&&((p=a.current)==null||p.call(a,g))}else s(u)},[c,e,s,a]);return[d,f]}function _f({defaultProp:e,onChange:t}){const[r,n]=l.useState(e),o=l.useRef(r),s=l.useRef(t);return If(()=>{s.current=t},[t]),l.useEffect(()=>{var a;o.current!==r&&((a=s.current)==null||a.call(s,r),o.current=r)},[r,o]),[r,n,s]}function Of(e){return typeof e=="function"}function ga(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Yn(...e){return t=>{let r=!1;const n=e.map(o=>{const s=ga(o,t);return!r&&typeof s=="function"&&(r=!0),s});if(r)return()=>{for(let o=0;o<n.length;o++){const s=n[o];typeof s=="function"?s():ga(e[o],null)}}}}function ie(...e){return l.useCallback(Yn(...e),e)}var kf=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Q=kf.reduce((e,t)=>{const r=Pe.createSlot(`Primitive.${t}`),n=l.forwardRef((o,s)=>{const{asChild:a,...c}=o,d=a?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),i.jsx(d,{...c,ref:s})});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});function ma(e,t){e&&hr.flushSync(()=>e.dispatchEvent(t))}function Mf(e,t){return l.useReducer((r,n)=>t[r][n]??r,e)}var Ne=e=>{const{present:t,children:r}=e,n=Df(t),o=typeof r=="function"?r({present:n.isPresent}):l.Children.only(r),s=ie(n.ref,Lf(o));return typeof r=="function"||n.isPresent?l.cloneElement(o,{ref:s}):null};Ne.displayName="Presence";function Df(e){const[t,r]=l.useState(),n=l.useRef(null),o=l.useRef(e),s=l.useRef("none"),a=e?"mounted":"unmounted",[c,d]=Mf(a,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return l.useEffect(()=>{const f=Ir(n.current);s.current=c==="mounted"?f:"none"},[c]),me(()=>{const f=n.current,u=o.current;if(u!==e){const g=s.current,v=Ir(f);e?d("MOUNT"):v==="none"||(f==null?void 0:f.display)==="none"?d("UNMOUNT"):d(u&&g!==v?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,d]),me(()=>{if(t){let f;const u=t.ownerDocument.defaultView??window,p=v=>{const h=Ir(n.current).includes(CSS.escape(v.animationName));if(v.target===t&&h&&(d("ANIMATION_END"),!o.current)){const b=t.style.animationFillMode;t.style.animationFillMode="forwards",f=u.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=b)})}},g=v=>{v.target===t&&(s.current=Ir(n.current))};return t.addEventListener("animationstart",g),t.addEventListener("animationcancel",p),t.addEventListener("animationend",p),()=>{u.clearTimeout(f),t.removeEventListener("animationstart",g),t.removeEventListener("animationcancel",p),t.removeEventListener("animationend",p)}}else d("ANIMATION_END")},[t,d]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:l.useCallback(f=>{n.current=f?getComputedStyle(f):null,r(f)},[])}}function Ir(e){return(e==null?void 0:e.animationName)||"none"}function Lf(e){var n,o;let t=(n=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:n.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}var Ff=l[" useId ".trim().toString()]||(()=>{}),$f=0;function $e(e){const[t,r]=l.useState(Ff());return me(()=>{r(n=>n??String($f++))},[e]),t?`radix-${t}`:""}var _r="Collapsible",[Bf,Kw]=Fe(_r),[Uf,Jn]=Bf(_r),ba=l.forwardRef((e,t)=>{const{__scopeCollapsible:r,open:n,defaultOpen:o,disabled:s,onOpenChange:a,...c}=e,[d,f]=nt({prop:n,defaultProp:o??!1,onChange:a,caller:_r});return i.jsx(Uf,{scope:r,disabled:s,contentId:$e(),open:d,onOpenToggle:l.useCallback(()=>f(u=>!u),[f]),children:i.jsx(Q.div,{"data-state":Qn(d),"data-disabled":s?"":void 0,...c,ref:t})})});ba.displayName=_r;var va="CollapsibleTrigger",wa=l.forwardRef((e,t)=>{const{__scopeCollapsible:r,...n}=e,o=Jn(va,r);return i.jsx(Q.button,{type:"button","aria-controls":o.contentId,"aria-expanded":o.open||!1,"data-state":Qn(o.open),"data-disabled":o.disabled?"":void 0,disabled:o.disabled,...n,ref:t,onClick:z(e.onClick,o.onOpenToggle)})});wa.displayName=va;var Zn="CollapsibleContent",Hf=l.forwardRef((e,t)=>{const{forceMount:r,...n}=e,o=Jn(Zn,e.__scopeCollapsible);return i.jsx(Ne,{present:r||o.open,children:({present:s})=>i.jsx(zf,{...n,ref:t,present:s})})});Hf.displayName=Zn;var zf=l.forwardRef((e,t)=>{const{__scopeCollapsible:r,present:n,children:o,...s}=e,a=Jn(Zn,r),[c,d]=l.useState(n),f=l.useRef(null),u=ie(t,f),p=l.useRef(0),g=p.current,v=l.useRef(0),m=v.current,h=a.open||c,b=l.useRef(h),w=l.useRef(void 0);return l.useEffect(()=>{const x=requestAnimationFrame(()=>b.current=!1);return()=>cancelAnimationFrame(x)},[]),me(()=>{const x=f.current;if(x){w.current=w.current||{transitionDuration:x.style.transitionDuration,animationName:x.style.animationName},x.style.transitionDuration="0s",x.style.animationName="none";const y=x.getBoundingClientRect();p.current=y.height,v.current=y.width,b.current||(x.style.transitionDuration=w.current.transitionDuration,x.style.animationName=w.current.animationName),d(n)}},[a.open,n]),i.jsx(Q.div,{"data-state":Qn(a.open),"data-disabled":a.disabled?"":void 0,id:a.contentId,hidden:!h,...s,ref:u,style:{"--radix-collapsible-content-height":g?`${g}px`:void 0,"--radix-collapsible-content-width":m?`${m}px`:void 0,...e.style},children:h&&o})});function Qn(e){return e?"open":"closed"}var Wf=ba;const ya=Wf,xa=wa;function Xt({content:e,className:t=""}){const r=T.useMemo(()=>({table:({node:f,className:u,...p})=>i.jsx("div",{className:"max-w-full",children:i.jsx("table",{...p,className:A("w-full table-fixed border-collapse break-words",u)})}),th:({node:f,className:u,...p})=>i.jsx("th",{...p,className:A("break-words whitespace-normal border-b border-border/60 px-3 py-2 text-left align-top",u)}),td:({node:f,className:u,...p})=>i.jsx("td",{...p,className:A("break-words whitespace-normal border-b border-border/30 px-3 py-2 align-top",u)}),pre:({node:f,className:u,...p})=>i.jsx("pre",{...p,className:A("whitespace-pre-wrap break-words",u)}),code:({node:f,className:u,children:p,...g})=>{const{inline:v,...m}=g;return v?i.jsx("code",{...m,className:A("break-words whitespace-normal",u),children:p}):i.jsx("code",{...m,className:A("block break-words whitespace-pre-wrap",u),children:p})}}),[]),n=A("prose prose-sm max-w-none break-words dark:prose-invert leading-relaxed","prose-headings:break-words prose-p:break-words prose-li:break-words prose-td:break-words prose-th:break-words","prose-a:break-all prose-blockquote:break-words prose-strong:break-words prose-em:break-words","prose-code:break-words prose-pre:rounded prose-pre:border prose-pre:bg-background/50","prose-code:bg-background/50 prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-table:my-4 prose-th:px-2 prose-td:px-2",t);return i.jsx("div",{className:n,style:{wordBreak:"break-word",overflowWrap:"anywhere"},children:i.jsx(Rd,{remarkPlugins:[Gd],components:r,children:e})})}const Or="prose prose-sm max-w-none break-words dark:prose-invert prose-headings:break-words prose-p:break-words prose-li:break-words prose-td:break-words prose-th:break-words prose-a:break-all prose-code:break-words prose-blockquote:break-words";function Vf({className:e}){const[t,r]=T.useState(0);return T.useEffect(()=>{const n=setInterval(()=>r(o=>(o+1)%4),500);return()=>clearInterval(n)},[]),i.jsxs("span",{"aria-live":"polite",className:A("inline-block text-xs opacity-70 ml-1",e),children:["Is thinking",".".repeat(t)]})}function Sa({message:e,messageIndex:t,isStreamingMessage:r=!1,streamingDebounceMs:n=40,isEditing:o=!1,showActions:s=!0,showTimestamp:a=!0,showAgentName:c=!0,layoutSize:d="desktop",truncateToolMessages:f=!0,toolMessagePreviewLength:u=200,truncateUserMessages:p=!0,userMessagePreviewLength:g=200,customStyles:v={},onEdit:m,onRegenerate:h,onCancelEdit:b,onCopy:w}){const[x,y]=T.useState(!1),[C,E]=T.useState(!1),[_,N]=T.useState(!1),[D,$]=T.useState(!1),I=d==="phone"||d==="half-screen",B=e.role,G=B==="tool",O=T.useMemo(()=>{switch(B){case"user":return"text-[hsl(var(--chat-bubble-user-text))]";case"assistant":return"text-[hsl(var(--chat-bubble-ai-text))]";case"tool":return"text-secondary-foreground";case"system":return"text-muted-foreground";default:return"text-foreground"}},[B]),L=T.useMemo(()=>jf(e.content),[e.content]),q=T.useMemo(()=>Yf(e.content),[e.content]),F=T.useMemo(()=>e.content.filter(K=>K.type==="image_url"),[e.content]),U=T.useMemo(()=>e.content.filter(K=>K.type==="file"),[e.content]),M=Zf(L,r?n:0),P=async()=>{try{const K=G?Nt(e.content):L;await navigator.clipboard.writeText(K),y(!0),setTimeout(()=>y(!1),2e3),w==null||w(K)}catch(K){console.error("Failed to copy:",K)}},ee=()=>{if(!m)return;const K=G?Nt(e.content):L;m(e.id,K)},te=()=>h==null?void 0:h(t),oe=()=>{const ae=A(I?"h-3 w-3":"h-4 w-4","opacity-60 flex-shrink-0",O);switch(B){case"user":return i.jsx(X.User,{className:ae});case"assistant":return i.jsx(X.Bot,{className:ae});case"tool":return i.jsx(X.Wrench,{className:ae});default:return i.jsx(X.Bot,{className:ae})}},H=()=>{const K="group relative mb-4 flex w-full";switch(B){case"user":return A(K,"justify-end");case"assistant":case"tool":case"system":return A(K,"justify-start");default:return K}},j=()=>{const K=A("rounded-lg px-4 py-3 relative transition-all duration-200 min-w-0 max-w-full break-words",I&&"px-3 py-2 text-sm");switch(B){case"user":return A(K,"w-full md:max-w-[95%]","bg-[hsl(var(--chat-bubble-user))] text-[hsl(var(--chat-bubble-user-text))]","border border-transparent");case"assistant":return A(K,"w-full md:max-w-[95%]","bg-[hsl(var(--chat-bubble-ai))] text-[hsl(var(--chat-bubble-ai-text))]","border border-border/60 dark:border-border/40");case"tool":return A(K,"w-full md:max-w-[95%] bg-secondary/50 text-secondary-foreground border border-dashed");case"system":return A(K,"w-full md:max-w-[85%] bg-accent/40 text-muted-foreground border");default:return K}},fe=K=>{if(!K)return"";try{return new Date(K).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{return""}},pe=()=>{if(e.model==="reflection"){const V=L.trim(),Z=eo(V);if(Z&&typeof Z=="object")return i.jsx(Qf,{data:Z})}if(G&&q.name==="get_issues"){const V=e.content.find(W=>W.type==="tool_result"),Z=(V==null?void 0:V.output)??Nt(e.content),J=Ea(Z);if(J)return i.jsx(ep,{issues:J})}if(G&&!_){const V=Nt(e.content).slice(0,80).replace(/\s+/g," ");return i.jsx("div",{className:A("text-xs font-mono opacity-70 flex items-center justify-between gap-2 text-current",I&&"text-[10px]"),children:i.jsxs("span",{className:"truncate max-w-full text-current",children:[V,V.length>=80?"…":""]})})}if(G&&f){const V=Nt(e.content),Z=V.length>u;return i.jsx(ya,{open:C,onOpenChange:E,children:i.jsxs("div",{className:"font-mono text-sm text-current",children:[i.jsx("pre",{className:A("whitespace-pre-wrap break-words text-current",I&&"text-xs"),children:Z&&!C?V.substring(0,u)+"...":V}),Z&&i.jsx(xa,{asChild:!0,children:i.jsx(ue,{variant:"ghost",size:"sm",className:"h-6 text-xs text-current",children:C?i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronUp,{className:"h-3 w-3 mr-1"}),"Show less"]}):i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronDown,{className:"h-3 w-3 mr-1"}),"Show more (",V.length-u," chars)"]})})})]})})}if(G&&_&&!f){const V=Xf(e.content);if(V&&Kf(V))return i.jsx(Xt,{content:V.trim()});const Z=Nt(e.content);return i.jsx("div",{className:"font-mono text-sm text-current",children:i.jsx("pre",{className:A("whitespace-pre-wrap break-words text-current",I&&"text-xs"),children:Z})})}const K=F.length>0&&B!=="tool",ae=U.length>0&&B!=="tool";return i.jsxs("div",{children:[r?i.jsxs("div",{className:"relative",children:[(()=>{const V=eo(M);return V!==null?i.jsx(Ca,{data:V}):i.jsx(Xt,{content:Gf(Rf(M))})})(),i.jsx(Vf,{className:A(O,I?"text-xs":"text-sm")})]}):(()=>{const V=eo(L.trim());if(V!==null)return i.jsx(Ca,{data:V});if(B==="user"&&p){const Z=L.trim();if(Z.length>g)return i.jsxs(ya,{open:D,onOpenChange:$,children:[i.jsx("div",{className:A("text-sm text-[hsl(var(--chat-bubble-user-text))]",I&&"text-xs"),children:D?i.jsx(Xt,{content:Z}):i.jsxs("pre",{className:A("font-sans whitespace-pre-wrap break-words bg-transparent p-0 m-0 text-[hsl(var(--chat-bubble-user-text))]",I&&"text-xs"),children:[Z.substring(0,g),"..."]})}),i.jsx(xa,{asChild:!0,children:i.jsx(ue,{variant:"ghost",size:"sm",className:"h-6 text-xs !text-[hsl(var(--chat-bubble-user-text))]",children:D?i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronUp,{className:"h-3 w-3 mr-1"})," Show less"]}):i.jsxs(i.Fragment,{children:[i.jsx(X.ChevronDown,{className:"h-3 w-3 mr-1"})," Show more (",Z.length-g," chars)"]})})})]})}return i.jsx(Xt,{content:L.trim()})})(),K&&i.jsx("div",{className:"mt-2 grid grid-cols-2 gap-2",children:F.map((V,Z)=>i.jsxs("div",{className:"relative border rounded overflow-hidden",children:[i.jsx("img",{src:V.url,alt:V.alt??"image",className:"w-full h-auto"}),i.jsxs("div",{className:"absolute top-1 right-1 bg-background/70 rounded px-1 py-0.5 text-[10px] flex items-center gap-1",children:[i.jsx(X.Image,{className:"h-3 w-3"}),i.jsx("span",{children:"image"})]})]},Z))}),ae&&i.jsx("div",{className:"mt-2 flex flex-wrap gap-2",children:U.map((V,Z)=>{const J=V,W=J.name||"file";return i.jsxs("a",{href:J.url,download:W,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-2 bg-gray-100 border border-gray-200 rounded px-2 py-1 text-xs hover:bg-gray-200",title:W,children:[i.jsx("span",{className:"inline-block w-1.5 h-1.5 rounded-full bg-gray-400"}),i.jsx("span",{className:"truncate max-w-[180px]",children:W})]},Z)})})]})},R=T.useMemo(()=>Jf(e),[e]);return i.jsx("div",{className:A(H(),v.container),children:i.jsxs("div",{className:A(j(),v.content),children:[(a||c||G)&&i.jsxs("div",{className:A("flex items-center justify-between mb-2 pb-2 border-b border-current/10",I&&"mb-1 pb-1",O,v.header),children:[i.jsxs("div",{className:"flex items-center gap-2",children:[oe(),c&&R&&i.jsx("span",{className:A("font-medium",I?"text-xs":"text-sm"),children:R}),G&&q.name&&i.jsxs(ha,{variant:"outline",className:A("text-xs flex items-center gap-1 cursor-pointer",O,"border border-current/40",I&&"text-xs h-4"),onClick:()=>N(K=>!K),children:[i.jsx("span",{children:q.name}),i.jsx("span",{className:"inline-flex items-center",children:_?i.jsx(X.ChevronUp,{className:"h-3 w-3"}):i.jsx(X.ChevronDown,{className:"h-3 w-3"})})]}),G&&!q.name&&i.jsx(ue,{variant:"ghost",size:"sm",className:A("h-6 px-1",O,"hover:bg-foreground/10"),onClick:()=>N(K=>!K),children:i.jsxs("span",{className:"text-xs flex items-center gap-1",children:["Tool Output ",_?i.jsx(X.ChevronUp,{className:"h-3 w-3"}):i.jsx(X.ChevronDown,{className:"h-3 w-3"})]})})]}),i.jsxs("div",{className:"flex items-center gap-2",children:[a&&i.jsx("span",{className:A("text-xs opacity-60",O,I&&"text-xs"),children:fe(e.createdAt)}),s&&!o&&i.jsxs("div",{className:A("opacity-0 group-hover:opacity-100 transition-opacity","flex items-center gap-1",v.actions),children:[i.jsx(ue,{variant:"ghost",size:"sm",onClick:P,className:A("h-6 w-6 p-0 hover:bg-foreground/10",O,I&&"h-5 w-5"),children:i.jsx(X.Copy,{className:A(x?"text-success":O,I?"h-3 w-3":"h-4 w-4")})}),B==="user"&&m&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:ee,className:A("h-6 w-6 p-0 hover:bg-foreground/10",O,I&&"h-5 w-5"),children:i.jsx(X.Edit,{className:A(O,I?"h-3 w-3":"h-4 w-4")})}),B==="assistant"&&h&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:te,className:A("h-6 w-6 p-0 hover:bg-foreground/10",O,I&&"h-5 w-5"),children:i.jsx(X.RotateCcw,{className:A(O,I?"h-3 w-3":"h-4 w-4")})})]})]})]}),i.jsx("div",{className:"relative",children:pe()}),G&&_&&(q.toolCallId||q.name)&&i.jsxs("div",{className:A("mt-2 pt-2 border-t border-current/10 text-xs opacity-60",I&&"text-xs"),children:[q.name&&i.jsxs("div",{children:["Function: ",q.name]}),q.toolCallId&&i.jsxs("div",{children:["Call ID: ",q.toolCallId]})]}),!(a||c||G)&&s&&!o&&i.jsxs("div",{className:A("absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity","flex items-center gap-1",v.actions),children:[i.jsx(ue,{variant:"ghost",size:"sm",onClick:P,className:A("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.Copy,{className:A(x?"text-success":"text-current",I?"h-3 w-3":"h-4 w-4")})}),B==="user"&&m&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:ee,className:A("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.Edit,{className:A("text-current",I?"h-3 w-3":"h-4 w-4")})}),B==="assistant"&&h&&i.jsx(ue,{variant:"ghost",size:"sm",onClick:te,className:A("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.RotateCcw,{className:A("text-current",I?"h-3 w-3":"h-4 w-4")})})]})]})})}function jf(e){const t=e.filter(r=>r.type==="text").map(r=>r.text).join("");return t||JSON.stringify(e)}function Kf(e){return e.includes(`
10
10
  `)||e.includes("```")||/[-*] /.test(e)||/#+\s/.test(e)}function Rf(e){let t=e;try{(t.match(/```/g)||[]).length%2===1&&(t+="\n```"),(t.replace(/```[\s\S]*?```/g,"").match(new RegExp("(?<!`)`(?!`)","g"))||[]).length%2===1&&(t+="`")}catch{}return t}function Gf(e){let t=e;try{const r=[],n=[],o="\0F",s="\0I";let a=t.replace(/```[\s\S]*?```/g,c=>(r.push(c),`${o}${r.length-1}\0`));a=a.replace(/`[^`]*`/g,c=>(n.push(c),`${s}${n.length-1}\0`)),a=a.replace(/\b([A-Za-z0-9_&\/-]+)\b(\s+\1\b)+/g,"$1").replace(/\b([A-Za-z0-9_&\/-]+\s+[A-Za-z0-9_&\/-]+)\b(\s+\1\b)+/g,"$1").replace(/([\.,;:!\?\-])\1+/g,"$1").replace(/([:;!\?\)])([A-Za-z])/g,"$1 $2").replace(/\s{3,}/g," "),a=a.replace(/\u0000F(\d+)\u0000/g,(c,d)=>r[Number(d)]??""),a=a.replace(/\u0000I(\d+)\u0000/g,(c,d)=>n[Number(d)]??""),t=a}catch{}return t}function eo(e){const t=e==null?void 0:e.trim();if(!t||!(t.startsWith("{")||t.startsWith("[")))return null;try{return JSON.parse(t)}catch{return null}}function Ca({data:e}){if(Array.isArray(e))return e.every(r=>r===null||["string","number","boolean"].includes(typeof r))?i.jsx("div",{className:Or,children:i.jsx("ul",{className:"list-disc pl-5",children:e.map((r,n)=>i.jsx("li",{children:String(r)},n))})}):i.jsx("pre",{className:"font-mono text-xs bg-background/50 rounded border p-2 whitespace-pre-wrap break-words",children:Yt(e)});if(e&&typeof e=="object"){const t=Array.isArray(e.distilled_facts)?e.distilled_facts:null,r=Array.isArray(e.follow_up_queries)?e.follow_up_queries:null,n=typeof e.is_sufficient=="boolean"?e.is_sufficient:void 0;if(t||r||typeof n=="boolean")return i.jsxs("div",{className:Or,children:[typeof n=="boolean"&&i.jsxs("p",{children:[i.jsx("strong",{children:"Is sufficient:"})," ",n?"Yes":"No"]}),r&&r.length>0&&i.jsxs("div",{children:[i.jsx("p",{children:i.jsx("strong",{children:"Follow-up queries:"})}),i.jsx("ul",{className:"list-disc pl-5",children:r.map((s,a)=>i.jsx("li",{children:String(s)},a))})]}),t&&t.length>0&&i.jsxs("div",{children:[i.jsx("p",{children:i.jsx("strong",{children:"Facts:"})}),i.jsx("ul",{className:"list-disc pl-5",children:t.map((s,a)=>i.jsx("li",{children:String(s)},a))})]})]});const o=Object.entries(e);return i.jsx("div",{className:Or,children:i.jsx("dl",{className:"mt-0",children:o.map(([s,a])=>i.jsxs("div",{className:"mb-1",children:[i.jsxs("dt",{className:"inline font-medium mr-1",children:[s,":"]}),i.jsx("dd",{className:"inline",children:qf(a)})]},s))})})}return i.jsx("pre",{className:"font-mono text-xs bg-background/50 rounded border p-2 whitespace-pre-wrap break-words",children:Yt(e)})}function qf(e){if(e==null)return String(e);const t=typeof e;if(t==="string"||t==="number"||t==="boolean")return String(e);if(Array.isArray(e)&&e.every(n=>n===null||["string","number","boolean"].includes(typeof n)))return e.join(", ");try{return i.jsx("code",{className:"text-xs",children:JSON.stringify(e)})}catch{return String(e)}}function Nt(e){const t=e.filter(r=>r.type==="tool_result");if(t.length)try{return t.length===1?Yt(t[0].output):Yt(t.map(r=>({toolCallId:r.toolCallId,output:r.output})))}catch{}return Yt(e)}function Xf(e){const t=e.find(n=>n.type==="tool_result");if(!t)return null;const r=t.output;return typeof r=="string"?r:null}function Yt(e){if(typeof e=="string")return e;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function Yf(e){const t=e.find(n=>n.type==="tool_call"),r=e.find(n=>n.type==="tool_result");return{name:t==null?void 0:t.name,toolCallId:(r==null?void 0:r.toolCallId)??(t==null?void 0:t.id)}}function Jf(e){return e.name&&e.name.trim()?e.name:e.model&&e.model.includes("/")?e.model.split("/").pop()||null:e.model||null}function Zf(e,t){const[r,n]=T.useState(e);return T.useEffect(()=>{if(!t){n(e);return}const o=setTimeout(()=>n(e),t);return()=>clearTimeout(o)},[e,t]),r}function Qf({data:e}){return i.jsx("dl",{className:"grid grid-cols-1 gap-y-2",children:Object.entries(e).map(([t,r])=>i.jsxs("div",{className:"flex",children:[i.jsxs("dt",{className:"font-semibold mr-2",children:[t,":"]}),i.jsx("dd",{className:"flex-1 break-words",children:Array.isArray(r)?r.map((n,o)=>i.jsxs("div",{className:"ml-4 break-words",children:["- ",String(n)]},o)):String(r)})]},t))})}function Ea(e){if(!e)return null;if(typeof e=="object"&&!Array.isArray(e)){if(e.desirability||e.feasibility||e.viability||e.other)return{desirability:Array.isArray(e.desirability)?e.desirability:[],feasibility:Array.isArray(e.feasibility)?e.feasibility:[],viability:Array.isArray(e.viability)?e.viability:[],other:Array.isArray(e.other)?e.other:[]};if(e.output&&typeof e.output!="object")e=e.output;else if(e.output&&typeof e.output=="object")return Ea(e.output)}const t=String(e),r={desirability:[],feasibility:[],viability:[],other:[]};let n=t;const o=Math.min(...["desirability=","feasibility=","viability=","other="].map(a=>{const c=n.toLowerCase().indexOf(a);return c===-1?Number.MAX_SAFE_INTEGER:c}));o!==Number.MAX_SAFE_INTEGER&&(n=n.slice(o));for(const a of Object.keys(r)){const d=new RegExp(a+"\\s*=\\s*\\[([\\s\\S]*?)\\]","i").exec(n);if(!d)continue;const f=d[1],u=/Issue\(([\s\S]*?)\)(?:,|$)/g;let p=null;for(;(p=u.exec(f))!==null;){const g=p[1],v=/title\s*=\s*(['"])([\s\S]*?)\1/.exec(g),m=/description\s*=\s*(['"])([\s\S]*?)\1/.exec(g),h=v?v[2].trim():"",b=m?m[2].trim():"";r[a].push({title:h,description:b})}}return Object.values(r).some(a=>a.length>0)?r:null}function ep({issues:e}){const t=[{key:"desirability",title:"Desirability"},{key:"feasibility",title:"Feasibility"},{key:"viability",title:"Viability"},{key:"other",title:"Other"}];return i.jsx("div",{className:Or,children:t.map(r=>{const n=e[r.key];return!n||!n.length?null:i.jsxs("div",{className:"mb-4",children:[i.jsxs("h4",{className:"font-semibold mb-2",children:[r.title," (",n.length,")"]}),i.jsx("ol",{className:"list-decimal pl-5 space-y-2",children:n.map((o,s)=>i.jsxs("li",{children:[i.jsx("div",{className:"font-medium",children:o.title}),i.jsx("div",{className:"text-sm text-muted-foreground",children:o.description})]},s))})]},r.key)})})}const Tt=1e4;function tp(e){if(typeof e!="string")return String(e);const t=[/<script[^>]*>.*?<\/script>/gi,/<iframe[^>]*>.*?<\/iframe>/gi,/javascript:/gi,/vbscript:/gi,/on\w+\s*=/gi,/<object[^>]*>.*?<\/object>/gi,/<embed[^>]*>.*?<\/embed>/gi,/<form[^>]*>.*?<\/form>/gi];let r=e;for(const o of t)r=r.replace(o,"");return/<[^>]+>/.test(r)&&!/<(?!\/?(?:code|strong|em|b|i|br|p|ul|ol|li|h[1-6])\b)[^>]+>/i.test(r)?r.replace(/<code>(.*?)<\/code>/gi,"`$1`").replace(/<strong>(.*?)<\/strong>/gi,"**$1**").replace(/<b>(.*?)<\/b>/gi,"**$1**").replace(/<em>(.*?)<\/em>/gi,"*$1*").replace(/<i>(.*?)<\/i>/gi,"*$1*").replace(/<br\s*\/?>/gi,`
11
11
  `).replace(/<p>(.*?)<\/p>/gi,`$1
12
12
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "teodor-new-chat-ui",
3
- "version": "2.0.57",
3
+ "version": "2.0.58",
4
4
  "description": "React chat UI components with streaming support, tool calls, and modern design",
5
5
  "main": "dist/index.umd.js",
6
6
  "module": "dist/index.esm.js",