@useago/sdk 1.5.3 → 1.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +10 -0
  3. package/dist/AgoClient-BI5esqbd.js +1694 -0
  4. package/dist/AgoClient-CQh8YovA.cjs +8 -0
  5. package/dist/angular.cjs +1 -1
  6. package/dist/angular.d.cts +70 -3
  7. package/dist/angular.d.ts +70 -3
  8. package/dist/angular.js +3 -3
  9. package/dist/{createConversationSession-BCb0D6bt.cjs → createConversationSession-0zVkMdYj.cjs} +1 -1
  10. package/dist/{createConversationSession-C7cnnWKW.js → createConversationSession-BlYTpxwz.js} +1 -1
  11. package/dist/{createFormCollector-iCDwAwYJ.js → createFormCollector-Bgs94NyR.js} +1 -1
  12. package/dist/{createFormCollector-t_fGyuTD.cjs → createFormCollector-DiCe_8ik.cjs} +1 -1
  13. package/dist/devtools.d.cts +69 -2
  14. package/dist/devtools.d.ts +69 -2
  15. package/dist/functions-CPs7omgM.cjs +1 -0
  16. package/dist/helpers.cjs +1 -1
  17. package/dist/helpers.js +1 -1
  18. package/dist/index.cjs +1 -1
  19. package/dist/index.d.cts +90 -2
  20. package/dist/index.d.ts +90 -2
  21. package/dist/index.js +64 -62
  22. package/dist/react.cjs +3 -3
  23. package/dist/react.d.cts +83 -2
  24. package/dist/react.d.ts +83 -2
  25. package/dist/react.js +240 -219
  26. package/dist/testing.cjs +1 -1
  27. package/dist/testing.d.cts +69 -2
  28. package/dist/testing.d.ts +69 -2
  29. package/dist/testing.js +1 -1
  30. package/dist/vue.cjs +1 -1
  31. package/dist/vue.d.cts +69 -2
  32. package/dist/vue.d.ts +69 -2
  33. package/dist/vue.js +2 -2
  34. package/dist/widget.cjs +2 -2
  35. package/dist/widget.d.cts +69 -2
  36. package/dist/widget.d.ts +69 -2
  37. package/dist/widget.js +4 -4
  38. package/llms-full.txt +29 -0
  39. package/package.json +1 -1
  40. package/dist/AgoClient-BGkFSNZF.cjs +0 -8
  41. package/dist/AgoClient-CW-BLT1_.js +0 -1542
  42. package/dist/functions-IGSjjvF4.cjs +0 -1
  43. package/dist/rolldown-runtime-16Nf8qvH.cjs +0 -1
  44. /package/dist/{autoContinue-D3Mmaaca.js → autoContinue-CC8K9mBU.js} +0 -0
  45. /package/dist/{autoContinue-CcCTva-D.cjs → autoContinue-CP9pJR-V.cjs} +0 -0
  46. /package/dist/{createMockClient-Br0TWgLO.js → createMockClient-DcuNlufr.js} +0 -0
  47. /package/dist/{createMockClient-BwNLPjeT.cjs → createMockClient-Dw-cyISN.cjs} +0 -0
  48. /package/dist/{functions-CApuQZ2b.js → functions-tzyOZNp6.js} +0 -0
package/dist/index.js CHANGED
@@ -1,38 +1,38 @@
1
- import { a as w, c as A, d as C, f as y, i as S, l as b, m as E, o as v, p as F, r as M, s as I, t as k, u as T } from "./functions-CApuQZ2b.js";
2
- import { C as x, S as G, _ as N, a as O, b as d, c as _, d as q, f as D, g as L, h as P, l as R, m as H, n as J, o as j, p as z, r as B, s as W, t as c, u as $, v as K, x as Q, y as V } from "./AgoClient-CW-BLT1_.js";
3
- import { t as Y } from "./autoContinue-D3Mmaaca.js";
4
- import { t as ee } from "./createConversationSession-C7cnnWKW.js";
5
- import { n as oe, r as re, t as ae } from "./createFormCollector-iCDwAwYJ.js";
6
- import { t as se } from "./createMockClient-Br0TWgLO.js";
1
+ import { a as h, c as w, d as C, f as y, i as E, l as S, m as b, o as v, p as F, r as T, s as I, t as M, u as U } from "./functions-tzyOZNp6.js";
2
+ import { C as k, S as L, T as N, _ as x, a as D, b as d, c as G, d as O, f as R, g as q, h as P, l as H, m as J, n as j, o as z, p as B, r as V, s as W, t as c, u as X, v as Y, w as $, x as K, y as Q } from "./AgoClient-BI5esqbd.js";
3
+ import { t as ee } from "./autoContinue-CC8K9mBU.js";
4
+ import { t as oe } from "./createConversationSession-BlYTpxwz.js";
5
+ import { n as ae, r as ne, t as se } from "./createFormCollector-Bgs94NyR.js";
6
+ import { t as ue } from "./createMockClient-DcuNlufr.js";
7
7
  import "./testing.js";
