@teodorruskvi/chat-core 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/features/conversation/contexts/ChatUIContext.d.ts +41 -0
  2. package/dist/features/conversation/contexts/ThreadStateProvider.d.ts +24 -0
  3. package/dist/features/conversation/contexts/ThreadsProvider.d.ts +10 -0
  4. package/dist/features/conversation/contexts/index.d.ts +3 -0
  5. package/dist/features/conversation/contexts/reducers/MessageReducer.d.ts +22 -0
  6. package/dist/features/conversation/contexts/reducers/utils/reducerUtils.d.ts +21 -0
  7. package/dist/features/conversation/hooks/index.d.ts +7 -0
  8. package/dist/features/conversation/hooks/useChatController.d.ts +50 -0
  9. package/dist/features/conversation/hooks/useChatSession.d.ts +49 -0
  10. package/dist/features/conversation/hooks/useFilePreview.d.ts +15 -0
  11. package/dist/features/conversation/hooks/useParsedMessageContent.d.ts +12 -0
  12. package/dist/features/conversation/hooks/useThreadHistoryState.d.ts +44 -0
  13. package/dist/features/conversation/hooks/useThreadsState.d.ts +40 -0
  14. package/dist/features/conversation/messages/components/MessageBubble.d.ts +25 -0
  15. package/dist/features/conversation/messages/hooks/index.d.ts +2 -0
  16. package/dist/features/conversation/messages/hooks/useMessageContent.d.ts +13 -0
  17. package/dist/features/conversation/messages/hooks/useStreamingMarkdownBuffer.d.ts +3 -0
  18. package/dist/features/conversation/messages/hooks/useToolPayload.d.ts +15 -0
  19. package/dist/features/conversation/messages/renderers/tooling/ToolContent.d.ts +27 -0
  20. package/dist/features/conversation/messages/renderers/tooling/artifacts/ArtifactProgress.d.ts +13 -0
  21. package/dist/features/conversation/messages/utils/artifactUtils.d.ts +51 -0
  22. package/dist/features/conversation/messages/utils/index.d.ts +6 -0
  23. package/dist/features/conversation/messages/utils/messageUtils.d.ts +32 -0
  24. package/dist/features/persistence/checkpoints/hooks/index.d.ts +1 -0
  25. package/dist/features/persistence/checkpoints/hooks/useCheckpointIndex.d.ts +2 -0
  26. package/dist/features/persistence/checkpoints/types/index.d.ts +33 -0
  27. package/dist/features/persistence/checkpoints/utils/checkpointIndex.d.ts +18 -0
  28. package/dist/features/persistence/checkpoints/utils/editUtils.d.ts +11 -0
  29. package/dist/features/persistence/checkpoints/utils/historyUtils.d.ts +8 -0
  30. package/dist/features/persistence/checkpoints/utils/messagePreviews.d.ts +8 -0
  31. package/dist/features/persistence/checkpoints/utils/schemaUtils.d.ts +6 -0
  32. package/dist/features/streaming/contexts/StreamingProvider.d.ts +19 -0
  33. package/dist/features/streaming/contexts/index.d.ts +1 -0
  34. package/dist/features/streaming/contexts/types.d.ts +76 -0
  35. package/dist/features/streaming/hooks/types.d.ts +50 -0
  36. package/dist/features/streaming/hooks/use-stream.d.ts +2 -0
  37. package/dist/features/streaming/index.d.ts +5 -0
  38. package/dist/features/streaming/utils/index.d.ts +1 -0
  39. package/dist/features/streaming/utils/toolHandlers.d.ts +14 -0
  40. package/dist/features/thread/contexts/index.d.ts +1 -0
  41. package/dist/features/thread/contexts/reducers/MessageReducer.d.ts +1 -0
  42. package/dist/features/thread/hooks/useThreadHistoryState.d.ts +1 -0
  43. package/dist/features/thread/hooks/useThreadsState.d.ts +1 -0
  44. package/dist/index.esm.js +5344 -0
  45. package/dist/index.esm.js.map +1 -0
  46. package/dist/index.umd.js +9 -0
  47. package/dist/index.umd.js.map +1 -0
  48. package/dist/lib/core.d.ts +26 -0
  49. package/dist/lib/utils.d.ts +2 -0
  50. package/dist/shared/core/api/clients/authClient.d.ts +13 -0
  51. package/dist/shared/core/api/clients/chatClient.d.ts +50 -0
  52. package/dist/shared/core/api/clients/fileClient.d.ts +12 -0
  53. package/dist/shared/core/api/clients/index.d.ts +2 -0
  54. package/dist/shared/core/api/index.d.ts +2 -0
  55. package/dist/shared/core/api/utils/http.d.ts +20 -0
  56. package/dist/shared/core/api/utils/index.d.ts +1 -0
  57. package/dist/shared/core/constants/env.d.ts +39 -0
  58. package/dist/shared/core/constants/index.d.ts +2 -0
  59. package/dist/shared/core/constants/storage.d.ts +14 -0
  60. package/dist/shared/core/contexts/index.d.ts +4 -0
  61. package/dist/shared/core/contexts/providers/ApiProvider.d.ts +11 -0
  62. package/dist/shared/core/contexts/providers/ChatProviders.d.ts +25 -0
  63. package/dist/shared/core/contexts/providers/index.d.ts +2 -0
  64. package/dist/shared/core/hooks/index.d.ts +2 -0
  65. package/dist/shared/core/hooks/useApi.d.ts +1 -0
  66. package/dist/shared/core/hooks/useShallowStableValue.d.ts +1 -0
  67. package/dist/shared/core/index.d.ts +6 -0
  68. package/dist/shared/core/types/index.d.ts +1 -0
  69. package/dist/shared/core/utils/caseUtils.d.ts +1 -0
  70. package/dist/shared/core/utils/chatUtils.d.ts +10 -0
  71. package/dist/shared/core/utils/guards.d.ts +8 -0
  72. package/dist/shared/core/utils/index.d.ts +8 -0
  73. package/dist/shared/core/utils/messageFactory.d.ts +14 -0
  74. package/dist/shared/core/utils/metaUtils.d.ts +22 -0
  75. package/dist/shared/core/utils/normalizationUtils.d.ts +20 -0
  76. package/dist/shared/core/utils/parsers.d.ts +22 -0
  77. package/dist/shared/core/utils/toolCallUtils.d.ts +14 -0
  78. package/dist/shared/core/utils/toolFormatting.d.ts +8 -0
  79. package/dist/shared/ui/components/toast.d.ts +15 -0
  80. package/dist/shared/ui/hooks/use-toast.d.ts +44 -0
  81. package/dist/shared/ui/utils/cn.d.ts +2 -0
  82. package/dist/shared/ui/utils/index.d.ts +1 -0
  83. package/dist/shared/utils/jsonUtils.d.ts +18 -0
  84. package/dist/types/api/auth.d.ts +15 -0
  85. package/dist/types/api/common.d.ts +9 -0
  86. package/dist/types/api/files.d.ts +7 -0
  87. package/dist/types/api/runs.d.ts +104 -0
  88. package/dist/types/api.d.ts +7 -0
  89. package/dist/types/core/context.d.ts +5 -0
  90. package/dist/types/core/models.d.ts +6 -0
  91. package/dist/types/core.d.ts +97 -0
  92. package/dist/types/domain/artifacts.d.ts +94 -0
  93. package/dist/types/domain/chat.d.ts +80 -0
  94. package/dist/types/domain/index.d.ts +10 -0
  95. package/dist/types/domain/messages.d.ts +54 -0
  96. package/dist/types/domain/persistence.d.ts +67 -0
  97. package/dist/types/domain/primitives.d.ts +39 -0
  98. package/dist/types/domain/streaming.d.ts +231 -0
  99. package/dist/types/domain/tools.d.ts +66 -0
  100. package/dist/types/index.d.ts +13 -0
  101. package/dist/types/shared/common.d.ts +19 -0
  102. package/package.json +42 -0
