teodor-new-chat-ui 3.0.4 → 3.0.5
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 +4 -2
- package/dist/index.umd.js +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -3377,8 +3377,10 @@ function Lp({
|
|
|
3377
3377
|
] }) });
|
|
3378
3378
|
}
|
|
3379
3379
|
function Fp(e) {
|
|
3380
|
-
const t = e.filter((
|
|
3381
|
-
|
|
3380
|
+
const t = e.filter((r) => r.type === "text").map((r) => r.text).join("");
|
|
3381
|
+
if (t) return t;
|
|
3382
|
+
const n = e.filter((r) => r.type !== "file");
|
|
3383
|
+
return JSON.stringify(n);
|
|
3382
3384
|
}
|
|
3383
3385
|
function $p(e) {
|
|
3384
3386
|
return e.includes(`
|
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=ht(this.defaults,r);const{transitional:n,paramsSerializer:o,headers:s}=r;n!==void 0&&Nr.assertOptions(n,{silentJSONParsing:Ke.transitional(Ke.boolean),forcedJSONParsing:Ke.transitional(Ke.boolean),clarifyTimeoutError:Ke.transitional(Ke.boolean)},!1),o!=null&&(S.isFunction(o)?r.paramsSerializer={serialize:o}:Nr.assertOptions(o,{encode:Ke.function,serialize:Ke.function},!0)),r.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?r.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:r.allowAbsoluteUrls=!0),Nr.assertOptions(r,{baseUrl:Ke.spelling("baseURL"),withXsrfToken:Ke.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=Ne.concat(a,s);const c=[];let l=!0;this.interceptors.request.forEach(function(h){typeof h.runWhen=="function"&&h.runWhen(r)===!1||(l=l&&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(!l){const m=[ta.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=ta.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=ht(this.defaults,t);const r=js(t.baseURL,t.url,t.allowAbsoluteUrls);return Ls(r,t.params,t.paramsSerializer)}};S.forEach(["delete","get","head","options"],function(t){gt.prototype[t]=function(r,n){return this.request(ht(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(ht(c||{},{method:t,headers:n?{"Content-Type":"multipart/form-data"}:{},url:s,data:a}))}}gt.prototype[t]=r(),gt.prototype[t+"Form"]=r(!0)});let mf=class Kd{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 Nt(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 Kd(function(o){t=o}),cancel:t}}};function bf(e){return function(r){return e.apply(null,r)}}function vf(e){return S.isObject(e)&&e.isAxiosError===!0}const Kn={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(Kn).forEach(([e,t])=>{Kn[t]=e});function oa(e){const t=new gt(e),r=ys(gt.prototype.request,t);return S.extend(r,gt.prototype,t,{allOwnKeys:!0}),S.extend(r,t,null,{allOwnKeys:!0}),r.create=function(o){return oa(ht(e,o))},r}const be=oa(Rt);be.Axios=gt,be.CanceledError=Nt,be.CancelToken=mf,be.isCancel=Hs,be.VERSION=ra,be.toFormData=yr,be.AxiosError=oe,be.Cancel=be.CanceledError,be.all=function(t){return Promise.all(t)},be.spread=bf,be.isAxiosError=vf,be.mergeConfig=ht,be.AxiosHeaders=Ne,be.formToJSON=e=>Bs(S.isHTMLForm(e)?new FormData(e):e),be.getAdapter=ea.getAdapter,be.HttpStatusCode=Kn,be.default=be;const{Axios:Ow,AxiosError:kw,CanceledError:Mw,isCancel:Dw,CancelToken:Lw,VERSION:Fw,all:$w,Cancel:Bw,isAxiosError:Uw,spread:Hw,toFormData:zw,AxiosHeaders:Ww,HttpStatusCode:Vw,formToJSON:jw,getAdapter:Kw,mergeConfig:Rw}=be,Rn={};function Tr(){var e;try{return typeof window<"u"&&((e=window.localStorage)==null?void 0:e.getItem("chat-debug"))==="1"}catch{return!1}}const sa=Rn==null?void 0:Rn.VITE_API_BASE_URL,aa=sa?sa.replace(/\/+$/,""):void 0;!aa&&typeof window<"u"&&console.warn("VITE_API_BASE_URL is not set. The API client will need to be configured via apiConfig prop.");let Ar=null;const Gn=new Set;function ia(){return Ar}function qn(e){Ar=e,Gn.forEach(t=>t(e))}function ca(e){return Gn.add(e),()=>Gn.delete(e)}const nt=be.create({baseURL:aa||"http://localhost:8000",timeout:3e4,withCredentials:!0});nt.interceptors.request.use(e=>(Ar&&(e.headers.Authorization=`Bearer ${Ar}`),e)),nt.interceptors.response.use(e=>e,e=>Promise.reject(e));async function Re(e,t){return(await nt.get(e,t)).data}async function Pr(e,t,r){return(await nt.post(e,t,r)).data}async function la(e,t,r){return(await nt.put(e,t,r)).data}async function da(e,t){return(await nt.delete(e,t)).data}function Te(e){return e&&typeof e=="object"&&"data"in e?e.data:e}class Ir{get baseUrl(){const t=nt.defaults.baseURL||"";return String(t).replace(/\/+$|^\s+|\s+$/g,"")}updateConfig(t){t.baseUrl&&(nt.defaults.baseURL=String(t.baseUrl).replace(/\/+$/g,"")),t.authToken!==void 0&&qn(t.authToken)}getAuthToken(){return ia()}setAuthToken(t){qn(t)}onTokenChange(t){return ca(t)}async listThreads(){const t=await Re("/chat/threads"),r=Te(t);return(r==null?void 0:r.items)??(t==null?void 0:t.items)??[]}async createThread(t){const n=await Pr("/chat/threads",t?{title:t}:void 0);return Te(n)}async updateThread(t,r){const n=await la(`/chat/threads/${t}`,{title:r});return Te(n)}async deleteThread(t){const r=await da(`/chat/threads/${t}`);return Te(r)}async threadInfo(t){const r=await Re(`/chat/threads/${t}/info`);return Te(r)}async listAgents(){const t=await Re("/chat/agents"),r=Te(t);return(r==null?void 0:r.items)??[]}async getAgent(t){const r=await Re(`/chat/agents/${t}`);return Te(r)}async getAgentSchema(t){const r=await Re(`/chat/agents/${t}/schema`);return Te(r)}async getMessages(t){const r=await Re(`/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 Te(r)}async getState(t){const r=await Re(`/chat/threads/${t.threadId}/state`,{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return Te(r)}async getStateHistory(t){const r=await Re(`/chat/threads/${t.threadId}/state/history`,{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return Te(r)}async listCheckpoints(t){const r=await Re(`/chat/threads/${t}/checkpoints`,{params:{thread_id:t}});return Te(r)}async uploadExcel(t,r="/upload_excel",n={}){const o=new FormData,s=t.name.replace(/\.[^.]+$/,"").toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||`excel_${Date.now()}`,a=(n.tableName??s).trim();o.append("file",t,t.name),o.append("table_name",a),n.sheetName&&o.append("sheet_name",n.sheetName),Tr()&&console.debug("[api.uploadExcel] ->",r,{name:t.name,size:t.size,tableName:a,sheetName:n.sheetName});const c=await Pr(r,o,{headers:{Accept:"application/json"},maxBodyLength:1/0}),l=Te(c);return Tr()&&console.debug("[api.uploadExcel] <-",l),l}async uploadImage(t,r="/upload"){const n=new FormData;n.append("file",t,t.name),Tr()&&console.debug("[api.uploadImage] ->",r,{name:t.name,type:t.type,size:t.size});const o=await Pr(r,n,{headers:{Accept:"application/json"},maxBodyLength:1/0}),s=Te(o);if(Tr()&&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 Qe=new Ir;function ua(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),[l,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,N)=>{m.current&&(m.current.abort(),m.current=null),c(!0),f(null),e.autoAppendAssistant!==!1&&p("");const O=new AbortController;return m.current=O,(async()=>{var F,I,B,R,U;const E=(()=>{var D;try{return typeof window<"u"&&((D=window.localStorage)==null?void 0:D.getItem("chat-debug"))==="1"}catch{return!1}})(),M=D=>{var z;try{const k=JSON.parse(JSON.stringify(D));return(z=k==null?void 0:k.payload)!=null&&z.files_info&&Array.isArray(k.payload.files_info)&&(k.payload.files_info=k.payload.files_info.map(G=>({...G,data:G!=null&&G.data?`<base64 ${String(G.data).length} chars>`:G==null?void 0:G.data}))),k}catch{return D}};try{let D={};try{if(n)D={Authorization:`Bearer ${n}`};else if(typeof window<"u"){const ee=window.__AUTH_TOKEN__,q=((F=window.localStorage)==null?void 0:F.getItem("authToken"))||null;let ie=null;try{const j=(I=window.localStorage)==null?void 0:I.getItem("chat-settings");j&&(ie=((B=JSON.parse(j))==null?void 0:B.apiKey)||null)}catch{}const $=ee||q||ie||null;$&&(D={Authorization:`Bearer ${$}`})}}catch{}E&&console.debug("[use-chat] POST",t+r,M(y));const z=await fetch(t+r,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream",...D,...s.current},body:JSON.stringify(y),signal:O.signal});if(!z.ok||!z.body){const A=await z.text().catch(()=>"");throw E&&console.debug("[use-chat] non-OK response",z.status,A==null?void 0:A.slice(0,500)),new Error(`stream ${z.status}${A?": "+A:""}`)}try{const A=z.headers.get("X-Thread-Id")||z.headers.get("x-thread-id"),ee=z.headers.get("X-Thread-Created")||z.headers.get("x-thread-created"),q=A??null,ie=String(ee??"").toLowerCase()==="true";try{(R=N==null?void 0:N.onOpen)==null||R.call(N,{threadId:q,created:ie})}catch($){E&&console.debug("[use-chat] onOpen handler threw:",$)}}catch(A){E&&console.debug("[use-chat] failed to read headers:",A)}const k=z.body.getReader(),G=new TextDecoder;let L="";for(;;){const{value:A,done:ee}=await k.read();if(ee)break;L+=G.decode(A,{stream:!0});let q;for(;(q=L.indexOf(`
|
|
7
7
|
|
|
8
8
|
`))>=0;){const ie=L.slice(0,q);L=L.slice(q+2);const $=yf(ie);if(!$)continue;let j;try{j=JSON.parse($)}catch{E&&console.debug("[use-chat] skip malformed SSE data:",$==null?void 0:$.slice(0,200));continue}const le=wf(j)?j.data:j;if(E&&console.debug("[use-chat] event:",le==null?void 0:le.type,le),C==null||C(le),le.type==="token")e.autoAppendAssistant!==!1&&p(he=>he+le.content);else if(le.type==="message_delta"){const he=le.delta.filter(W=>W.type==="text").map(W=>W.text).join("");he&&e.autoAppendAssistant!==!1&&p(W=>W+he)}else le.type==="checkpoint"?v(le.checkpointId):le.type==="error"&&f(le.message)}}}catch(D){if((D==null?void 0:D.name)==="AbortError")return;const z=(D==null?void 0:D.message)||String(D);E&&console.debug("[use-chat] error:",z),f(z),(U=N==null?void 0:N.onError)==null||U.call(N,z)}finally{c(!1),m.current=null}})(),{close:()=>O.abort()}},[t,n,e.autoAppendAssistant]);return T.useEffect(()=>()=>{var y;return(y=m.current)==null?void 0:y.abort()},[]),{isStreaming:a,error:l,assistantText:u,lastCheckpointId:g,stream:x,stop:b,clear:w,setToken:h}}function wf(e){return!!e&&typeof e=="object"&&e.protocolVersion==="v1"&&"data"in e}function yf(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 xf={messages:[],assemblingId:null,lastCheckpointId:null,toolIndex:{},lastBranch:null};function Sf(e,t){var r,n;switch(t.type){case"reset":return{messages:Xn(((r=t.payload)==null?void 0:r.messages)??[]),assemblingId:null,lastCheckpointId:null,toolIndex:{},lastBranch:null};case"seed":return{...e,messages:Xn(t.payload.messages)};case"prepend":{const o=Xn(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=Tf(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??Yn(e.messages);return s?{...e,messages:Cf(e.messages,s,o.content)}:e}if(o.type==="message_delta"){const s=e.assemblingId??Yn(e.messages);return s?{...e,messages:pa(e.messages,s,o.delta)}:e}if(o.type==="message_end"){const s=e.assemblingId??Yn(e.messages);if(!s)return{...e,assemblingId:null};const a=e.messages,c=a.findIndex(l=>l.id===s&&l.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),l={id:s,role:"tool",content:[a],createdAt:new Date().toISOString()},f=c?pa(e.messages,s,[a]):[...e.messages,l];return{...e,messages:f}}if(o.type==="checkpoint"){const s=Nf(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 fa(e=[]){const[t,r]=T.useReducer(Sf,{...xf,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 Xn(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 Yn(e){for(let t=e.length-1;t>=0;t--)if(e[t].role==="assistant")return e[t].id;return null}function Cf(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 pa(e,t,r){return e.map(n=>n.id===t?{...n,content:Ef(n.content,r)}:n)}function Ef(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 Nf(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 Tf(e){if(!e)return null;const t=e.split("/");return t[t.length-1]||null}const ha=T.createContext(null);function qt({children:e,apiConfig:t,onError:r,onThreadChange:n,initialThreadId:o=null,historyPageSize:s,enableFileAgentRouting:a=!1,fileAgentId:c="invoice_reader"}){const l=Qe;T.useEffect(()=>{t&&l.updateConfig({baseUrl:t.baseUrl,authToken:t.apiKey})},[l,t]);const{isStreaming:f,error:u,stream:p,stop:g,setToken:v}=ua({baseUrl:l.baseUrl,token:null,headers:t==null?void 0:t.headers,streamPath:"/chat/runs/stream"}),[m,h]=T.useState(()=>typeof l.getAuthToken=="function"?l.getAuthToken():null);T.useEffect(()=>{v(typeof l.getAuthToken=="function"?l.getAuthToken():null);const Q=l.onTokenChange(J=>{h(J),v(J)});return()=>{Q()}},[l,v]);const b=T.useCallback(Q=>{l.setAuthToken(Q)},[l]),{state:w,seed:x,prepend:y,pushUser:C,onEvent:N,reset:O}=fa(),E=s&&s>0?s:6,[M,F]=T.useState(!1),[I,B]=T.useState(!1),[R,U]=T.useState(null),[D,z]=T.useState(void 0),k=T.useCallback((Q,J)=>{const ge=Array.isArray(Q==null?void 0:Q.messages)?Q.messages:[];J==="replace"?x(ge):J==="prepend"&&ge.length&&y(ge),U((Q==null?void 0:Q.nextCursor)??null),F(!!(Q!=null&&Q.hasMore)),z(ke=>(Q==null?void 0:Q.checkpointId)??ke??void 0)},[x,y]),[G,L]=T.useState([]),[A,ee]=T.useState(null),q=T.useCallback(async()=>{const Q=await l.listThreads();L(Q)},[l]);T.useEffect(()=>{q().catch(()=>{})},[q]),T.useEffect(()=>{n==null||n(A)},[A,n]);const ie=T.useRef(null);T.useEffect(()=>{o&&ie.current!==o&&(ie.current=o,j(o).catch(()=>{}))},[o]);const $=T.useRef(null),j=T.useCallback(async(Q,J,ge)=>{if($.current!==Q){$.current=Q;try{F(!1),U(null),z(void 0);const ke=await l.getMessages({threadId:Q,checkpointId:J,checkpointNs:ge,limit:E});ee(Q),k(ke,"replace")}finally{$.current=null}}},[l,k]),le=T.useCallback(async Q=>l.listCheckpoints(Q),[l]),he=T.useCallback(async Q=>{if(!A)throw new Error("No active thread");F(!1),U(null),z(void 0);const J=await l.getMessages({threadId:A,checkpointId:Q,limit:E});k(J,"replace")},[l,A,k,E]),W=T.useCallback(async()=>{if(!A)throw new Error("No active thread");await j(A)},[A,j]),V=T.useRef(!1);T.useEffect(()=>{const Q=V.current;if(V.current=f,Q&&!f&&A){const J=w.lastCheckpointId??void 0;(async()=>{try{const ge=await l.getMessages({threadId:A,checkpointId:J,limit:E});k(ge,"replace")}catch{}try{await q()}catch{}})()}},[f,A,w.lastCheckpointId,l,k,q]);const ce=T.useCallback(async Q=>{const J=await l.createThread(Q);return await q(),await j(J.threadId),J.threadId},[l,q,j]),K=T.useCallback(async Q=>{await l.deleteThread(Q),await q(),A===Q&&(ee(null),O([]),F(!1),U(null),z(void 0))},[l,q,A,O]),Y=T.useCallback(async(Q,J)=>{await l.updateThread(Q,J),await q()},[l,q]),ne=T.useCallback(async(Q,J)=>{var _n;async function ge(se){return await new Promise((xe,Pe)=>{const Ve=new FileReader;Ve.onload=()=>xe(String(Ve.result)),Ve.onerror=rt=>Pe(rt),Ve.readAsDataURL(se)})}async function ke(se){return await new Promise((xe,Pe)=>{const Ve=new FileReader;Ve.onload=()=>{try{const rt=Ve.result;let On="";const kn=new Uint8Array(rt),bs=kn.byteLength;for(let _=0;_<bs;_++)On+=String.fromCharCode(kn[_]);xe(btoa(On))}catch(rt){Pe(rt)}},Ve.onerror=rt=>Pe(rt),Ve.readAsArrayBuffer(se)})}const Ce=[];Q&&Ce.push({type:"text",text:Q});const pr=(J==null?void 0:J.attachments)||[];let ut=[];if(pr.length>0)for(const se of pr)if(se.type&&se.type.startsWith("image/")){let xe=null;try{const Pe=await l.uploadImage(se,(t==null?void 0:t.uploadPath)||"/upload").catch(()=>null);xe=(Pe==null?void 0:Pe.url)||null}catch{}if(!xe)try{xe=await ge(se)}catch{xe=null}if(xe){const Pe={type:"image_url",url:xe,mimeType:se.type,alt:se.name};Ce.push(Pe)}try{ut.push({filename:se.name,data:await ke(se),mime_type:se.type||"application/octet-stream"})}catch{}}else{const xe=await ge(se).catch(()=>null),Pe={type:"file",url:String(xe),mimeType:se.type||void 0,name:se.name,size:se.size};Ce.push(Pe);try{ut.push({filename:se.name,data:await ke(se),mime_type:se.type||"application/octet-stream"})}catch{}}const Ht={id:((_n=crypto.randomUUID)==null?void 0:_n.call(crypto))||`user-${Date.now()}`,role:"user",content:Ce,createdAt:new Date().toISOString(),checkpointId:(J==null?void 0:J.checkpointId)??w.lastCheckpointId??void 0};C(Ht);const hs={...Ht,content:Ht.content.filter(se=>se.type==="text"||se.type==="image_url")},zt={...(J==null?void 0:J.payloadExtras)??{}},gs=!!zt.edit,Pn=zt.originalMessageId,In=typeof Pn=="string"?Pn:void 0,ms=(J==null?void 0:J.attachments)&&J.attachments.length>0,hr={...A?{threadId:A}:{},payload:{messages:[hs],attachments:Ht.content.filter(se=>se.type==="file").map(se=>({type:"file",url:se.url,mimeType:se.mimeType,name:se.name,size:se.size})),files_info:ut,...a&&ms&&c?{agent_id:c}:{},...zt},checkpointId:(J==null?void 0:J.checkpointId)??w.lastCheckpointId??void 0,checkpointNs:J==null?void 0:J.checkpointNs,nodeFilter:J==null?void 0:J.nodeFilter,config:J==null?void 0:J.config,edit:gs,originalMessageId:In};p(hr,se=>N(se),{onError:se=>console.warn("stream error",se),onOpen:({threadId:se,created:xe})=>{!A&&se&&(ee(se),xe&&q().catch(()=>{}))}})},[A,C,p,N,w.lastCheckpointId,l,t==null?void 0:t.uploadPath,q,ee]),me=T.useCallback(async Q=>{if(!A)throw new Error("No active thread");if(I||!M)return;const J=R;if(J){B(!0);try{const ge=await l.getMessages({threadId:A,checkpointId:D,limit:(Q==null?void 0:Q.limit)??E,beforeId:J});k(ge,"prepend")}finally{B(!1)}}},[l,A,D,R,M,I,k]),pe={baseUrl:l.baseUrl,token:m,setToken:b,api:l,threads:G,currentThreadId:A,setCurrentThreadId:ee,messages:w.messages,isStreaming:f,error:u,lastCheckpointId:w.lastCheckpointId,streamingAssistantId:w.assemblingId,hasMoreHistory:M,isLoadingHistory:I,loadOlderMessages:me,historyPageSize:E,listCheckpoints:le,navigateToCheckpoint:he,returnToLatest:W,refreshThreads:q,createThread:ce,deleteThread:K,renameThread:Y,loadThread:j,send:ne,stop:g};return i.jsx(ha.Provider,{value:pe,children:e})}function Jn(){const e=T.useContext(ha);if(!e)throw new Error("useChat must be used within ChatProvider");return e}function P(...e){return Gd.twMerge(Rd.clsx(e))}const Af=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"}}),fe=d.forwardRef(({className:e,variant:t,size:r,asChild:n=!1,...o},s)=>{const a=n?Ie.Slot:"button";return i.jsx(a,{className:P(Af({variant:t,size:r,className:e})),ref:s,...o})});fe.displayName="Button";const ga=d.forwardRef(({className:e,...t},r)=>i.jsx("textarea",{className:P("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}));ga.displayName="Textarea";const Pf=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 ma({className:e,variant:t,...r}){return i.jsx("div",{className:P(Pf({variant:t}),e),...r})}function H(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 If(e,t){const r=d.createContext(t),n=s=>{const{children:a,...c}=s,l=d.useMemo(()=>c,Object.values(c));return i.jsx(r.Provider,{value:l,children:a})};n.displayName=e+"Provider";function o(s){const a=d.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 $e(e,t=[]){let r=[];function n(s,a){const c=d.createContext(a),l=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[l])||c,b=d.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[l])||c,m=d.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=>d.createContext(a));return function(c){const l=(c==null?void 0:c[e])||s;return d.useMemo(()=>({[`__scope${e}`]:{...c,[e]:l}}),[c,l])}};return o.scopeName=e,[n,_f(o,...t)]}function _f(...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:l,scopeName:f})=>{const p=l(s)[`__scope${f}`];return{...c,...p}},{});return d.useMemo(()=>({[`__scope${t.scopeName}`]:a}),[a])}};return r.scopeName=t.scopeName,r}var ve=globalThis!=null&&globalThis.document?d.useLayoutEffect:()=>{},Of=d[" useInsertionEffect ".trim().toString()]||ve;function ot({prop:e,defaultProp:t,onChange:r=()=>{},caller:n}){const[o,s,a]=kf({defaultProp:t,onChange:r}),c=e!==void 0,l=c?e:o;{const u=d.useRef(e!==void 0);d.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=d.useCallback(u=>{var p;if(c){const g=Mf(u)?u(e):u;g!==e&&((p=a.current)==null||p.call(a,g))}else s(u)},[c,e,s,a]);return[l,f]}function kf({defaultProp:e,onChange:t}){const[r,n]=d.useState(e),o=d.useRef(r),s=d.useRef(t);return Of(()=>{s.current=t},[t]),d.useEffect(()=>{var a;o.current!==r&&((a=s.current)==null||a.call(s,r),o.current=r)},[r,o]),[r,n,s]}function Mf(e){return typeof e=="function"}function ba(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Zn(...e){return t=>{let r=!1;const n=e.map(o=>{const s=ba(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():ba(e[o],null)}}}}function ae(...e){return d.useCallback(Zn(...e),e)}var Df=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],te=Df.reduce((e,t)=>{const r=Ie.createSlot(`Primitive.${t}`),n=d.forwardRef((o,s)=>{const{asChild:a,...c}=o,l=a?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),i.jsx(l,{...c,ref:s})});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});function va(e,t){e&&gr.flushSync(()=>e.dispatchEvent(t))}function Lf(e,t){return d.useReducer((r,n)=>t[r][n]??r,e)}var Ae=e=>{const{present:t,children:r}=e,n=Ff(t),o=typeof r=="function"?r({present:n.isPresent}):d.Children.only(r),s=ae(n.ref,$f(o));return typeof r=="function"||n.isPresent?d.cloneElement(o,{ref:s}):null};Ae.displayName="Presence";function Ff(e){const[t,r]=d.useState(),n=d.useRef(null),o=d.useRef(e),s=d.useRef("none"),a=e?"mounted":"unmounted",[c,l]=Lf(a,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return d.useEffect(()=>{const f=_r(n.current);s.current=c==="mounted"?f:"none"},[c]),ve(()=>{const f=n.current,u=o.current;if(u!==e){const g=s.current,v=_r(f);e?l("MOUNT"):v==="none"||(f==null?void 0:f.display)==="none"?l("UNMOUNT"):l(u&&g!==v?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,l]),ve(()=>{if(t){let f;const u=t.ownerDocument.defaultView??window,p=v=>{const h=_r(n.current).includes(CSS.escape(v.animationName));if(v.target===t&&h&&(l("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=_r(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 l("ANIMATION_END")},[t,l]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:d.useCallback(f=>{n.current=f?getComputedStyle(f):null,r(f)},[])}}function _r(e){return(e==null?void 0:e.animationName)||"none"}function $f(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 Bf=d[" useId ".trim().toString()]||(()=>{}),Uf=0;function Be(e){const[t,r]=d.useState(Bf());return ve(()=>{r(n=>n??String(Uf++))},[e]),t?`radix-${t}`:""}var Or="Collapsible",[Hf,Gw]=$e(Or),[zf,Qn]=Hf(Or),wa=d.forwardRef((e,t)=>{const{__scopeCollapsible:r,open:n,defaultOpen:o,disabled:s,onOpenChange:a,...c}=e,[l,f]=ot({prop:n,defaultProp:o??!1,onChange:a,caller:Or});return i.jsx(zf,{scope:r,disabled:s,contentId:Be(),open:l,onOpenToggle:d.useCallback(()=>f(u=>!u),[f]),children:i.jsx(te.div,{"data-state":to(l),"data-disabled":s?"":void 0,...c,ref:t})})});wa.displayName=Or;var ya="CollapsibleTrigger",xa=d.forwardRef((e,t)=>{const{__scopeCollapsible:r,...n}=e,o=Qn(ya,r);return i.jsx(te.button,{type:"button","aria-controls":o.contentId,"aria-expanded":o.open||!1,"data-state":to(o.open),"data-disabled":o.disabled?"":void 0,disabled:o.disabled,...n,ref:t,onClick:H(e.onClick,o.onOpenToggle)})});xa.displayName=ya;var eo="CollapsibleContent",Wf=d.forwardRef((e,t)=>{const{forceMount:r,...n}=e,o=Qn(eo,e.__scopeCollapsible);return i.jsx(Ae,{present:r||o.open,children:({present:s})=>i.jsx(Vf,{...n,ref:t,present:s})})});Wf.displayName=eo;var Vf=d.forwardRef((e,t)=>{const{__scopeCollapsible:r,present:n,children:o,...s}=e,a=Qn(eo,r),[c,l]=d.useState(n),f=d.useRef(null),u=ae(t,f),p=d.useRef(0),g=p.current,v=d.useRef(0),m=v.current,h=a.open||c,b=d.useRef(h),w=d.useRef(void 0);return d.useEffect(()=>{const x=requestAnimationFrame(()=>b.current=!1);return()=>cancelAnimationFrame(x)},[]),ve(()=>{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),l(n)}},[a.open,n]),i.jsx(te.div,{"data-state":to(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 to(e){return e?"open":"closed"}var jf=wa;const Sa=jf,Ca=xa;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:P("w-full table-fixed border-collapse break-words",u)})}),th:({node:f,className:u,...p})=>i.jsx("th",{...p,className:P("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:P("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:P("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:P("break-words whitespace-normal",u),children:p}):i.jsx("code",{...m,className:P("block break-words whitespace-pre-wrap",u),children:p})}}),[]),n=P("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(qd,{remarkPlugins:[Xd],components:r,children:e})})}const kr="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 Kf({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:P("inline-block text-xs opacity-70 ml-1",e),children:["Is thinking",".".repeat(t)]})}function Ea({message:e,messageIndex:t,isStreamingMessage:r=!1,streamingDebounceMs:n=40,isEditing:o=!1,showActions:s=!0,showTimestamp:a=!0,showAgentName:c=!0,layoutSize:l="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,N]=T.useState(!1),[O,E]=T.useState(!1),[M,F]=T.useState(!1),I=l==="phone"||l==="half-screen",B=e.role,R=B==="tool",U=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]),D=T.useMemo(()=>Rf(e.content),[e.content]),z=T.useMemo(()=>Zf(e.content),[e.content]),k=T.useMemo(()=>e.content.filter(V=>V.type==="image_url"),[e.content]),G=T.useMemo(()=>e.content.filter(V=>V.type==="file"),[e.content]),L=ep(D,r?n:0),A=async()=>{try{const V=R?Tt(e.content):D;await navigator.clipboard.writeText(V),y(!0),setTimeout(()=>y(!1),2e3),w==null||w(V)}catch(V){console.error("Failed to copy:",V)}},ee=()=>{if(!m)return;const V=R?Tt(e.content):D;m(e.id,V)},q=()=>h==null?void 0:h(t),ie=()=>{const ce=P(I?"h-3 w-3":"h-4 w-4","opacity-60 flex-shrink-0",U);switch(B){case"user":return i.jsx(X.User,{className:ce});case"assistant":return i.jsx(X.Bot,{className:ce});case"tool":return i.jsx(X.Wrench,{className:ce});default:return i.jsx(X.Bot,{className:ce})}},$=()=>{const V="group relative mb-4 flex w-full";switch(B){case"user":return P(V,"justify-end");case"assistant":case"tool":case"system":return P(V,"justify-start");default:return V}},j=()=>{const V=P("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 P(V,"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 P(V,"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 P(V,"w-full md:max-w-[95%] bg-secondary/50 text-secondary-foreground border border-dashed");case"system":return P(V,"w-full md:max-w-[85%] bg-accent/40 text-muted-foreground border");default:return V}},le=V=>{if(!V)return"";try{return new Date(V).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{return""}},he=()=>{if(e.model==="reflection"){const K=D.trim(),Y=ro(K);if(Y&&typeof Y=="object")return i.jsx(tp,{data:Y})}if(R&&z.name==="get_issues"){const K=e.content.find(me=>me.type==="tool_result"),Y=(K==null?void 0:K.output)??Tt(e.content),ne=Ta(Y);if(ne)return i.jsx(rp,{issues:ne})}if(R&&!O){const K=Tt(e.content).slice(0,80).replace(/\s+/g," ");return i.jsx("div",{className:P("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:[K,K.length>=80?"…":""]})})}if(R&&f){const K=Tt(e.content),Y=K.length>u;return i.jsx(Sa,{open:C,onOpenChange:N,children:i.jsxs("div",{className:"font-mono text-sm text-current",children:[i.jsx("pre",{className:P("whitespace-pre-wrap break-words text-current",I&&"text-xs"),children:Y&&!C?K.substring(0,u)+"...":K}),Y&&i.jsx(Ca,{asChild:!0,children:i.jsx(fe,{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 (",K.length-u," chars)"]})})})]})})}if(R&&O&&!f){const K=Jf(e.content);if(K&&Gf(K))return i.jsx(Xt,{content:K.trim()});const Y=Tt(e.content);return i.jsx("div",{className:"font-mono text-sm text-current",children:i.jsx("pre",{className:P("whitespace-pre-wrap break-words text-current",I&&"text-xs"),children:Y})})}const V=k.length>0&&B!=="tool",ce=G.length>0&&B!=="tool";return i.jsxs("div",{children:[r?i.jsxs("div",{className:"relative",children:[(()=>{const K=ro(L);return K!==null?i.jsx(Na,{data:K}):i.jsx(Xt,{content:Xf(qf(L))})})(),i.jsx(Kf,{className:P(U,I?"text-xs":"text-sm")})]}):(()=>{const K=ro(D.trim());if(K!==null)return i.jsx(Na,{data:K});if(B==="user"&&p){const Y=D.trim();if(Y.length>g)return i.jsxs(Sa,{open:M,onOpenChange:F,children:[i.jsx("div",{className:P("text-sm text-[hsl(var(--chat-bubble-user-text))]",I&&"text-xs"),children:M?i.jsx(Xt,{content:Y}):i.jsxs("pre",{className:P("font-sans whitespace-pre-wrap break-words bg-transparent p-0 m-0 text-[hsl(var(--chat-bubble-user-text))]",I&&"text-xs"),children:[Y.substring(0,g),"..."]})}),i.jsx(Ca,{asChild:!0,children:i.jsx(fe,{variant:"ghost",size:"sm",className:"h-6 text-xs !text-[hsl(var(--chat-bubble-user-text))]",children:M?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 (",Y.length-g," chars)"]})})})]})}return i.jsx(Xt,{content:D.trim()})})(),V&&i.jsx("div",{className:"mt-2 grid grid-cols-2 gap-2",children:k.map((K,Y)=>i.jsxs("div",{className:"relative border rounded overflow-hidden",children:[i.jsx("img",{src:K.url,alt:K.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"})]})]},Y))}),ce&&i.jsx("div",{className:"mt-2 flex flex-wrap gap-2",children:G.map((K,Y)=>{const ne=K,me=ne.name||"file";return i.jsxs("a",{href:ne.url,download:me,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:me,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:me})]},Y)})})]})},W=T.useMemo(()=>Qf(e),[e]);return i.jsx("div",{className:P($(),v.container),children:i.jsxs("div",{className:P(j(),v.content),children:[(a||c||R)&&i.jsxs("div",{className:P("flex items-center justify-between mb-2 pb-2 border-b border-current/10",I&&"mb-1 pb-1",U,v.header),children:[i.jsxs("div",{className:"flex items-center gap-2",children:[ie(),c&&W&&i.jsx("span",{className:P("font-medium",I?"text-xs":"text-sm"),children:W}),R&&z.name&&i.jsxs(ma,{variant:"outline",className:P("text-xs flex items-center gap-1 cursor-pointer",U,"border border-current/40",I&&"text-xs h-4"),onClick:()=>E(V=>!V),children:[i.jsx("span",{children:z.name}),i.jsx("span",{className:"inline-flex items-center",children:O?i.jsx(X.ChevronUp,{className:"h-3 w-3"}):i.jsx(X.ChevronDown,{className:"h-3 w-3"})})]}),R&&!z.name&&i.jsx(fe,{variant:"ghost",size:"sm",className:P("h-6 px-1",U,"hover:bg-foreground/10"),onClick:()=>E(V=>!V),children:i.jsxs("span",{className:"text-xs flex items-center gap-1",children:["Tool Output ",O?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:P("text-xs opacity-60",U,I&&"text-xs"),children:le(e.createdAt)}),s&&!o&&i.jsxs("div",{className:P("opacity-0 group-hover:opacity-100 transition-opacity","flex items-center gap-1",v.actions),children:[i.jsx(fe,{variant:"ghost",size:"sm",onClick:A,className:P("h-6 w-6 p-0 hover:bg-foreground/10",U,I&&"h-5 w-5"),children:i.jsx(X.Copy,{className:P(x?"text-success":U,I?"h-3 w-3":"h-4 w-4")})}),B==="user"&&m&&i.jsx(fe,{variant:"ghost",size:"sm",onClick:ee,className:P("h-6 w-6 p-0 hover:bg-foreground/10",U,I&&"h-5 w-5"),children:i.jsx(X.Edit,{className:P(U,I?"h-3 w-3":"h-4 w-4")})}),B==="assistant"&&h&&i.jsx(fe,{variant:"ghost",size:"sm",onClick:q,className:P("h-6 w-6 p-0 hover:bg-foreground/10",U,I&&"h-5 w-5"),children:i.jsx(X.RotateCcw,{className:P(U,I?"h-3 w-3":"h-4 w-4")})})]})]})]}),i.jsx("div",{className:"relative",children:he()}),R&&O&&(z.toolCallId||z.name)&&i.jsxs("div",{className:P("mt-2 pt-2 border-t border-current/10 text-xs opacity-60",I&&"text-xs"),children:[z.name&&i.jsxs("div",{children:["Function: ",z.name]}),z.toolCallId&&i.jsxs("div",{children:["Call ID: ",z.toolCallId]})]}),!(a||c||R)&&s&&!o&&i.jsxs("div",{className:P("absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity","flex items-center gap-1",v.actions),children:[i.jsx(fe,{variant:"ghost",size:"sm",onClick:A,className:P("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.Copy,{className:P(x?"text-success":"text-current",I?"h-3 w-3":"h-4 w-4")})}),B==="user"&&m&&i.jsx(fe,{variant:"ghost",size:"sm",onClick:ee,className:P("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.Edit,{className:P("text-current",I?"h-3 w-3":"h-4 w-4")})}),B==="assistant"&&h&&i.jsx(fe,{variant:"ghost",size:"sm",onClick:q,className:P("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.RotateCcw,{className:P("text-current",I?"h-3 w-3":"h-4 w-4")})})]})]})})}function Rf(e){const t=e.filter(r=>r.type==="text").map(r=>r.text).join("");return t||JSON.stringify(e)}function Gf(e){return e.includes(`
|
|
9
|
+
`)}const xf={messages:[],assemblingId:null,lastCheckpointId:null,toolIndex:{},lastBranch:null};function Sf(e,t){var r,n;switch(t.type){case"reset":return{messages:Xn(((r=t.payload)==null?void 0:r.messages)??[]),assemblingId:null,lastCheckpointId:null,toolIndex:{},lastBranch:null};case"seed":return{...e,messages:Xn(t.payload.messages)};case"prepend":{const o=Xn(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=Tf(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??Yn(e.messages);return s?{...e,messages:Cf(e.messages,s,o.content)}:e}if(o.type==="message_delta"){const s=e.assemblingId??Yn(e.messages);return s?{...e,messages:pa(e.messages,s,o.delta)}:e}if(o.type==="message_end"){const s=e.assemblingId??Yn(e.messages);if(!s)return{...e,assemblingId:null};const a=e.messages,c=a.findIndex(l=>l.id===s&&l.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),l={id:s,role:"tool",content:[a],createdAt:new Date().toISOString()},f=c?pa(e.messages,s,[a]):[...e.messages,l];return{...e,messages:f}}if(o.type==="checkpoint"){const s=Nf(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 fa(e=[]){const[t,r]=T.useReducer(Sf,{...xf,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 Xn(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 Yn(e){for(let t=e.length-1;t>=0;t--)if(e[t].role==="assistant")return e[t].id;return null}function Cf(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 pa(e,t,r){return e.map(n=>n.id===t?{...n,content:Ef(n.content,r)}:n)}function Ef(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 Nf(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 Tf(e){if(!e)return null;const t=e.split("/");return t[t.length-1]||null}const ha=T.createContext(null);function qt({children:e,apiConfig:t,onError:r,onThreadChange:n,initialThreadId:o=null,historyPageSize:s,enableFileAgentRouting:a=!1,fileAgentId:c="invoice_reader"}){const l=Qe;T.useEffect(()=>{t&&l.updateConfig({baseUrl:t.baseUrl,authToken:t.apiKey})},[l,t]);const{isStreaming:f,error:u,stream:p,stop:g,setToken:v}=ua({baseUrl:l.baseUrl,token:null,headers:t==null?void 0:t.headers,streamPath:"/chat/runs/stream"}),[m,h]=T.useState(()=>typeof l.getAuthToken=="function"?l.getAuthToken():null);T.useEffect(()=>{v(typeof l.getAuthToken=="function"?l.getAuthToken():null);const Q=l.onTokenChange(J=>{h(J),v(J)});return()=>{Q()}},[l,v]);const b=T.useCallback(Q=>{l.setAuthToken(Q)},[l]),{state:w,seed:x,prepend:y,pushUser:C,onEvent:N,reset:O}=fa(),E=s&&s>0?s:6,[M,F]=T.useState(!1),[I,B]=T.useState(!1),[R,U]=T.useState(null),[D,z]=T.useState(void 0),k=T.useCallback((Q,J)=>{const ge=Array.isArray(Q==null?void 0:Q.messages)?Q.messages:[];J==="replace"?x(ge):J==="prepend"&&ge.length&&y(ge),U((Q==null?void 0:Q.nextCursor)??null),F(!!(Q!=null&&Q.hasMore)),z(ke=>(Q==null?void 0:Q.checkpointId)??ke??void 0)},[x,y]),[G,L]=T.useState([]),[A,ee]=T.useState(null),q=T.useCallback(async()=>{const Q=await l.listThreads();L(Q)},[l]);T.useEffect(()=>{q().catch(()=>{})},[q]),T.useEffect(()=>{n==null||n(A)},[A,n]);const ie=T.useRef(null);T.useEffect(()=>{o&&ie.current!==o&&(ie.current=o,j(o).catch(()=>{}))},[o]);const $=T.useRef(null),j=T.useCallback(async(Q,J,ge)=>{if($.current!==Q){$.current=Q;try{F(!1),U(null),z(void 0);const ke=await l.getMessages({threadId:Q,checkpointId:J,checkpointNs:ge,limit:E});ee(Q),k(ke,"replace")}finally{$.current=null}}},[l,k]),le=T.useCallback(async Q=>l.listCheckpoints(Q),[l]),he=T.useCallback(async Q=>{if(!A)throw new Error("No active thread");F(!1),U(null),z(void 0);const J=await l.getMessages({threadId:A,checkpointId:Q,limit:E});k(J,"replace")},[l,A,k,E]),W=T.useCallback(async()=>{if(!A)throw new Error("No active thread");await j(A)},[A,j]),V=T.useRef(!1);T.useEffect(()=>{const Q=V.current;if(V.current=f,Q&&!f&&A){const J=w.lastCheckpointId??void 0;(async()=>{try{const ge=await l.getMessages({threadId:A,checkpointId:J,limit:E});k(ge,"replace")}catch{}try{await q()}catch{}})()}},[f,A,w.lastCheckpointId,l,k,q]);const ce=T.useCallback(async Q=>{const J=await l.createThread(Q);return await q(),await j(J.threadId),J.threadId},[l,q,j]),K=T.useCallback(async Q=>{await l.deleteThread(Q),await q(),A===Q&&(ee(null),O([]),F(!1),U(null),z(void 0))},[l,q,A,O]),Y=T.useCallback(async(Q,J)=>{await l.updateThread(Q,J),await q()},[l,q]),ne=T.useCallback(async(Q,J)=>{var _n;async function ge(se){return await new Promise((xe,Pe)=>{const Ve=new FileReader;Ve.onload=()=>xe(String(Ve.result)),Ve.onerror=rt=>Pe(rt),Ve.readAsDataURL(se)})}async function ke(se){return await new Promise((xe,Pe)=>{const Ve=new FileReader;Ve.onload=()=>{try{const rt=Ve.result;let On="";const kn=new Uint8Array(rt),bs=kn.byteLength;for(let _=0;_<bs;_++)On+=String.fromCharCode(kn[_]);xe(btoa(On))}catch(rt){Pe(rt)}},Ve.onerror=rt=>Pe(rt),Ve.readAsArrayBuffer(se)})}const Ce=[];Q&&Ce.push({type:"text",text:Q});const pr=(J==null?void 0:J.attachments)||[];let ut=[];if(pr.length>0)for(const se of pr)if(se.type&&se.type.startsWith("image/")){let xe=null;try{const Pe=await l.uploadImage(se,(t==null?void 0:t.uploadPath)||"/upload").catch(()=>null);xe=(Pe==null?void 0:Pe.url)||null}catch{}if(!xe)try{xe=await ge(se)}catch{xe=null}if(xe){const Pe={type:"image_url",url:xe,mimeType:se.type,alt:se.name};Ce.push(Pe)}try{ut.push({filename:se.name,data:await ke(se),mime_type:se.type||"application/octet-stream"})}catch{}}else{const xe=await ge(se).catch(()=>null),Pe={type:"file",url:String(xe),mimeType:se.type||void 0,name:se.name,size:se.size};Ce.push(Pe);try{ut.push({filename:se.name,data:await ke(se),mime_type:se.type||"application/octet-stream"})}catch{}}const Ht={id:((_n=crypto.randomUUID)==null?void 0:_n.call(crypto))||`user-${Date.now()}`,role:"user",content:Ce,createdAt:new Date().toISOString(),checkpointId:(J==null?void 0:J.checkpointId)??w.lastCheckpointId??void 0};C(Ht);const hs={...Ht,content:Ht.content.filter(se=>se.type==="text"||se.type==="image_url")},zt={...(J==null?void 0:J.payloadExtras)??{}},gs=!!zt.edit,Pn=zt.originalMessageId,In=typeof Pn=="string"?Pn:void 0,ms=(J==null?void 0:J.attachments)&&J.attachments.length>0,hr={...A?{threadId:A}:{},payload:{messages:[hs],attachments:Ht.content.filter(se=>se.type==="file").map(se=>({type:"file",url:se.url,mimeType:se.mimeType,name:se.name,size:se.size})),files_info:ut,...a&&ms&&c?{agent_id:c}:{},...zt},checkpointId:(J==null?void 0:J.checkpointId)??w.lastCheckpointId??void 0,checkpointNs:J==null?void 0:J.checkpointNs,nodeFilter:J==null?void 0:J.nodeFilter,config:J==null?void 0:J.config,edit:gs,originalMessageId:In};p(hr,se=>N(se),{onError:se=>console.warn("stream error",se),onOpen:({threadId:se,created:xe})=>{!A&&se&&(ee(se),xe&&q().catch(()=>{}))}})},[A,C,p,N,w.lastCheckpointId,l,t==null?void 0:t.uploadPath,q,ee]),me=T.useCallback(async Q=>{if(!A)throw new Error("No active thread");if(I||!M)return;const J=R;if(J){B(!0);try{const ge=await l.getMessages({threadId:A,checkpointId:D,limit:(Q==null?void 0:Q.limit)??E,beforeId:J});k(ge,"prepend")}finally{B(!1)}}},[l,A,D,R,M,I,k]),pe={baseUrl:l.baseUrl,token:m,setToken:b,api:l,threads:G,currentThreadId:A,setCurrentThreadId:ee,messages:w.messages,isStreaming:f,error:u,lastCheckpointId:w.lastCheckpointId,streamingAssistantId:w.assemblingId,hasMoreHistory:M,isLoadingHistory:I,loadOlderMessages:me,historyPageSize:E,listCheckpoints:le,navigateToCheckpoint:he,returnToLatest:W,refreshThreads:q,createThread:ce,deleteThread:K,renameThread:Y,loadThread:j,send:ne,stop:g};return i.jsx(ha.Provider,{value:pe,children:e})}function Jn(){const e=T.useContext(ha);if(!e)throw new Error("useChat must be used within ChatProvider");return e}function P(...e){return Gd.twMerge(Rd.clsx(e))}const Af=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"}}),fe=d.forwardRef(({className:e,variant:t,size:r,asChild:n=!1,...o},s)=>{const a=n?Ie.Slot:"button";return i.jsx(a,{className:P(Af({variant:t,size:r,className:e})),ref:s,...o})});fe.displayName="Button";const ga=d.forwardRef(({className:e,...t},r)=>i.jsx("textarea",{className:P("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}));ga.displayName="Textarea";const Pf=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 ma({className:e,variant:t,...r}){return i.jsx("div",{className:P(Pf({variant:t}),e),...r})}function H(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 If(e,t){const r=d.createContext(t),n=s=>{const{children:a,...c}=s,l=d.useMemo(()=>c,Object.values(c));return i.jsx(r.Provider,{value:l,children:a})};n.displayName=e+"Provider";function o(s){const a=d.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 $e(e,t=[]){let r=[];function n(s,a){const c=d.createContext(a),l=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[l])||c,b=d.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[l])||c,m=d.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=>d.createContext(a));return function(c){const l=(c==null?void 0:c[e])||s;return d.useMemo(()=>({[`__scope${e}`]:{...c,[e]:l}}),[c,l])}};return o.scopeName=e,[n,_f(o,...t)]}function _f(...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:l,scopeName:f})=>{const p=l(s)[`__scope${f}`];return{...c,...p}},{});return d.useMemo(()=>({[`__scope${t.scopeName}`]:a}),[a])}};return r.scopeName=t.scopeName,r}var ve=globalThis!=null&&globalThis.document?d.useLayoutEffect:()=>{},Of=d[" useInsertionEffect ".trim().toString()]||ve;function ot({prop:e,defaultProp:t,onChange:r=()=>{},caller:n}){const[o,s,a]=kf({defaultProp:t,onChange:r}),c=e!==void 0,l=c?e:o;{const u=d.useRef(e!==void 0);d.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=d.useCallback(u=>{var p;if(c){const g=Mf(u)?u(e):u;g!==e&&((p=a.current)==null||p.call(a,g))}else s(u)},[c,e,s,a]);return[l,f]}function kf({defaultProp:e,onChange:t}){const[r,n]=d.useState(e),o=d.useRef(r),s=d.useRef(t);return Of(()=>{s.current=t},[t]),d.useEffect(()=>{var a;o.current!==r&&((a=s.current)==null||a.call(s,r),o.current=r)},[r,o]),[r,n,s]}function Mf(e){return typeof e=="function"}function ba(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Zn(...e){return t=>{let r=!1;const n=e.map(o=>{const s=ba(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():ba(e[o],null)}}}}function ae(...e){return d.useCallback(Zn(...e),e)}var Df=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],te=Df.reduce((e,t)=>{const r=Ie.createSlot(`Primitive.${t}`),n=d.forwardRef((o,s)=>{const{asChild:a,...c}=o,l=a?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),i.jsx(l,{...c,ref:s})});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});function va(e,t){e&&gr.flushSync(()=>e.dispatchEvent(t))}function Lf(e,t){return d.useReducer((r,n)=>t[r][n]??r,e)}var Ae=e=>{const{present:t,children:r}=e,n=Ff(t),o=typeof r=="function"?r({present:n.isPresent}):d.Children.only(r),s=ae(n.ref,$f(o));return typeof r=="function"||n.isPresent?d.cloneElement(o,{ref:s}):null};Ae.displayName="Presence";function Ff(e){const[t,r]=d.useState(),n=d.useRef(null),o=d.useRef(e),s=d.useRef("none"),a=e?"mounted":"unmounted",[c,l]=Lf(a,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return d.useEffect(()=>{const f=_r(n.current);s.current=c==="mounted"?f:"none"},[c]),ve(()=>{const f=n.current,u=o.current;if(u!==e){const g=s.current,v=_r(f);e?l("MOUNT"):v==="none"||(f==null?void 0:f.display)==="none"?l("UNMOUNT"):l(u&&g!==v?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,l]),ve(()=>{if(t){let f;const u=t.ownerDocument.defaultView??window,p=v=>{const h=_r(n.current).includes(CSS.escape(v.animationName));if(v.target===t&&h&&(l("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=_r(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 l("ANIMATION_END")},[t,l]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:d.useCallback(f=>{n.current=f?getComputedStyle(f):null,r(f)},[])}}function _r(e){return(e==null?void 0:e.animationName)||"none"}function $f(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 Bf=d[" useId ".trim().toString()]||(()=>{}),Uf=0;function Be(e){const[t,r]=d.useState(Bf());return ve(()=>{r(n=>n??String(Uf++))},[e]),t?`radix-${t}`:""}var Or="Collapsible",[Hf,Gw]=$e(Or),[zf,Qn]=Hf(Or),wa=d.forwardRef((e,t)=>{const{__scopeCollapsible:r,open:n,defaultOpen:o,disabled:s,onOpenChange:a,...c}=e,[l,f]=ot({prop:n,defaultProp:o??!1,onChange:a,caller:Or});return i.jsx(zf,{scope:r,disabled:s,contentId:Be(),open:l,onOpenToggle:d.useCallback(()=>f(u=>!u),[f]),children:i.jsx(te.div,{"data-state":to(l),"data-disabled":s?"":void 0,...c,ref:t})})});wa.displayName=Or;var ya="CollapsibleTrigger",xa=d.forwardRef((e,t)=>{const{__scopeCollapsible:r,...n}=e,o=Qn(ya,r);return i.jsx(te.button,{type:"button","aria-controls":o.contentId,"aria-expanded":o.open||!1,"data-state":to(o.open),"data-disabled":o.disabled?"":void 0,disabled:o.disabled,...n,ref:t,onClick:H(e.onClick,o.onOpenToggle)})});xa.displayName=ya;var eo="CollapsibleContent",Wf=d.forwardRef((e,t)=>{const{forceMount:r,...n}=e,o=Qn(eo,e.__scopeCollapsible);return i.jsx(Ae,{present:r||o.open,children:({present:s})=>i.jsx(Vf,{...n,ref:t,present:s})})});Wf.displayName=eo;var Vf=d.forwardRef((e,t)=>{const{__scopeCollapsible:r,present:n,children:o,...s}=e,a=Qn(eo,r),[c,l]=d.useState(n),f=d.useRef(null),u=ae(t,f),p=d.useRef(0),g=p.current,v=d.useRef(0),m=v.current,h=a.open||c,b=d.useRef(h),w=d.useRef(void 0);return d.useEffect(()=>{const x=requestAnimationFrame(()=>b.current=!1);return()=>cancelAnimationFrame(x)},[]),ve(()=>{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),l(n)}},[a.open,n]),i.jsx(te.div,{"data-state":to(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 to(e){return e?"open":"closed"}var jf=wa;const Sa=jf,Ca=xa;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:P("w-full table-fixed border-collapse break-words",u)})}),th:({node:f,className:u,...p})=>i.jsx("th",{...p,className:P("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:P("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:P("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:P("break-words whitespace-normal",u),children:p}):i.jsx("code",{...m,className:P("block break-words whitespace-pre-wrap",u),children:p})}}),[]),n=P("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(qd,{remarkPlugins:[Xd],components:r,children:e})})}const kr="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 Kf({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:P("inline-block text-xs opacity-70 ml-1",e),children:["Is thinking",".".repeat(t)]})}function Ea({message:e,messageIndex:t,isStreamingMessage:r=!1,streamingDebounceMs:n=40,isEditing:o=!1,showActions:s=!0,showTimestamp:a=!0,showAgentName:c=!0,layoutSize:l="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,N]=T.useState(!1),[O,E]=T.useState(!1),[M,F]=T.useState(!1),I=l==="phone"||l==="half-screen",B=e.role,R=B==="tool",U=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]),D=T.useMemo(()=>Rf(e.content),[e.content]),z=T.useMemo(()=>Zf(e.content),[e.content]),k=T.useMemo(()=>e.content.filter(V=>V.type==="image_url"),[e.content]),G=T.useMemo(()=>e.content.filter(V=>V.type==="file"),[e.content]),L=ep(D,r?n:0),A=async()=>{try{const V=R?Tt(e.content):D;await navigator.clipboard.writeText(V),y(!0),setTimeout(()=>y(!1),2e3),w==null||w(V)}catch(V){console.error("Failed to copy:",V)}},ee=()=>{if(!m)return;const V=R?Tt(e.content):D;m(e.id,V)},q=()=>h==null?void 0:h(t),ie=()=>{const ce=P(I?"h-3 w-3":"h-4 w-4","opacity-60 flex-shrink-0",U);switch(B){case"user":return i.jsx(X.User,{className:ce});case"assistant":return i.jsx(X.Bot,{className:ce});case"tool":return i.jsx(X.Wrench,{className:ce});default:return i.jsx(X.Bot,{className:ce})}},$=()=>{const V="group relative mb-4 flex w-full";switch(B){case"user":return P(V,"justify-end");case"assistant":case"tool":case"system":return P(V,"justify-start");default:return V}},j=()=>{const V=P("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 P(V,"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 P(V,"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 P(V,"w-full md:max-w-[95%] bg-secondary/50 text-secondary-foreground border border-dashed");case"system":return P(V,"w-full md:max-w-[85%] bg-accent/40 text-muted-foreground border");default:return V}},le=V=>{if(!V)return"";try{return new Date(V).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{return""}},he=()=>{if(e.model==="reflection"){const K=D.trim(),Y=ro(K);if(Y&&typeof Y=="object")return i.jsx(tp,{data:Y})}if(R&&z.name==="get_issues"){const K=e.content.find(me=>me.type==="tool_result"),Y=(K==null?void 0:K.output)??Tt(e.content),ne=Ta(Y);if(ne)return i.jsx(rp,{issues:ne})}if(R&&!O){const K=Tt(e.content).slice(0,80).replace(/\s+/g," ");return i.jsx("div",{className:P("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:[K,K.length>=80?"…":""]})})}if(R&&f){const K=Tt(e.content),Y=K.length>u;return i.jsx(Sa,{open:C,onOpenChange:N,children:i.jsxs("div",{className:"font-mono text-sm text-current",children:[i.jsx("pre",{className:P("whitespace-pre-wrap break-words text-current",I&&"text-xs"),children:Y&&!C?K.substring(0,u)+"...":K}),Y&&i.jsx(Ca,{asChild:!0,children:i.jsx(fe,{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 (",K.length-u," chars)"]})})})]})})}if(R&&O&&!f){const K=Jf(e.content);if(K&&Gf(K))return i.jsx(Xt,{content:K.trim()});const Y=Tt(e.content);return i.jsx("div",{className:"font-mono text-sm text-current",children:i.jsx("pre",{className:P("whitespace-pre-wrap break-words text-current",I&&"text-xs"),children:Y})})}const V=k.length>0&&B!=="tool",ce=G.length>0&&B!=="tool";return i.jsxs("div",{children:[r?i.jsxs("div",{className:"relative",children:[(()=>{const K=ro(L);return K!==null?i.jsx(Na,{data:K}):i.jsx(Xt,{content:Xf(qf(L))})})(),i.jsx(Kf,{className:P(U,I?"text-xs":"text-sm")})]}):(()=>{const K=ro(D.trim());if(K!==null)return i.jsx(Na,{data:K});if(B==="user"&&p){const Y=D.trim();if(Y.length>g)return i.jsxs(Sa,{open:M,onOpenChange:F,children:[i.jsx("div",{className:P("text-sm text-[hsl(var(--chat-bubble-user-text))]",I&&"text-xs"),children:M?i.jsx(Xt,{content:Y}):i.jsxs("pre",{className:P("font-sans whitespace-pre-wrap break-words bg-transparent p-0 m-0 text-[hsl(var(--chat-bubble-user-text))]",I&&"text-xs"),children:[Y.substring(0,g),"..."]})}),i.jsx(Ca,{asChild:!0,children:i.jsx(fe,{variant:"ghost",size:"sm",className:"h-6 text-xs !text-[hsl(var(--chat-bubble-user-text))]",children:M?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 (",Y.length-g," chars)"]})})})]})}return i.jsx(Xt,{content:D.trim()})})(),V&&i.jsx("div",{className:"mt-2 grid grid-cols-2 gap-2",children:k.map((K,Y)=>i.jsxs("div",{className:"relative border rounded overflow-hidden",children:[i.jsx("img",{src:K.url,alt:K.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"})]})]},Y))}),ce&&i.jsx("div",{className:"mt-2 flex flex-wrap gap-2",children:G.map((K,Y)=>{const ne=K,me=ne.name||"file";return i.jsxs("a",{href:ne.url,download:me,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:me,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:me})]},Y)})})]})},W=T.useMemo(()=>Qf(e),[e]);return i.jsx("div",{className:P($(),v.container),children:i.jsxs("div",{className:P(j(),v.content),children:[(a||c||R)&&i.jsxs("div",{className:P("flex items-center justify-between mb-2 pb-2 border-b border-current/10",I&&"mb-1 pb-1",U,v.header),children:[i.jsxs("div",{className:"flex items-center gap-2",children:[ie(),c&&W&&i.jsx("span",{className:P("font-medium",I?"text-xs":"text-sm"),children:W}),R&&z.name&&i.jsxs(ma,{variant:"outline",className:P("text-xs flex items-center gap-1 cursor-pointer",U,"border border-current/40",I&&"text-xs h-4"),onClick:()=>E(V=>!V),children:[i.jsx("span",{children:z.name}),i.jsx("span",{className:"inline-flex items-center",children:O?i.jsx(X.ChevronUp,{className:"h-3 w-3"}):i.jsx(X.ChevronDown,{className:"h-3 w-3"})})]}),R&&!z.name&&i.jsx(fe,{variant:"ghost",size:"sm",className:P("h-6 px-1",U,"hover:bg-foreground/10"),onClick:()=>E(V=>!V),children:i.jsxs("span",{className:"text-xs flex items-center gap-1",children:["Tool Output ",O?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:P("text-xs opacity-60",U,I&&"text-xs"),children:le(e.createdAt)}),s&&!o&&i.jsxs("div",{className:P("opacity-0 group-hover:opacity-100 transition-opacity","flex items-center gap-1",v.actions),children:[i.jsx(fe,{variant:"ghost",size:"sm",onClick:A,className:P("h-6 w-6 p-0 hover:bg-foreground/10",U,I&&"h-5 w-5"),children:i.jsx(X.Copy,{className:P(x?"text-success":U,I?"h-3 w-3":"h-4 w-4")})}),B==="user"&&m&&i.jsx(fe,{variant:"ghost",size:"sm",onClick:ee,className:P("h-6 w-6 p-0 hover:bg-foreground/10",U,I&&"h-5 w-5"),children:i.jsx(X.Edit,{className:P(U,I?"h-3 w-3":"h-4 w-4")})}),B==="assistant"&&h&&i.jsx(fe,{variant:"ghost",size:"sm",onClick:q,className:P("h-6 w-6 p-0 hover:bg-foreground/10",U,I&&"h-5 w-5"),children:i.jsx(X.RotateCcw,{className:P(U,I?"h-3 w-3":"h-4 w-4")})})]})]})]}),i.jsx("div",{className:"relative",children:he()}),R&&O&&(z.toolCallId||z.name)&&i.jsxs("div",{className:P("mt-2 pt-2 border-t border-current/10 text-xs opacity-60",I&&"text-xs"),children:[z.name&&i.jsxs("div",{children:["Function: ",z.name]}),z.toolCallId&&i.jsxs("div",{children:["Call ID: ",z.toolCallId]})]}),!(a||c||R)&&s&&!o&&i.jsxs("div",{className:P("absolute top-2 right-2 opacity-0 group-hover:opacity-100 transition-opacity","flex items-center gap-1",v.actions),children:[i.jsx(fe,{variant:"ghost",size:"sm",onClick:A,className:P("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.Copy,{className:P(x?"text-success":"text-current",I?"h-3 w-3":"h-4 w-4")})}),B==="user"&&m&&i.jsx(fe,{variant:"ghost",size:"sm",onClick:ee,className:P("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.Edit,{className:P("text-current",I?"h-3 w-3":"h-4 w-4")})}),B==="assistant"&&h&&i.jsx(fe,{variant:"ghost",size:"sm",onClick:q,className:P("h-6 w-6 p-0 hover:bg-background/50 text-current",I&&"h-5 w-5"),children:i.jsx(X.RotateCcw,{className:P("text-current",I?"h-3 w-3":"h-4 w-4")})})]})]})})}function Rf(e){const t=e.filter(n=>n.type==="text").map(n=>n.text).join("");if(t)return t;const r=e.filter(n=>n.type!=="file");return JSON.stringify(r)}function Gf(e){return e.includes(`
|
|
10
10
|
`)||e.includes("```")||/[-*] /.test(e)||/#+\s/.test(e)}function qf(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 Xf(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,l)=>r[Number(l)]??""),a=a.replace(/\u0000I(\d+)\u0000/g,(c,l)=>n[Number(l)]??""),t=a}catch{}return t}function ro(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 Na({data:e}){if(Array.isArray(e))return e.every(r=>r===null||["string","number","boolean"].includes(typeof r))?i.jsx("div",{className:kr,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:kr,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:kr,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:Yf(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 Yf(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 Tt(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 Jf(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 Zf(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 Qf(e){return e.name&&e.name.trim()?e.name:e.model&&e.model.includes("/")?e.model.split("/").pop()||null:e.model||null}function ep(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 tp({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 Ta(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 Ta(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 l=new RegExp(a+"\\s*=\\s*\\[([\\s\\S]*?)\\]","i").exec(n);if(!l)continue;const f=l[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 rp({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:kr,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 At=1e4;function np(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