8
- function ue(e) {
8
+ function fe(e) {
9
9
  return e;
10
10
  }
11
- function ge(e, t) {
11
+ function me(e, t) {
12
12
  return e.on("message:complete", t), () => e.off("message:complete", t);
13
13
  }
14
- function fe(e, t) {
14
+ function le(e, t) {
15
15
  return e.on("message:chunk", t), () => e.off("message:chunk", t);
16
16
  }
17
- function me(e, t) {
17
+ function de(e, t) {
18
18
  return e.on("message:start", t), () => e.off("message:start", t);
19
19
  }
20
- function le(e, t) {
20
+ function ce(e, t) {
21
21
  return e.on("message:error", t), () => e.off("message:error", t);
22
22
  }
23
- function de(e, t) {
23
+ function pe(e, t) {
24
24
  return e.on("toolCall:received", t), () => e.off("toolCall:received", t);
25
25
  }
26
- function ce(e, t) {
26
+ function Ae(e, t) {
27
27
  return e.on("form:submitted", t), () => e.off("form:submitted", t);
28
28
  }
29
- function pe(e, t) {
29
+ function he(e, t) {
30
30
  return e.on("form:error", t), () => e.off("form:error", t);
31
31
  }
32
- function he(e, t) {
32
+ function we(e, t) {
33
33
  return e.on("function:invoke", t), () => e.off("function:invoke", t);
34
34
  }
35
- async function* we(e, t, u) {
35
+ async function* Ce(e, t, u) {
36
36
  const a = [];
37
37
  let r = null, n = !1;
38
38
  const g = (s) => {
@@ -95,70 +95,72 @@ function p(e) {
95
95
  debug: f
96
96
  } : null;
97
97
  }
98
- function Ae(e) {
98
+ function ye(e) {
99
99
  const t = p(e);
100
100
  if (!t) throw new d('createAgo(): could not detect AGO configuration. Set window.AGO, add <meta name="ago-base-url">, or pass { baseUrl } explicitly.', "config_missing_base_url");
101
101
  return new c(t);
102
102
  }
103
- function Ce(e, t) {
103
+ function Ee(e, t) {
104
104
  return {
105
105
  ...e,
106
106
  handler: t
107
107
  };
108
108
  }
109
109
  export {
110
- V as AgoApiError,
110
+ $ as ActivityLedger,
111
+ Q as AgoApiError,
111
112
  c as AgoClient,
112
113
  d as AgoError,
113
- Q as AgoFunctionError,
114
- G as AgoNetworkError,
115
- x as AgoStreamError,
116
- $ as ClientContextRegistry,
117
- B as EventEmitter,
118
- N as FunctionRegistry,
119
- _ as SSEHandler,
120
- L as SignalCollector,
121
- Y as attachAutoContinueAfterNavigation,
114
+ K as AgoFunctionError,
115
+ L as AgoNetworkError,
116
+ k as AgoStreamError,
117
+ X as ClientContextRegistry,
118
+ N as DEFAULT_MAX_ACTIVITY_ENTRIES,
119
+ V as EventEmitter,
120
+ x as FunctionRegistry,
121
+ G as SSEHandler,
122
+ q as SignalCollector,
123
+ ee as attachAutoContinueAfterNavigation,
122
124
  p as autoDetectConfig,
123
- O as canInlineImage,
124
- k as copyToClipboard,
125
- Ae as createAgo,
126
- q as createAgoProactive,
127
- ee as createConversationSession,
128
- ae as createFormCollector,
129
- we as createMessageStream,
130
- se as createMockClient,
125
+ D as canInlineImage,
126
+ M as copyToClipboard,
127
+ ye as createAgo,
128
+ O as createAgoProactive,
129
+ oe as createConversationSession,
130
+ se as createFormCollector,
131
+ Ce as createMessageStream,
132
+ ue as createMockClient,
131
133
  P as createStore,
132
- ue as defineFunction,
133
- oe as deriveFormStatus,
134
- j as formatFileSize,
135
- M as getLocalStorage,
136
- S as getUserLocation,
137
- w as highlightElement,
138
- R as isStreamNetworkError,
139
- re as loadFormCollector,
140
- K as logger,
141
- D as matchesRoutePattern,
142
- z as matchesWhen,
143
- pe as onFormError,
144
- ce as onFormSubmitted,
145
- he as onFunctionInvoke,
146
- ge as onMessage,
147
- fe as onMessageChunk,
148
- le as onMessageError,
149
- me as onMessageStart,
150
- de as onToolCall,
134
+ fe as defineFunction,
135
+ ae as deriveFormStatus,
136
+ z as formatFileSize,
137
+ T as getLocalStorage,
138
+ E as getUserLocation,
139
+ h as highlightElement,
140
+ H as isStreamNetworkError,
141
+ ne as loadFormCollector,
142
+ Y as logger,
143
+ R as matchesRoutePattern,
144
+ B as matchesWhen,
145
+ he as onFormError,
146
+ Ae as onFormSubmitted,
147
+ we as onFunctionInvoke,
148
+ me as onMessage,
149
+ le as onMessageChunk,
150
+ ce as onMessageError,
151
+ de as onMessageStart,
152
+ pe as onToolCall,
151
153
  v as openUrl,
152
- H as partialDeepMatch,
154
+ J as partialDeepMatch,
153
155
  W as safeAttachmentUrl,
154
156
  I as scrollToElement,
155
- A as setLocalStorage,
156
- b as setTheme,
157
- T as showConfirmDialog,
157
+ w as setLocalStorage,
158
+ S as setTheme,
159
+ U as showConfirmDialog,
158
160
  C as showNotification,
159
161
  y as showToast,
160
162
  F as submitForm,
161
- E as trackEvent,
162
- J as validateConfig,
163
- Ce as withHandler
163
+ b as trackEvent,
164
+ j as validateConfig,
165
+ Ee as withHandler
164
166
  };
package/dist/react.cjs CHANGED
@@ -1,7 +1,7 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=require("./rolldown-runtime-16Nf8qvH.cjs"),R=require("./AgoClient-BGkFSNZF.cjs"),Z=require("./autoContinue-CcCTva-D.cjs"),_=require("./createFormCollector-t_fGyuTD.cjs"),Q=require("./createMockClient-BwNLPjeT.cjs");let s=require("react");s=D.__toESM(s,1);let a=require("react/jsx-runtime"),P=require("react-markdown");P=D.__toESM(P,1);let W=require("remark-gfm");W=D.__toESM(W,1);function O(e){const[r,t]=(0,s.useState)(!1),o=(0,s.useRef)(null),n=(0,s.useMemo)(()=>{if(o.current&&(o.current.destroy(),o.current=null),!e)return null;const l=new R.AgoClient(e);return o.current=l,l},[e?.baseUrl,e?.widgetId]);return(0,s.useEffect)(()=>(n&&o.current===null&&(o.current=n,n.reviveAfterDestroy()),t(!0),()=>{o.current?.destroy(),o.current=null}),[n]),(0,s.useEffect)(()=>{o.current&&e&&o.current.updateConfig({agent:e.agent,defaultAgentId:e.defaultAgentId,permission:e.permission,userEmail:e.userEmail,userJwt:e.userJwt,debug:e.debug,warnOnEmptyReply:e.warnOnEmptyReply})},[e?.agent,e?.defaultAgentId,e?.permission,e?.userEmail,e?.userJwt,e?.debug,e?.warnOnEmptyReply]),{client:n,isReady:r}}var q=(0,s.createContext)(null),ee=({children:e,client:r,tools:t,helpers:o,pageContext:n,...l})=>{const{client:u}=O(r?null:l),i=r||u;return(0,s.useEffect)(()=>{if(!(!t||t.length===0)){for(const g of t)i.register(g);return()=>{for(const g of t)i.unregisterFunction(g.name)}}},[i,t]),(0,s.useEffect)(()=>{if(!o)return;const g=[];return Promise.resolve().then(()=>require("./functions-IGSjjvF4.cjs")).then(d=>d.functions_exports).then(d=>{for(const[m,S]of Object.entries(o)){const I=d[m];if(!I){console.warn(`[AGO] Unknown helper: "${m}"`);continue}const k=S===!0?I:{...I,handler:S};i.register(k),g.push(k.name)}}),()=>{for(const d of g)i.unregisterFunction(d)}},[i,o]),(0,s.useEffect)(()=>{n==="auto"&&i.enableAutoPageContext()},[i,n]),(0,a.jsx)(q.Provider,{value:i,children:e})};function M(){const e=(0,s.useContext)(q);if(!e)throw new Error('useAgoClient must be used within an <AgoProvider>. Wrap your component tree with <AgoProvider baseUrl="...">.');return e}function F(){return(0,s.useContext)(q)}function z({client:e,conversationId:r}={}){const t=F(),o=e||t;if(!o)throw new Error("useMessages requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.");const[n,l]=(0,s.useState)([]),[u,i]=(0,s.useState)(r),[g,d]=(0,s.useState)(!1),[m,S]=(0,s.useState)(null);(0,s.useEffect)(()=>{r&&r!==u&&(i(r),I(r))},[r]);const I=async k=>{try{l((await o.getMessages(k)).filter(A=>!A.hidden))}catch(A){S(A instanceof Error?A:new Error("Failed to load messages"))}};return(0,s.useEffect)(()=>{const k=f=>f==="IN_PROGRESS"||f==="WAITING_CLIENT",A=f=>{u||i(f.conversationId),d(!0),l(y=>{const w=y.findIndex(C=>C.id===f.messageId);return w>=0?y.map((C,E)=>E===w?{...C,status:"IN_PROGRESS"}:C):y.some(C=>C.role==="assistant"&&k(C.status))?y:[...y,{id:f.messageId,conversationId:f.conversationId,content:"",role:"assistant",status:"IN_PROGRESS",createdAt:new Date}]})},p=f=>{l(y=>{const w=y.findIndex(C=>C.id===f.messageId);return w<0?y:y.map((C,E)=>E===w?{...C,content:C.content+f.content}:C)})},h=f=>{l(y=>{let w=-1;for(let C=y.length-1;C>=0;C--)if(y[C].role==="assistant"&&k(y[C].status)){w=C;break}return w<0?y:[...y.slice(0,w),{...y[w],...f},...y.slice(w+1)]})},c=f=>{l(y=>{const w=y.findIndex(C=>C.id===f.id);return w>=0?[...y.slice(0,w),f,...y.slice(w+1)]:[...y,f]}),d(!1)},v=f=>{S(new Error(f.error)),d(!1)};return o.on("message:start",A),o.on("message:chunk",p),o.on("message:answer-complete",h),o.on("message:complete",c),o.on("message:error",v),()=>{o.off("message:start",A),o.off("message:chunk",p),o.off("message:answer-complete",h),o.off("message:complete",c),o.off("message:error",v)}},[o,u]),{messages:n,isLoading:g,error:m,sendMessage:(0,s.useCallback)(async(k,A)=>{d(!0),S(null);const p={id:`temp-${Date.now()}`,conversationId:u||"",content:k,role:"user",status:"DONE",attachments:A&&A.length>0?R.attachmentsFromFiles(A):void 0,createdAt:new Date},h={id:`temp-assistant-${Date.now()}`,conversationId:u||"",content:"",role:"assistant",status:"IN_PROGRESS",createdAt:new Date};l(c=>[...c,p,h]);try{const c=await o.sendMessage(k,{conversationId:u,files:A});return c.conversationId&&!u&&i(c.conversationId),l(v=>{const f=v.filter(w=>!w.id.startsWith("temp-")),y={...p,id:p.id.replace("temp-","user-"),conversationId:c.conversationId};return f.some(w=>w.id===c.id)?[...f,y].sort((w,C)=>new Date(w.createdAt).getTime()-new Date(C.createdAt).getTime()):[...f,y,c]}),c}catch(c){return S(c instanceof Error?c:new Error("Failed to send message")),d(!1),l(v=>v.filter(f=>!f.id.startsWith("temp-"))),null}},[o,u]),clearMessages:(0,s.useCallback)(()=>{l([]),i(void 0),S(null)},[]),conversationId:u}}var B=({onSend:e,disabled:r=!1,placeholder:t="Type a message...",allowFiles:o=!1,className:n=""})=>{const[l,u]=(0,s.useState)(""),[i,g]=(0,s.useState)([]),d=(0,s.useRef)(null),m=(0,s.useRef)(null),S=(0,s.useCallback)(()=>{const c=m.current;if(!c)return;const v=110;c.style.height="auto",c.style.height=`${Math.min(c.scrollHeight+2,v)}px`,c.style.overflowY=c.scrollHeight+2>v?"auto":"hidden"},[]),I=(0,s.useCallback)(c=>{c.preventDefault(),(l.trim()||i.length>0)&&(e(l.trim(),i.length>0?i:void 0),u(""),g([]),requestAnimationFrame(S))},[l,i,e,S]),k=(0,s.useCallback)(c=>{c.key==="Enter"&&!c.shiftKey&&(c.preventDefault(),I(c))},[I]),A=(0,s.useCallback)(c=>{const v=Array.from(c.target.files||[]);g(f=>[...f,...v])},[]),p=(0,s.useCallback)(c=>{g(v=>v.filter((f,y)=>y!==c))},[]),h=l.trim()||i.length>0;return(0,a.jsxs)("form",{onSubmit:I,className:`ago-chat-input ${n}`,style:{display:"flex",flexDirection:"column",gap:"8px",padding:"12px 16px",borderTop:"1px solid #dee3e8",backgroundColor:"#fff"},children:[i.length>0&&(0,a.jsx)("div",{className:"ago-chat-input__files",style:{display:"flex",flexWrap:"wrap",gap:"6px"},children:i.map((c,v)=>(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"6px",padding:"4px 10px",backgroundColor:"#f0f2f5",borderRadius:"6px",fontSize:"12px",color:"#30373e"},children:[(0,a.jsx)("span",{style:{maxWidth:"120px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.name}),(0,a.jsx)("button",{type:"button",onClick:()=>p(v),"aria-label":`Remove ${c.name}`,style:{border:"none",background:"none",cursor:"pointer",padding:"0",color:"#6b6d6f",fontSize:"14px",lineHeight:1},children:"×"})]},v))}),(0,a.jsxs)("div",{style:{display:"flex",gap:"8px",alignItems:"flex-end"},children:[o&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{type:"button",onClick:()=>d.current?.click(),disabled:r,"aria-label":"Attach file",style:{padding:"8px",border:"1px solid #dee3e8",borderRadius:"8px",backgroundColor:"#fff",cursor:r?"not-allowed":"pointer",color:"#6b6d6f",fontSize:"16px",lineHeight:1},children:"+"}),(0,a.jsx)("input",{ref:d,type:"file",multiple:!0,onChange:A,style:{display:"none"}})]}),(0,a.jsx)("textarea",{ref:m,value:l,onChange:c=>{u(c.target.value),S()},onKeyDown:k,placeholder:t,"aria-label":t,disabled:r,rows:1,style:{flex:1,padding:"10px 14px",border:"1px solid #dee3e8",borderRadius:"20px",resize:"none",outline:"none",boxSizing:"border-box",maxHeight:"110px",overflowY:"hidden",fontFamily:"inherit",fontSize:"16px",lineHeight:1.4,color:"#30373e",backgroundColor:"#f8f8f8",transition:"border-color 0.15s"},onFocus:c=>{c.currentTarget.style.borderColor="#1b5fc4"},onBlur:c=>{c.currentTarget.style.borderColor="#dee3e8"}}),(0,a.jsx)("button",{type:"submit",disabled:r||!h,style:{padding:"10px 18px",border:"none",borderRadius:"20px",backgroundColor:r||!h?"#b5bfc8":"#03182f",color:"#fff",cursor:r||!h?"not-allowed":"pointer",fontWeight:500,fontSize:"16px",transition:"background-color 0.15s"},children:"Send"})]})]})},te=({href:e,children:r,...t})=>(0,a.jsx)("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"#1b5fc4",textDecoration:"underline"},...t,children:r}),ne=({children:e,...r})=>(0,a.jsx)("p",{style:{margin:"0 0 8px 0",lineHeight:"1.6"},...r,children:e}),T=(e,r)=>{const t=({children:o,...n})=>s.default.createElement(`h${e}`,{style:{margin:"16px 0 8px 0",fontSize:r,fontWeight:600,lineHeight:"1.3"},...n},o);return t.displayName=`MarkdownHeading${e}`,t},re=({children:e,...r})=>(0,a.jsx)("ul",{style:{margin:"0 0 8px 0",paddingLeft:"20px",listStyleType:"disc",listStylePosition:"outside"},...r,children:e}),oe=({children:e,...r})=>(0,a.jsx)("ol",{style:{margin:"0 0 8px 0",paddingLeft:"20px",listStyleType:"decimal",listStylePosition:"outside"},...r,children:e}),se=({children:e,...r})=>(0,a.jsx)("li",{style:{display:"list-item",margin:"2px 0",lineHeight:"1.6"},...r,children:e}),ae=({className:e,children:r,...t})=>e!==void 0||String(r).includes(`
2
- `)?(0,a.jsx)("code",{style:{display:"block",background:"#f5f5f5",padding:"8px 12px",borderRadius:"6px",fontSize:"13px",overflowX:"auto",fontFamily:'"IBM Plex Mono", monospace'},...t,children:r}):(0,a.jsx)("code",{style:{background:"#f0f2f5",padding:"2px 5px",borderRadius:"4px",fontSize:"13px",fontFamily:'"IBM Plex Mono", monospace'},...t,children:r}),ie=({children:e,...r})=>(0,a.jsx)("pre",{style:{margin:"0 0 8px 0"},...r,children:e}),le=({children:e,...r})=>(0,a.jsx)("blockquote",{style:{borderLeft:"4px solid #dee3e8",paddingLeft:"12px",margin:"0 0 8px 0",fontStyle:"italic",color:"#6b6d6f"},...r,children:e}),ce=({children:e,...r})=>(0,a.jsx)("div",{style:{overflowX:"auto",margin:"0 0 8px 0"},children:(0,a.jsx)("table",{style:{borderCollapse:"collapse",width:"100%",fontSize:"13px"},...r,children:e})}),ue=({children:e,...r})=>(0,a.jsx)("th",{style:{border:"1px solid #dee3e8",padding:"6px 10px",textAlign:"left",backgroundColor:"#f5f7fa",fontWeight:600},...r,children:e}),de=({children:e,...r})=>(0,a.jsx)("td",{style:{border:"1px solid #dee3e8",padding:"6px 10px"},...r,children:e}),fe=({alt:e,...r})=>(0,a.jsx)("img",{alt:e??"",style:{maxWidth:"100%",borderRadius:"8px",margin:"4px 0"},...r}),ge=e=>(0,a.jsx)("hr",{style:{border:"none",borderTop:"1px solid #dee3e8",margin:"12px 0"},...e}),pe={a:te,p:ne,h1:T(1,"20px"),h2:T(2,"18px"),h3:T(3,"16px"),h4:T(4,"15px"),h5:T(5,"14px"),h6:T(6,"13px"),ul:re,ol:oe,li:se,code:ae,pre:ie,blockquote:le,table:ce,th:ue,td:de,img:fe,hr:ge},me=[W.default],U=({content:e})=>(0,a.jsx)(P.default,{remarkPlugins:me,components:pe,children:e}),xe=({attachment:e,isUser:r})=>{const t=R.safeAttachmentUrl(e.url);if(R.canInlineImage(e))return(0,a.jsx)("a",{href:t,target:"_blank",rel:"noopener noreferrer",style:{display:"inline-block",textDecoration:"none"},children:(0,a.jsx)("img",{src:t,alt:e.name,loading:"lazy",style:{maxWidth:"180px",maxHeight:"160px",objectFit:"cover",borderRadius:"10px",border:"1px solid #dee3e8",display:"block"}})});const o=R.formatFileSize(e.fileSize),n=(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{style:{fontSize:"16px",lineHeight:1,flexShrink:0},"aria-hidden":!0,children:"📄"}),(0,a.jsxs)("span",{style:{display:"flex",flexDirection:"column",minWidth:0},children:[(0,a.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:"160px"},title:e.name,children:e.name}),o&&(0,a.jsx)("span",{style:{fontSize:"11px",color:"#6b6d6f"},children:o})]})]}),l={display:"inline-flex",alignItems:"center",gap:"8px",padding:"8px 12px",borderRadius:"10px",border:"1px solid #dee3e8",backgroundColor:r?"rgba(255,255,255,0.12)":"#fff",color:r?"#fff":"#30373e",fontSize:"13px",textDecoration:"none",maxWidth:"220px"};return t?(0,a.jsx)("a",{href:t,target:"_blank",rel:"noopener noreferrer",style:l,children:n}):(0,a.jsx)("div",{style:l,children:n})},he=({source:e,index:r})=>{const t=(0,a.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px",width:"100%",minWidth:0},children:[(0,a.jsx)("div",{style:{flexShrink:0,width:"18px",height:"18px",borderRadius:"3px",border:"1px solid #1b5fc4",color:"#1b5fc4",fontSize:"11px",fontWeight:500,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"#f0f4ff"},children:r+1}),(0,a.jsx)("div",{style:{fontSize:"12px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:"#30373e"},title:e.title,children:e.title})]}),o={display:"flex",alignItems:"center",padding:"8px 10px",border:"1px solid #dee3e8",borderRadius:"8px",backgroundColor:"#fff",cursor:e.url?"pointer":"default",textDecoration:"none",color:"inherit",minWidth:0,transition:"border-color 0.15s"};return e.url?(0,a.jsx)("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",style:o,onMouseEnter:n=>{n.currentTarget.style.borderColor="#1b5fc4"},onMouseLeave:n=>{n.currentTarget.style.borderColor="#dee3e8"},children:t}):(0,a.jsx)("div",{style:o,children:t})},ye=()=>(0,a.jsxs)("div",{style:{display:"flex",gap:"4px",padding:"4px 0"},children:[[0,1,2].map(e=>(0,a.jsx)("div",{style:{width:"6px",height:"6px",borderRadius:"50%",backgroundColor:"#b5bfc8",animation:"ago-pulse 1.2s ease-in-out infinite",animationDelay:`${e*.2}s`}},e)),(0,a.jsx)("style",{children:`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var Q=Object.create,T=Object.defineProperty,ee=Object.getOwnPropertyDescriptor,te=Object.getOwnPropertyNames,ne=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty,oe=(e,n)=>{let t={};for(var o in e)T(t,o,{get:e[o],enumerable:!0});return n||T(t,Symbol.toStringTag,{value:"Module"}),t},se=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(var r=te(n),i=0,u=r.length,s;i<u;i++)s=r[i],!re.call(e,s)&&s!==t&&T(e,s,{get:(f=>n[f]).bind(null,s),enumerable:!(o=ee(n,s))||o.enumerable});return e},O=(e,n,t)=>(t=e!=null?Q(ne(e)):{},se(n||!e||!e.__esModule?T(t,"default",{value:e,enumerable:!0}):t,e));const _=require("./AgoClient-CQh8YovA.cjs"),ae=require("./autoContinue-CP9pJR-V.cjs"),M=require("./createFormCollector-DiCe_8ik.cjs"),ie=require("./createMockClient-Dw-cyISN.cjs");let a=require("react");a=O(a,1);let l=require("react/jsx-runtime"),D=require("react-markdown");D=O(D,1);let W=require("remark-gfm");W=O(W,1);function B(e){const[n,t]=(0,a.useState)(!1),o=(0,a.useRef)(null),r=(0,a.useMemo)(()=>{if(o.current&&(o.current.destroy(),o.current=null),!e)return null;const i=new _.AgoClient(e);return o.current=i,i},[e?.baseUrl,e?.widgetId]);return(0,a.useEffect)(()=>(r&&o.current===null&&(o.current=r,r.reviveAfterDestroy()),t(!0),()=>{o.current?.destroy(),o.current=null}),[r]),(0,a.useEffect)(()=>{o.current&&e&&o.current.updateConfig({agent:e.agent,defaultAgentId:e.defaultAgentId,permission:e.permission,userEmail:e.userEmail,userJwt:e.userJwt,debug:e.debug,warnOnEmptyReply:e.warnOnEmptyReply})},[e?.agent,e?.defaultAgentId,e?.permission,e?.userEmail,e?.userJwt,e?.debug,e?.warnOnEmptyReply]),{client:r,isReady:n}}var q=(0,a.createContext)(null),le=({children:e,client:n,tools:t,helpers:o,pageContext:r,...i})=>{const{client:u}=B(n?null:i),s=n||u;return(0,a.useEffect)(()=>{if(!(!t||t.length===0)){for(const f of t)s.register(f);return()=>{for(const f of t)s.unregisterFunction(f.name)}}},[s,t]),(0,a.useEffect)(()=>{if(!o)return;const f=[];return Promise.resolve().then(()=>require("./functions-CPs7omgM.cjs")).then(d=>d.functions_exports).then(d=>{for(const[m,S]of Object.entries(o)){const I=d[m];if(!I){console.warn(`[AGO] Unknown helper: "${m}"`);continue}const A=S===!0?I:{...I,handler:S};s.register(A),f.push(A.name)}}),()=>{for(const d of f)s.unregisterFunction(d)}},[s,o]),(0,a.useEffect)(()=>{r==="auto"&&s.enableAutoPageContext()},[s,r]),(0,l.jsx)(q.Provider,{value:s,children:e})};function F(){const e=(0,a.useContext)(q);if(!e)throw new Error('useAgoClient must be used within an <AgoProvider>. Wrap your component tree with <AgoProvider baseUrl="...">.');return e}function E(){return(0,a.useContext)(q)}function z({client:e,conversationId:n}={}){const t=E(),o=e||t;if(!o)throw new Error("useMessages requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.");const[r,i]=(0,a.useState)([]),[u,s]=(0,a.useState)(n),[f,d]=(0,a.useState)(!1),[m,S]=(0,a.useState)(null);(0,a.useEffect)(()=>{n&&n!==u&&(s(n),I(n))},[n]);const I=async A=>{try{i((await o.getMessages(A)).filter(k=>!k.hidden))}catch(k){S(k instanceof Error?k:new Error("Failed to load messages"))}};return(0,a.useEffect)(()=>{const A=p=>p==="IN_PROGRESS"||p==="WAITING_CLIENT",k=p=>{u||s(p.conversationId),d(!0),i(y=>{const w=y.findIndex(C=>C.id===p.messageId);return w>=0?y.map((C,R)=>R===w?{...C,status:"IN_PROGRESS"}:C):y.some(C=>C.role==="assistant"&&A(C.status))?y:[...y,{id:p.messageId,conversationId:p.conversationId,content:"",role:"assistant",status:"IN_PROGRESS",createdAt:new Date}]})},g=p=>{i(y=>{const w=y.findIndex(C=>C.id===p.messageId);return w<0?y:y.map((C,R)=>R===w?{...C,content:C.content+p.content}:C)})},h=p=>{i(y=>{let w=-1;for(let C=y.length-1;C>=0;C--)if(y[C].role==="assistant"&&A(y[C].status)){w=C;break}return w<0?y:[...y.slice(0,w),{...y[w],...p},...y.slice(w+1)]})},c=p=>{i(y=>{const w=y.findIndex(C=>C.id===p.id);return w>=0?[...y.slice(0,w),p,...y.slice(w+1)]:[...y,p]}),d(!1)},b=p=>{S(new Error(p.error)),d(!1)};return o.on("message:start",k),o.on("message:chunk",g),o.on("message:answer-complete",h),o.on("message:complete",c),o.on("message:error",b),()=>{o.off("message:start",k),o.off("message:chunk",g),o.off("message:answer-complete",h),o.off("message:complete",c),o.off("message:error",b)}},[o,u]),{messages:r,isLoading:f,error:m,sendMessage:(0,a.useCallback)(async(A,k)=>{d(!0),S(null);const g={id:`temp-${Date.now()}`,conversationId:u||"",content:A,role:"user",status:"DONE",attachments:k&&k.length>0?_.attachmentsFromFiles(k):void 0,createdAt:new Date},h={id:`temp-assistant-${Date.now()}`,conversationId:u||"",content:"",role:"assistant",status:"IN_PROGRESS",createdAt:new Date};i(c=>[...c,g,h]);try{const c=await o.sendMessage(A,{conversationId:u,files:k});return c.conversationId&&!u&&s(c.conversationId),i(b=>{const p=b.filter(w=>!w.id.startsWith("temp-")),y={...g,id:g.id.replace("temp-","user-"),conversationId:c.conversationId};return p.some(w=>w.id===c.id)?[...p,y].sort((w,C)=>new Date(w.createdAt).getTime()-new Date(C.createdAt).getTime()):[...p,y,c]}),c}catch(c){return S(c instanceof Error?c:new Error("Failed to send message")),d(!1),i(b=>b.filter(p=>!p.id.startsWith("temp-"))),null}},[o,u]),clearMessages:(0,a.useCallback)(()=>{i([]),s(void 0),S(null)},[]),conversationId:u}}var U=({onSend:e,disabled:n=!1,placeholder:t="Type a message...",allowFiles:o=!1,className:r=""})=>{const[i,u]=(0,a.useState)(""),[s,f]=(0,a.useState)([]),d=(0,a.useRef)(null),m=(0,a.useRef)(null),S=(0,a.useCallback)(()=>{const c=m.current;if(!c)return;const b=110;c.style.height="auto",c.style.height=`${Math.min(c.scrollHeight+2,b)}px`,c.style.overflowY=c.scrollHeight+2>b?"auto":"hidden"},[]),I=(0,a.useCallback)(c=>{c.preventDefault(),(i.trim()||s.length>0)&&(e(i.trim(),s.length>0?s:void 0),u(""),f([]),requestAnimationFrame(S))},[i,s,e,S]),A=(0,a.useCallback)(c=>{c.key==="Enter"&&!c.shiftKey&&(c.preventDefault(),I(c))},[I]),k=(0,a.useCallback)(c=>{const b=Array.from(c.target.files||[]);f(p=>[...p,...b])},[]),g=(0,a.useCallback)(c=>{f(b=>b.filter((p,y)=>y!==c))},[]),h=i.trim()||s.length>0;return(0,l.jsxs)("form",{onSubmit:I,className:`ago-chat-input ${r}`,style:{display:"flex",flexDirection:"column",gap:"8px",padding:"12px 16px",borderTop:"1px solid #dee3e8",backgroundColor:"#fff"},children:[s.length>0&&(0,l.jsx)("div",{className:"ago-chat-input__files",style:{display:"flex",flexWrap:"wrap",gap:"6px"},children:s.map((c,b)=>(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"6px",padding:"4px 10px",backgroundColor:"#f0f2f5",borderRadius:"6px",fontSize:"12px",color:"#30373e"},children:[(0,l.jsx)("span",{style:{maxWidth:"120px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.name}),(0,l.jsx)("button",{type:"button",onClick:()=>g(b),"aria-label":`Remove ${c.name}`,style:{border:"none",background:"none",cursor:"pointer",padding:"0",color:"#6b6d6f",fontSize:"14px",lineHeight:1},children:"×"})]},b))}),(0,l.jsxs)("div",{style:{display:"flex",gap:"8px",alignItems:"flex-end"},children:[o&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("button",{type:"button",onClick:()=>d.current?.click(),disabled:n,"aria-label":"Attach file",style:{padding:"8px",border:"1px solid #dee3e8",borderRadius:"8px",backgroundColor:"#fff",cursor:n?"not-allowed":"pointer",color:"#6b6d6f",fontSize:"16px",lineHeight:1},children:"+"}),(0,l.jsx)("input",{ref:d,type:"file",multiple:!0,onChange:k,style:{display:"none"}})]}),(0,l.jsx)("textarea",{ref:m,value:i,onChange:c=>{u(c.target.value),S()},onKeyDown:A,placeholder:t,"aria-label":t,disabled:n,rows:1,style:{flex:1,padding:"10px 14px",border:"1px solid #dee3e8",borderRadius:"20px",resize:"none",outline:"none",boxSizing:"border-box",maxHeight:"110px",overflowY:"hidden",fontFamily:"inherit",fontSize:"16px",lineHeight:1.4,color:"#30373e",backgroundColor:"#f8f8f8",transition:"border-color 0.15s"},onFocus:c=>{c.currentTarget.style.borderColor="#1b5fc4"},onBlur:c=>{c.currentTarget.style.borderColor="#dee3e8"}}),(0,l.jsx)("button",{type:"submit",disabled:n||!h,style:{padding:"10px 18px",border:"none",borderRadius:"20px",backgroundColor:n||!h?"#b5bfc8":"#03182f",color:"#fff",cursor:n||!h?"not-allowed":"pointer",fontWeight:500,fontSize:"16px",transition:"background-color 0.15s"},children:"Send"})]})]})},ce=({href:e,children:n,...t})=>(0,l.jsx)("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"#1b5fc4",textDecoration:"underline"},...t,children:n}),ue=({children:e,...n})=>(0,l.jsx)("p",{style:{margin:"0 0 8px 0",lineHeight:"1.6"},...n,children:e}),P=(e,n)=>{const t=({children:o,...r})=>a.default.createElement(`h${e}`,{style:{margin:"16px 0 8px 0",fontSize:n,fontWeight:600,lineHeight:"1.3"},...r},o);return t.displayName=`MarkdownHeading${e}`,t},de=({children:e,...n})=>(0,l.jsx)("ul",{style:{margin:"0 0 8px 0",paddingLeft:"20px",listStyleType:"disc",listStylePosition:"outside"},...n,children:e}),fe=({children:e,...n})=>(0,l.jsx)("ol",{style:{margin:"0 0 8px 0",paddingLeft:"20px",listStyleType:"decimal",listStylePosition:"outside"},...n,children:e}),ge=({children:e,...n})=>(0,l.jsx)("li",{style:{display:"list-item",margin:"2px 0",lineHeight:"1.6"},...n,children:e}),pe=({className:e,children:n,...t})=>e!==void 0||String(n).includes(`
2
+ `)?(0,l.jsx)("code",{style:{display:"block",background:"#f5f5f5",padding:"8px 12px",borderRadius:"6px",fontSize:"13px",overflowX:"auto",fontFamily:'"IBM Plex Mono", monospace'},...t,children:n}):(0,l.jsx)("code",{style:{background:"#f0f2f5",padding:"2px 5px",borderRadius:"4px",fontSize:"13px",fontFamily:'"IBM Plex Mono", monospace'},...t,children:n}),me=({children:e,...n})=>(0,l.jsx)("pre",{style:{margin:"0 0 8px 0"},...n,children:e}),xe=({children:e,...n})=>(0,l.jsx)("blockquote",{style:{borderLeft:"4px solid #dee3e8",paddingLeft:"12px",margin:"0 0 8px 0",fontStyle:"italic",color:"#6b6d6f"},...n,children:e}),he=({children:e,...n})=>(0,l.jsx)("div",{style:{overflowX:"auto",margin:"0 0 8px 0"},children:(0,l.jsx)("table",{style:{borderCollapse:"collapse",width:"100%",fontSize:"13px"},...n,children:e})}),ye=({children:e,...n})=>(0,l.jsx)("th",{style:{border:"1px solid #dee3e8",padding:"6px 10px",textAlign:"left",backgroundColor:"#f5f7fa",fontWeight:600},...n,children:e}),ve=({children:e,...n})=>(0,l.jsx)("td",{style:{border:"1px solid #dee3e8",padding:"6px 10px"},...n,children:e}),be=({alt:e,...n})=>(0,l.jsx)("img",{alt:e??"",style:{maxWidth:"100%",borderRadius:"8px",margin:"4px 0"},...n}),Ce=e=>(0,l.jsx)("hr",{style:{border:"none",borderTop:"1px solid #dee3e8",margin:"12px 0"},...e}),we={a:ce,p:ue,h1:P(1,"20px"),h2:P(2,"18px"),h3:P(3,"16px"),h4:P(4,"15px"),h5:P(5,"14px"),h6:P(6,"13px"),ul:de,ol:fe,li:ge,code:pe,pre:me,blockquote:xe,table:he,th:ye,td:ve,img:be,hr:Ce},Se=[W.default],G=({content:e})=>(0,l.jsx)(D.default,{remarkPlugins:Se,components:we,children:e}),Ae=({attachment:e,isUser:n})=>{const t=_.safeAttachmentUrl(e.url);if(_.canInlineImage(e))return(0,l.jsx)("a",{href:t,target:"_blank",rel:"noopener noreferrer",style:{display:"inline-block",textDecoration:"none"},children:(0,l.jsx)("img",{src:t,alt:e.name,loading:"lazy",style:{maxWidth:"180px",maxHeight:"160px",objectFit:"cover",borderRadius:"10px",border:"1px solid #dee3e8",display:"block"}})});const o=_.formatFileSize(e.fileSize),r=(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("span",{style:{fontSize:"16px",lineHeight:1,flexShrink:0},"aria-hidden":!0,children:"📄"}),(0,l.jsxs)("span",{style:{display:"flex",flexDirection:"column",minWidth:0},children:[(0,l.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:"160px"},title:e.name,children:e.name}),o&&(0,l.jsx)("span",{style:{fontSize:"11px",color:"#6b6d6f"},children:o})]})]}),i={display:"inline-flex",alignItems:"center",gap:"8px",padding:"8px 12px",borderRadius:"10px",border:"1px solid #dee3e8",backgroundColor:n?"rgba(255,255,255,0.12)":"#fff",color:n?"#fff":"#30373e",fontSize:"13px",textDecoration:"none",maxWidth:"220px"};return t?(0,l.jsx)("a",{href:t,target:"_blank",rel:"noopener noreferrer",style:i,children:r}):(0,l.jsx)("div",{style:i,children:r})},ke=({source:e,index:n})=>{const t=(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px",width:"100%",minWidth:0},children:[(0,l.jsx)("div",{style:{flexShrink:0,width:"18px",height:"18px",borderRadius:"3px",border:"1px solid #1b5fc4",color:"#1b5fc4",fontSize:"11px",fontWeight:500,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"#f0f4ff"},children:n+1}),(0,l.jsx)("div",{style:{fontSize:"12px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:"#30373e"},title:e.title,children:e.title})]}),o={display:"flex",alignItems:"center",padding:"8px 10px",border:"1px solid #dee3e8",borderRadius:"8px",backgroundColor:"#fff",cursor:e.url?"pointer":"default",textDecoration:"none",color:"inherit",minWidth:0,transition:"border-color 0.15s"};return e.url?(0,l.jsx)("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",style:o,onMouseEnter:r=>{r.currentTarget.style.borderColor="#1b5fc4"},onMouseLeave:r=>{r.currentTarget.style.borderColor="#dee3e8"},children:t}):(0,l.jsx)("div",{style:o,children:t})},je=()=>(0,l.jsxs)("div",{style:{display:"flex",gap:"4px",padding:"4px 0"},children:[[0,1,2].map(e=>(0,l.jsx)("div",{style:{width:"6px",height:"6px",borderRadius:"50%",backgroundColor:"#b5bfc8",animation:"ago-pulse 1.2s ease-in-out infinite",animationDelay:`${e*.2}s`}},e)),(0,l.jsx)("style",{children:`
3
3
  @keyframes ago-pulse {
4
4
  0%, 80%, 100% { opacity: 0.3; transform: scale(0.8); }
5
5
  40% { opacity: 1; transform: scale(1); }
6
6
  }
7
- `})]}),G=({message:e,className:r="",showAgentName:t=!1,isLast:o=!1,onFollowUpClick:n})=>{const l=e.role==="user",u=e.status==="IN_PROGRESS"||e.status==="WAITING_CLIENT";return(0,a.jsxs)("div",{className:`ago-message ago-message--${e.role} ${r}`,style:{display:"flex",flexDirection:"column",alignItems:l?"flex-end":"flex-start",marginBottom:"16px"},children:[!l&&t&&e.agent&&(0,a.jsx)("div",{className:"ago-message__agent",style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"13px",fontWeight:500,color:"#30373e",marginBottom:"6px",padding:"0 4px"},children:e.agent.displayName||e.agent.name}),!l&&e.sources&&e.sources.length>0&&(0,a.jsx)("div",{className:"ago-message__sources",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"6px",marginBottom:"10px",width:"100%",maxWidth:"85%"},children:e.sources.map((i,g)=>(0,a.jsx)(he,{source:i,index:g},i.id))}),e.attachments&&e.attachments.length>0&&(0,a.jsx)("div",{className:"ago-message__attachments",style:{display:"flex",flexWrap:"wrap",gap:"6px",marginBottom:"6px",justifyContent:l?"flex-end":"flex-start",maxWidth:"75%"},children:e.attachments.map(i=>(0,a.jsx)(xe,{attachment:i,isUser:l},i.id))}),(e.content||u)&&(0,a.jsx)("div",{className:"ago-message__content",style:{maxWidth:l?"75%":"100%",padding:l?"10px 14px":"2px 8px",borderRadius:l?"16px":"0",backgroundColor:l?"#03182f":"transparent",color:l?"#fff":"#30373e",wordBreak:"break-word",fontSize:"16px",lineHeight:"1.6"},children:e.content?(0,a.jsx)(U,{content:e.content}):u&&(0,a.jsx)(ye,{})}),o&&e.followUpReplies&&e.followUpReplies.length>0&&(0,a.jsx)("div",{className:"ago-message__followups",style:{display:"flex",flexWrap:"wrap",gap:"8px",marginTop:"10px"},children:e.followUpReplies.map((i,g)=>(0,a.jsx)("button",{type:"button",className:"ago-message__followup-btn",disabled:!n,onClick:n?()=>n(i):void 0,style:{minHeight:"36px",padding:"6px 14px",fontSize:"13px",borderRadius:"16px",border:"1px solid #dee3e8",backgroundColor:"#fff",color:"#30373e",cursor:n?"pointer":"default",transition:"border-color 0.15s"},onMouseEnter:d=>{d.currentTarget.style.borderColor="#1b5fc4"},onMouseLeave:d=>{d.currentTarget.style.borderColor="#dee3e8"},children:i},g))})]})},be=({client:e,conversationId:r,title:t="Chat",welcomeMessage:o="Hello! How can I help you today?",placeholder:n="Type a message...",allowFiles:l=!1,height:u=500,logoUrl:i,showAgentName:g=!1,forms:d,onFollowUpClick:m,className:S="",onMessageSent:I,onMessageReceived:k})=>{const A=(0,s.useRef)(null),p=F(),h=e??p,{messages:c,isLoading:v,error:f,sendMessage:y}=z({client:e,conversationId:r});(0,s.useEffect)(()=>{if(!h||!d||d.length===0)return;let x=!1;const j=[];return Promise.all(d.map(N=>N.schema!=null?Promise.resolve(_.createFormCollector(N)):_.loadFormCollector(h,N))).then(N=>{if(!x)for(const X of N)j.push(X.install(h))}).catch(()=>{}),()=>{x=!0,j.forEach(N=>N())}},[h,d?JSON.stringify(d.map(x=>[x.name,x.schema??null,x.submit??!1,x.description??null])):""]),(0,s.useEffect)(()=>{A.current?.scrollIntoView({behavior:"smooth"})},[c]),(0,s.useEffect)(()=>{const x=c[c.length-1];x&&x.role==="assistant"&&x.status==="DONE"&&k&&k({id:x.id,content:x.content})},[c,k]);const w=async(x,j)=>{I?.(x),await y(x,j)},C=c[c.length-1],E=v&&C?.role==="assistant"&&(C.status==="IN_PROGRESS"||C.status==="WAITING_CLIENT"),b=m===!1?void 0:m??(x=>w(x));return(0,a.jsxs)("div",{className:`ago-chat-widget ${S}`,style:{display:"flex",flexDirection:"column",height:typeof u=="number"?`${u}px`:u,border:"1px solid #dee3e8",borderRadius:"16px",overflow:"hidden",backgroundColor:"#fff",fontFamily:'"IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',textAlign:"left",boxShadow:"rgba(15, 15, 15, 0.08) 0px 2px 16px 0px"},children:[(0,a.jsxs)("div",{className:"ago-chat-widget__header",style:{padding:"14px 16px",borderBottom:"1px solid #dee3e8",backgroundColor:"#03182f",color:"#e8f0fe",display:"flex",alignItems:"center",gap:"10px"},children:[i&&(0,a.jsx)("img",{src:i,alt:"Logo",style:{height:"24px",width:"auto"}}),(0,a.jsx)("h3",{style:{margin:0,fontSize:"15px",fontWeight:600},children:t})]}),(0,a.jsxs)("div",{className:"ago-chat-widget__messages",role:"log","aria-live":"polite","aria-relevant":"additions text","aria-atomic":!1,style:{flex:1,overflow:"auto",padding:"16px",backgroundColor:"#fbfbfb"},children:[c.length===0?(0,a.jsx)("div",{style:{textAlign:"center",color:"#6b6d6f",padding:"24px 16px",fontSize:"16px",lineHeight:"1.5"},children:o}):c.map((x,j)=>(0,a.jsx)(G,{message:x,showAgentName:g,isLast:j===c.length-1,onFollowUpClick:b},x.id)),f&&(0,a.jsx)("div",{role:"alert",style:{padding:"10px 14px",backgroundColor:"#fef2f2",color:"#dc2626",borderRadius:"12px",marginTop:"8px",fontSize:"13px",border:"1px solid #fecaca"},children:f.message}),(0,a.jsx)("div",{ref:A})]}),(0,a.jsx)(B,{onSend:w,disabled:E,placeholder:n,allowFiles:l})]})};function K(e={}){const r=F(),t=e.client??r;if(!t)throw new R.AgoError("useProactiveNudge: no AgoClient. Pass one via options.client or wrap your tree with <AgoProvider>.","proactive_missing_client");const[o,n]=(0,s.useState)(null),l=(0,s.useRef)(o);l.current=o;const u=(0,s.useRef)(e.onExpand);return u.current=e.onExpand,(0,s.useEffect)(()=>{const i=d=>{n(d),t.proactive?.shown(d)},g=({nudge:d})=>{n(m=>m?.id===d.id?null:m)};return t.on("nudge:ready",i),t.on("nudge:accepted",g),t.on("nudge:dismissed",g),()=>{t.off("nudge:ready",i),t.off("nudge:accepted",g),t.off("nudge:dismissed",g)}},[t]),{nudge:o,accept:(0,s.useCallback)(async()=>{const i=l.current;i&&(n(null),await t.proactive?.accept(i),(i.source==="agent"||i.goal)&&u.current?.(i))},[t]),dismiss:(0,s.useCallback)(()=>{const i=l.current;i&&(n(null),t.proactive?.dismiss(i))},[t])}}var ve=({client:e,onExpand:r,autoHideMs:t,position:o="bottom-right",openChatLabel:n="Open chat",className:l=""})=>{const{nudge:u,accept:i,dismiss:g}=K({client:e,onExpand:r});if((0,s.useEffect)(()=>{if(!u||!t)return;const m=setTimeout(()=>g(),t);return()=>clearTimeout(m)},[u,t,g]),!u)return null;const d=u.source==="agent"||!!u.goal;return(0,a.jsxs)("div",{className:`ago-nudge ${l}`,role:"status","aria-live":"polite",style:{position:"fixed",bottom:"90px",...o==="bottom-left"?{left:"20px"}:{right:"20px"},zIndex:2147483e3,maxWidth:"320px",padding:"14px 16px",backgroundColor:"#fff",color:"#03182f",border:"1px solid #dee3e8",borderRadius:"16px",boxShadow:"rgba(15, 15, 15, 0.12) 0px 4px 20px 0px",fontFamily:'"IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',fontSize:"14px",lineHeight:1.5,textAlign:"left"},children:[(0,a.jsx)("button",{type:"button",className:"ago-nudge__close","aria-label":"Dismiss",onClick:g,style:{position:"absolute",top:"6px",right:"8px",border:"none",background:"transparent",color:"#6b6d6f",fontSize:"16px",lineHeight:1,cursor:"pointer",padding:"4px"},children:"×"}),(0,a.jsx)("div",{className:"ago-nudge__message",style:{paddingRight:"16px"},children:u.message}),(u.action||d)&&(0,a.jsxs)("div",{className:"ago-nudge__actions",style:{display:"flex",gap:"8px",marginTop:"10px",flexWrap:"wrap"},children:[u.action&&(0,a.jsx)("button",{type:"button",className:"ago-nudge__action",onClick:()=>{i()},style:{border:"none",borderRadius:"10px",padding:"6px 12px",backgroundColor:"#03182f",color:"#e8f0fe",fontSize:"13px",fontWeight:600,cursor:"pointer"},children:u.action.label}),d&&(0,a.jsx)("button",{type:"button",className:"ago-nudge__expand",onClick:()=>{i()},style:{border:"1px solid #dee3e8",borderRadius:"10px",padding:"6px 12px",backgroundColor:"#fff",color:"#03182f",fontSize:"13px",fontWeight:600,cursor:"pointer"},children:n})]})]})};function J({client:e,autoLoad:r=!0}={}){const t=F(),o=e||t;if(!o)throw new Error("useConversation requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.");const[n,l]=(0,s.useState)([]),[u,i]=(0,s.useState)(null),[g,d]=(0,s.useState)(!1),[m,S]=(0,s.useState)(null),I=(0,s.useCallback)(async()=>{d(!0),S(null);try{l(await o.getConversations())}catch(p){S(p instanceof Error?p:new Error("Failed to load conversations"))}finally{d(!1)}},[o]),k=(0,s.useCallback)(async p=>{d(!0),S(null);try{i(await o.getConversation(p))}catch(h){S(h instanceof Error?h:new Error("Failed to load conversation"))}finally{d(!1)}},[o]),A=(0,s.useCallback)(()=>{i(null)},[]);return(0,s.useEffect)(()=>{r&&I()},[r,I]),{conversations:n,currentConversation:u,isLoading:g,error:m,selectConversation:k,startNewConversation:A,refreshConversations:I}}function Ce(e={}){const r=F(),t=e.client||r;if(!t)throw new Error("useChat requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.");const o=z({client:t,conversationId:e.conversationId}),n=J({client:t,autoLoad:e.autoLoad});return{messages:o.messages,isLoading:o.isLoading,error:o.error||n.error,sendMessage:o.sendMessage,clearMessages:o.clearMessages,conversationId:o.conversationId,conversations:n.conversations,currentConversation:n.currentConversation,isConversationsLoading:n.isLoading,selectConversation:n.selectConversation,startNewConversation:n.startNewConversation,refreshConversations:n.refreshConversations}}function we(e,r){const t=M(),{name:o,description:n,parameters:l,handler:u,maxResultBytes:i,requiresApproval:g}=typeof e=="string"?{name:e,...r}:e,d=(0,s.useRef)(u);d.current=u,(0,s.useEffect)(()=>{const m=S=>d.current(S);return t.registerFunction(o,m,{description:n,parameters:l,maxResultBytes:i,requiresApproval:g}),()=>{t.unregisterFunction(o)}},[t,o,n,l,i,g])}function Se(e,r){const t=M(),o=(0,s.useRef)(e);o.current=e,(0,s.useEffect)(()=>(t.registerNavigationFunction(n=>o.current(n),r),()=>{t.unregisterNavigationFunction()}),[t,r])}function ke(e,r){const t=M(),o=r?.functionName??"setPageState",n=r?.requiresApproval,l=(0,s.useRef)(e);l.current=e,(0,s.useEffect)(()=>{const u=l.current.map(i=>{const g=()=>l.current.find(d=>d.name===i.name)??i;return{name:i.name,description:i.description,schema:i.schema,get:i.get?()=>g().get?.():void 0,set:d=>g().set(d)}});return t.registerPageStateFunction(u,{functionName:o,requiresApproval:n}),()=>{t.unregisterPageStateFunction(o)}},[t,o,n])}function Ae(e){const r=M(),t=(0,s.useRef)(e);t.current=e,(0,s.useEffect)(()=>Z.attachAutoContinueAfterNavigation(r,()=>t.current),[r])}var je=new Set(["awaiting-approval"]);function V(e){switch(e){case"progress_indicator":return"progress";case"reasoning":return"reasoning";case"confirmation_input":return"confirmation";case"form":return"form";default:return"status"}}function Ie(e){return e.type==="client_function"?e.functionName==="navigateToPage"?"navigation":"action":V(e.type)}function L(e,r){const t=(e??"").toLowerCase();return t.includes("reject")?"rejected":t.includes("error")||t.includes("fail")?"error":t.includes("done")||t.includes("complet")?"done":(t.includes("waiting")||t.includes("pending"))&&(r==="confirmation"||r==="form")?"awaiting-approval":"running"}function $(e){return typeof e!="string"||!e?"page":e.replace(/[-_]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/\b\w/g,r=>r.toUpperCase()).trim()}function Ne(e){switch(e.kind){case"navigation":return`Navigating to ${$(e.arguments?.page)}`;case"action":return e.functionName==="setPageState"?"Updating the page":e.functionName==="openFilteredConversations"?"Opening conversations":e.toolDisplayName||e.message||$(e.functionName)||"Working";case"progress":return e.message||"Working";case"reasoning":return e.message||"Thinking";case"confirmation":return e.message||"Waiting for your confirmation";case"form":return e.message||e.toolDisplayName||"Please fill in the form";default:return e.message||e.toolDisplayName||e.toolName||"Working"}}function Ee(e={}){const{includeReasoning:r=!1,labelFor:t}=e,o=F(),n=e.client||o;if(!n)throw new R.AgoError("useAgoActivity requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.","provider_missing_client");const[l,u]=(0,s.useState)([]),i=(0,s.useRef)(new Set),g=(0,s.useRef)(void 0),d=(0,s.useRef)(t);d.current=t;const m=(0,s.useCallback)((p,h)=>{u(c=>{const v=c.findIndex(y=>y.id===p),f={...v>=0?c[v]:{id:p,kind:"status",label:"",status:"running",requiresApproval:!1,createdAt:new Date},...h};return f.label=d.current?.(f)??Ne(f),v>=0?[...c.slice(0,v),f,...c.slice(v+1)]:[...c,f]})},[]);(0,s.useEffect)(()=>{const p=b=>{g.current=b.messageId},h=b=>{const x=V(b.type);x==="reasoning"&&!r||m(b.id,{kind:x,status:L(b.status,x),messageId:g.current,toolName:b.toolName,toolDisplayName:b.toolDisplayName,message:b.message,data:b.data,formSchema:b.formSchema,requiresApproval:x==="confirmation"||x==="form"})},c=b=>{b.invocationId&&m(b.invocationId,{kind:b.functionName==="navigateToPage"?"navigation":"action",status:"running",messageId:g.current,functionName:b.functionName,arguments:b.arguments})},v=b=>{b.invocationId&&m(b.invocationId,{kind:b.functionName==="navigateToPage"?"navigation":"action",status:"awaiting-approval",messageId:g.current,functionName:b.functionName,arguments:b.arguments,requiresApproval:!0})},f=b=>{if(!b.invocationId)return;const x=b.result,j=typeof b.result=="object"&&x!==null&&x.approved===!1&&x.reason==="user_rejected";m(b.invocationId,{status:b.error?"error":j?"rejected":"done",requiresApproval:!1})},y=b=>{for(const x of b.messages??[])if(x.role==="assistant")for(const j of x.toolCalls??[]){const N=Ie(j);N==="reasoning"&&!r||/waiting/i.test(j.status??"")||m(j.id,{kind:N,status:L(j.status,N),messageId:x.id,toolName:j.toolName,toolDisplayName:j.toolDisplayName,functionName:j.functionName,arguments:j.arguments,message:j.message,data:j.data,formSchema:j.formSchema,requiresApproval:N==="confirmation"||N==="form"})}},w=b=>{u(x=>x.map(j=>j.status==="running"||j.status==="awaiting-approval"?{...j,status:b}:j))},C=()=>w("done"),E=()=>w("error");return n.on("message:start",p),n.on("toolCall:received",h),n.on("function:invoke",c),n.on("function:awaiting-approval",v),n.on("function:result",f),n.on("conversation:loaded",y),n.on("message:complete",C),n.on("message:error",E),()=>{n.off("message:start",p),n.off("toolCall:received",h),n.off("function:invoke",c),n.off("function:awaiting-approval",v),n.off("function:result",f),n.off("conversation:loaded",y),n.off("message:complete",C),n.off("message:error",E)}},[n,r,m]);const S=(0,s.useCallback)(async p=>{const h=l.find(c=>c.id===p);!h||h.status!=="awaiting-approval"||i.current.has(p)||h.kind!=="form"&&(i.current.add(p),m(p,{status:"running",requiresApproval:!1}),h.functionName?await n.approveFunction(p):await n.confirmToolCall(p))},[n,l,m]),I=(0,s.useCallback)(async p=>{const h=l.find(c=>c.id===p);!h||h.status!=="awaiting-approval"||i.current.has(p)||(i.current.add(p),m(p,{status:"rejected",requiresApproval:!1}),h.functionName?await n.rejectFunction(p):await n.rejectToolCall(p))},[n,l,m]),k=(0,s.useCallback)(async(p,h)=>{m(p,{status:"running",requiresApproval:!1}),await n.submitToolCallForm(p,h),m(p,{status:"done"})},[n,m]),A=(0,s.useCallback)(()=>{i.current.clear(),u([])},[]);return{items:l,latest:l.length>0?l[l.length-1]:void 0,isAwaitingApproval:l.some(p=>je.has(p.status)),approve:S,reject:I,submitForm:k,clear:A}}function Re(e,r){const t=M(),o=(0,s.useId)(),n=r??o,l=(0,s.useRef)(e);l.current=e;const u=typeof e=="function";(0,s.useEffect)(()=>{if(typeof l.current=="function"){const i=()=>l.current();return t.addDynamicContext(n,i),()=>{t.removeDynamicContext(n)}}return t.setContext(n,l.current),()=>{t.removeContext(n)}},[t,n,u,u?"":JSON.stringify(e)])}function Y(e){return(0,s.useSyncExternalStore)(e.subscribe,e.get,e.get)}var H={missing:[],complete:!1};function _e(e){const r=M(),t=e.schema!=null,o=JSON.stringify(e.schema??null),n=e.submit,l=n?typeof n=="string"?`client:${n}`:n.via==="backend"?"backend":"handler"in n?"client:handler":`client:${n.url}`:"none",u=JSON.stringify(e.initialValues??null),i=(0,s.useMemo)(()=>t?_.createFormCollector(e):null,[t,e.name,o,l,u,e.autoSubmit]),[g,d]=(0,s.useState)({collector:null,loading:!t,error:null});(0,s.useEffect)(()=>{if(t)return;let v=!1;return d({collector:null,loading:!0,error:null}),_.loadFormCollector(r,e).then(f=>{v||d({collector:f,loading:!1,error:null})}).catch(f=>{v||d({collector:null,loading:!1,error:f instanceof Error?f:new Error(String(f))})}),()=>{v=!0}},[r,t,e.name,l,u,e.autoSubmit]);const m=t?i:g.collector,S=t?!1:g.loading,I=t?null:g.error;(0,s.useEffect)(()=>{if(m)return m.install(r)},[r,m]);const k=(0,s.useMemo)(()=>R.createStore({values:e.initialValues??{},submitted:!1}),[u]),A=Y(m?.store??k),p=(0,s.useMemo)(()=>m?.getStatus()??H,[A,m]),h=(0,s.useMemo)(()=>({...A,...p}),[A,p]),c=(0,s.useMemo)(()=>({name:e.name,store:k,functions:[],contextKey:`form:${e.name}`,contextProvider:()=>({name:`Form: ${e.name}`,description:""}),definitionContextKey:`form:${e.name}:definition`,definitionContextProvider:()=>({name:`Form definition: ${e.name}`,description:"",stable:!0}),install:()=>()=>{},hydrate:()=>{},submit:async()=>({ok:!1,error:"Form definition not loaded yet."}),getValues:()=>k.get().values,setValues:()=>{},reset:()=>{},getStatus:()=>H}),[e.name,k]);return{...m??c,state:h,loading:S,error:I}}exports.AgoNudge=ve;exports.AgoProvider=ee;exports.ChatInput=B;exports.ChatWidget=be;exports.Markdown=U;exports.Message=G;exports.createFormCollector=_.createFormCollector;exports.createMockClient=Q.createMockClient;exports.deriveFormStatus=_.deriveFormStatus;exports.loadFormCollector=_.loadFormCollector;exports.useAgo=O;exports.useAgoActivity=Ee;exports.useAgoAutoContinueAfterNavigation=Ae;exports.useAgoClient=M;exports.useAgoContext=Re;exports.useAgoFunction=we;exports.useAgoNavigation=Se;exports.useAgoPageState=ke;exports.useAgoStore=Y;exports.useChat=Ce;exports.useConversation=J;exports.useFormCollector=_e;exports.useMessages=z;exports.useOptionalAgoClient=F;exports.useProactiveNudge=K;
7
+ `})]}),K=({message:e,className:n="",showAgentName:t=!1,isLast:o=!1,onFollowUpClick:r})=>{const i=e.role==="user",u=e.status==="IN_PROGRESS"||e.status==="WAITING_CLIENT";return(0,l.jsxs)("div",{className:`ago-message ago-message--${e.role} ${n}`,style:{display:"flex",flexDirection:"column",alignItems:i?"flex-end":"flex-start",marginBottom:"16px"},children:[!i&&t&&e.agent&&(0,l.jsx)("div",{className:"ago-message__agent",style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"13px",fontWeight:500,color:"#30373e",marginBottom:"6px",padding:"0 4px"},children:e.agent.displayName||e.agent.name}),!i&&e.sources&&e.sources.length>0&&(0,l.jsx)("div",{className:"ago-message__sources",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"6px",marginBottom:"10px",width:"100%",maxWidth:"85%"},children:e.sources.map((s,f)=>(0,l.jsx)(ke,{source:s,index:f},s.id))}),e.attachments&&e.attachments.length>0&&(0,l.jsx)("div",{className:"ago-message__attachments",style:{display:"flex",flexWrap:"wrap",gap:"6px",marginBottom:"6px",justifyContent:i?"flex-end":"flex-start",maxWidth:"75%"},children:e.attachments.map(s=>(0,l.jsx)(Ae,{attachment:s,isUser:i},s.id))}),(e.content||u)&&(0,l.jsx)("div",{className:"ago-message__content",style:{maxWidth:i?"75%":"100%",padding:i?"10px 14px":"2px 8px",borderRadius:i?"16px":"0",backgroundColor:i?"#03182f":"transparent",color:i?"#fff":"#30373e",wordBreak:"break-word",fontSize:"16px",lineHeight:"1.6"},children:e.content?(0,l.jsx)(G,{content:e.content}):u&&(0,l.jsx)(je,{})}),o&&e.followUpReplies&&e.followUpReplies.length>0&&(0,l.jsx)("div",{className:"ago-message__followups",style:{display:"flex",flexWrap:"wrap",gap:"8px",marginTop:"10px"},children:e.followUpReplies.map((s,f)=>(0,l.jsx)("button",{type:"button",className:"ago-message__followup-btn",disabled:!r,onClick:r?()=>r(s):void 0,style:{minHeight:"36px",padding:"6px 14px",fontSize:"13px",borderRadius:"16px",border:"1px solid #dee3e8",backgroundColor:"#fff",color:"#30373e",cursor:r?"pointer":"default",transition:"border-color 0.15s"},onMouseEnter:d=>{d.currentTarget.style.borderColor="#1b5fc4"},onMouseLeave:d=>{d.currentTarget.style.borderColor="#dee3e8"},children:s},f))})]})},Ie=({client:e,conversationId:n,title:t="Chat",welcomeMessage:o="Hello! How can I help you today?",placeholder:r="Type a message...",allowFiles:i=!1,height:u=500,logoUrl:s,showAgentName:f=!1,forms:d,onFollowUpClick:m,className:S="",onMessageSent:I,onMessageReceived:A})=>{const k=(0,a.useRef)(null),g=E(),h=e??g,{messages:c,isLoading:b,error:p,sendMessage:y}=z({client:e,conversationId:n});(0,a.useEffect)(()=>{if(!h||!d||d.length===0)return;let x=!1;const j=[];return Promise.all(d.map(N=>N.schema!=null?Promise.resolve(M.createFormCollector(N)):M.loadFormCollector(h,N))).then(N=>{if(!x)for(const Z of N)j.push(Z.install(h))}).catch(()=>{}),()=>{x=!0,j.forEach(N=>N())}},[h,d?JSON.stringify(d.map(x=>[x.name,x.schema??null,x.submit??!1,x.description??null])):""]),(0,a.useEffect)(()=>{k.current?.scrollIntoView({behavior:"smooth"})},[c]),(0,a.useEffect)(()=>{const x=c[c.length-1];x&&x.role==="assistant"&&x.status==="DONE"&&A&&A({id:x.id,content:x.content})},[c,A]);const w=async(x,j)=>{I?.(x),await y(x,j)},C=c[c.length-1],R=b&&C?.role==="assistant"&&(C.status==="IN_PROGRESS"||C.status==="WAITING_CLIENT"),v=m===!1?void 0:m??(x=>w(x));return(0,l.jsxs)("div",{className:`ago-chat-widget ${S}`,style:{display:"flex",flexDirection:"column",height:typeof u=="number"?`${u}px`:u,border:"1px solid #dee3e8",borderRadius:"16px",overflow:"hidden",backgroundColor:"#fff",fontFamily:'"IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',textAlign:"left",boxShadow:"rgba(15, 15, 15, 0.08) 0px 2px 16px 0px"},children:[(0,l.jsxs)("div",{className:"ago-chat-widget__header",style:{padding:"14px 16px",borderBottom:"1px solid #dee3e8",backgroundColor:"#03182f",color:"#e8f0fe",display:"flex",alignItems:"center",gap:"10px"},children:[s&&(0,l.jsx)("img",{src:s,alt:"Logo",style:{height:"24px",width:"auto"}}),(0,l.jsx)("h3",{style:{margin:0,fontSize:"15px",fontWeight:600},children:t})]}),(0,l.jsxs)("div",{className:"ago-chat-widget__messages",role:"log","aria-live":"polite","aria-relevant":"additions text","aria-atomic":!1,style:{flex:1,overflow:"auto",padding:"16px",backgroundColor:"#fbfbfb"},children:[c.length===0?(0,l.jsx)("div",{style:{textAlign:"center",color:"#6b6d6f",padding:"24px 16px",fontSize:"16px",lineHeight:"1.5"},children:o}):c.map((x,j)=>(0,l.jsx)(K,{message:x,showAgentName:f,isLast:j===c.length-1,onFollowUpClick:v},x.id)),p&&(0,l.jsx)("div",{role:"alert",style:{padding:"10px 14px",backgroundColor:"#fef2f2",color:"#dc2626",borderRadius:"12px",marginTop:"8px",fontSize:"13px",border:"1px solid #fecaca"},children:p.message}),(0,l.jsx)("div",{ref:k})]}),(0,l.jsx)(U,{onSend:w,disabled:R,placeholder:r,allowFiles:i})]})};function J(e={}){const n=E(),t=e.client??n;if(!t)throw new _.AgoError("useProactiveNudge: no AgoClient. Pass one via options.client or wrap your tree with <AgoProvider>.","proactive_missing_client");const[o,r]=(0,a.useState)(null),i=(0,a.useRef)(o);i.current=o;const u=(0,a.useRef)(e.onExpand);return u.current=e.onExpand,(0,a.useEffect)(()=>{const s=d=>{r(d),t.proactive?.shown(d)},f=({nudge:d})=>{r(m=>m?.id===d.id?null:m)};return t.on("nudge:ready",s),t.on("nudge:accepted",f),t.on("nudge:dismissed",f),()=>{t.off("nudge:ready",s),t.off("nudge:accepted",f),t.off("nudge:dismissed",f)}},[t]),{nudge:o,accept:(0,a.useCallback)(async()=>{const s=i.current;s&&(r(null),await t.proactive?.accept(s),(s.source==="agent"||s.goal)&&u.current?.(s))},[t]),dismiss:(0,a.useCallback)(()=>{const s=i.current;s&&(r(null),t.proactive?.dismiss(s))},[t])}}var Ne=({client:e,onExpand:n,autoHideMs:t,position:o="bottom-right",openChatLabel:r="Open chat",className:i=""})=>{const{nudge:u,accept:s,dismiss:f}=J({client:e,onExpand:n});if((0,a.useEffect)(()=>{if(!u||!t)return;const m=setTimeout(()=>f(),t);return()=>clearTimeout(m)},[u,t,f]),!u)return null;const d=u.source==="agent"||!!u.goal;return(0,l.jsxs)("div",{className:`ago-nudge ${i}`,role:"status","aria-live":"polite",style:{position:"fixed",bottom:"90px",...o==="bottom-left"?{left:"20px"}:{right:"20px"},zIndex:2147483e3,maxWidth:"320px",padding:"14px 16px",backgroundColor:"#fff",color:"#03182f",border:"1px solid #dee3e8",borderRadius:"16px",boxShadow:"rgba(15, 15, 15, 0.12) 0px 4px 20px 0px",fontFamily:'"IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',fontSize:"14px",lineHeight:1.5,textAlign:"left"},children:[(0,l.jsx)("button",{type:"button",className:"ago-nudge__close","aria-label":"Dismiss",onClick:f,style:{position:"absolute",top:"6px",right:"8px",border:"none",background:"transparent",color:"#6b6d6f",fontSize:"16px",lineHeight:1,cursor:"pointer",padding:"4px"},children:"×"}),(0,l.jsx)("div",{className:"ago-nudge__message",style:{paddingRight:"16px"},children:u.message}),(u.action||d)&&(0,l.jsxs)("div",{className:"ago-nudge__actions",style:{display:"flex",gap:"8px",marginTop:"10px",flexWrap:"wrap"},children:[u.action&&(0,l.jsx)("button",{type:"button",className:"ago-nudge__action",onClick:()=>{s()},style:{border:"none",borderRadius:"10px",padding:"6px 12px",backgroundColor:"#03182f",color:"#e8f0fe",fontSize:"13px",fontWeight:600,cursor:"pointer"},children:u.action.label}),d&&(0,l.jsx)("button",{type:"button",className:"ago-nudge__expand",onClick:()=>{s()},style:{border:"1px solid #dee3e8",borderRadius:"10px",padding:"6px 12px",backgroundColor:"#fff",color:"#03182f",fontSize:"13px",fontWeight:600,cursor:"pointer"},children:r})]})]})};function V({client:e,autoLoad:n=!0}={}){const t=E(),o=e||t;if(!o)throw new Error("useConversation requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.");const[r,i]=(0,a.useState)([]),[u,s]=(0,a.useState)(null),[f,d]=(0,a.useState)(!1),[m,S]=(0,a.useState)(null),I=(0,a.useCallback)(async()=>{d(!0),S(null);try{const{data:g}=await o.getConversations();i(g)}catch(g){S(g instanceof Error?g:new Error("Failed to load conversations"))}finally{d(!1)}},[o]),A=(0,a.useCallback)(async g=>{d(!0),S(null);try{s(await o.getConversation(g))}catch(h){S(h instanceof Error?h:new Error("Failed to load conversation"))}finally{d(!1)}},[o]),k=(0,a.useCallback)(()=>{s(null)},[]);return(0,a.useEffect)(()=>{n&&I()},[n,I]),{conversations:r,currentConversation:u,isLoading:f,error:m,selectConversation:A,startNewConversation:k,refreshConversations:I}}function _e(e={}){const n=E(),t=e.client||n;if(!t)throw new Error("useChat requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.");const o=z({client:t,conversationId:e.conversationId}),r=V({client:t,autoLoad:e.autoLoad});return{messages:o.messages,isLoading:o.isLoading,error:o.error||r.error,sendMessage:o.sendMessage,clearMessages:o.clearMessages,conversationId:o.conversationId,conversations:r.conversations,currentConversation:r.currentConversation,isConversationsLoading:r.isLoading,selectConversation:r.selectConversation,startNewConversation:r.startNewConversation,refreshConversations:r.refreshConversations}}function Re(e,n){const t=F(),{name:o,description:r,parameters:i,handler:u,maxResultBytes:s,requiresApproval:f}=typeof e=="string"?{name:e,...n}:e,d=(0,a.useRef)(u);d.current=u,(0,a.useEffect)(()=>{const m=S=>d.current(S);return t.registerFunction(o,m,{description:r,parameters:i,maxResultBytes:s,requiresApproval:f}),()=>{t.unregisterFunction(o)}},[t,o,r,i,s,f])}function Ee(e,n){const t=F(),o=(0,a.useRef)(e);o.current=e,(0,a.useEffect)(()=>(t.registerNavigationFunction(r=>o.current(r),n),()=>{t.unregisterNavigationFunction()}),[t,n])}function Me(e,n){const t=F(),o=n?.functionName??"setPageState",r=n?.requiresApproval,i=(0,a.useRef)(e);i.current=e,(0,a.useEffect)(()=>{const u=i.current.map(s=>{const f=()=>i.current.find(d=>d.name===s.name)??s;return{name:s.name,description:s.description,schema:s.schema,get:s.get?()=>f().get?.():void 0,set:d=>f().set(d)}});return t.registerPageStateFunction(u,{functionName:o,requiresApproval:r}),()=>{t.unregisterPageStateFunction(o)}},[t,o,r])}function Fe(e){const n=F(),t=(0,a.useRef)(e);t.current=e,(0,a.useEffect)(()=>ae.attachAutoContinueAfterNavigation(n,()=>t.current),[n])}var Pe=new Set(["awaiting-approval"]);function Y(e){switch(e){case"progress_indicator":return"progress";case"reasoning":return"reasoning";case"confirmation_input":return"confirmation";case"form":return"form";default:return"status"}}function Te(e){return e.type==="client_function"?e.functionName==="navigateToPage"?"navigation":"action":Y(e.type)}function L(e,n){const t=(e??"").toLowerCase();return t.includes("reject")?"rejected":t.includes("error")||t.includes("fail")?"error":t.includes("done")||t.includes("complet")?"done":(t.includes("waiting")||t.includes("pending"))&&(n==="confirmation"||n==="form")?"awaiting-approval":"running"}function $(e){return typeof e!="string"||!e?"page":e.replace(/[-_]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase()).trim()}function De(e){switch(e.kind){case"navigation":return`Navigating to ${$(e.arguments?.page)}`;case"action":return e.functionName==="setPageState"?"Updating the page":e.functionName==="openFilteredConversations"?"Opening conversations":e.toolDisplayName||e.message||$(e.functionName)||"Working";case"progress":return e.message||"Working";case"reasoning":return e.message||"Thinking";case"confirmation":return e.message||"Waiting for your confirmation";case"form":return e.message||e.toolDisplayName||"Please fill in the form";default:return e.message||e.toolDisplayName||e.toolName||"Working"}}function We(e={}){const{includeReasoning:n=!1,labelFor:t}=e,o=E(),r=e.client||o;if(!r)throw new _.AgoError("useAgoActivity requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.","provider_missing_client");const[i,u]=(0,a.useState)([]),s=(0,a.useRef)(new Set),f=(0,a.useRef)(void 0),d=(0,a.useRef)(t);d.current=t;const m=(0,a.useCallback)((g,h)=>{u(c=>{const b=c.findIndex(y=>y.id===g),p={...b>=0?c[b]:{id:g,kind:"status",label:"",status:"running",requiresApproval:!1,createdAt:new Date},...h};return p.label=d.current?.(p)??De(p),b>=0?[...c.slice(0,b),p,...c.slice(b+1)]:[...c,p]})},[]);(0,a.useEffect)(()=>{const g=v=>{f.current=v.messageId},h=v=>{const x=Y(v.type);x==="reasoning"&&!n||m(v.id,{kind:x,status:L(v.status,x),messageId:f.current,toolName:v.toolName,toolDisplayName:v.toolDisplayName,message:v.message,data:v.data,formSchema:v.formSchema,requiresApproval:x==="confirmation"||x==="form"})},c=v=>{v.invocationId&&m(v.invocationId,{kind:v.functionName==="navigateToPage"?"navigation":"action",status:"running",messageId:f.current,functionName:v.functionName,arguments:v.arguments})},b=v=>{v.invocationId&&m(v.invocationId,{kind:v.functionName==="navigateToPage"?"navigation":"action",status:"awaiting-approval",messageId:f.current,functionName:v.functionName,arguments:v.arguments,requiresApproval:!0})},p=v=>{if(!v.invocationId)return;const x=v.result,j=typeof v.result=="object"&&x!==null&&x.approved===!1&&x.reason==="user_rejected";m(v.invocationId,{status:v.error?"error":j?"rejected":"done",requiresApproval:!1})},y=v=>{for(const x of v.messages??[])if(x.role==="assistant")for(const j of x.toolCalls??[]){const N=Te(j);N==="reasoning"&&!n||/waiting/i.test(j.status??"")||m(j.id,{kind:N,status:L(j.status,N),messageId:x.id,toolName:j.toolName,toolDisplayName:j.toolDisplayName,functionName:j.functionName,arguments:j.arguments,message:j.message,data:j.data,formSchema:j.formSchema,requiresApproval:N==="confirmation"||N==="form"})}},w=v=>{u(x=>x.map(j=>j.status==="running"||j.status==="awaiting-approval"?{...j,status:v}:j))},C=()=>w("done"),R=()=>w("error");return r.on("message:start",g),r.on("toolCall:received",h),r.on("function:invoke",c),r.on("function:awaiting-approval",b),r.on("function:result",p),r.on("conversation:loaded",y),r.on("message:complete",C),r.on("message:error",R),()=>{r.off("message:start",g),r.off("toolCall:received",h),r.off("function:invoke",c),r.off("function:awaiting-approval",b),r.off("function:result",p),r.off("conversation:loaded",y),r.off("message:complete",C),r.off("message:error",R)}},[r,n,m]);const S=(0,a.useCallback)(async g=>{const h=i.find(c=>c.id===g);!h||h.status!=="awaiting-approval"||s.current.has(g)||h.kind!=="form"&&(s.current.add(g),m(g,{status:"running",requiresApproval:!1}),h.functionName?await r.approveFunction(g):await r.confirmToolCall(g))},[r,i,m]),I=(0,a.useCallback)(async g=>{const h=i.find(c=>c.id===g);!h||h.status!=="awaiting-approval"||s.current.has(g)||(s.current.add(g),m(g,{status:"rejected",requiresApproval:!1}),h.functionName?await r.rejectFunction(g):await r.rejectToolCall(g))},[r,i,m]),A=(0,a.useCallback)(async(g,h)=>{m(g,{status:"running",requiresApproval:!1}),await r.submitToolCallForm(g,h),m(g,{status:"done"})},[r,m]),k=(0,a.useCallback)(()=>{s.current.clear(),u([])},[]);return{items:i,latest:i.length>0?i[i.length-1]:void 0,isAwaitingApproval:i.some(g=>Pe.has(g.status)),approve:S,reject:I,submitForm:A,clear:k}}function Oe(e={}){const n=E(),t=e.client||n;if(!t)throw new _.AgoError("useAgoActivityLog requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.","provider_missing_client");const[o,r]=(0,a.useState)(()=>t.getRecentActivity());(0,a.useEffect)(()=>{r(t.getRecentActivity());const s=()=>r(t.getRecentActivity());return t.on("activity:recorded",s),()=>t.off("activity:recorded",s)},[t]);const i=(0,a.useCallback)(s=>t.recordActivity(s),[t]),u=(0,a.useCallback)(()=>{t.clearActivity(),r([])},[t]);return{entries:o,latest:o.length>0?o[o.length-1]:void 0,record:i,clear:u}}function qe(e,n){const t=F(),o=(0,a.useId)(),r=n??o,i=(0,a.useRef)(e);i.current=e;const u=typeof e=="function";(0,a.useEffect)(()=>{if(typeof i.current=="function"){const s=()=>i.current();return t.addDynamicContext(r,s),()=>{t.removeDynamicContext(r)}}return t.setContext(r,i.current),()=>{t.removeContext(r)}},[t,r,u,u?"":JSON.stringify(e)])}function X(e){return(0,a.useSyncExternalStore)(e.subscribe,e.get,e.get)}var H={missing:[],complete:!1};function ze(e){const n=F(),t=e.schema!=null,o=JSON.stringify(e.schema??null),r=e.submit,i=r?typeof r=="string"?`client:${r}`:r.via==="backend"?"backend":"handler"in r?"client:handler":`client:${r.url}`:"none",u=JSON.stringify(e.initialValues??null),s=(0,a.useMemo)(()=>t?M.createFormCollector(e):null,[t,e.name,o,i,u,e.autoSubmit]),[f,d]=(0,a.useState)({collector:null,loading:!t,error:null});(0,a.useEffect)(()=>{if(t)return;let b=!1;return d({collector:null,loading:!0,error:null}),M.loadFormCollector(n,e).then(p=>{b||d({collector:p,loading:!1,error:null})}).catch(p=>{b||d({collector:null,loading:!1,error:p instanceof Error?p:new Error(String(p))})}),()=>{b=!0}},[n,t,e.name,i,u,e.autoSubmit]);const m=t?s:f.collector,S=t?!1:f.loading,I=t?null:f.error;(0,a.useEffect)(()=>{if(m)return m.install(n)},[n,m]);const A=(0,a.useMemo)(()=>_.createStore({values:e.initialValues??{},submitted:!1}),[u]),k=X(m?.store??A),g=(0,a.useMemo)(()=>m?.getStatus()??H,[k,m]),h=(0,a.useMemo)(()=>({...k,...g}),[k,g]),c=(0,a.useMemo)(()=>({name:e.name,store:A,functions:[],contextKey:`form:${e.name}`,contextProvider:()=>({name:`Form: ${e.name}`,description:""}),definitionContextKey:`form:${e.name}:definition`,definitionContextProvider:()=>({name:`Form definition: ${e.name}`,description:"",stable:!0}),install:()=>()=>{},hydrate:()=>{},submit:async()=>({ok:!1,error:"Form definition not loaded yet."}),getValues:()=>A.get().values,setValues:()=>{},reset:()=>{},getStatus:()=>H}),[e.name,A]);return{...m??c,state:h,loading:S,error:I}}exports.AgoNudge=Ne;exports.AgoProvider=le;exports.ChatInput=U;exports.ChatWidget=Ie;exports.Markdown=G;exports.Message=K;exports.__exportAll=oe;exports.createFormCollector=M.createFormCollector;exports.createMockClient=ie.createMockClient;exports.deriveFormStatus=M.deriveFormStatus;exports.loadFormCollector=M.loadFormCollector;exports.useAgo=B;exports.useAgoActivity=We;exports.useAgoActivityLog=Oe;exports.useAgoAutoContinueAfterNavigation=Fe;exports.useAgoClient=F;exports.useAgoContext=qe;exports.useAgoFunction=Re;exports.useAgoNavigation=Ee;exports.useAgoPageState=Me;exports.useAgoStore=X;exports.useChat=_e;exports.useConversation=V;exports.useFormCollector=ze;exports.useMessages=z;exports.useOptionalAgoClient=E;exports.useProactiveNudge=J;
package/dist/react.d.cts CHANGED
@@ -1,5 +1,21 @@
1
1
  import { default as default_2 } from 'react';
2
2
 
3
+ export declare interface ActivityEntry {
4
+ ts: number;
5
+ actor: "user" | "agent";
6
+ name: string;
7
+ summary: string;
8
+ data?: Record<string, unknown>;
9
+ }
10
+
11
+ export declare interface ActivityInput {
12
+ actor?: "user" | "agent";
13
+ name: string;
14
+ summary: string;
15
+ data?: Record<string, unknown>;
16
+ ts?: number;
17
+ }
18
+
3
19
  /**
4
20
  * One normalized entry in the agent's activity feed. Merges a tool call
5
21
  * (`toolCall:received`) or a client-function invocation (`function:invoke` /
@@ -91,6 +107,8 @@ declare class AgoClient {
91
107
  private functionRegistry;
92
108
  private contextRegistry;
93
109
  private eventEmitter;
110
+ private activityLedger;
111
+ private lastSentPageState;
94
112
  private config;
95
113
  /** Conversations already warned about an empty reply (one warning each). */
96
114
  private warnedEmptyConversations;
@@ -177,9 +195,14 @@ declare class AgoClient {
177
195
  */
178
196
  rejectFunction(invocationId: string): Promise<void>;
179
197
  /**
180
- * Get list of conversations
198
+ * Get a page of conversations, newest-first. `pageSize` is capped at 100 by
199
+ * the backend (default 50). Returns the `{ data, has_more, total }` envelope
200
+ * so callers can page; `total` counts across all pages.
181
201
  */
182
- getConversations(): Promise<Conversation[]>;
202
+ getConversations(options?: {
203
+ page?: number;
204
+ pageSize?: number;
205
+ }): Promise<PaginatedResult<Conversation>>;
183
206
  /**
184
207
  * Get a specific conversation with messages
185
208
  */
@@ -401,6 +424,19 @@ declare class AgoClient {
401
424
  * Get the current context snapshot.
402
425
  */
403
426
  getContextSnapshot(): ContextSnapshot | null;
427
+ private buildSendContext;
428
+ /**
429
+ * Record something the user just did so the agent is aware of it on the next
430
+ * message. `actor` defaults to `"user"`. Keep `summary` short and high-signal
431
+ * (no raw payloads, secrets, or PII).
432
+ */
433
+ recordActivity(entry: ActivityInput): void;
434
+ /** Recent user + agent actions, oldest first (a copy). */
435
+ getRecentActivity(): ActivityEntry[];
436
+ clearActivity(): void;
437
+ private addActivity;
438
+ private recordAgentAction;
439
+ private registerActivityContext;
404
440
  /**
405
441
  * Subscribe to an event
406
442
  */
@@ -512,6 +548,15 @@ declare interface AgoClientEvents {
512
548
  * notably `createFormCollector` — can replay them to restore their state.
513
549
  */
514
550
  "conversation:loaded": Conversation;
551
+ /**
552
+ * The conversation's title was generated and streamed during a live turn
553
+ * (the backend emits it once, at the end of the first turn). Lets the UI
554
+ * update a header without a refetch.
555
+ */
556
+ "conversation:title": {
557
+ conversationId: string;
558
+ title: string;
559
+ };
515
560
  "toolCall:received": ToolCallData;
516
561
  "toolCall:form": ToolCallData;
517
562
  "function:invoke": ClientFunctionInvocation;
@@ -572,6 +617,8 @@ declare interface AgoClientEvents {
572
617
  "nudge:accepted": {
573
618
  nudge: ProactiveNudgeInstance;
574
619
  };
620
+ /** A user- or agent-action was recorded into the activity ledger. */
621
+ "activity:recorded": ActivityEntry;
575
622
  }
576
623
 
577
624
  /**
@@ -633,6 +680,14 @@ export declare interface AgoConfig {
633
680
  * with `maxResultBytes` on its definition; `Infinity` disables the guard.
634
681
  */
635
682
  maxFunctionResultBytes?: number;
683
+ /**
684
+ * Max number of recent actions kept in the in-memory activity ledger that
685
+ * rides along as the `activity:recent` context entry. Older entries drop
686
+ * first. Default `10`. Larger values give the agent more history at the cost
687
+ * of tokens on every message. Each entry's `data` is also size-clamped (long
688
+ * strings truncated, large arrays capped) so one event can't bloat the context.
689
+ */
690
+ maxActivityEntries?: number;
636
691
  /**
637
692
  * Enable the proactive mode: declarative triggers evaluated client-side
638
693
  * against friction signals (dwell/idle time, rage clicks, route bounces…)
@@ -1393,6 +1448,16 @@ export declare type NudgeAction = {
1393
1448
  setPageState: Record<string, unknown>;
1394
1449
  };
1395
1450
 
1451
+ /**
1452
+ * A page of list results, mirroring the API's `{ data, has_more, total }`
1453
+ * envelope. `total` is the count across all pages, not just this page.
1454
+ */
1455
+ export declare interface PaginatedResult<T> {
1456
+ data: T[];
1457
+ hasMore: boolean;
1458
+ total: number;
1459
+ }
1460
+
1396
1461
  /**
1397
1462
  * Controller returned by {@link createAgoProactive} (also available as
1398
1463
  * `client.proactive`).
@@ -1645,6 +1710,8 @@ declare interface SSEChunkData {
1645
1710
  thread?: {
1646
1711
  id: string;
1647
1712
  };
1713
+ /** Generated conversation title, streamed once at the end of the first turn. */
1714
+ title?: string;
1648
1715
  agent?: {
1649
1716
  id: string;
1650
1717
  name: string;
@@ -1789,6 +1856,20 @@ export declare function useAgo(config: UseAgoOptions | null): {
1789
1856
  */
1790
1857
  export declare function useAgoActivity(options?: UseAgoActivityOptions): UseAgoActivityResult;
1791
1858
 
1859
+ /** Recent user + agent activity, kept in sync with the client's ledger. */
1860
+ export declare function useAgoActivityLog(options?: UseAgoActivityLogOptions): UseAgoActivityLogResult;
1861
+
1862
+ export declare interface UseAgoActivityLogOptions {
1863
+ client?: AgoClient;
1864
+ }
1865
+
1866
+ export declare interface UseAgoActivityLogResult {
1867
+ entries: ActivityEntry[];
1868
+ latest?: ActivityEntry;
1869
+ record: (entry: ActivityInput) => void;
1870
+ clear: () => void;
1871
+ }
1872
+
1792
1873
  export declare interface UseAgoActivityOptions {
1793
1874
  /** The AGO client. If omitted, reads from AgoProvider context. */
1794
1875
  client?: AgoClient;