@@ -0,0 +1,9 @@
1
+ (function(C,J){typeof exports=="object"&&typeof module<"u"?J(exports,require("react/jsx-runtime"),require("react"),require("axios")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react","axios"],J):(C=typeof globalThis<"u"?globalThis:C||self,J(C.ChatCore={},C.jsxRuntime,C.React,C.axios))})(this,function(C,J,i,pt){"use strict";var js=Object.defineProperty;var Fs=(C,J,i)=>J in C?js(C,J,{enumerable:!0,configurable:!0,writable:!0,value:i}):C[J]=i;var An=(C,J,i)=>Fs(C,typeof J!="symbol"?J+"":J,i);function xn(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const jt=xn(i);function Ft(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var s=e.length;for(t=0;t<s;t++)e[t]&&(n=Ft(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function Mn(){for(var e,t,n=0,r="",s=arguments.length;n<s;n++)(e=arguments[n])&&(t=Ft(e))&&(r&&(r+=" "),r+=t);return r}const gt="-",En=e=>{const t=_n(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:a=>{const l=a.split(gt);return l[0]===""&&l.length!==1&&l.shift(),zt(l,t)||Pn(a)},getConflictingClassGroupIds:(a,l)=>{const d=n[a]||[];return l&&r[a]?[...d,...r[a]]:d}}},zt=(e,t)=>{var a;if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),s=r?zt(e.slice(1),r):void 0;if(s)return s;if(t.validators.length===0)return;const o=e.join(gt);return(a=t.validators.find(({validator:l})=>l(o)))==null?void 0:a.classGroupId},Ot=/^\[(.+)\]$/,Pn=e=>{if(Ot.test(e)){const t=Ot.exec(e)[1],n=t==null?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},_n=e=>{const{theme:t,prefix:n}=e,r={nextPart:new Map,validators:[]};return Ln(Object.entries(e.classGroups),n).forEach(([o,a])=>{ht(a,r,o,t)}),r},ht=(e,t,n,r)=>{e.forEach(s=>{if(typeof s=="string"){const o=s===""?t:Ut(t,s);o.classGroupId=n;return}if(typeof s=="function"){if(Nn(s)){ht(s(r),t,n,r);return}t.validators.push({validator:s,classGroupId:n});return}Object.entries(s).forEach(([o,a])=>{ht(a,Ut(t,o),n,r)})})},Ut=(e,t)=>{let n=e;return t.split(gt).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},Nn=e=>e.isThemeGetter,Ln=(e,t)=>t?e.map(([n,r])=>{const s=r.map(o=>typeof o=="string"?t+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([a,l])=>[t+a,l])):o);return[n,s]}):e,jn=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const s=(o,a)=>{n.set(o,a),t++,t>e&&(t=0,r=n,n=new Map)};return{get(o){let a=n.get(o);if(a!==void 0)return a;if((a=r.get(o))!==void 0)return s(o,a),a},set(o,a){n.has(o)?n.set(o,a):s(o,a)}}},$t="!",Fn=e=>{const{separator:t,experimentalParseClassName:n}=e,r=t.length===1,s=t[0],o=t.length,a=l=>{const d=[];let u=0,c=0,h;for(let w=0;w<l.length;w++){let I=l[w];if(u===0){if(I===s&&(r||l.slice(w,w+o)===t)){d.push(l.slice(c,w)),c=w+o;continue}if(I==="/"){h=w;continue}}I==="["?u++:I==="]"&&u--}const m=d.length===0?l:l.substring(c),T=m.startsWith($t),k=T?m.substring(1):m,v=h&&h>c?h-c:void 0;return{modifiers:d,hasImportantModifier:T,baseClassName:k,maybePostfixModifierPosition:v}};return n?l=>n({className:l,parseClassName:a}):a},zn=e=>{if(e.length<=1)return e;const t=[];let n=[];return e.forEach(r=>{r[0]==="["?(t.push(...n.sort(),r),n=[]):n.push(r)}),t.push(...n.sort()),t},On=e=>({cache:jn(e.cacheSize),parseClassName:Fn(e),...En(e)}),Un=/\s+/,$n=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:s}=t,o=[],a=e.trim().split(Un);let l="";for(let d=a.length-1;d>=0;d-=1){const u=a[d],{modifiers:c,hasImportantModifier:h,baseClassName:m,maybePostfixModifierPosition:T}=n(u);let k=!!T,v=r(k?m.substring(0,T):m);if(!v){if(!k){l=u+(l.length>0?" "+l:l);continue}if(v=r(m),!v){l=u+(l.length>0?" "+l:l);continue}k=!1}const w=zn(c).join(":"),I=h?w+$t:w,S=I+v;if(o.includes(S))continue;o.push(S);const _=s(v,k);for(let F=0;F<_.length;++F){const A=_[F];o.push(I+A)}l=u+(l.length>0?" "+l:l)}return l};function Bn(){let e=0,t,n,r="";for(;e<arguments.length;)(t=arguments[e++])&&(n=Bt(t))&&(r&&(r+=" "),r+=n);return r}const Bt=e=>{if(typeof e=="string")return e;let t,n="";for(let r=0;r<e.length;r++)e[r]&&(t=Bt(e[r]))&&(n&&(n+=" "),n+=t);return n};function Dn(e,...t){let n,r,s,o=a;function a(d){const u=t.reduce((c,h)=>h(c),e());return n=On(u),r=n.cache.get,s=n.cache.set,o=l,l(d)}function l(d){const u=r(d);if(u)return u;const c=$n(d,n);return s(d,c),c}return function(){return o(Bn.apply(null,arguments))}}const W=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},Dt=/^\[(?:([a-z-]+):)?(.+)\]$/i,Kn=/^\d+\/\d+$/,Hn=new Set(["px","full","screen"]),Vn=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Gn=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,qn=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,Wn=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Jn=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Ie=e=>Ue(e)||Hn.has(e)||Kn.test(e),Me=e=>$e(e,"length",nr),Ue=e=>!!e&&!Number.isNaN(Number(e)),mt=e=>$e(e,"number",Ue),Ve=e=>!!e&&Number.isInteger(Number(e)),Xn=e=>e.endsWith("%")&&Ue(e.slice(0,-1)),U=e=>Dt.test(e),Ee=e=>Vn.test(e),Qn=new Set(["length","size","percentage"]),Yn=e=>$e(e,Qn,Kt),Zn=e=>$e(e,"position",Kt),Rn=new Set(["image","url"]),er=e=>$e(e,Rn,sr),tr=e=>$e(e,"",rr),Ge=()=>!0,$e=(e,t,n)=>{const r=Dt.exec(e);return r?r[1]?typeof t=="string"?r[1]===t:t.has(r[1]):n(r[2]):!1},nr=e=>Gn.test(e)&&!qn.test(e),Kt=()=>!1,rr=e=>Wn.test(e),sr=e=>Jn.test(e),or=Dn(()=>{const e=W("colors"),t=W("spacing"),n=W("blur"),r=W("brightness"),s=W("borderColor"),o=W("borderRadius"),a=W("borderSpacing"),l=W("borderWidth"),d=W("contrast"),u=W("grayscale"),c=W("hueRotate"),h=W("invert"),m=W("gap"),T=W("gradientColorStops"),k=W("gradientColorStopPositions"),v=W("inset"),w=W("margin"),I=W("opacity"),S=W("padding"),_=W("saturate"),F=W("scale"),A=W("sepia"),y=W("skew"),x=W("space"),P=W("translate"),$=()=>["auto","contain","none"],B=()=>["auto","hidden","clip","visible","scroll"],D=()=>["auto",U,t],N=()=>[U,t],G=()=>["",Ie,Me],H=()=>["auto",Ue,U],X=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],q=()=>["solid","dashed","dotted","double","none"],ee=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],M=()=>["start","end","center","between","around","evenly","stretch"],z=()=>["","0",U],V=()=>["auto","avoid","all","avoid-page","page","left","right","column"],b=()=>[Ue,U];return{cacheSize:500,separator:":",theme:{colors:[Ge],spacing:[Ie,Me],blur:["none","",Ee,U],brightness:b(),borderColor:[e],borderRadius:["none","","full",Ee,U],borderSpacing:N(),borderWidth:G(),contrast:b(),grayscale:z(),hueRotate:b(),invert:z(),gap:N(),gradientColorStops:[e],gradientColorStopPositions:[Xn,Me],inset:D(),margin:D(),opacity:b(),padding:N(),saturate:b(),scale:b(),sepia:z(),skew:b(),space:N(),translate:N()},classGroups:{aspect:[{aspect:["auto","square","video",U]}],container:["container"],columns:[{columns:[Ee]}],"break-after":[{"break-after":V()}],"break-before":[{"break-before":V()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...X(),U]}],overflow:[{overflow:B()}],"overflow-x":[{"overflow-x":B()}],"overflow-y":[{"overflow-y":B()}],overscroll:[{overscroll:$()}],"overscroll-x":[{"overscroll-x":$()}],"overscroll-y":[{"overscroll-y":$()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[v]}],"inset-x":[{"inset-x":[v]}],"inset-y":[{"inset-y":[v]}],start:[{start:[v]}],end:[{end:[v]}],top:[{top:[v]}],right:[{right:[v]}],bottom:[{bottom:[v]}],left:[{left:[v]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Ve,U]}],basis:[{basis:D()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",U]}],grow:[{grow:z()}],shrink:[{shrink:z()}],order:[{order:["first","last","none",Ve,U]}],"grid-cols":[{"grid-cols":[Ge]}],"col-start-end":[{col:["auto",{span:["full",Ve,U]},U]}],"col-start":[{"col-start":H()}],"col-end":[{"col-end":H()}],"grid-rows":[{"grid-rows":[Ge]}],"row-start-end":[{row:["auto",{span:[Ve,U]},U]}],"row-start":[{"row-start":H()}],"row-end":[{"row-end":H()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",U]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",U]}],gap:[{gap:[m]}],"gap-x":[{"gap-x":[m]}],"gap-y":[{"gap-y":[m]}],"justify-content":[{justify:["normal",...M()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...M(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...M(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[S]}],px:[{px:[S]}],py:[{py:[S]}],ps:[{ps:[S]}],pe:[{pe:[S]}],pt:[{pt:[S]}],pr:[{pr:[S]}],pb:[{pb:[S]}],pl:[{pl:[S]}],m:[{m:[w]}],mx:[{mx:[w]}],my:[{my:[w]}],ms:[{ms:[w]}],me:[{me:[w]}],mt:[{mt:[w]}],mr:[{mr:[w]}],mb:[{mb:[w]}],ml:[{ml:[w]}],"space-x":[{"space-x":[x]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[x]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",U,t]}],"min-w":[{"min-w":[U,t,"min","max","fit"]}],"max-w":[{"max-w":[U,t,"none","full","min","max","fit","prose",{screen:[Ee]},Ee]}],h:[{h:[U,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[U,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[U,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[U,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Ee,Me]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",mt]}],"font-family":[{font:[Ge]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",U]}],"line-clamp":[{"line-clamp":["none",Ue,mt]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",Ie,U]}],"list-image":[{"list-image":["none",U]}],"list-style-type":[{list:["none","disc","decimal",U]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[I]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[I]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...q(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",Ie,Me]}],"underline-offset":[{"underline-offset":["auto",Ie,U]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:N()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",U]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",U]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[I]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...X(),Zn]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",Yn]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},er]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[k]}],"gradient-via-pos":[{via:[k]}],"gradient-to-pos":[{to:[k]}],"gradient-from":[{from:[T]}],"gradient-via":[{via:[T]}],"gradient-to":[{to:[T]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[l]}],"border-w-x":[{"border-x":[l]}],"border-w-y":[{"border-y":[l]}],"border-w-s":[{"border-s":[l]}],"border-w-e":[{"border-e":[l]}],"border-w-t":[{"border-t":[l]}],"border-w-r":[{"border-r":[l]}],"border-w-b":[{"border-b":[l]}],"border-w-l":[{"border-l":[l]}],"border-opacity":[{"border-opacity":[I]}],"border-style":[{border:[...q(),"hidden"]}],"divide-x":[{"divide-x":[l]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[l]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[I]}],"divide-style":[{divide:q()}],"border-color":[{border:[s]}],"border-color-x":[{"border-x":[s]}],"border-color-y":[{"border-y":[s]}],"border-color-s":[{"border-s":[s]}],"border-color-e":[{"border-e":[s]}],"border-color-t":[{"border-t":[s]}],"border-color-r":[{"border-r":[s]}],"border-color-b":[{"border-b":[s]}],"border-color-l":[{"border-l":[s]}],"divide-color":[{divide:[s]}],"outline-style":[{outline:["",...q()]}],"outline-offset":[{"outline-offset":[Ie,U]}],"outline-w":[{outline:[Ie,Me]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:G()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[I]}],"ring-offset-w":[{"ring-offset":[Ie,Me]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Ee,tr]}],"shadow-color":[{shadow:[Ge]}],opacity:[{opacity:[I]}],"mix-blend":[{"mix-blend":[...ee(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":ee()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[d]}],"drop-shadow":[{"drop-shadow":["","none",Ee,U]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[c]}],invert:[{invert:[h]}],saturate:[{saturate:[_]}],sepia:[{sepia:[A]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[d]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[c]}],"backdrop-invert":[{"backdrop-invert":[h]}],"backdrop-opacity":[{"backdrop-opacity":[I]}],"backdrop-saturate":[{"backdrop-saturate":[_]}],"backdrop-sepia":[{"backdrop-sepia":[A]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[a]}],"border-spacing-x":[{"border-spacing-x":[a]}],"border-spacing-y":[{"border-spacing-y":[a]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",U]}],duration:[{duration:b()}],ease:[{ease:["linear","in","out","in-out",U]}],delay:[{delay:b()}],animate:[{animate:["none","spin","ping","pulse","bounce",U]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[F]}],"scale-x":[{"scale-x":[F]}],"scale-y":[{"scale-y":[F]}],rotate:[{rotate:[Ve,U]}],"translate-x":[{"translate-x":[P]}],"translate-y":[{"translate-y":[P]}],"skew-x":[{"skew-x":[y]}],"skew-y":[{"skew-y":[y]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",U]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",U]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":N()}],"scroll-mx":[{"scroll-mx":N()}],"scroll-my":[{"scroll-my":N()}],"scroll-ms":[{"scroll-ms":N()}],"scroll-me":[{"scroll-me":N()}],"scroll-mt":[{"scroll-mt":N()}],"scroll-mr":[{"scroll-mr":N()}],"scroll-mb":[{"scroll-mb":N()}],"scroll-ml":[{"scroll-ml":N()}],"scroll-p":[{"scroll-p":N()}],"scroll-px":[{"scroll-px":N()}],"scroll-py":[{"scroll-py":N()}],"scroll-ps":[{"scroll-ps":N()}],"scroll-pe":[{"scroll-pe":N()}],"scroll-pt":[{"scroll-pt":N()}],"scroll-pr":[{"scroll-pr":N()}],"scroll-pb":[{"scroll-pb":N()}],"scroll-pl":[{"scroll-pl":N()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",U]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[Ie,Me,mt]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}});function ar(...e){return or(Mn(e))}function ir(e){let t=!1,n="";for(const s of e){if(s==="\\"){n+=s,t=!t;continue}if(s==="'"&&!t){n+='"';continue}n+=s,t=!1}return n.replace(/\bTrue\b/g,"true").replace(/\bFalse\b/g,"false").replace(/\bNone\b/g,"null")}function Re(e){const t=e==null?void 0:e.trim();if(!t||!(t.startsWith("{")||t.startsWith("[")))return null;try{return JSON.parse(t)}catch{const n=ir(t);if(n)try{return JSON.parse(n)}catch{return null}return null}}function Ht(e){return typeof e!="string"?!1:/^[\s\n]*[-*]\s|^[\s\n]*#+\s|```|^\s*\[.*\]\(|^>\s/.test(e)}function lr(e){return e.type==="image_url"}function cr(e){return e.type==="file"}function ur(e){return Array.isArray(e.content)?e.content.filter(t=>t.type==="text").map(t=>t.text).join(`
2
+ `).trim():typeof e.content=="string"?e.content:""}function dr(e){return e.content.filter(lr)}function fr(e){return e.content.filter(cr)}function Vt(e){return Array.isArray(e.toolCalls)?e.toolCalls:[]}function pr(e){const t=[];return e.forEach(n=>{n.artifact&&t.push(n.artifact),Array.isArray(n.toolCalls)&&n.toolCalls.forEach(r=>{r!=null&&r.artifact&&t.push(r.artifact)})}),t}function yt(e){return!!(e&&typeof e=="object"&&(e.type==="file"||e.mimeType||e.filename||e.sourceType==="base64"))}function qe(e){if(typeof e=="string")return e;if(e&&typeof e=="object"){if(Array.isArray(e)){const n=e.map(qe).filter(r=>r!==void 0);if(!n.length){console.debug("[message-utils] sanitizeForDisplay - array emptied -> returning undefined",{originalLength:e.length});return}return n}if(yt(e)){try{console.debug("[message-utils] sanitizeForDisplay - dropping file-like object",{sampleFilename:e&&(e.filename||e.name)?e.filename||e.name:void 0,keys:Object.keys(e||{})})}catch(n){console.debug("[message-utils] sanitizeForDisplay - dropped file-like (unable to inspect)",{err:String(n)})}return}const t={};for(const n of Object.keys(e)){const r=e[n];if(n==="data"&&typeof r=="string"&&r.length>100)t[n]=`[base64 ${r.length} chars omitted]`;else{const s=qe(r);s!==void 0&&(t[n]=s)}}if(Object.keys(t).length)return t;try{console.debug("[message-utils] sanitizeForDisplay - object emptied -> returning undefined",{originalKeys:Object.keys(e||{})})}catch(n){console.debug("[message-utils] sanitizeForDisplay - object emptied -> returning undefined (inspect failed)",{err:String(n)})}return}return e}function bt(e){if(typeof e=="string")return e;if(yt(e))return"";try{const t=qe(e);return t===void 0?"":typeof t=="string"?t:JSON.stringify(t,null,2)}catch{return""}}function gr(e){const t=bt(e);return typeof e=="string"&&Ht(e)?{content:e,isMarkdown:!0}:{content:t,isMarkdown:!1}}function Gt(e){const t=r=>{try{const s=qe(r);return typeof s=="string"?s:JSON.stringify(s??"")}catch{return""}},n=e.filter(r=>r.type==="text");return n.length?t(n.map(r=>r.text).join(`
3
+ `)):t(e)}function hr(e){return e.content.some(t=>t.type==="text"?t.text.trim().length>0:t.type==="image_url"||t.type==="file")}function be(e){if(e==null)return e;if(typeof e=="string"){const t=e.trim();if(t.startsWith("{")||t.startsWith("[")){const n=Re(t);if(n!==null)return be(n)}return e}if(typeof e=="object"&&!Array.isArray(e)){if(e.content!==void 0)return Array.isArray(e.content)?e.content.map(t=>be(t)).filter(Boolean).join(`
4
+ `):be(e.content);if(e.value!==void 0)return be(e.value)}return typeof e=="object"&&!Array.isArray(e)&&(e.type==="text"&&typeof e.text=="string"||typeof e.text=="string")?e.text:Array.isArray(e)&&e.length>0?be(e[0]):e}function mr(e){return e.replace(/[_-](\w)/g,(t,n)=>n?n.toUpperCase():"").replace(/^\w/,t=>t.toLowerCase())}function Pe(e){return!e||typeof e!="object"?e:Array.isArray(e)?e.map(Pe):Object.fromEntries(Object.entries(e).map(([t,n])=>[mr(t),Pe(n)]))}function et(e){var w,I,S,_,F,A,y,x,P;if(!e||typeof e!="object")return null;const t=Pe(e),n=wr(t);if(!n)return null;const r=Array.isArray(t.toolCalls)?t.toolCalls.map(wt):void 0,s=br(t.content??t.parts,!!(r!=null&&r.length)),o=t.id??`msg-${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`,a=t.createdAt??((w=t.additionalKwargs)==null?void 0:w.createdAt)??new Date().toISOString(),l=t.name??((I=t.additionalKwargs)==null?void 0:I.agentName)??((S=t.additionalKwargs)==null?void 0:S.agent_name)??void 0,d=t.model??((_=t.additionalKwargs)==null?void 0:_.model)??void 0,u=t.toolCallId??void 0,c=t.additionalKwargs??void 0,h=t.responseMetadata??void 0,m=t.checkpointId??((F=t.additionalKwargs)==null?void 0:F.checkpointId)??((A=t.additionalKwargs)==null?void 0:A.checkpoint_id)??void 0,T=t.checkpointNs??((y=t.additionalKwargs)==null?void 0:y.checkpointNs)??((x=t.additionalKwargs)==null?void 0:x.checkpoint_ns)??void 0,k=typeof t.toolStreaming=="boolean"?t.toolStreaming:!!((P=t.additionalKwargs)!=null&&P.toolStreaming);return{...t,id:o,role:n,content:s,createdAt:a,name:l,model:d,toolCallId:u,toolCalls:r,checkpointId:m,checkpointNs:T,toolStreaming:k,additionalKwargs:c,responseMetadata:h,artifact:t.artifact??void 0}}function yr(e){if(!e||typeof e!="object")return e;const t=Pe(e);if(t.tool&&!t.name&&(t.name=t.tool),t.type==="artifact.update"&&t.artifact&&typeof t.artifact=="object"){const n=t.artifact;!n.id&&n.artifactId&&(n.id=n.artifactId),!n.type&&n.artifactType&&(n.type=n.artifactType)}return t}function wt(e){const t=Pe(e),n=t.content??t.output??void 0;return{...t,type:"tool_call",id:t.id??t.callId,name:t.name??t.tool??void 0,args:t.args??t.arguments??void 0,content:typeof n=="string"?n:n?JSON.stringify(n):void 0}}function br(e,t){return Array.isArray(e)?e.map(n=>n.type==="tool_call"||n.type==="tool"?t?null:wt(Pe(n)):n).filter(n=>!!(n&&typeof n=="object"&&typeof n.type=="string")):[]}function wr(e){const t=Pe(e),n=t.role;if(n&&(n==="assistant"||n==="user"||n==="system"||n==="tool"||n==="interrupt"))return n;const r=t.type;return r==="human"?"user":r==="ai"?"assistant":r==="tool"?"tool":r==="system"?"system":null}function qt(e){if(!e)return null;const t=String(e).toLowerCase();return t==="running"||t==="pending"?"pending":t==="completed"||t==="success"?"completed":t==="error"||t==="failed"||t==="failure"?"error":null}function Wt(e){return(Array.isArray(e.toolCalls)?e.toolCalls:Vt(e)).map(wt)}function kt(e,t){return t.find(n=>n.role==="tool"&&(n.toolCallId===e||n.id===e))}function kr(e,t){const n=t.response??t.content;if(!n)return;const r=typeof n=="string"?n:bt(n);if(!r.trim())return;const s=[{type:"text",text:r}];return{id:`tool-${t.id}`,role:"tool",content:s,name:t.name,toolCallId:t.id,artifact:t.artifact,createdAt:e.createdAt}}function Jt(e,t=[]){if(Array.isArray(e)){const s=e.filter(a=>a.role==="assistant").flatMap(a=>Wt(a)),o=new Map;return s.forEach(a=>o.set(a.id,a)),Array.from(o.values()).map(a=>{var h,m,T;const l=kt(a.id,e)||kt(a.id,t),d=Array.isArray((h=l==null?void 0:l.additionalKwargs)==null?void 0:h.toolProgress)?(m=l==null?void 0:l.additionalKwargs)==null?void 0:m.toolProgress:void 0,u=(l==null?void 0:l.artifact)??a.artifact,c=qt(a.status)??((T=l==null?void 0:l.additionalKwargs)!=null&&T.toolStreaming?"pending":null)??(l?"completed":"pending");if(l&&!a.content&&c==="completed"){const k=be(l);typeof k=="string"&&(a.content=k)}return{call:a,result:l,state:c,progress:d,artifact:u}})}if(e.role!=="assistant")return[];const n=Wt(e);return n.length===0?[]:n.map(r=>{var d,u,c;const s=kt(r.id,t)??kr(e,r),o=Array.isArray((d=s==null?void 0:s.additionalKwargs)==null?void 0:d.toolProgress)?(u=s==null?void 0:s.additionalKwargs)==null?void 0:u.toolProgress:void 0,a=(s==null?void 0:s.artifact)??r.artifact,l=qt(r.status)??((c=s==null?void 0:s.additionalKwargs)!=null&&c.toolStreaming?"pending":null)??(s?"completed":"pending");if(s&&!r.content&&l==="completed"){const h=be(s);typeof h=="string"&&(r.content=h)}return{call:r,result:s,state:l,progress:o,artifact:a}})}function vr(e,t=[]){return Jt(e,t).map(n=>n.artifact).filter(n=>!!n)}const We={authToken:"authToken",authTokenExpiresAt:"authTokenExpiresAt",authSessionId:"authSessionId",chatSettings:"chat-settings",threadManagerView:"thread-manager-view",playgroundSettings:"new-chat-ui-chat-settings",debugLogs:"app:debugLogs"};function vt(e){return`draft:${e}`}let tt=null;const It=new Set;function St(){return tt}function _e(e){tt=e,It.forEach(t=>t(e))}function Tt(e){return It.add(e),()=>It.delete(e)}const Ir=3e4,Sr=9e4,ce=pt.create({timeout:Ir,withCredentials:!0});ce.interceptors.request.use(e=>(tt&&(e.headers.Authorization=`Bearer ${tt}`),e)),ce.interceptors.response.use(e=>{if(typeof window<"u"&&(e!=null&&e.data))try{const t=e.data,n=t.data||{},r=typeof t.token=="string"&&t.token||typeof n.token=="string"&&n.token||null,s=typeof t.expires_at=="number"&&t.expires_at||typeof n.expires_at=="number"&&n.expires_at||typeof t.expiresAt=="number"&&t.expiresAt||typeof n.expiresAt=="number"&&n.expiresAt||null;r&&(localStorage.setItem(We.authToken,r),_e(r)),s&&localStorage.setItem(We.authTokenExpiresAt,s.toString()),(r||s)&&window.dispatchEvent(new CustomEvent("smartorg:chat-token-updated",{detail:{token:r,expiresAt:s}}))}catch(t){console.warn("[chat-api] Error storing token:",t)}return e},e=>Promise.reject(e));async function ge(e,t){return ce.defaults.baseURL?(await ce.get(e,t)).data:Promise.reject(new Error("API base URL is not configured"))}async function nt(e,t,n){return ce.defaults.baseURL?(await ce.post(e,t,n)).data:Promise.reject(new Error("API base URL is not configured"))}async function Tr(e,t,n){return ce.defaults.baseURL?(await ce.put(e,t,n)).data:Promise.reject(new Error("API base URL is not configured"))}async function Xt(e,t){return ce.defaults.baseURL?(await ce.delete(e,t)).data:Promise.reject(new Error("API base URL is not configured"))}function ue(e){return e&&typeof e=="object"&&"data"in e?e.data:e}class Cr{get baseUrl(){return ce.defaults.baseURL||""}updateConfig(t){if(t.chatBaseUrl)ce.defaults.baseURL=t.chatBaseUrl;else if(t.baseUrl){const n=t.baseUrl.replace(/\/+$/,"");n.endsWith("/chat")?ce.defaults.baseURL=n:ce.defaults.baseURL=`${n}/chat`}t.apiKey!==void 0?_e(t.apiKey):t.getToken&&_e(t.getToken())}getAuthToken(){return St()}setAuthToken(t){_e(t)}onTokenChange(t){return Tt(t)}async listThreads(){const t=await ge("/threads"),n=ue(t);return(n==null?void 0:n.items)??(t==null?void 0:t.items)??[]}async listSharedThreads(){const t=await ge("/threads/shared"),n=ue(t);return(n==null?void 0:n.items)??(t==null?void 0:t.items)??[]}async createThread(t,n){const r={};t&&(r.title=t),n&&(r.project=n);const s=await nt("/threads",Object.keys(r).length?r:void 0);return ue(s)}async updateThread(t,n){const r=await Tr(`/threads/${t}`,{title:n});return ue(r)}async deleteThread(t){const n=await Xt(`/threads/${t}`);return ue(n)}async shareThread(t,n){const r=await nt(`/threads/${t}/share`,{shared_with_user_id:n});return ue(r)}async threadInfo(t){const n=await ge(`/threads/${t}/info`);return ue(n)}async listAgents(){const t=await ge("/agents"),n=ue(t);return(n==null?void 0:n.items)??[]}async getAgent(t){const n=await ge(`/agents/${t}`);return ue(n)}async getAgentSchema(t){const n=await ge(`/agents/${t}/schema`);return ue(n)}async getState(t){const n=await ge(`/threads/${t.threadId}/state`,{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return ue(n)}async getStateHistory(t){const n=await ge(`/threads/${t.threadId}/state/history`,{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs},timeout:Sr,signal:t.signal});return ue(n)}async cancelRun(t){const n=await nt("/stream/cancel",{threadId:t});return ue(n)}async unshareThread(t,n){const r=await Xt(`/threads/${t}/share/${n}`);return ue(r)}}const Qt=new Cr;class Ar{async fetchFileBlob(t,n){return await ge(t,{responseType:"blob",onDownloadProgress:s=>{try{if(n&&s.lengthComputable){const o=s.loaded/s.total;n(o)}}catch{}},maxBodyLength:1/0})}async viewFileById(t,n){const r=await this.fetchFileBlob(`/files/${t}/view`,n),s=URL.createObjectURL(r);window.open(s,"_blank"),setTimeout(()=>URL.revokeObjectURL(s),6e4)}async getFileBlob(t,n){return await this.fetchFileBlob(`/files/${t}/view`,n)}async getFileContent(t,n){return await(await this.fetchFileBlob(`/files/${t}/view`,n)).text()}async downloadFileById(t,n){const r=await this.fetchFileBlob(`/files/${t}/download`,n),s=URL.createObjectURL(r);let o=`file_${t}`;try{const l=await ge(`/files/${t}`);o=(l==null?void 0:l.filename)??o}catch{}const a=document.createElement("a");a.href=s,a.download=o,document.body.appendChild(a),a.click(),a.remove(),setTimeout(()=>URL.revokeObjectURL(s),6e4)}async getFileInfo(t){return await ge(`/files/${t}`)}async listFiles(t,n=50,r=0){const s={limit:n,offset:r};return t&&(s.thread_id=t),await ge("/files",{params:s})}async uploadFile(t,n,r){const s=new FormData;return s.append("file",t),n&&s.append("thread_id",n),await nt("/files/upload-form",s,{onUploadProgress:o=>{try{if(r&&o.lengthComputable){const a=o.loaded/o.total;r(a)}}catch{}}})}}const Yt=new Ar;class xr{constructor(){An(this,"_authBaseUrl","")}get baseUrl(){return this._authBaseUrl}updateConfig(t){if(t.authBaseUrl)this._authBaseUrl=t.authBaseUrl;else if(t.baseUrl){const n=t.baseUrl.replace(/\/+$/,"");this._authBaseUrl=`${n}/auth`}t.apiKey!==void 0?_e(t.apiKey):t.getToken&&_e(t.getToken())}getAuthToken(){return St()}setAuthToken(t){_e(t)}onTokenChange(t){return Tt(t)}async listUsers(){const t=await ge("/users",{baseURL:this.baseUrl});return(t==null?void 0:t.users)??[]}}const Mr=new xr,Zt=i.createContext(null);function Er({children:e,apiConfig:t}){const n=Qt,r=Mr;if(t){const o=n.baseUrl,a=r.baseUrl,l=n.getAuthToken();(t.baseUrl||t.chatBaseUrl)&&(t.chatBaseUrl&&t.chatBaseUrl!==o||t.baseUrl&&!o.startsWith(t.baseUrl))&&n.updateConfig(t),(t.baseUrl||t.authBaseUrl)&&(t.authBaseUrl&&t.authBaseUrl!==a||t.baseUrl&&!a.startsWith(t.baseUrl))&&r.updateConfig(t),t.apiKey!==void 0&&t.apiKey!==l&&(n.updateConfig({apiKey:t.apiKey}),r.updateConfig({apiKey:t.apiKey}))}const s={token:n.getAuthToken(),setToken:o=>{n.setAuthToken(o),r.setAuthToken(o)},chatApi:n,authApi:r,fileApi:Yt,baseUrl:n.baseUrl};return J.jsx(Zt.Provider,{value:s,children:e})}async function Pr(e){return await new Promise((t,n)=>{const r=new FileReader;r.onload=()=>{try{const s=r.result,o=new Uint8Array(s);let a="";const l=o.byteLength;for(let d=0;d<l;d++)a+=String.fromCharCode(o[d]);t(btoa(a))}catch(s){n(s)}},r.onerror=s=>n(s),r.readAsArrayBuffer(e)})}async function _r(e=[]){const t=[],n=[];for(const r of e)try{const s=await Pr(r),o=r.type||"application/octet-stream";n.push({filename:r.name,data:s,mime_type:o}),o.startsWith("image/")?t.push({type:"image_url",image_url:{url:`data:${o};base64,${s}`}}):t.push({type:"file",url:`data:${o};base64,${s}`,mimeType:o,name:r.name,size:r.size})}catch{}return{contentParts:t,filesInfo:n}}function Rt(e){return e.filter(t=>t.type==="text").map(t=>t.text).join("")}function Nr(e){if(e==null)return null;const t=String(e).trim();return t.length>0?t:null}function en(e){const t=e.toolCallId??(e.role==="tool"?e.id:void 0);return e.role==="tool"&&!t&&console.error("[meta-utils] CRITICAL: Tool message missing toolCallId!",e),{toolCallId:t??void 0,name:e.name??void 0}}function Lr(e){var n,r;if(e.name&&e.name.trim())return e.name;const t=((n=e.additionalKwargs)==null?void 0:n.agentName)??((r=e.additionalKwargs)==null?void 0:r.agent_name);return typeof t=="string"&&t.trim()?t:e.model&&e.model.includes("/")?e.model.split("/").pop()||null:e.model||null}function jr(e){const t=e.updatedAt??e.createdAt??"",n=Array.isArray(e.content)?e.content.map(a=>{switch(a.type){case"text":return`t:${a.text.length}`;case"image_url":return"img";default:return a.type==="interrupt"?"interrupt":"unknown"}}).join("|"):"",r="checkpointId"in e&&e.checkpointId?`cp:${e.checkpointId}`:"",s="checkpointNs"in e&&e.checkpointNs?`ns:${e.checkpointNs}`:"",o=[r,s].filter(Boolean).join("|");return`${e.id}:${t}:${n}${o?`:${o}`:""}`}function Be(){const e=i.useContext(Zt);if(!e)throw new Error("useApi must be used within ApiProvider");return e}function Fr(e,t,n){const r=typeof t=="string"?[{type:"text",text:t}]:t;return{id:`msg-${Date.now()}-${Math.random().toString(36).slice(2,9)}`,role:e,content:r,createdAt:new Date().toISOString(),...n}}function tn(e,t="user"){return typeof e=="string"?Fr(t,e):e}function Je(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return{...e}}function rt(e,t){if(e)for(const n of t){const r=e[n];if(typeof r=="string"&&r.trim())return r.trim()}}function zr(e,t){if(!e)return null;for(const n of t){const r=e[n];if(typeof r=="number"&&Number.isFinite(r))return r}return null}function nn(e){const t=Je(e);if(t)return Je(t.configurable)??t}function Le(e){const r=[...(Array.isArray(e==null?void 0:e.checkpoints)?(e==null?void 0:e.checkpoints)??[]:e!=null&&e.checkpoints?Object.values(e.checkpoints):[]).map((o,a)=>Or(Pe(o),a)).filter(o=>!!o)].sort((o,a)=>rn(a.createdAt)-rn(o.createdAt)),s=r[0]??null;return{threadId:(e==null?void 0:e.threadId)??"",latest:s,checkpoints:r,interrupt:(s==null?void 0:s.interrupt)??null}}function Or(e,t){var A,y;if(!e)return null;const n=((A=e.values)==null?void 0:A.activeAgent)??null,r=(y=e.values)==null?void 0:y.messages,o=(Array.isArray(r)?r:[]).map(x=>Ur(x,n)).filter(x=>!!x),a=Je(e.metadata)??{},l=nn(e.config),d=Je(e.parentConfig),u=nn(d),c=rt(l,["checkpointId"]),h=rt(l,["checkpointNs"]),m=rt(u,["checkpointId"]),T=Je(e.config),k=Array.isArray(e.tasks)?e.tasks.map(x=>({...x})):e.tasks??null,v=Array.isArray(e.next)?[...e.next]:e.next??null,w=typeof e.createdAt=="string"&&e.createdAt.trim()?e.createdAt:new Date(Date.now()-t).toISOString(),I={...a,step:zr(a,["step"])??0,source:rt(a,["source"])??null},S=o.map(x=>({...x,checkpointId:x.checkpointId??c??null,checkpointNs:x.checkpointNs??h??null})),_=e.values,F=Array.isArray(e.interrupts)?e.interrupts:Array.isArray(_==null?void 0:_.interrupts)?_.interrupts:[];return{checkpointId:c??null,checkpointNs:h??null,createdAt:w,parentId:m??null,messages:S,interrupt:$r(F,t,c??null),metadata:I,config:T??null,parentConfig:d??null,next:v,tasks:k,values:e.values??{}}}function Ur(e,t){const n=et(e);return n?(n.role==="assistant"&&!n.name&&t&&(n.name=t),n):null}function $r(e,t,n){const r=e.length;for(let s=r-1;s>=0;s-=1){const o=e[s];if(!o||typeof o!="object")continue;const a=o,l=a.value??o;if(l==null)continue;return{id:typeof a.id=="string"&&a.id.trim()?a.id:`interrupt-${n??t}-${s}`,value:l}}return null}function rn(e){if(!e)return 0;const t=Date.parse(e);return Number.isFinite(t)?t:0}function Br(e){return!!e&&typeof e=="object"&&"data"in e}function sn(e={}){const t=e.baseUrl||"",n=e.streamPath??"/stream",[r,s]=i.useState(e.token??null),o=i.useRef(e.headers??{}),a=e.credentials??"include",l=i.useRef(e);i.useEffect(()=>{l.current=e},[e]);const d=i.useCallback(g=>{var E,K,O,ne,Q,se,de,te,oe,Y;const f=l.current;if(!f)return;if(g.type==="thread_info"){(E=f.onThreadInfo)==null||E.call(f,g);return}if(g.type==="state_history"){(K=f.handleStateHistoryEvent)==null||K.call(f,g);return}if(g.type==="metadata"){(O=f.onMetadataEvent)==null||O.call(f,g);return}if(typeof g.type=="string"&&(g.type==="custom"||g.type.startsWith("custom."))){(ne=f.onCustomEvent)==null||ne.call(f,g);return}(Q=f.onEvent)==null||Q.call(f,g),g.type==="updates"&&((se=f.onUpdateEvent)==null||se.call(f,g)),g.type==="tool.end"?(de=f.onToolEnd)==null||de.call(f,g):g.type==="tool.start"&&((te=f.onToolStart)==null||te.call(f,g)),g.type==="heartbeat"&&((oe=f.onHeartbeat)==null||oe.call(f,g)),g.type==="token"&&((Y=f.onToken)==null||Y.call(f,g.token))},[]),[u,c]=i.useState(!1),[h,m]=i.useState(null),[T,k]=i.useState(""),[v,w]=i.useState(null),[I,S]=i.useState(0),[_,F]=i.useState(!1),[A,y]=i.useState({}),[x,P]=i.useState(null),[$,B]=i.useState({}),D=i.useRef(null),N=i.useRef(!0),G=i.useRef(0),H=i.useRef(null),X=i.useRef(null),q=i.useRef(null),ee=i.useRef(null),M=i.useRef({messageId:null,lastSeq:null,lastText:""}),z=i.useCallback(g=>{s(g)},[]),V=i.useCallback(()=>{k(""),w(null),m(null),X.current=null,q.current=null,ee.current=null,y({}),P(null),B({}),M.current={messageId:null,lastSeq:null,lastText:""}},[]),b=i.useCallback(()=>{var E;console.debug("[use-chat] stop() invoked - aborting stream");const g=(E=H.current)==null?void 0:E.threadId,f=()=>{var K;(K=D.current)==null||K.abort(),D.current=null,H.current=null,c(!1),F(!1),G.current=0,S(0)};(g?Qt.cancelRun(g).catch(K=>{console.warn("[use-chat] cancel run failed:",K)}):Promise.resolve()).finally(f)},[]),p=i.useCallback(g=>{D.current&&(D.current.abort(),D.current=null);const f={text:typeof g.content=="string"?g.content:g.text,threadId:g.threadId,attachments:g.attachments,payload:g.payload,config:g.config,checkpointId:g.checkpointId,checkpointNs:g.checkpointNs||void 0,edit:g.edit,command:g.command};c(!0),m(null),k(""),w(null),X.current=null,q.current=null,ee.current=null,y({}),P(null),B({}),M.current={messageId:null,lastSeq:null,lastText:""};const L=new AbortController;D.current=L;let E=null,K=!1;return H.current={threadId:f.threadId??null,headers:{},isStreaming:!0},(async()=>{var O,ne,Q,se,de,te,oe,Y,Ne,Ye,ct;try{let le={};try{if(r)le={Authorization:`Bearer ${r}`};else if(typeof window<"u"){const me=window.__AUTH_TOKEN__,_t=((O=window.localStorage)==null?void 0:O.getItem(We.authToken))||null;let dt=null;try{const ft=(ne=window.localStorage)==null?void 0:ne.getItem(We.chatSettings);ft&&(dt=((Q=JSON.parse(ft))==null?void 0:Q.apiKey)||null)}catch{}const He=me||_t||dt||null;He&&(le={Authorization:`Bearer ${He}`})}}catch{}console.debug("[use-chat] POST",t+n);let we={};if(typeof window<"u")try{const ae=(se=window.localStorage)==null?void 0:se.getItem(We.authSessionId);ae&&(we={"X-Session-Id":ae})}catch{}const Ce={...le,...we,...o.current},Ke={"Content-Type":"application/json",Accept:"text/event-stream",...Ce},fe=await fetch(t+n,{method:"POST",headers:Ke,body:JSON.stringify(f),signal:L.signal,credentials:a});if(H.current&&(H.current.headers=Ce),!fe.ok||!fe.body){const ae=await fe.text().catch(()=>"");console.debug("[use-chat] non-OK response",fe.status,ae==null?void 0:ae.slice(0,500));const me=`stream ${fe.status}${ae?": "+ae:""}`;throw me&&(m(me),E="error"),new Error(me)}F(!0);const Ae=fe.body.getReader(),Et=new TextDecoder;let je="",ut=[];G.current=0,S(0);let Ze=0,Fe=null;const Pt=()=>{if(ut.length){const ae=ut.join("");ut=[],N.current&&k(me=>me+ae)}Fe=null},Ms=()=>{typeof window<"u"&&Fe==null&&(Fe=requestAnimationFrame(Pt))};let Sn=Date.now();const Es=setInterval(()=>{Date.now()-Sn>18e5&&(m("Stream idle timeout"),E="error",L.abort())},5e3),Ps=1024*1024;try{const me=(fe.headers.get("X-Thread-Id")||fe.headers.get("x-thread-id"))??null;for(H.current&&!H.current.threadId&&(H.current={...H.current,threadId:me});;){const{value:_t,done:dt}=await Ae.read();if(dt)break;je+=Et.decode(_t,{stream:!0}),je.length>Ps&&(je="",console.warn("Stream buffer reset: exceeded 1MB"));let He;for(;(He=je.indexOf(`
5
+
6
+ `))>=0;){const ft=je.slice(0,He);je=je.slice(He+2);const _s=ft.split(/\r?\n/),Tn=[];let Nt=null;for(const j of _s){if(j.startsWith(":")){j.startsWith(": heartbeat")&&console.debug("[use-chat] SSE heartbeat comment received");continue}if(j){if(j.startsWith("event:")){const Z=j.slice(6).trim();Z&&(Nt=Z);continue}if(j.startsWith("data:")){const Z=j.slice(5);Tn.push(Z.startsWith(" ")?Z.slice(1):Z)}}}const Lt=Tn.join(`
7
+ `);if(!Lt)continue;let xe;try{xe=JSON.parse(Lt)}catch{console.debug("[use-chat] malformed SSE:",Lt.slice(0,200));continue}Nt&&typeof xe=="object"&&xe!==null&&!("type"in xe)&&(xe.type=Nt);const Cn=Br(xe)?xe.data:xe;if(!Cn){console.warn("[use-chat] dropped envelope event without payload",xe);continue}const re=yr(Cn);Sn=Date.now();const ze=re.seq;if(ze!==void 0){if(ze<=Ze){console.debug("[use-chat] drop duplicate/out-of-order event",{seq:ze,lastProcessedSeq:Ze,type:re.type});continue}Ze>0&&ze>Ze+1,Ze=ze,G.current=ze,S(ze)}const Ns=["messages/partial","metadata","checkpoint","state_history","heartbeat","token","status","error","interrupt","tool.start","tool.progress","tool.end"];let ye=re.type||"unknown";if(Ns.includes(ye)||(re.messages||re.content!==void 0&&re.id)&&(ye="messages/partial"),ye==="checkpoint"){const j=re;X.current=j.checkpointId??null,q.current=j.checkpointNs??null,w(j.checkpointId??null)}else if(ye==="state_history"){ee.current=re;try{const Z=Le(re).latest;Z&&(X.current=Z.checkpointId??null,q.current=Z.checkpointNs??null,w(Z.checkpointId??null),B(Z.values??{})),y({}),P(null)}catch(j){console.warn("[use-chat] Failed to hydrate state_history payload",j)}}if(ye==="tool.start"||ye==="tool.progress"||ye==="tool.end"){const j=re,Z=j.id||j.callId;Z&&y(pe=>{let ke=x;if(!ke){const R=Object.values(pe).filter(ie=>ie.role==="assistant");R.length>0&&(ke=R[R.length-1].id)}if(ke&&pe[ke]){const R=pe[ke],ie=[...R.toolCalls||[]],ve=ie.findIndex(Oe=>Oe.id===Z);let he=j.content||j.status||"Processing...";return re.type==="tool.start"?he=`Starting ${j.name||j.tool||"tool"}...`:re.type==="tool.end"&&j.error&&(he=`Error: ${j.error}`),ve>=0?ie[ve]={...ie[ve],content:he,status:re.type==="tool.start"?"running":re.type==="tool.end"?j.error?"failed":"completed":ie[ve].status,artifact:j.artifact||ie[ve].artifact}:ie.push({id:Z,name:j.name||j.tool||"tool",args:j.args||{},status:re.type==="tool.end"?j.error?"failed":"completed":"running",content:he,artifact:j.artifact}),{...pe,[ke]:{...R,toolCalls:ie}}}return pe})}else if(ye==="messages/partial"){const j=re,Z=j.messages||[j];if(Array.isArray(Z)&&Z.length>0){const pe=Z.find(R=>R.type==="ai"),ke=Z.find(R=>R.type==="tool");if(pe){const R=pe.id,ie=pe.content??"";if(M.current.messageId!==R){const he=pe.name??pe.agentName??"assistant";M.current={messageId:R,lastSeq:null,lastText:""};const Oe=et({id:R,role:"assistant",name:he,model:he,createdAt:new Date().toISOString(),content:[{type:"text",text:ie}]});y(Ls=>({...Ls,[R]:Oe})),P(R)}else y(he=>{const Oe=he[R];return Oe?{...he,[R]:{...Oe,content:[{type:"text",text:ie}],responseMetadata:pe.responseMetadata??Oe.responseMetadata}}:he});const ve=M.current.lastText||"";if(ie.length>ve.length){const he=ie.slice(ve.length);M.current.lastText=ie,ut.push(he),Ms()}}if(ke){const R=ke.id||`tool-${Date.now()}`,ie=et({...ke,id:R,role:"tool",createdAt:new Date().toISOString()});y(ve=>({...ve,[R]:ie}))}}}else if(ye==="heartbeat"){console.debug("[use-chat] heartbeat received");try{}catch(j){console.warn("[use-chat] heartbeat callback failed",j)}}else if(Fe!==null&&cancelAnimationFrame(Fe),Pt(),ye==="checkpoint")w(re.checkpointId??null);else if(ye==="error"){const j=re;if(m(j.message),E="error",j.error_type==="auth_error"||j.code==="TOKEN_EXPIRED"||((de=j.message)==null?void 0:de.includes("token"))||((te=j.message)==null?void 0:te.includes("401"))||((oe=j.message)==null?void 0:oe.includes("unauthorized"))||((Y=j.message)==null?void 0:Y.includes("Unauthorized"))){console.error("[use-chat] Auth error detected:",j.message);try{(Ne=e.onAuthError)==null||Ne.call(e,j.message)}catch(pe){console.warn("[use-chat] onAuthError handler failed",pe)}L.abort()}}d(re)}}Pt(),E===null&&!L.signal.aborted&&(E="complete")}catch(ae){if(ae.name==="AbortError")E=E??"aborted";else{const me=ae.message||String(ae);E="error",m(me)}}finally{try{await Ae.cancel()}catch{}finally{(Ye=Ae.releaseLock)==null||Ye.call(Ae)}Fe!==null&&typeof window<"u"&&window.cancelAnimationFrame(Fe),clearInterval(Es)}}catch(le){if(le.name==="AbortError")E=E??"aborted";else{const we=le.message||String(le);E="error",m(we),K||(K=!0,(ct=e.onConnectionError)==null||ct.call(e,we))}}finally{const le=G.current,we=X.current,Ce=q.current,Ke=ee.current;try{if(e.onFinish){const fe={lastSeq:le,lastCheckpointId:we,lastCheckpointNs:Ce,lastStateHistory:Ke};e.onFinish(fe)}}catch(fe){console.warn("[use-chat] onClosed callback failed",fe)}c(!1),F(!1),D.current=null,G.current=0,S(0),H.current=null}})(),Promise.resolve()},[t,n,r,e]);return i.useEffect(()=>()=>{var g;N.current=!1,(g=D.current)==null||g.abort()},[]),{isStreaming:u,error:h,assistantText:T,activeMessageId:x,streamedMessages:A,lastCheckpointId:v,lastSeq:I,connected:_,stream:p,stop:b,clear:V,setToken:z,values:$,interrupt:()=>Promise.resolve(),resume:()=>Promise.resolve(),goto:()=>Promise.resolve(),connectionState:h?"error":u?_?"connected":"connecting":"idle",messages:[],submit:p}}const Dr=["detail","message","error","description","title"];function st(e){if(!e)return null;if(typeof e=="string"){const t=e.trim();return t.length?t:null}if(Array.isArray(e)){for(const t of e){const n=st(t);if(n)return n}return null}if(typeof e=="object"){const t=e;for(const n of Dr){const r=st(t[n]);if(r)return r}if("errors"in t){const n=st(t.errors);if(n)return n}}return null}function Kr(e){if(!e)return"Request failed";const t=e.response,n=st(t==null?void 0:t.data);if(n)return n;if(t!=null&&t.statusText)return t.statusText;if(e instanceof Error&&e.message)return e.message;if(typeof e=="string"){const r=e.trim();if(r.length)return r}return t!=null&&t.status?`Request failed with status code ${t.status}`:"Request failed"}function on({api:e,initialThreadId:t=null,onError:n,onThreadChange:r,onCurrentThreadDeleted:s}){const[o,a]=i.useState([]),[l,d]=i.useState(t),[u,c]=i.useState(!1),[h,m]=i.useState(null),[T,k]=i.useState([]),[v,w]=i.useState(!1),[,I]=i.useState(null),[S,_]=i.useState(null),[F,A]=i.useState(!1),y=i.useRef(l),x=i.useRef(new Map);i.useEffect(()=>{y.current=l},[l]),i.useEffect(()=>{t!==void 0&&t!==y.current&&d(t)},[t]);const P=i.useCallback(async()=>{c(!0),m(null);try{const M=await e.listThreads();a(M??[])}catch(M){const z=String(M);m(z),n==null||n(z)}finally{c(!1)}},[e,n]),$=i.useCallback(async()=>{w(!0),I(null);try{const M=await e.listSharedThreads();k(M??[])}catch(M){const z=String(M);I(z),n==null||n(z)}finally{w(!1)}},[e,n]);i.useEffect(()=>{P()},[P]),i.useEffect(()=>{$()},[$]),i.useEffect(()=>{r==null||r(l)},[l,r]);const B=i.useCallback(async(M,z)=>{try{const V=z&&typeof z=="object"?{id:z.id,name:z.name??""}:void 0,b=await e.createThread(M,V);return d(b.threadId),await P(),b.threadId}catch(V){const b=String(V);return n==null||n(b),null}},[e,n,P]),D=i.useCallback(async M=>{const z=o;a(b=>b.filter(p=>p.threadId!==M));const V=new AbortController;x.current.set(M,V);try{await e.deleteThread(M),y.current===M&&(d(null),s==null||s())}catch(b){a(z);const p=String(b);n==null||n(p)}finally{x.current.delete(M)}},[e,s,n,o]),N=i.useCallback(async(M,z)=>{try{await e.updateThread(M,z),await P()}catch(V){n==null||n(String(V))}},[e,n,P]),G=i.useCallback(async(M,z)=>{A(!0),_("Sharing thread…");try{await e.shareThread(M,z),await $(),_("Shared successfully")}catch(V){const b=Kr(V);throw n==null||n(b),_(`Failed to share: ${b}`),new Error(b)}finally{A(!1)}},[e,n,$]),H=i.useCallback(async(M,z)=>{try{await e.unshareThread(M,z),await $()}catch(V){const b=String(V);throw n==null||n(b),V}},[e,n,$]),X=i.useMemo(()=>({createThread:B,deleteThread:D,renameThread:N,refreshThreads:P,refreshSharedThreads:$,shareThread:G,unshareThread:H}),[B,D,N,P,$,G,H]),q=i.useCallback(M=>{if(!(M!=null&&M.threadId))return;const z={threadId:M.threadId,title:M.title||`Thread ${M.threadId.slice(0,8)}`,project:M.project,createdAt:M.createdAt||new Date().toISOString(),updatedAt:M.updatedAt||new Date().toISOString(),messageCount:M.messageCount??1};a(V=>{let b=!1;const p=V.map(g=>g.threadId===z.threadId?(b=!0,console.debug("[useThreadsState] thread_info: updating existing thread",z.threadId),{...g,title:z.title??g.title,project:z.project??g.project,updatedAt:z.updatedAt??g.updatedAt,messageCount:z.messageCount??g.messageCount}):g);return b?p:(console.debug("[useThreadsState] thread_info: adding thread to list",z.threadId),[z,...V])})},[]),ee=i.useCallback(()=>_(null),[]);return{threads:o,currentThreadId:l,currentThreadIdRef:y,setCurrentThreadId:d,isLoadingThreads:u,threadsError:h,sharedThreads:T,isLoadingSharedThreads:v,actions:X,addThreadFromEvent:q,shareInFlight:F,shareStatus:S,clearShareStatus:ee}}const an=i.createContext(null);function ln({children:e,initialThreadId:t=null,onError:n,onThreadChange:r}){const{chatApi:s}=Be(),{threads:o,currentThreadId:a,setCurrentThreadId:l,currentThreadIdRef:d,isLoadingThreads:u,threadsError:c,sharedThreads:h,isLoadingSharedThreads:m,actions:T,addThreadFromEvent:k,shareInFlight:v,shareStatus:w,clearShareStatus:I}=on({api:s,initialThreadId:t,onError:n,onThreadChange:r}),S=i.useMemo(()=>({threads:o,currentThreadId:a,setCurrentThreadId:l,currentThreadIdRef:d,isLoading:u,error:c,sharedThreads:h,isLoadingSharedThreads:m,actions:T,shareInFlight:v,shareStatus:w,clearShareStatus:I,addThreadFromEvent:k}),[o,a,l,d,u,c,h,m,T,v,w,I,k]);return J.jsx(an.Provider,{value:S,children:e})}function De(){const e=i.useContext(an);if(!e)throw new Error("useThreads must be used within a ThreadsProvider");return e}function cn(e){const t=e.artifact;return!t||typeof t!="object"?null:"metadata"in t&&t.metadata?t.metadata:{id:t.id??e.id??`artifact-${Date.now()}`,type:t.type??"unknown",createdAt:e.createdAt??new Date().toISOString(),status:t.status??"completed",progress:t.progress??void 0}}function Hr(e,t){const n=cn(e);if(!n)return e;const r={...n,...t,updatedAt:new Date().toISOString()};return{...e,artifact:{...typeof e.artifact=="object"&&e.artifact?e.artifact:{},metadata:r}}}function Vr(e,t,n){return e.find(r=>{const s=cn(r);return!!((s==null?void 0:s.id)===t||n&&r.toolCallId===n)})??null}function ot(e){return e.map(t=>et(t)).filter(t=>!!t)}function Xe(e,t,n){return t<0||t>=e.length?e:[...e.slice(0,t),n,...e.slice(t+1)]}function Gr(e,t,n){for(let r=e.length-1;r>=0;r--)if(e[r].role==="assistant"){const o={...e[r],checkpointId:t,checkpointNs:n??void 0};return Xe(e,r,o)}return e}function qr(e){const t=new Map,n=[];return e.slice().sort((r,s)=>{const o=r.createdAt?Date.parse(r.createdAt):0,a=s.createdAt?Date.parse(s.createdAt):0;return o-a}).forEach(r=>{const s=Array.isArray(r.messages)?r.messages:[];for(const o of s)!(o!=null&&o.id)||t.has(o.id)||(t.set(o.id,o),n.push(o))}),n}const Wr={messages:[],assemblingId:null,lastCheckpointId:null,lastCheckpointNs:null,messagesStreamMeta:{},pendingInterrupt:null,values:{}};function Jr(e,t){var n;switch(t.type){case"reset":return{messages:ot(((n=t.payload)==null?void 0:n.messages)??[]),assemblingId:null,lastCheckpointId:null,lastCheckpointNs:null,pendingInterrupt:null,messagesStreamMeta:{},values:{}};case"user_message":{const{message:r,editingMessageId:s}=t.payload;if(s){const o=e.messages.findIndex(a=>a.id===s);if(o>=0){const a=e.messages.slice(0,o);return{...e,messages:[...a,r],assemblingId:null}}}return{...e,messages:[...e.messages,r],assemblingId:null}}case"seed":{const r=ot(t.payload.messages),s={...e,messages:r,assemblingId:null,pendingInterrupt:t.payload.pendingInterrupt??null};return Object.prototype.hasOwnProperty.call(t.payload,"checkpointId")&&(s.lastCheckpointId=t.payload.checkpointId??null),Object.prototype.hasOwnProperty.call(t.payload,"checkpointNs")&&(s.lastCheckpointNs=t.payload.checkpointNs??null),Object.prototype.hasOwnProperty.call(t.payload,"values")&&(s.values=t.payload.values??{}),s}case"prepend":{const r=ot(t.payload.messages);if(!r.length)return e;const s=new Set(e.messages.map(l=>l.id)),o=r.filter(l=>!s.has(l.id));if(!o.length)return e;const a=[...o,...e.messages];return{...e,messages:a}}case"event":return un(e,t.payload.ev);case"batch":{const{events:r}=t.payload;return r.length?r.reduce((s,o)=>un(s,o),e):e}default:return e}}function Xr(e=[]){const[t,n]=i.useReducer(Jr,{...Wr,messages:e}),r=i.useRef([]),s=i.useRef(null),o=i.useRef(null),a=i.useCallback(()=>{s.current!==null&&typeof window<"u"&&window.cancelAnimationFrame(s.current),o.current!==null&&clearTimeout(o.current),s.current=null,o.current=null;const c=r.current;c.length&&(r.current=[],n({type:"batch",payload:{events:c}}))},[]),l=i.useCallback(()=>{typeof window<"u"&&typeof window.requestAnimationFrame=="function"?s.current===null&&(s.current=window.requestAnimationFrame(()=>a())):o.current===null&&(o.current=setTimeout(a,8))},[a]),d=i.useCallback(c=>{r.current.push(c),l()},[l]);i.useEffect(()=>()=>{s.current!==null&&typeof window<"u"&&window.cancelAnimationFrame(s.current),o.current!==null&&clearTimeout(o.current),r.current=[]},[]);const u=i.useMemo(()=>({reset:c=>n({type:"reset",payload:{messages:c}}),seed:(c,h)=>n({type:"seed",payload:{messages:c,...h??{}}}),prepend:c=>n({type:"prepend",payload:{messages:c}}),pushUser:(c,h)=>n({type:"user_message",payload:{message:c,editingMessageId:h}}),onEvent:d}),[d]);return{state:t,dispatch:n,...u}}function un(e,t){if(t.type==="tool.start")return Yr(e,t);if(t.type==="tool.progress")return Zr(e,t);if(t.type==="tool.end")return Rr(e,t);if(t.type==="artifact.update")return es(e,t);if(t.type==="checkpoint"){const n=t.checkpointNs??e.lastCheckpointNs??null,r=Gr(e.messages,t.checkpointId,n);return{...e,lastCheckpointId:t.checkpointId,lastCheckpointNs:n,messages:r}}if(t.type==="error"){const n={id:`err-${Date.now()}`,role:"system",content:[{type:"text",text:`Error: ${t.message}`}],createdAt:new Date().toISOString()};return{...e,messages:[...e.messages,n]}}if(t.type==="state_history"){const n=Le(t),r=n.interrupt,s=n.latest,o=qr(n.checkpoints);let a=o.length?o:(s==null?void 0:s.messages)??[];if(a){if(e.assemblingId&&!a.some(l=>l.id===e.assemblingId)){const l=e.messages.find(d=>d.id===e.assemblingId);l&&(a=[...a,l])}a=ot(a)}else a=[];return{...e,messages:a,pendingInterrupt:r,lastCheckpointId:(s==null?void 0:s.checkpointId)??e.lastCheckpointId,lastCheckpointNs:(s==null?void 0:s.checkpointNs)??e.lastCheckpointNs,values:(s==null?void 0:s.values)??e.values}}return t.type==="thread_info",e}function dn(e){return e.id??void 0}function at(e,t){var n;if(!t)return-1;for(let r=e.length-1;r>=0;r--){const s=e[r];if(s.role==="assistant"&&((n=s.toolCalls)!=null&&n.some(o=>o.id===t)))return r}return-1}function Qr(e,t,n){const r=at(e,t);if(r===-1)return e;const s=e[r],o=(s.toolCalls??[]).map(a=>a.id===t?{...a,...n}:a);return Xe(e,r,{...s,toolCalls:o})}function Yr(e,t){const n=t,r=n.id||n.callId,s=n.name??void 0,o=`Starting ${s??"tool"}...`;let a=e.messages;if(r){let l=at(a,r);if(l===-1){for(let d=a.length-1;d>=0;d--)if(a[d].role==="assistant"){l=d;break}}if(l!==-1){const d=a[l],u=[...d.toolCalls??[]],c=u.findIndex(h=>h.id===r);c>=0?u[c]={...u[c],status:"running",content:o}:u.push({id:r,name:s||"tool",args:n.args||{},status:"running",content:o}),a=Xe(a,l,{...d,toolCalls:u})}else{const d=n.agentName??"assistant",u={id:`ai-${Date.now()}`,role:"assistant",name:d,content:[],toolCalls:[{id:r,name:s||"tool",args:n.args||{},status:"running",content:o}],createdAt:new Date().toISOString()};a=[...a,u]}}return{...e,messages:a}}function Zr(e,t){const n=t.id??dn(t);if(!n)return e;const r=t.content??void 0;let s=e.messages;const o=at(s,n);if(o!==-1){const a=s[o],l=r??null,d=typeof l=="string"?l:JSON.stringify(l),u=be(l),c=typeof u=="string"?u:d,h=(a.toolCalls??[]).map(m=>m.id===n?{...m,content:c}:m);s=Xe(s,o,{...a,toolCalls:h})}return{...e,messages:s}}function Rr(e,t){const n=dn(t);let r=e.messages;const s=t.content??t.error??null,o=typeof s=="string"?s:JSON.stringify(s),a=be(s),l=typeof a=="string"?a:o;n&&at(r,n)!==-1&&(r=Qr(r,n,{status:"completed",content:l,artifact:t.artifact}));const d={id:`tool-${n||Date.now()}`,role:"tool",name:t.name??void 0,content:[{type:"text",text:l}],artifact:t.artifact,toolCallId:n??void 0,createdAt:new Date().toISOString()};return{...e,messages:[...r,d]}}function es(e,t){const n=t.artifactId,r=t.callId,s=Vr(e.messages,n,r);if(!s){const l={id:`artifact-${n}`,role:"tool",name:"artifact_updater",content:[],createdAt:new Date().toISOString(),artifact:{type:"unknown",metadata:{id:n,type:"unknown",createdAt:new Date().toISOString(),status:t.status,progress:t.progress},...t.partial_data}};return{...e,messages:[...e.messages,l]}}const o=e.messages.indexOf(s),a=Hr(s,{status:t.status,progress:t.progress,error:t.error});return t.partial_data&&a.artifact&&(a.artifact={...a.artifact,...t.partial_data}),{...e,messages:Xe(e.messages,o,a)}}const fn=120;function ts(e){if(!Array.isArray(e))return"";const t=e.filter(r=>!!(r&&r.type==="text")).map(r=>(r.text??"").trim()).filter(Boolean);if(!t.length)return"";const n=t.join(" ").replace(/\s+/g," ").trim();return n?n.length>fn?`${n.slice(0,fn-3)}…`:n:""}function ns(e){return ts(e.content)||""}function rs(e){const t=new Map,n=[],r=new Map,s=[];for(let u=0;u<e.length;u++){const c=e[u],h=c.checkpointId,m=h??`cp-${u}`,T=c.metadata??{},k=typeof T.step=="number"?T.step:null,v=typeof T.source=="string"?T.source:null;let w=null,I=null;const S=Array.isArray(c.messages)?c.messages:[];for(const y of S)y.role==="user"&&(I||(I=y),y.id&&(w=y.id));const _=c.next&&c.next.length>0?String(c.next[0]):null,F=c.parentConfig??null,A={id:m,step:k,source:v,createdAt:c.createdAt??null,namespace:c.checkpointNs??null,parentId:c.parentId??null,next:_,parentConfig:F,userMessageId:w};if(s.push(A),h&&t.set(h,A),h&&I){const y=ns(I);y&&r.set(h,y)}n.push({id:m,messageId:w,step:k,source:v,createdAt:c.createdAt??null,next:_,parentConfig:F})}const o=new Map;for(const u of s){if(!u.userMessageId)continue;const c=o.get(u.userMessageId)??[];c.push(u),o.set(u.userMessageId,c)}for(const u of o.values()){if(!u.length)continue;u.sort((h,m)=>{const T=h.createdAt?Date.parse(h.createdAt):0;return(m.createdAt?Date.parse(m.createdAt):0)-T});const c=u.length;for(let h=0;h<u.length;h++){const m=u[h];m.attemptCount=c,m.attemptIndex=h,m.isLatestAttempt=h===0}}return{checkpoints:e,checkpointMetaByCheckpointId:t,timeline:n,messagePreviews:r,getLatest:()=>{const u=n[0];if(u)return t.get(u.id)},getCheckpoint:u=>t.get(u),getMessageAttempts:u=>{const c=[];for(const h of t.values())h.userMessageId===u&&c.push(h);return c.length?(c.sort((h,m)=>{const T=typeof h.attemptIndex=="number"?h.attemptIndex:Number.MAX_SAFE_INTEGER,k=typeof m.attemptIndex=="number"?m.attemptIndex:Number.MAX_SAFE_INTEGER;return T-k}),c):[]}}}function ss(e,t,n){if(!e)return{attemptCount:1,attemptIndex:0,attempts:[]};const r=n.getMessageAttempts(e);if(!r.length)return{attemptCount:1,attemptIndex:0,attempts:[]};let s=0;if(t){const o=r.findIndex(a=>a.id===t);o>=0&&(s=o)}return{attemptCount:r.length,attemptIndex:s,attempts:r}}function os(e){return i.useMemo(()=>rs(e),[e])}function Ct({api:e,seed:t,onError:n,currentThreadId:r,initialThreadId:s=null,initialCheckpointId:o=null,initialCheckpointNs:a=null,autoLoadInitial:l=!0,isStreaming:d,getMessages:u}){const[c,h]=i.useState(null),T=i.useMemo(()=>Le(c),[c]).checkpoints,k=os(T),v=k.timeline,[w,I]=i.useState(!1),[S,_]=i.useState(!1),[F,A]=i.useState(null),y=i.useRef(r),x=i.useRef(null),P=i.useRef(null),$=i.useRef(null),B=i.useRef(null),D=i.useRef(null),N=i.useRef(new Map),G=i.useRef(null);i.useEffect(()=>{y.current=r},[r]);const H=i.useCallback(async f=>{var E,K;if(!f.threadId)return;const L=f.threadId;(E=f.onStart)==null||E.call(f),f.setLoading(!0);try{await f.action(L)}catch(O){if(!pt.isCancel(O)&&y.current===L){const Q=String(O);(K=f.handleError)==null||K.call(f,Q),n==null||n(Q)}throw O}finally{f.setLoading(!1)}},[n]),X=i.useCallback(async(f,L)=>{var Q;if(!f)return;const E=`${f}:${L??"latest"}`,K=N.current.get(E);if(K)return K;(Q=G.current)==null||Q.abort();const O=new AbortController;G.current=O;const ne=H({threadId:f,setLoading:I,onStart:()=>A(null),handleError:se=>A(se),action:async se=>{const de=await e.getStateHistory({threadId:se,checkpointId:L??void 0,signal:O.signal});if(y.current!==se){console.log(`[useThreadHistoryState] Thread changed during load (was ${se}, now ${y.current}), discarding stale data`);return}const{checkpoints:te,latest:oe}=Le(de),Y=L?te.find(Ne=>Ne.checkpointId===L)??oe:oe;t((Y==null?void 0:Y.messages)??[],{checkpointId:(Y==null?void 0:Y.checkpointId)??null,checkpointNs:(Y==null?void 0:Y.checkpointNs)??null,pendingInterrupt:(Y==null?void 0:Y.interrupt)??null}),h(de)}});N.current.set(E,ne);try{await ne}finally{N.current.delete(E),G.current===O&&(G.current=null)}return y.current===f&&(D.current=E),ne},[e,t,H]),q=i.useCallback(async(f,L)=>{B.current=f;try{await X(f,L)}catch(E){if(!pt.isCancel(E))throw E}finally{B.current===f&&(B.current=null)}},[X]),ee=i.useCallback(f=>{P.current=f},[]),M=i.useCallback(f=>{$.current=f},[]),z=i.useCallback(f=>{const L=f.threadId??y.current;if(!L||y.current&&y.current!==L&&$.current!==L)return;const{checkpoints:E,latest:K}=Le(f);if(!E.length)return;const O=K;t((O==null?void 0:O.messages)??[],{checkpointId:(O==null?void 0:O.checkpointId)??null,checkpointNs:(O==null?void 0:O.checkpointNs)??null,pendingInterrupt:(O==null?void 0:O.interrupt)??null,values:O==null?void 0:O.values}),h(f),D.current=`${L}:latest`,P.current=null,$.current===L&&($.current=null)},[t,d]),V=i.useCallback(async(f,L)=>{const E=y.current;await H({threadId:E,setLoading:_,action:async K=>{const O=await e.getStateHistory({threadId:K,checkpointId:f,checkpointNs:L??void 0});if(y.current!==K)return;const{checkpoints:ne}=Le(O),Q=ne.find(se=>se.checkpointId===f&&(L?se.checkpointNs===L:!0));if(!Q){console.warn("[useThreadHistoryState] Requested checkpoint not found:",{checkpointId:f,checkpointNs:L});return}h(O),t(Q.messages??[],{checkpointId:Q.checkpointId??null,checkpointNs:Q.checkpointNs??null})}}).catch(()=>{})},[e,t,H]),b=i.useCallback((f,L)=>{t(u(),{checkpointId:f??null,checkpointNs:L??null})},[u,t]),p=i.useCallback(async()=>{y.current&&await q(y.current)},[q]);i.useEffect(()=>{if(!l||!r||w||d)return;if(P.current===r){P.current=null,x.current=r;return}if($.current===r){x.current=r;return}if(B.current===r){B.current=null,x.current=r;return}if(x.current===r)return;x.current=r;let f;const L=`${r}:latest`;D.current!==L&&q(r,f)},[l,r,o,a,s,w,d,q]);const g=i.useCallback(()=>{h(null),I(!1),_(!1),A(null),P.current=null,$.current=null,x.current=null,D.current=null,B.current=null},[]);return{threadCheckpoints:T,threadTimeline:v,checkpointIndex:k,isLoadingThread:w,isLoadingCheckpoint:S,threadStateError:F,loadThread:q,navigateToCheckpoint:V,setCurrentCheckpointId:b,returnToLatest:p,handleStateHistoryEvent:z,markSkipNextLoad:ee,markStreamPendingThread:M,resetHistoryState:g,clearState:g}}const pn=i.createContext(null),gn=i.createContext(null);function At(e){const t=i.useContext(pn);if(!t&&!(e!=null&&e.optional))throw new Error("useThreadState must be used within a ThreadStateProvider");return t}function hn(){const e=i.useContext(gn);if(!e)throw new Error("useThreadStateUpdater must be used within a ThreadStateProvider");return e}function mn({children:e,initialThreadId:t=null,initialCheckpointId:n=null,initialCheckpointNs:r=null,autoLoadInitial:s=!0,isStreaming:o,onError:a}){const{chatApi:l}=Be(),{currentThreadId:d}=De(),{state:u,seed:c,onEvent:h,dispatch:m}=Xr(),{threadCheckpoints:T,threadTimeline:k,checkpointIndex:v,isLoadingThread:w,isLoadingCheckpoint:I,threadStateError:S,loadThread:_,navigateToCheckpoint:F,setCurrentCheckpointId:A,returnToLatest:y,handleStateHistoryEvent:x,markSkipNextLoad:P,markStreamPendingThread:$,resetHistoryState:B}=Ct({api:l,seed:c,onError:a,currentThreadId:d,initialThreadId:t,initialCheckpointId:n,initialCheckpointNs:r,autoLoadInitial:s,isStreaming:o,getMessages:i.useCallback(()=>u.messages,[u.messages])});i.useEffect(()=>{d||(c([],{}),B())},[d,c,B]);const D=i.useRef(null),N=i.useCallback(b=>{D.current=b},[]),G=i.useRef(null),H=i.useCallback(b=>{G.current=b},[]),X=i.useMemo(()=>({assemblingMessageId:u.assemblingId??null}),[u.assemblingId]),q=i.useCallback((b,p)=>{const g=tn(b,"user");return m({type:"user_message",payload:{message:g,editingMessageId:p==null?void 0:p.editingMessageId}}),g},[m]),ee=i.useCallback(async()=>{D.current?await D.current():(c([],{}),B())},[c,B]),M=i.useMemo(()=>pr(u.messages),[u.messages]),z=i.useMemo(()=>({threadId:d,messages:u.messages,interrupt:u.pendingInterrupt,checkpoint:{id:u.lastCheckpointId??null,namespace:u.lastCheckpointNs??null},checkpoints:T,checkpointIndex:v,timelineCheckpoints:k,metadata:X,values:u.values??{},isLoading:w,isLoadingCheckpoint:I,error:S,loadOlder:async()=>{},seedFromSnapshot:b=>{c(b.messages,{checkpointId:b.checkpointId,checkpointNs:b.checkpointNs,pendingInterrupt:b.interrupt})},clearState:ee,navigateToCheckpoint:F,setCurrentCheckpointId:A,returnToLatest:y,loadThread:async(b,p,g)=>{await _(b,p,{clearProgress:!1})},clearThread:ee,respondToInterrupt:async(b,p,g)=>{G.current&&await G.current(b,p,g)},messagePreviews:v.messagePreviews,handleStateHistoryEvent:x,markSkipNextLoad:P,markStreamPendingThread:$,resetHistoryState:B,pushUser:q,onEvent:h,artifacts:M}),[d,u.messages,u.pendingInterrupt,u.lastCheckpointId,u.lastCheckpointNs,u.values,T,k,v,X,w,I,S,c,ee,F,A,y,_,x,P,$,q,h,M]),V=i.useMemo(()=>({registerClearThread:N,registerRespondToInterrupt:H}),[N,H]);return J.jsx(gn.Provider,{value:V,children:J.jsx(pn.Provider,{value:z,children:e})})}const yn=i.createContext(null),as=i.createContext(!1);function is({children:e,onError:t,onAuthError:n,onConnectionError:r,onToolEnd:s,onUpdateEvent:o,onCustomEvent:a,onMetadataEvent:l,onFinish:d,onStreamingChange:u}){const{chatApi:c,baseUrl:h}=Be(),m=h,T=Se(t),k=Se(n),v=Se(r),w=Se(s),I=Se(o),S=Se(a),_=Se(l),F=Se(d),A=Se(u),y=i.useMemo(()=>({onError:T,onAuthError:k,onConnectionError:v,onMetadataEvent:_,onCustomEvent:S,onUpdateEvent:I,onToolEnd:w,onFinish:F}),[T,k,v,_,S,I,w,F]);return J.jsx(as.Provider,{value:!0,children:J.jsx(ls,{api:c,streamBaseUrl:m,handlers:y,onStreamingChange:A,children:e})})}function ls({children:e,api:t,streamBaseUrl:n,handlers:r,onStreamingChange:s}){const{setCurrentThreadId:o,currentThreadIdRef:a,addThreadFromEvent:l,currentThreadId:d}=De(),{interrupt:u,checkpoint:c,timelineCheckpoints:h,handleStateHistoryEvent:m,markSkipNextLoad:T,markStreamPendingThread:k,resetHistoryState:v,pushUser:w,onEvent:I,messages:S}=At(),{registerClearThread:_,registerRespondToInterrupt:F}=hn(),A=i.useCallback(p=>{l(p),k(p.threadId),a.current!==p.threadId&&((p.created??!a.current)&&T(p.threadId),o(p.threadId))},[l,T,k,o,a]),y=sn({baseUrl:n,onEvent:I,onError:p=>{var g;(g=r.onError)==null||g.call(r,(p==null?void 0:p.message)??String(p))},onAuthError:r.onAuthError,onConnectionError:r.onConnectionError,onFinish:r.onFinish,onThreadInfo:A,onMetadataEvent:r.onMetadataEvent,onCustomEvent:r.onCustomEvent,onUpdateEvent:r.onUpdateEvent,onToolEnd:r.onToolEnd,handleStateHistoryEvent:m});i.useEffect(()=>{s==null||s(y.isStreaming)},[y.isStreaming,s]);const{stream:x,stop:P,clear:$,isStreaming:B,error:D,connected:N,streamedMessages:G,activeMessageId:H}=y;i.useEffect(()=>{d!==void 0&&$()},[d,$]);const X=i.useCallback(async(p,g)=>{await x(p,g)},[x]),q=i.useRef(c);i.useEffect(()=>{q.current=c},[c]);const ee=i.useCallback(async(p,g,f)=>{const L=a.current;if(!L)throw new Error("No active thread to handle interrupt");const E=p?g??!0:!1,K=q.current,O={threadId:L,checkpointId:K.id??void 0,checkpointNs:K.namespace??void 0,command:{kind:"resume",value:E},payload:f==null?void 0:f.payload};X(O)},[a,X]);i.useEffect(()=>{F(ee)},[ee,F]);const M=i.useCallback(async()=>{P(),$(),v(),o(null)},[$,v,o,P]);i.useEffect(()=>{_(M)},[M,_]);const z=i.useCallback(async(p,g)=>{B&&P();let f=a.current;const L=(p==null?void 0:p.text)??"",E=(p==null?void 0:p.attachments)??[],K=(L==null?void 0:L.trim())??"",O={...(p==null?void 0:p.payload)??{}},ne=Array.isArray(O.messages)?O.messages:void 0;ne&&delete O.messages;const Q=!!(ne&&ne.length),se=!!(p.contentParts&&p.contentParts.length>0);if(!f&&!K&&E.length===0&&!Q&&!se)return;if(!f){const Ae=Math.floor(Date.now()/1e3).toString(16).padStart(8,"0"),Et=Array.from({length:4},()=>Math.floor(Math.random()*4294967295).toString(16).padStart(8,"0")).join("").slice(0,16);f=`${Ae}${Et}`,T(f),o(f)}let de=null;p.contentParts&&p.contentParts.length>0&&(de=p.contentParts);const{contentParts:te,filesInfo:oe}=de?{contentParts:de,filesInfo:[]}:await _r(E),Y=[...te];K&&Y.push({type:"text",text:L});const Ne=p==null?void 0:p.originalMessageId,Ye=!!(p!=null&&p.edit&&Ne),ct=!Q&&Y.length>0;let le=null;if(ct){const Ae=Ye?Ne:`msg-${Date.now()}`;le=tn({id:Ae,role:"user",content:Y,createdAt:new Date().toISOString()},"user"),Ye?w(le,{editingMessageId:Ne}):w(le)}const we=Q?ne:le?[le]:[],Ce={...O,...oe.length?{files_info:oe}:{}};we.length?Ce.messages=we:"messages"in Ce||(Ce.messages=[]);const Ke=(p==null?void 0:p.checkpointId)??c.id??void 0;if(p!=null&&p.edit&&!Ke)throw new Error(`[streaming] Missing checkpointId for edit submit. threadId=${f??"null"}`);const fe={threadId:f,content:p==null?void 0:p.text,payload:Ce,config:p==null?void 0:p.config,checkpointId:Ke,command:p==null?void 0:p.command,edit:p==null?void 0:p.edit};return X(fe,g)},[c,a,B,T,w,X,P,h]),V=i.useMemo(()=>{const p=Object.keys(G).length>0;if(!B&&!p)return S;const g=new Map;return S.forEach(f=>g.set(f.id,f)),Object.values(G).forEach(f=>{g.set(f.id,f)}),Array.from(g.values())},[B,G,S]),b=i.useMemo(()=>({isStreaming:B,error:D,connectionState:D?"error":B?N?"connected":"connecting":"idle",messages:V,activeMessageId:H,submit:z,stop:P,interrupt:u,resume:()=>Promise.resolve(),goto:(p,g)=>Promise.resolve(),clearError:()=>{}}),[B,D,z,P,u,N,V]);return J.jsx(yn.Provider,{value:b,children:e})}function Se(e){const t=i.useRef(e);return i.useEffect(()=>{t.current=e},[e]),i.useCallback((...n)=>{const r=t.current;if(r)return r(...n)},[])}function cs(){const e=i.useContext(yn);if(!e)throw new Error("useStream must be used within StreamingProvider");return e}function bn(e){return typeof e=="object"&&e!==null}function us(e,t){if(Object.is(e,t))return!0;if(!bn(e)||!bn(t))return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(const s of n)if(!Object.prototype.hasOwnProperty.call(t,s)||!Object.is(e[s],t[s]))return!1;return!0}function ds(e){const t=i.useRef(e),n=i.useRef(e);return us(t.current,e)||(t.current=e,n.current=e),n.current}function wn(e){const t=e.artifact&&typeof e.artifact=="object"?e.artifact:null,n=!t&&e.content&&typeof e.content=="object"?e.content:null,r=t??n,s=(r==null?void 0:r.task_id)??(r==null?void 0:r.taskId)??null;return typeof s=="string"?s:null}function fs(e){const{setCurrentTaskId:t,getCurrentTaskId:n,onToolEnd:r}=e;return s=>{const o=wn(s),a=(n==null?void 0:n())??null;o&&o!==a&&t(o),r==null||r(s)}}function ps({children:e,apiConfig:t,initialThreadId:n=null,initialCheckpointId:r=null,initialCheckpointNs:s=null,autoLoadInitial:o=!0,onConnectionError:a,onError:l,onAuthError:d,onThreadChange:u,onToolEnd:c,onUpdateEvent:h,onCustomEvent:m,onMetadataEvent:T,onFinish:k}){const v=ds(t),[w,I]=i.useState(!1),S=Te(l),_=Te(d),F=Te(a),A=Te(u),y=Te(c),x=Te(h),P=Te(m),$=Te(T),B=Te(k),D=i.useMemo(()=>({onError:S,onAuthError:_,onConnectionError:F,onToolEnd:y,onUpdateEvent:x,onCustomEvent:P,onMetadataEvent:$,onFinish:B}),[S,_,F,y,x,P,$,B]);return J.jsx(Er,{apiConfig:v,children:J.jsx(ln,{initialThreadId:n,onError:S,onThreadChange:A,children:J.jsx(mn,{initialThreadId:n,initialCheckpointId:r,initialCheckpointNs:s,autoLoadInitial:o,onError:S,isStreaming:w,children:J.jsx(is,{...D,onStreamingChange:I,children:e})})})})}function Te(e){const t=i.useRef(e);return t.current=e,i.useCallback((...n)=>{const r=t.current;if(r)return r(...n)},[])}const gs=1,hs=1e6;let xt=0;function ms(){return xt=(xt+1)%Number.MAX_SAFE_INTEGER,xt.toString()}const Mt=new Map,kn=e=>{if(Mt.has(e))return;const t=setTimeout(()=>{Mt.delete(e),Qe({type:"REMOVE_TOAST",toastId:e})},hs);Mt.set(e,t)},ys=(e,t)=>{switch(t.type){case"ADD_TOAST":return{...e,toasts:[t.toast,...e.toasts].slice(0,gs)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(n=>n.id===t.toast.id?{...n,...t.toast}:n)};case"DISMISS_TOAST":{const{toastId:n}=t;return n?kn(n):e.toasts.forEach(r=>{kn(r.id)}),{...e,toasts:e.toasts.map(r=>r.id===n||n===void 0?{...r,open:!1}:r)}}case"REMOVE_TOAST":return t.toastId===void 0?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(n=>n.id!==t.toastId)}}},it=[];let lt={toasts:[]};function Qe(e){lt=ys(lt,e),it.forEach(t=>{t(lt)})}function bs({...e}){const t=ms(),n=s=>Qe({type:"UPDATE_TOAST",toast:{...s,id:t}}),r=()=>Qe({type:"DISMISS_TOAST",toastId:t});return Qe({type:"ADD_TOAST",toast:{...e,id:t,open:!0,onOpenChange:s=>{s||r()}}}),{id:t,dismiss:r,update:n}}function ws(){const[e,t]=jt.useState(lt);return jt.useEffect(()=>(it.push(t),()=>{const n=it.indexOf(t);n>-1&&it.splice(n,1)}),[e]),{...e,toast:bs,dismiss:n=>Qe({type:"DISMISS_TOAST",toastId:n})}}function ks(e){const{allowFileOpen:t,currentThreadId:n}=e,{fileApi:r}=Be(),{toast:s}=ws(),[o,a]=i.useState({}),[l,d]=i.useState(null),[u,c]=i.useState(!1),h=i.useCallback(()=>{c(!1),d(null)},[]),m=i.useCallback(k=>{d(k),c(!0)},[]),T=i.useCallback(async(k,v,w)=>{var I,S;if(!t){k.preventDefault();return}if(o[w]){k.preventDefault();return}try{const _=String(v.url??""),F=_.match(/\/chat\/files\/([^/]+)(?:\/(view|download))?/);if(F){k.preventDefault();const A=F[1],y=v.name||`file_${A}`,x=v.mimeType||"application/octet-stream";m({id:A,name:y,mimeType:x});return}if(_.startsWith("data:")){k.preventDefault(),a(y=>({...y,[w]:!0}));const A=s({title:"Fetching file...",description:"",open:!0});try{const y=await r.listFiles(n??void 0);if(!y||!Array.isArray(y))throw new Error("Invalid file list response");const x=y.find(P=>!P||typeof P!="object"||!((P.filename??"")===(v.name??""))?!1:typeof v.size=="number"&&typeof P.size=="number"?P.size===v.size:!0);if(!(x!=null&&x.id))throw new Error(`File "${v.name}" is not yet available on the server`);if(!x.id||!x.filename)throw new Error("Invalid file data received from server");m({id:x.id,name:v.name||x.filename||`file_${x.id}`,mimeType:v.mimeType||x.mime_type||"application/octet-stream"}),(I=A.update)==null||I.call(A,{id:A.id,title:"Success",description:`Opened ${v.name}`,open:!0})}catch(y){console.error("Failed to fetch server file:",y);const x=y instanceof Error?y.message:"Unknown error occurred";(S=A.update)==null||S.call(A,{id:A.id,title:"Failed",description:x}),s({title:"Failed to fetch file",description:x,open:!0})}finally{a(y=>({...y,[w]:!1}))}}}catch(_){console.error("File click error:",_),a(F=>({...F,[w]:!1}))}},[t,o,s,n,m]);return{uploadingFiles:o,handleFileClick:T,fileViewerOpen:u,currentFileInfo:l,closeFileViewer:h}}function vs(e){return i.useMemo(()=>{const t=e;let n=Array.isArray(t.content)?t.content:[];return typeof t.content=="string"&&(n=[{type:"text",text:t.content}]),{contentParts:n,textContent:Rt(n),toolMeta:en(t),imageParts:n.filter(r=>r.type==="image_url"),fileParts:n.filter(r=>r.type==="file"),toolRaw:Gt(n),isToolStreaming:!!t.toolStreaming}},[e])}const vn="data:";function Is(e){if(!e)return[];const t=[],n=e.split(/\r?\n/);for(const r of n){const s=r.trim();if(!s||!s.startsWith(vn))continue;const o=s.slice(vn.length).trim();if(!o||o.toLowerCase()==="[done]")continue;const a=Re(o);a&&typeof a=="object"&&t.push(a)}return t}function Ss(e){for(let t=e.length-1;t>=0;t-=1){const n=e[t];if(n&&typeof n=="object"&&n.type==="tool.end")return n}return null}function Ts(e){return i.useMemo(()=>{const t=e.content.filter(d=>d.type==="text");if(!t.length)return null;let r=t.flatMap(d=>Is(d.text??""));if(!r.length){const d=t.map(c=>c.text??"").join(`
8
+ `),u=Re(d);u&&typeof u=="object"&&(r=[u])}if(!r.length)return null;const o=Ss(r)??r[r.length-1];if(!o)return null;const a=o.output??o.payload??o,l=be(a);return l&&typeof l=="object"&&!Array.isArray(l)?{kind:"dict",value:l,data:l,event:o}:{kind:"generic",value:l,event:o}},[e])}function In(e){var F;const t=typeof e=="string"?e:e==null?void 0:e.threadId,{currentThreadId:n,setCurrentThreadId:r,actions:s}=De(),o=At({optional:!0}),a=cs(),l=!!t&&t!==n,[d,u]=i.useState([]),c=i.useCallback(A=>{u(A)},[]),{isLoadingThread:h,threadStateError:m,threadCheckpoints:T}=Ct({api:Be().chatApi,seed:c,currentThreadId:l?t:null,initialThreadId:l?t:null,isStreaming:!1,getMessages:()=>d,autoLoadInitial:!0}),k=i.useMemo(()=>{var A;return((A=T[0])==null?void 0:A.values)||{}},[T]),v=t||n,w=l?d:(a==null?void 0:a.messages)||[],I=l?h:(o==null?void 0:o.isLoading)||!1,S=l?k:(o==null?void 0:o.values)||{},_=l?m:(a==null?void 0:a.error)||(o==null?void 0:o.error)||null;return{threadId:v,messages:w,isLoading:I,isHistoryLoading:I,error:_,values:S,metadata:o==null?void 0:o.metadata,navigateToCheckpoint:(o==null?void 0:o.navigateToCheckpoint)||(async()=>{}),returnToLatest:(o==null?void 0:o.returnToLatest)||(async()=>{}),checkpoint:(o==null?void 0:o.checkpoint)||null,checkpoints:(o==null?void 0:o.checkpoints)||[],checkpointIndex:(o==null?void 0:o.checkpointIndex)||{timeline:[],messagePreviews:{}},interrupt:(o==null?void 0:o.interrupt)||null,respondToInterrupt:(o==null?void 0:o.respondToInterrupt)||(async()=>{}),isStreaming:l?!1:(a==null?void 0:a.isStreaming)||!1,activeMessageId:(a==null?void 0:a.activeMessageId)||null,connectionState:(a==null?void 0:a.connectionState)||"disconnected",streamingAssistantId:a!=null&&a.isStreaming&&((F=o==null?void 0:o.metadata)!=null&&F.assemblingMessageId)?o.metadata.assemblingMessageId:null,submit:(a==null?void 0:a.submit)||(async()=>{}),stop:(a==null?void 0:a.stop)||(()=>{}),clearThread:(o==null?void 0:o.clearThread)||(async()=>{}),setCurrentThreadId:r,createThread:s.createThread,deleteThread:s.deleteThread,renameThread:s.renameThread,shareThread:s.shareThread,threads:De().threads,isThreadsLoading:De().isLoading}}function Cs({submit:e,chatRequest:t,lastCheckpointId:n,lastCheckpointNs:r,onMessageSent:s,onExcelUploadSuccess:o,onError:a,enableMessageEditing:l,messages:d,setPendingAssistantResponse:u,project:c,onEvent:h,threadId:m}){const{messages:T}=In(),[k,v]=i.useState(null),[w,I]=i.useState(""),[S,_]=i.useState(null),[F,A]=i.useState(null),[y,x]=i.useState(!1),[P,$]=i.useState(""),B=i.useRef(P),D=i.useRef(null);i.useEffect(()=>{if(!k)if(m){const b=localStorage.getItem(vt(m));$(b||"")}else $("")},[m,k]);const N=i.useCallback(b=>{$(b),!k&&m&&localStorage.setItem(vt(m),b)},[m,k]);i.useEffect(()=>{B.current=P},[P]),i.useEffect(()=>{if(!k){D.current=null;return}D.current===null&&(D.current=B.current),N(w??"")},[w,k,N]);const G=i.useCallback(b=>{N(b)},[N]),H=async(b,p)=>{const g=Array.isArray(p)?{files:p}:p??{},f=g.files??[],L=g.contentParts??[],E=b.trim();if(!(!E&&f.length===0&&L.length===0))try{const K=f.map(async te=>{try{const oe=await Yt.uploadFile(te);return{file:te,record:oe}}catch(oe){throw console.error("Failed to upload file",te.name,oe),new Error(`Failed to upload ${te.name}`)}}),ne=(await Promise.all(K)).map(({record:te})=>{const oe=te.mime_type;return oe.startsWith("image/")?{type:"image_url",image_url:{url:te.content_url}}:{type:"file",url:te.content_url,mimeType:oe,name:te.filename,size:te.size}}),Q=[...L,...ne],se=k?(S==null?void 0:S.checkpointId)??n??void 0:n??void 0,de=k?(S==null?void 0:S.checkpointNs)??r??void 0:r??void 0;await e({text:E||"",contentParts:Q,attachments:f,payload:t.payload,edit:!!k,checkpointId:se,checkpointNs:de,project:c??void 0,originalMessageId:k??void 0,config:t.config},h?{onEvent:h}:void 0),s==null||s(E),u(!0),m&&localStorage.removeItem(vt(m)),N(""),A(null),v(null),I(""),_(null)}catch(K){const O=(K==null?void 0:K.message)||"Failed to send message";A(O),a==null||a(O),u(!1)}},X=(b,p)=>{p||H(b,{files:[]})},q=i.useCallback(async b=>{await e({attachments:[b],payload:t.payload,checkpointId:n??void 0,checkpointNs:r??void 0,project:c??void 0,config:t.config},h?{onEvent:h}:void 0),o==null||o({file:b})},[n,r,t,o,e]),ee=i.useCallback((b,p,g)=>{l&&(D.current=P,v(b),I(p),_({checkpointId:(g==null?void 0:g.checkpointId)??null,checkpointNs:(g==null?void 0:g.checkpointNs)??null}),A(null))},[P,l]),M=i.useCallback(()=>{v(null),I(""),_(null),A(null);const b=D.current;b!==null&&$(b),D.current=null},[]),z=i.useCallback(b=>{let p=null;for(let E=b-1;E>=0;E--)if(d[E].role==="user"){p=d[E];break}if(!p)return;const g=Array.isArray(p.content)?p.content:[],L=g.filter(E=>(E==null?void 0:E.type)==="text").map(E=>E.text).join("")||(()=>{try{return JSON.stringify(g,null,2)}catch{return String(g)}})();L&&e({text:L,payload:t.payload,checkpointId:n??void 0,checkpointNs:r??void 0,edit:!0,originalMessageId:p.id,config:t.config},h?{onEvent:h}:void 0)},[d,e,n,r,t]);return{editingMessageId:k,editingInitialValue:w,inputError:F,setInputError:A,dismissError:y,setDismissError:x,composerValue:P,handleComposerChange:G,handleSendMessage:H,handleQuickPrompt:X,handleExcelUpload:q,startEditing:ee,cancelEditing:M,handleRegenerateCb:z,displayMessages:T}}function As(e){return i.useMemo(()=>e?{textContent:ur(e),imageParts:dr(e),fileParts:fr(e),toolCalls:Vt(e),contentParts:e.content}:{textContent:"",imageParts:[],fileParts:[],toolCalls:[],contentParts:[]},[e])}function xs(e,t,n){const[r,s]=i.useState(e),o=i.useRef(e),a=i.useRef(null);return i.useEffect(()=>{o.current=e;const l=()=>{s(o.current),a.current&&(clearTimeout(a.current),a.current=null)};if(!t||n<=0){l();return}return a.current&&clearTimeout(a.current),a.current=setTimeout(()=>{l()},n),()=>{a.current&&(clearTimeout(a.current),a.current=null)}},[e,t,n]),r}C.ChatProviders=ps,C.ThreadStateProvider=mn,C.ThreadsProvider=ln,C.cn=ar,C.collectText=Rt,C.createTaskSyncToolEndHandler=fs,C.extractTaskIdFromToolEnd=wn,C.extractToolMeta=en,C.formatToolOutput=gr,C.getAgentNameFromMessage=Lr,C.getChatToken=St,C.getMessageAttemptInfo=ss,C.getToolCallArtifacts=vr,C.getToolCalls=Jt,C.hasContent=hr,C.hydrateHistorySnapshots=Le,C.isFileLike=yt,C.looksLikeMarkdown=Ht,C.messageSignature=jr,C.normalizeInterruptId=Nr,C.onChatTokenChanged=Tt,C.parseJsonSafe=Re,C.pretty=bt,C.sanitizeForDisplay=qe,C.setChatToken=_e,C.stringifyTool=Gt,C.useApi=Be,C.useChatController=Cs,C.useChatSession=In,C.useFilePreview=ks,C.useMessageContent=As,C.useParsedMessageContent=vs,C.useStream=sn,C.useStreamingMarkdownBuffer=xs,C.useThreadHistoryState=Ct,C.useThreadState=At,C.useThreadStateUpdater=hn,C.useThreads=De,C.useThreadsState=on,C.useToolPayload=Ts,Object.defineProperty(C,Symbol.toStringTag,{value:"Module"})});
9
+ //# sourceMappingURL=index.umd.js.map