@useago/sdk 1.7.0 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,16 @@ All notable changes to `@useago/sdk` are documented here.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.7.1] - 2026-08-10
9
+
10
+ ### Fixed
11
+
12
+ - The `setPageState` function synthesized by `registerPageStateFunction` /
13
+ `useAgoPageState` now sends an explicit `required: []` in its parameter
14
+ schema. Backends that treat a missing `required` array as "every property is
15
+ required" forced the agent to set all controls on every call; controls are
16
+ optional, and the agent sets only the ones the user asked for.
17
+
8
18
  ## [1.7.0] - 2026-08-07
9
19
 
10
20
  ### Added
@@ -1765,7 +1765,8 @@ Returns the resulting page data once it has loaded: ${r.description}` : ""),
1765
1765
  properties: Object.fromEntries(e.map((a) => [a.name, {
1766
1766
  ...a.schema,
1767
1767
  description: a.description
1768
- }]))
1768
+ }])),
1769
+ required: []
1769
1770
  },
1770
1771
  requiresApproval: s?.requiresApproval,
1771
1772
  maxResultBytes: r?.maxResultBytes
@@ -6,4 +6,4 @@ var ie=10,$=1e3;function ne(e){if(typeof e!="object"||e===null)return!1;const t=
6
6
  ${n}`,parameters:{type:"object",properties:c,required:["page"]}}),this.addDynamicContext("current-page",()=>{if(typeof window>"u"||!window.location)return null;const o=window.location.href,a=typeof document<"u"?document.title:void 0,h=rt(window.location.pathname,s),u={url:o};return h&&(u.page=h.name),a&&(u.title=a),{name:"Current page",description:"The page the user is currently viewing.",data:u}})}unregisterNavigationFunction(){this.unregisterFunction("navigateToPage"),this.removeDynamicContext("current-page")}registerPageStateFunction(t,s){const i=s?.functionName??"setPageState",n=new Map(t.map(a=>[a.name,a])),r=s?.data,c=t.map(a=>`- "${a.name}": ${a.description}`).join(`
7
7
  `);this.registerFunction(i,async a=>{const h={};for(const[u,d]of Object.entries(a)){if(d===void 0)continue;const f=n.get(u);f&&(await f.set(d),h[u]=d)}return r?{success:!0,applied:h,data:U(i,await this.readPageData(i,r,s),this.pageDataBudget(r)-this.envelopeBytes({success:!0,applied:h}))}:{success:!0,applied:h}},{description:`Change the state of the current page. Set ONLY the controls the user explicitly asked for; leave the others unset. Available controls:
8
8
  ${c}`+(r?`
9
- Returns the resulting page data once it has loaded: ${r.description}`:""),parameters:{type:"object",properties:Object.fromEntries(t.map(a=>[a.name,{...a.schema,description:a.description}]))},requiresApproval:s?.requiresApproval,maxResultBytes:r?.maxResultBytes});const o=W(i);r?(this.warnIfPlaceholderMode(i),this.registerFunction(o,async()=>({data:U(i,await this.readPageData(i,r,s),this.pageDataBudget(r)-this.envelopeBytes({}))}),{description:`Read what the current page is displaying, without changing anything: ${r.description}`,parameters:{type:"object",properties:{}},maxResultBytes:r.maxResultBytes}),this.pageDataCompanions.add(o)):this.pageDataCompanions.delete(o)&&this.unregisterFunction(o),this.addDynamicContext(`page-state:${i}`,()=>{const a=t.filter(u=>typeof u.get=="function");if(a.length===0)return null;const h={};for(const u of a)h[u.name]=u.get();return{name:"Page state",description:"Current, editable state of the page the user is viewing.",data:h}})}unregisterPageStateFunction(t){const s=t??"setPageState";this.unregisterFunction(s);const i=W(s);this.pageDataCompanions.delete(i)&&this.unregisterFunction(i),this.removeDynamicContext(`page-state:${s}`)}pageDataBudget(t){return t.maxResultBytes??this.functionRegistry.getDefaultMaxResultBytes()}envelopeBytes(t){return m(JSON.stringify({...t,data:null}))-4}readPageData(t,s,i){return ye(()=>s,i?.settleTimeoutMs??1e4).catch(n=>(l.warn(`Reading page data for "${t}" failed:`,n),{error:"page_data_unavailable",message:n instanceof Error?n.message:String(n)}))}warnIfPlaceholderMode(t){this.warnedPageDataPlaceholder||this.config.clientFunctionsMode==="placeholder"&&(this.warnedPageDataPlaceholder=!0,l.warn(`"${t}" declares a data source, but clientFunctionsMode is "placeholder": the agent will not see that data during the turn it calls the function. Switch to "pause" (the default) for the data to come back as the result of its own call.`))}setContext(t,s){this.contextRegistry.set(t,s),this.notifyContextChanged()}removeContext(t){const s=this.contextRegistry.remove(t);return s&&this.notifyContextChanged(),s}addDynamicContext(t,s){this.contextRegistry.addDynamicProvider(t,s),this.notifyContextChanged()}removeDynamicContext(t){const s=this.contextRegistry.removeDynamicProvider(t);return s&&this.notifyContextChanged(),s}notifyContextChanged(){this.eventEmitter.emit("context:changed",this.contextRegistry.getSnapshot())}emitFormEvent(t,s){this.eventEmitter.emit(t,s)}emitProactiveEvent(t,s){this.eventEmitter.emit(t,s)}getHttp(){return this.httpClient}getConfiguredAgent(){return this.config.agent||this.config.defaultAgentId}enableAutoPageContext(){this.addDynamicContext("browser-page",()=>{const t=typeof window<"u"?window.location.href:void 0,s=typeof document<"u"?document.title:void 0;return!t&&!s?null:{name:"Browser page",description:"Current page the user is viewing",data:{url:t,title:s}}})}getContextSnapshot(){return this.contextRegistry.getSnapshot()}buildSendContext(){const t=this.contextRegistry.getSnapshot(),s=t?.entries??{},{changes:i,baseline:n}=Xe(this.lastSentPageState,s);return this.lastSentPageState=n,i.length===0?t:{entries:{...s,[at]:{name:"State changes",description:"Fields in the page state that changed since your last message, as field: <old> -> <new>.",data:{changes:i}}}}}recordActivity(t){this.addActivity(t)}getRecentActivity(){return this.activityLedger.getRecent()}clearActivity(){this.activityLedger.clear()}addActivity(t){const s=this.activityLedger.add(t);this.eventEmitter.emit("activity:recorded",s)}recordAgentAction(t){const s=t.functionName,i=t.arguments;let n,r;if(s==="navigateToPage"){const c=i?.page;n="agent.navigate",r=c?`Agent navigated to "${String(c)}"`:"Agent navigated"}else s==="setPageState"?(n="agent.page_state",r="Agent changed the page state"):(n=`agent.${s}`,r=`Agent ran "${s}"`);this.addActivity({actor:"agent",name:n,summary:r,...i&&Object.keys(i).length>0?{data:{arguments:i}}:{}})}registerActivityContext(){this.contextRegistry.addDynamicProvider(ot,()=>{const t=this.activityLedger.getRecent();return t.length===0?null:{name:"Recent activity",description:"Recent actions by the user and the agent in the app, oldest first. Use this to understand what just happened before this message.",data:{events:t}}})}on(t,s){this.eventEmitter.on(t,s)}off(t,s){this.eventEmitter.off(t,s)}once(t,s){this.eventEmitter.once(t,s)}waitFor(t,s){return this.eventEmitter.waitFor(t,s)}updateConfig(t){const s={};for(const[n,r]of Object.entries(t))r!==void 0&&(s[n]=r);const i={...this.config,...s};O(i,"AgoClient.updateConfig"),this.config=i,this.httpClient.updateConfig(s),s.debug!==void 0&&(s.debug?l.enable():l.disable()),s.maxFunctionResultBytes!==void 0&&this.functionRegistry.setDefaultMaxResultBytes(s.maxFunctionResultBytes)}destroy(){this.proactive?.destroy(),this.proactive=null,this.activeTurn?.controller.abort(),this.activeTurn=null,this.pausedTurn=null,this.stoppedTurnIds.clear(),this.eventEmitter.removeAllListeners(),this.functionRegistry.clear(),this.contextRegistry.clear(),this.pendingResumes.clear(),this.pendingApprovals.clear(),this.resumeGate=null,l.log("AgoClient destroyed")}reviveAfterDestroy(){this.registerActivityContext(),this.config.proactive&&!this.proactive&&P(this,this.config.proactive)}};Object.defineProperty(exports,"ActivityLedger",{enumerable:!0,get:function(){return K}});Object.defineProperty(exports,"AgoApiError",{enumerable:!0,get:function(){return y}});Object.defineProperty(exports,"AgoClient",{enumerable:!0,get:function(){return ct}});Object.defineProperty(exports,"AgoError",{enumerable:!0,get:function(){return g}});Object.defineProperty(exports,"AgoFunctionError",{enumerable:!0,get:function(){return I}});Object.defineProperty(exports,"AgoNetworkError",{enumerable:!0,get:function(){return w}});Object.defineProperty(exports,"AgoStreamError",{enumerable:!0,get:function(){return _}});Object.defineProperty(exports,"ClientContextRegistry",{enumerable:!0,get:function(){return Q}});Object.defineProperty(exports,"DEFAULT_MAX_ACTIVITY_ENTRIES",{enumerable:!0,get:function(){return ie}});Object.defineProperty(exports,"EventEmitter",{enumerable:!0,get:function(){return te}});Object.defineProperty(exports,"FunctionRegistry",{enumerable:!0,get:function(){return z}});Object.defineProperty(exports,"SSEHandler",{enumerable:!0,get:function(){return Z}});Object.defineProperty(exports,"SignalCollector",{enumerable:!0,get:function(){return J}});Object.defineProperty(exports,"attachmentsFromFiles",{enumerable:!0,get:function(){return tt}});Object.defineProperty(exports,"canInlineImage",{enumerable:!0,get:function(){return Qe}});Object.defineProperty(exports,"createAgoProactive",{enumerable:!0,get:function(){return P}});Object.defineProperty(exports,"createStore",{enumerable:!0,get:function(){return X}});Object.defineProperty(exports,"formatFileSize",{enumerable:!0,get:function(){return Ze}});Object.defineProperty(exports,"isStreamNetworkError",{enumerable:!0,get:function(){return Ye}});Object.defineProperty(exports,"logger",{enumerable:!0,get:function(){return l}});Object.defineProperty(exports,"matchesRoutePattern",{enumerable:!0,get:function(){return Y}});Object.defineProperty(exports,"matchesWhen",{enumerable:!0,get:function(){return V}});Object.defineProperty(exports,"partialDeepMatch",{enumerable:!0,get:function(){return D}});Object.defineProperty(exports,"safeAttachmentUrl",{enumerable:!0,get:function(){return ee}});Object.defineProperty(exports,"validateConfig",{enumerable:!0,get:function(){return O}});
9
+ Returns the resulting page data once it has loaded: ${r.description}`:""),parameters:{type:"object",properties:Object.fromEntries(t.map(a=>[a.name,{...a.schema,description:a.description}])),required:[]},requiresApproval:s?.requiresApproval,maxResultBytes:r?.maxResultBytes});const o=W(i);r?(this.warnIfPlaceholderMode(i),this.registerFunction(o,async()=>({data:U(i,await this.readPageData(i,r,s),this.pageDataBudget(r)-this.envelopeBytes({}))}),{description:`Read what the current page is displaying, without changing anything: ${r.description}`,parameters:{type:"object",properties:{}},maxResultBytes:r.maxResultBytes}),this.pageDataCompanions.add(o)):this.pageDataCompanions.delete(o)&&this.unregisterFunction(o),this.addDynamicContext(`page-state:${i}`,()=>{const a=t.filter(u=>typeof u.get=="function");if(a.length===0)return null;const h={};for(const u of a)h[u.name]=u.get();return{name:"Page state",description:"Current, editable state of the page the user is viewing.",data:h}})}unregisterPageStateFunction(t){const s=t??"setPageState";this.unregisterFunction(s);const i=W(s);this.pageDataCompanions.delete(i)&&this.unregisterFunction(i),this.removeDynamicContext(`page-state:${s}`)}pageDataBudget(t){return t.maxResultBytes??this.functionRegistry.getDefaultMaxResultBytes()}envelopeBytes(t){return m(JSON.stringify({...t,data:null}))-4}readPageData(t,s,i){return ye(()=>s,i?.settleTimeoutMs??1e4).catch(n=>(l.warn(`Reading page data for "${t}" failed:`,n),{error:"page_data_unavailable",message:n instanceof Error?n.message:String(n)}))}warnIfPlaceholderMode(t){this.warnedPageDataPlaceholder||this.config.clientFunctionsMode==="placeholder"&&(this.warnedPageDataPlaceholder=!0,l.warn(`"${t}" declares a data source, but clientFunctionsMode is "placeholder": the agent will not see that data during the turn it calls the function. Switch to "pause" (the default) for the data to come back as the result of its own call.`))}setContext(t,s){this.contextRegistry.set(t,s),this.notifyContextChanged()}removeContext(t){const s=this.contextRegistry.remove(t);return s&&this.notifyContextChanged(),s}addDynamicContext(t,s){this.contextRegistry.addDynamicProvider(t,s),this.notifyContextChanged()}removeDynamicContext(t){const s=this.contextRegistry.removeDynamicProvider(t);return s&&this.notifyContextChanged(),s}notifyContextChanged(){this.eventEmitter.emit("context:changed",this.contextRegistry.getSnapshot())}emitFormEvent(t,s){this.eventEmitter.emit(t,s)}emitProactiveEvent(t,s){this.eventEmitter.emit(t,s)}getHttp(){return this.httpClient}getConfiguredAgent(){return this.config.agent||this.config.defaultAgentId}enableAutoPageContext(){this.addDynamicContext("browser-page",()=>{const t=typeof window<"u"?window.location.href:void 0,s=typeof document<"u"?document.title:void 0;return!t&&!s?null:{name:"Browser page",description:"Current page the user is viewing",data:{url:t,title:s}}})}getContextSnapshot(){return this.contextRegistry.getSnapshot()}buildSendContext(){const t=this.contextRegistry.getSnapshot(),s=t?.entries??{},{changes:i,baseline:n}=Xe(this.lastSentPageState,s);return this.lastSentPageState=n,i.length===0?t:{entries:{...s,[at]:{name:"State changes",description:"Fields in the page state that changed since your last message, as field: <old> -> <new>.",data:{changes:i}}}}}recordActivity(t){this.addActivity(t)}getRecentActivity(){return this.activityLedger.getRecent()}clearActivity(){this.activityLedger.clear()}addActivity(t){const s=this.activityLedger.add(t);this.eventEmitter.emit("activity:recorded",s)}recordAgentAction(t){const s=t.functionName,i=t.arguments;let n,r;if(s==="navigateToPage"){const c=i?.page;n="agent.navigate",r=c?`Agent navigated to "${String(c)}"`:"Agent navigated"}else s==="setPageState"?(n="agent.page_state",r="Agent changed the page state"):(n=`agent.${s}`,r=`Agent ran "${s}"`);this.addActivity({actor:"agent",name:n,summary:r,...i&&Object.keys(i).length>0?{data:{arguments:i}}:{}})}registerActivityContext(){this.contextRegistry.addDynamicProvider(ot,()=>{const t=this.activityLedger.getRecent();return t.length===0?null:{name:"Recent activity",description:"Recent actions by the user and the agent in the app, oldest first. Use this to understand what just happened before this message.",data:{events:t}}})}on(t,s){this.eventEmitter.on(t,s)}off(t,s){this.eventEmitter.off(t,s)}once(t,s){this.eventEmitter.once(t,s)}waitFor(t,s){return this.eventEmitter.waitFor(t,s)}updateConfig(t){const s={};for(const[n,r]of Object.entries(t))r!==void 0&&(s[n]=r);const i={...this.config,...s};O(i,"AgoClient.updateConfig"),this.config=i,this.httpClient.updateConfig(s),s.debug!==void 0&&(s.debug?l.enable():l.disable()),s.maxFunctionResultBytes!==void 0&&this.functionRegistry.setDefaultMaxResultBytes(s.maxFunctionResultBytes)}destroy(){this.proactive?.destroy(),this.proactive=null,this.activeTurn?.controller.abort(),this.activeTurn=null,this.pausedTurn=null,this.stoppedTurnIds.clear(),this.eventEmitter.removeAllListeners(),this.functionRegistry.clear(),this.contextRegistry.clear(),this.pendingResumes.clear(),this.pendingApprovals.clear(),this.resumeGate=null,l.log("AgoClient destroyed")}reviveAfterDestroy(){this.registerActivityContext(),this.config.proactive&&!this.proactive&&P(this,this.config.proactive)}};Object.defineProperty(exports,"ActivityLedger",{enumerable:!0,get:function(){return K}});Object.defineProperty(exports,"AgoApiError",{enumerable:!0,get:function(){return y}});Object.defineProperty(exports,"AgoClient",{enumerable:!0,get:function(){return ct}});Object.defineProperty(exports,"AgoError",{enumerable:!0,get:function(){return g}});Object.defineProperty(exports,"AgoFunctionError",{enumerable:!0,get:function(){return I}});Object.defineProperty(exports,"AgoNetworkError",{enumerable:!0,get:function(){return w}});Object.defineProperty(exports,"AgoStreamError",{enumerable:!0,get:function(){return _}});Object.defineProperty(exports,"ClientContextRegistry",{enumerable:!0,get:function(){return Q}});Object.defineProperty(exports,"DEFAULT_MAX_ACTIVITY_ENTRIES",{enumerable:!0,get:function(){return ie}});Object.defineProperty(exports,"EventEmitter",{enumerable:!0,get:function(){return te}});Object.defineProperty(exports,"FunctionRegistry",{enumerable:!0,get:function(){return z}});Object.defineProperty(exports,"SSEHandler",{enumerable:!0,get:function(){return Z}});Object.defineProperty(exports,"SignalCollector",{enumerable:!0,get:function(){return J}});Object.defineProperty(exports,"attachmentsFromFiles",{enumerable:!0,get:function(){return tt}});Object.defineProperty(exports,"canInlineImage",{enumerable:!0,get:function(){return Qe}});Object.defineProperty(exports,"createAgoProactive",{enumerable:!0,get:function(){return P}});Object.defineProperty(exports,"createStore",{enumerable:!0,get:function(){return X}});Object.defineProperty(exports,"formatFileSize",{enumerable:!0,get:function(){return Ze}});Object.defineProperty(exports,"isStreamNetworkError",{enumerable:!0,get:function(){return Ye}});Object.defineProperty(exports,"logger",{enumerable:!0,get:function(){return l}});Object.defineProperty(exports,"matchesRoutePattern",{enumerable:!0,get:function(){return Y}});Object.defineProperty(exports,"matchesWhen",{enumerable:!0,get:function(){return V}});Object.defineProperty(exports,"partialDeepMatch",{enumerable:!0,get:function(){return D}});Object.defineProperty(exports,"safeAttachmentUrl",{enumerable:!0,get:function(){return ee}});Object.defineProperty(exports,"validateConfig",{enumerable:!0,get:function(){return O}});
package/dist/angular.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./AgoClient-BHegN73y.cjs"),c=require("./autoContinue-CP9pJR-V.cjs");var n=class{constructor(t){this.client=new o.AgoClient(t),this.messages$=this.fromEvent("message:complete"),this.chunks$=this.fromEvent("message:chunk"),this.errors$=this.fromEvent("message:error"),this.messageStart$=this.fromEvent("message:start")}fromEvent(t){const e=this.client;return{subscribe(i){const s=r=>{i.next?.(r)};return e.on(t,s),{unsubscribe:()=>e.off(t,s)}}}}sendMessage(t,e){return this.client.sendMessage(t,e)}stop(){return this.client.stop()}stopMessage(t){return this.client.stopMessage(t)}isGenerating(){return this.client.isGenerating()}getConversations(){return this.client.getConversations().then(t=>t.data)}getConversation(t){return this.client.getConversation(t)}getMessages(t){return this.client.getMessages(t)}submitToolCallForm(t,e){return this.client.submitToolCallForm(t,e)}confirmToolCall(t){return this.client.confirmToolCall(t)}rejectToolCall(t){return this.client.rejectToolCall(t)}submitFeedback(t,e){return this.client.submitFeedback(t,e)}registerFunction(t,e,i){typeof t=="object"?this.client.registerFunction(t):this.client.registerFunction(t,e,i)}unregisterFunction(t){return this.client.unregisterFunction(t)}registerNavigationFunction(t,e){this.client.registerNavigationFunction(t,e)}unregisterNavigationFunction(){this.client.unregisterNavigationFunction()}enableAutoContinueAfterNavigation(t){return c.attachAutoContinueAfterNavigation(this.client,t)}registerPageStateFunction(t,e){this.client.registerPageStateFunction(t,e)}unregisterPageStateFunction(t){this.client.unregisterPageStateFunction(t)}on(t,e){this.client.on(t,e)}off(t,e){this.client.off(t,e)}updateConfig(t){this.client.updateConfig(t)}getClient(){return this.client}destroy(){this.client.destroy()}};function u(t){return{provide:n,useValue:new n(t)}}exports.AgoService=n;exports.provideAgo=u;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./AgoClient-B_u_d-XS.cjs"),c=require("./autoContinue-CP9pJR-V.cjs");var n=class{constructor(t){this.client=new o.AgoClient(t),this.messages$=this.fromEvent("message:complete"),this.chunks$=this.fromEvent("message:chunk"),this.errors$=this.fromEvent("message:error"),this.messageStart$=this.fromEvent("message:start")}fromEvent(t){const e=this.client;return{subscribe(i){const s=r=>{i.next?.(r)};return e.on(t,s),{unsubscribe:()=>e.off(t,s)}}}}sendMessage(t,e){return this.client.sendMessage(t,e)}stop(){return this.client.stop()}stopMessage(t){return this.client.stopMessage(t)}isGenerating(){return this.client.isGenerating()}getConversations(){return this.client.getConversations().then(t=>t.data)}getConversation(t){return this.client.getConversation(t)}getMessages(t){return this.client.getMessages(t)}submitToolCallForm(t,e){return this.client.submitToolCallForm(t,e)}confirmToolCall(t){return this.client.confirmToolCall(t)}rejectToolCall(t){return this.client.rejectToolCall(t)}submitFeedback(t,e){return this.client.submitFeedback(t,e)}registerFunction(t,e,i){typeof t=="object"?this.client.registerFunction(t):this.client.registerFunction(t,e,i)}unregisterFunction(t){return this.client.unregisterFunction(t)}registerNavigationFunction(t,e){this.client.registerNavigationFunction(t,e)}unregisterNavigationFunction(){this.client.unregisterNavigationFunction()}enableAutoContinueAfterNavigation(t){return c.attachAutoContinueAfterNavigation(this.client,t)}registerPageStateFunction(t,e){this.client.registerPageStateFunction(t,e)}unregisterPageStateFunction(t){this.client.unregisterPageStateFunction(t)}on(t,e){this.client.on(t,e)}off(t,e){this.client.off(t,e)}updateConfig(t){this.client.updateConfig(t)}getClient(){return this.client}destroy(){this.client.destroy()}};function u(t){return{provide:n,useValue:new n(t)}}exports.AgoService=n;exports.provideAgo=u;
package/dist/angular.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as o } from "./AgoClient-PWPaekcg.js";
1
+ import { t as o } from "./AgoClient-BJjLTOw4.js";
2
2
  import { t as c } from "./autoContinue-CC8K9mBU.js";
3
3
  var s = class {
4
4
  constructor(t) {
@@ -1 +1 @@
1
- const d=require("./AgoClient-BHegN73y.cjs");var f="ago_widget_id",g="ago_last_thread",y=7200*1e3;function v(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const r=Math.floor(Math.random()*16);return(e==="x"?r:r&3|8).toString(16)})}function _(e={}){const r=e.key??f,i=e.threadKey??g,u=e.ttlMs??y,l=e.storage??(typeof localStorage<"u"?localStorage:void 0);let n=e.widgetId??"";if(!n&&l)try{n=l.getItem(r)??""}catch{}if(n||(n=v()),l)try{l.setItem(r,n)}catch{}const o=d.createStore({value:null,lastMessageAt:null},{key:i,storage:l}),s=o.get();s.value!==null&&c(s.lastMessageAt)&&o.set({value:null,lastMessageAt:null});function c(t){return t===null?!0:Number.isFinite(u)?Date.now()-t>u:!1}return{widgetId:n,key:r,getLastActiveThread(){const{value:t,lastMessageAt:a}=o.get();return t===null||c(a)?null:t},setActiveThread(t,a){const x=a==null?null:a instanceof Date?a.getTime():a;o.set({value:t,lastMessageAt:x})},clear(){o.set({value:null,lastMessageAt:null})}}}Object.defineProperty(exports,"createConversationSession",{enumerable:!0,get:function(){return _}});
1
+ const d=require("./AgoClient-B_u_d-XS.cjs");var f="ago_widget_id",g="ago_last_thread",y=7200*1e3;function v(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const r=Math.floor(Math.random()*16);return(e==="x"?r:r&3|8).toString(16)})}function _(e={}){const r=e.key??f,i=e.threadKey??g,u=e.ttlMs??y,l=e.storage??(typeof localStorage<"u"?localStorage:void 0);let n=e.widgetId??"";if(!n&&l)try{n=l.getItem(r)??""}catch{}if(n||(n=v()),l)try{l.setItem(r,n)}catch{}const o=d.createStore({value:null,lastMessageAt:null},{key:i,storage:l}),s=o.get();s.value!==null&&c(s.lastMessageAt)&&o.set({value:null,lastMessageAt:null});function c(t){return t===null?!0:Number.isFinite(u)?Date.now()-t>u:!1}return{widgetId:n,key:r,getLastActiveThread(){const{value:t,lastMessageAt:a}=o.get();return t===null||c(a)?null:t},setActiveThread(t,a){const x=a==null?null:a instanceof Date?a.getTime():a;o.set({value:t,lastMessageAt:x})},clear(){o.set({value:null,lastMessageAt:null})}}}Object.defineProperty(exports,"createConversationSession",{enumerable:!0,get:function(){return _}});
@@ -1,4 +1,4 @@
1
- import { h as d } from "./AgoClient-PWPaekcg.js";
1
+ import { h as d } from "./AgoClient-BJjLTOw4.js";
2
2
  var f = "ago_widget_id", g = "ago_last_thread", y = 7200 * 1e3;
3
3
  function v() {
4
4
  return typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (e) => {
@@ -1,4 +1,4 @@
1
- import { h as R, v as w } from "./AgoClient-PWPaekcg.js";
1
+ import { h as R, v as w } from "./AgoClient-BJjLTOw4.js";
2
2
  var j = /^[a-zA-Z0-9_-]{1,40}$/, V = (s) => s == null || s === "";
3
3
  function S(s, e) {
4
4
  if ("anyOf" in s) return s.anyOf.some((c) => S(c, e));
@@ -1 +1 @@
1
- const C=require("./AgoClient-BHegN73y.cjs");var W=/^[a-zA-Z0-9_-]{1,40}$/,A=n=>n==null||n==="";function S(n,e){if("anyOf"in n)return n.anyOf.some(c=>S(c,e));if("allOf"in n)return n.allOf.every(c=>S(c,e));const l=e[n.property];if(A(l))return!1;if(Array.isArray(n.value))return n.value.some(c=>String(l)===String(c));if(!n.op)return String(l)===String(n.value);const i=Number(l),a=Number(n.value);if(Number.isNaN(i)||Number.isNaN(a))return!1;switch(n.op){case">=":return i>=a;case"<=":return i<=a;case">":return i>a;case"<":return i<a;default:return C.logger.warn(`Unknown requiredWhen op "${n.op}"; treating as not required.`),!1}}function h(n,e){const l=n.properties??{},i=new Set;for(const c of n.required??[]){const d=l[c]?.requiredWhen;(!d||S(d,e))&&i.add(c)}for(const[c,d]of Object.entries(l))d.requiredWhen&&S(d.requiredWhen,e)&&i.add(c);const a=[...i].filter(c=>A(e[c]));return{missing:a,complete:a.length===0}}function B(n){const e={};for(const[l,i]of Object.entries(n.properties??{}))e[l]={type:i.type,...i.description!=null&&{description:i.description},...i.enum&&{enum:i.enum},...i.default!==void 0&&{default:i.default}};return{type:"object",properties:e,required:[]}}function V(n){const{name:e,description:l,schema:i}=n;if(!W.test(e))throw new Error(`Invalid form collector name "${e}": must match ${W} (it becomes the update_/submit_ function names).`);const a=typeof n.submit=="string"?n.submit?{via:"client",url:n.submit}:!1:n.submit??!1;n.autoSubmit===!0&&!a&&C.logger.warn(`FormCollector "${e}": autoSubmit is ignored because no submit target is configured.`);const c=(n.autoSubmit??!0)&&!!a,d=i.properties??{},$=t=>{const r={};for(const[o,s]of Object.entries(t)){const u=d[o];if(u)if(s==null)r[o]=s;else if(u.type==="number"||u.type==="integer"){const f=typeof s=="number"?s:Number(s);r[o]=Number.isNaN(f)?s:f}else u.type==="boolean"?r[o]=typeof s=="boolean"?s:s==="true"?!0:s==="false"?!1:!!s:r[o]=s}return r},N=n.initialValues??{},m=C.createStore({values:N,submitted:!1}),w=t=>{const r=m.get(),o={...r,values:{...r.values,...t}};return m.set(o),o};let b=null;const k=(t,r)=>{b?.emitFormEvent("form:error",{name:e,values:t,error:r})};let p=null;const I=async()=>{const{values:t}=m.get(),{complete:r,missing:o}=h(i,t);if(!r)return{ok:!1,missing:o};if(!a)return{ok:!1,error:"No submit target configured for this form collector."};const s=t;try{let u;if(a.via==="client")if("handler"in a)u=await a.handler(s);else{const f=await fetch(a.url,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(s)});if(!f.ok){const j=`Submit failed: HTTP ${f.status}`;return k(s,j),{ok:!1,error:j}}u=await f.json().catch(()=>{})}else{if(!b)return{ok:!1,error:"Backend submit requires install(client) (or useFormCollector) first."};u=await b.submitFormCollector(e,s)}return m.set({...m.get(),submitted:!0,submitResult:u}),b?.emitFormEvent("form:submitted",{name:e,values:s,result:u}),{ok:!0,result:u}}catch(u){const f=u instanceof Error?u.message:"Submit failed";return C.logger.error(`FormCollector "${e}" submit failed:`,u),k(s,f),{ok:!1,error:f}}},F=()=>p||(p=(async()=>{try{return await I()}finally{p=null}})(),p),q=async()=>{if(!c||!a)return null;const{values:t,submitted:r}=m.get();return r||!h(i,t).complete?null:F()},O={name:`update_${e}`,description:`Fill or update fields of the "${e}" form. ${l} Pass any subset of fields; call it repeatedly to fill the form as the user provides information. Returns the current values and which required fields are still missing.`,parameters:B(i),handler:async t=>{const r=w($(t)),{missing:o}=h(i,r.values),s=await q();return s?s.ok?{ok:!0,values:r.values,missing:o,submitted:!0}:{ok:!0,values:r.values,missing:o,submitted:!1,submitError:s.error}:{ok:!0,values:r.values,missing:o}}},y=[O];a&&!c&&y.push({name:`submit_${e}`,description:`Submit the completed "${e}" form. Only call this once every required field is collected and the user has confirmed. If fields are missing it returns them instead of submitting.`,parameters:{type:"object",properties:{}},handler:()=>F()});const D="client__",_=a?`submit_${e}`:null,R=t=>{const r=t.functionName??t.toolName;if(r)return r.startsWith(D)?r.slice(8):r},x=t=>{let r={...N},o=!1;for(const s of t){const u=R(s);u===O.name?s.arguments&&(r={...r,...$(s.arguments)}):_&&u===_&&s.status?.toLowerCase()==="done"&&(o=!0)}m.set({values:r,submitted:o})},g=`form:${e}`,v=`${g}:definition`,P=()=>({name:`Form definition: ${e}`,description:`${l} Some fields are conditionally required; the requiredWhen field in the schema tells you when each becomes required. The form schema is the following: ${JSON.stringify(i)}.`,stable:!0}),T=()=>{const{values:t,submitted:r}=m.get(),{missing:o,complete:s}=h(i,t),u=a?c?" The form is submitted automatically as soon as every required field is filled, so there is no submit function to call.":` When nothing is missing and the user confirms, call submit_${e}.`:"",f=r?`The "${e}" form has been submitted.`:`You are currently collecting information from the user to fill the "${e}" form.`;return{name:`Form: ${e}`,description:`${f} The form's schema and field requirements are in the "${v}" client context. Call update_${e} with any fields the user provides; ask only for what is still missing.${u}`,data:{values:t,missing:o,complete:s,submitted:r}}},E=t=>{x((t.messages??[]).flatMap(r=>r.toolCalls??[]))};return{name:e,store:m,functions:y,contextKey:g,contextProvider:T,definitionContextKey:v,definitionContextProvider:P,install:t=>{b=t;for(const o of y)t.register(o);t.addDynamicContext(v,P),t.addDynamicContext(g,T);const r=m.subscribe(()=>t.notifyContextChanged());return t.on("conversation:loaded",E),()=>{r();for(const o of y)t.unregisterFunction(o.name);t.removeDynamicContext(g),t.removeDynamicContext(v),t.off("conversation:loaded",E),b===t&&(b=null)}},hydrate:x,submit:F,getValues:()=>m.get().values,setValues:t=>{w($(t)),q()},reset:()=>{m.set({values:N,submitted:!1})},getStatus:()=>h(i,m.get().values)}}async function L(n,e){const l=await n.getFormCollector(e.name);return V({name:l.name,description:e.description??l.description,schema:e.schema??l.schema,submit:e.submit??l.submit,initialValues:e.initialValues,autoSubmit:e.autoSubmit??l.autoSubmit})}Object.defineProperty(exports,"createFormCollector",{enumerable:!0,get:function(){return V}});Object.defineProperty(exports,"deriveFormStatus",{enumerable:!0,get:function(){return h}});Object.defineProperty(exports,"loadFormCollector",{enumerable:!0,get:function(){return L}});
1
+ const C=require("./AgoClient-B_u_d-XS.cjs");var W=/^[a-zA-Z0-9_-]{1,40}$/,A=n=>n==null||n==="";function S(n,e){if("anyOf"in n)return n.anyOf.some(c=>S(c,e));if("allOf"in n)return n.allOf.every(c=>S(c,e));const l=e[n.property];if(A(l))return!1;if(Array.isArray(n.value))return n.value.some(c=>String(l)===String(c));if(!n.op)return String(l)===String(n.value);const i=Number(l),a=Number(n.value);if(Number.isNaN(i)||Number.isNaN(a))return!1;switch(n.op){case">=":return i>=a;case"<=":return i<=a;case">":return i>a;case"<":return i<a;default:return C.logger.warn(`Unknown requiredWhen op "${n.op}"; treating as not required.`),!1}}function h(n,e){const l=n.properties??{},i=new Set;for(const c of n.required??[]){const d=l[c]?.requiredWhen;(!d||S(d,e))&&i.add(c)}for(const[c,d]of Object.entries(l))d.requiredWhen&&S(d.requiredWhen,e)&&i.add(c);const a=[...i].filter(c=>A(e[c]));return{missing:a,complete:a.length===0}}function B(n){const e={};for(const[l,i]of Object.entries(n.properties??{}))e[l]={type:i.type,...i.description!=null&&{description:i.description},...i.enum&&{enum:i.enum},...i.default!==void 0&&{default:i.default}};return{type:"object",properties:e,required:[]}}function V(n){const{name:e,description:l,schema:i}=n;if(!W.test(e))throw new Error(`Invalid form collector name "${e}": must match ${W} (it becomes the update_/submit_ function names).`);const a=typeof n.submit=="string"?n.submit?{via:"client",url:n.submit}:!1:n.submit??!1;n.autoSubmit===!0&&!a&&C.logger.warn(`FormCollector "${e}": autoSubmit is ignored because no submit target is configured.`);const c=(n.autoSubmit??!0)&&!!a,d=i.properties??{},$=t=>{const r={};for(const[o,s]of Object.entries(t)){const u=d[o];if(u)if(s==null)r[o]=s;else if(u.type==="number"||u.type==="integer"){const f=typeof s=="number"?s:Number(s);r[o]=Number.isNaN(f)?s:f}else u.type==="boolean"?r[o]=typeof s=="boolean"?s:s==="true"?!0:s==="false"?!1:!!s:r[o]=s}return r},N=n.initialValues??{},m=C.createStore({values:N,submitted:!1}),w=t=>{const r=m.get(),o={...r,values:{...r.values,...t}};return m.set(o),o};let b=null;const k=(t,r)=>{b?.emitFormEvent("form:error",{name:e,values:t,error:r})};let p=null;const I=async()=>{const{values:t}=m.get(),{complete:r,missing:o}=h(i,t);if(!r)return{ok:!1,missing:o};if(!a)return{ok:!1,error:"No submit target configured for this form collector."};const s=t;try{let u;if(a.via==="client")if("handler"in a)u=await a.handler(s);else{const f=await fetch(a.url,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(s)});if(!f.ok){const j=`Submit failed: HTTP ${f.status}`;return k(s,j),{ok:!1,error:j}}u=await f.json().catch(()=>{})}else{if(!b)return{ok:!1,error:"Backend submit requires install(client) (or useFormCollector) first."};u=await b.submitFormCollector(e,s)}return m.set({...m.get(),submitted:!0,submitResult:u}),b?.emitFormEvent("form:submitted",{name:e,values:s,result:u}),{ok:!0,result:u}}catch(u){const f=u instanceof Error?u.message:"Submit failed";return C.logger.error(`FormCollector "${e}" submit failed:`,u),k(s,f),{ok:!1,error:f}}},F=()=>p||(p=(async()=>{try{return await I()}finally{p=null}})(),p),q=async()=>{if(!c||!a)return null;const{values:t,submitted:r}=m.get();return r||!h(i,t).complete?null:F()},O={name:`update_${e}`,description:`Fill or update fields of the "${e}" form. ${l} Pass any subset of fields; call it repeatedly to fill the form as the user provides information. Returns the current values and which required fields are still missing.`,parameters:B(i),handler:async t=>{const r=w($(t)),{missing:o}=h(i,r.values),s=await q();return s?s.ok?{ok:!0,values:r.values,missing:o,submitted:!0}:{ok:!0,values:r.values,missing:o,submitted:!1,submitError:s.error}:{ok:!0,values:r.values,missing:o}}},y=[O];a&&!c&&y.push({name:`submit_${e}`,description:`Submit the completed "${e}" form. Only call this once every required field is collected and the user has confirmed. If fields are missing it returns them instead of submitting.`,parameters:{type:"object",properties:{}},handler:()=>F()});const D="client__",_=a?`submit_${e}`:null,R=t=>{const r=t.functionName??t.toolName;if(r)return r.startsWith(D)?r.slice(8):r},x=t=>{let r={...N},o=!1;for(const s of t){const u=R(s);u===O.name?s.arguments&&(r={...r,...$(s.arguments)}):_&&u===_&&s.status?.toLowerCase()==="done"&&(o=!0)}m.set({values:r,submitted:o})},g=`form:${e}`,v=`${g}:definition`,P=()=>({name:`Form definition: ${e}`,description:`${l} Some fields are conditionally required; the requiredWhen field in the schema tells you when each becomes required. The form schema is the following: ${JSON.stringify(i)}.`,stable:!0}),T=()=>{const{values:t,submitted:r}=m.get(),{missing:o,complete:s}=h(i,t),u=a?c?" The form is submitted automatically as soon as every required field is filled, so there is no submit function to call.":` When nothing is missing and the user confirms, call submit_${e}.`:"",f=r?`The "${e}" form has been submitted.`:`You are currently collecting information from the user to fill the "${e}" form.`;return{name:`Form: ${e}`,description:`${f} The form's schema and field requirements are in the "${v}" client context. Call update_${e} with any fields the user provides; ask only for what is still missing.${u}`,data:{values:t,missing:o,complete:s,submitted:r}}},E=t=>{x((t.messages??[]).flatMap(r=>r.toolCalls??[]))};return{name:e,store:m,functions:y,contextKey:g,contextProvider:T,definitionContextKey:v,definitionContextProvider:P,install:t=>{b=t;for(const o of y)t.register(o);t.addDynamicContext(v,P),t.addDynamicContext(g,T);const r=m.subscribe(()=>t.notifyContextChanged());return t.on("conversation:loaded",E),()=>{r();for(const o of y)t.unregisterFunction(o.name);t.removeDynamicContext(g),t.removeDynamicContext(v),t.off("conversation:loaded",E),b===t&&(b=null)}},hydrate:x,submit:F,getValues:()=>m.get().values,setValues:t=>{w($(t)),q()},reset:()=>{m.set({values:N,submitted:!1})},getStatus:()=>h(i,m.get().values)}}async function L(n,e){const l=await n.getFormCollector(e.name);return V({name:l.name,description:e.description??l.description,schema:e.schema??l.schema,submit:e.submit??l.submit,initialValues:e.initialValues,autoSubmit:e.autoSubmit??l.autoSubmit})}Object.defineProperty(exports,"createFormCollector",{enumerable:!0,get:function(){return V}});Object.defineProperty(exports,"deriveFormStatus",{enumerable:!0,get:function(){return h}});Object.defineProperty(exports,"loadFormCollector",{enumerable:!0,get:function(){return L}});
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./AgoClient-BHegN73y.cjs"),p=require("./autoContinue-CP9pJR-V.cjs"),E=require("./createConversationSession-BbUUukV0.cjs"),f=require("./createFormCollector-C1ixsjV0.cjs"),S=require("./createMockClient-BSNuN3ys.cjs");require("./testing.cjs");const g=require("./functions-CPs7omgM.cjs");function w(e){return e}function y(e,o){return e.on("message:complete",o),()=>e.off("message:complete",o)}function v(e,o){return e.on("message:chunk",o),()=>e.off("message:chunk",o)}function F(e,o){return e.on("message:start",o),()=>e.off("message:start",o)}function b(e,o){return e.on("message:error",o),()=>e.off("message:error",o)}function M(e,o){return e.on("toolCall:received",o),()=>e.off("toolCall:received",o)}function T(e,o){return e.on("form:submitted",o),()=>e.off("form:submitted",o)}function q(e,o){return e.on("form:error",o),()=>e.off("form:error",o)}function I(e,o){return e.on("function:invoke",o),()=>e.off("function:invoke",o)}async function*_(e,o,l){const i=[];let n=null,a=!1;const c=s=>{i.push(s),n?.()},m=s=>c({type:"start",data:s}),r=s=>c({type:"chunk",data:s}),u=s=>{c({type:"complete",data:s}),a=!0,n?.()},d=s=>{c({type:"error",data:s}),a=!0,n?.()},A=s=>c({type:"toolCall",data:s}),h=()=>{a=!0,n?.()};e.on("message:start",m),e.on("message:chunk",r),e.on("message:complete",u),e.on("message:error",d),e.on("message:stopped",h),e.on("toolCall:received",A),e.sendMessage(o,l).catch(()=>{a=!0,n?.()});try{for(;!a||i.length>0;)i.length>0?yield i.shift():(await new Promise(s=>{n=s}),n=null)}finally{e.off("message:start",m),e.off("message:chunk",r),e.off("message:complete",u),e.off("message:error",d),e.off("message:stopped",h),e.off("toolCall:received",A)}}function C(e){let o,l,i,n,a,c;if(typeof window<"u"&&window.AGO){const r=window.AGO;o=r.basepath,l=r.widgetId,i=r.agent||r.defaultAgent,n=r.permission,a=r.email,c=r.jwt}if(typeof document<"u"){const r=u=>document.querySelector(`meta[name="${u}"]`)?.getAttribute("content")||void 0;o=o||r("ago-base-url"),l=l||r("ago-widget-id"),i=i||r("ago-agent")||r("ago-agent-id"),n=n||r("ago-permission"),a=a||r("ago-user-email")}if(typeof document<"u"){const r=[document.body,...Array.from(document.querySelectorAll("script[data-ago-base-url]"))].filter(Boolean);for(const u of r)u&&(o=o||u.getAttribute("data-ago-base-url")||void 0,l=l||u.getAttribute("data-ago-widget-id")||void 0,i=i||u.getAttribute("data-ago-agent")||u.getAttribute("data-ago-agent-id")||void 0,n=n||u.getAttribute("data-ago-permission")||void 0,a=a||u.getAttribute("data-ago-user-email")||void 0)}o=e?.baseUrl||o,l=e?.widgetId||l,i=e?.agent||e?.defaultAgentId||i,n=e?.permission||n,a=e?.userEmail||a,c=e?.userJwt||c;const m=e?.debug;return o?{baseUrl:o,widgetId:l,agent:i,permission:n,userEmail:a,userJwt:c,debug:m}:null}function k(e){const o=C(e);if(!o)throw new t.AgoError('createAgo(): could not detect AGO configuration. Set window.AGO, add <meta name="ago-base-url">, or pass { baseUrl } explicitly.',"config_missing_base_url");return new t.AgoClient(o)}function U(e,o){return{...e,handler:o}}exports.ActivityLedger=t.ActivityLedger;exports.AgoApiError=t.AgoApiError;exports.AgoClient=t.AgoClient;exports.AgoError=t.AgoError;exports.AgoFunctionError=t.AgoFunctionError;exports.AgoNetworkError=t.AgoNetworkError;exports.AgoStreamError=t.AgoStreamError;exports.ClientContextRegistry=t.ClientContextRegistry;exports.DEFAULT_MAX_ACTIVITY_ENTRIES=t.DEFAULT_MAX_ACTIVITY_ENTRIES;exports.EventEmitter=t.EventEmitter;exports.FunctionRegistry=t.FunctionRegistry;exports.SSEHandler=t.SSEHandler;exports.SignalCollector=t.SignalCollector;exports.attachAutoContinueAfterNavigation=p.attachAutoContinueAfterNavigation;exports.autoDetectConfig=C;exports.canInlineImage=t.canInlineImage;exports.copyToClipboard=g.copyToClipboard;exports.createAgo=k;exports.createAgoProactive=t.createAgoProactive;exports.createConversationSession=E.createConversationSession;exports.createFormCollector=f.createFormCollector;exports.createMessageStream=_;exports.createMockClient=S.createMockClient;exports.createStore=t.createStore;exports.defineFunction=w;exports.deriveFormStatus=f.deriveFormStatus;exports.formatFileSize=t.formatFileSize;exports.getLocalStorage=g.getLocalStorage;exports.getUserLocation=g.getUserLocation;exports.highlightElement=g.highlightElement;exports.isStreamNetworkError=t.isStreamNetworkError;exports.loadFormCollector=f.loadFormCollector;exports.logger=t.logger;exports.matchesRoutePattern=t.matchesRoutePattern;exports.matchesWhen=t.matchesWhen;exports.onFormError=q;exports.onFormSubmitted=T;exports.onFunctionInvoke=I;exports.onMessage=y;exports.onMessageChunk=v;exports.onMessageError=b;exports.onMessageStart=F;exports.onToolCall=M;exports.openUrl=g.openUrl;exports.partialDeepMatch=t.partialDeepMatch;exports.safeAttachmentUrl=t.safeAttachmentUrl;exports.scrollToElement=g.scrollToElement;exports.setLocalStorage=g.setLocalStorage;exports.setTheme=g.setTheme;exports.showConfirmDialog=g.showConfirmDialog;exports.showNotification=g.showNotification;exports.showToast=g.showToast;exports.submitForm=g.submitForm;exports.trackEvent=g.trackEvent;exports.validateConfig=t.validateConfig;exports.withHandler=U;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./AgoClient-B_u_d-XS.cjs"),p=require("./autoContinue-CP9pJR-V.cjs"),E=require("./createConversationSession-BCdwAhLF.cjs"),f=require("./createFormCollector-ssBP8u0p.cjs"),S=require("./createMockClient-BSNuN3ys.cjs");require("./testing.cjs");const g=require("./functions-CPs7omgM.cjs");function w(e){return e}function y(e,o){return e.on("message:complete",o),()=>e.off("message:complete",o)}function v(e,o){return e.on("message:chunk",o),()=>e.off("message:chunk",o)}function F(e,o){return e.on("message:start",o),()=>e.off("message:start",o)}function b(e,o){return e.on("message:error",o),()=>e.off("message:error",o)}function M(e,o){return e.on("toolCall:received",o),()=>e.off("toolCall:received",o)}function T(e,o){return e.on("form:submitted",o),()=>e.off("form:submitted",o)}function q(e,o){return e.on("form:error",o),()=>e.off("form:error",o)}function I(e,o){return e.on("function:invoke",o),()=>e.off("function:invoke",o)}async function*_(e,o,l){const i=[];let n=null,a=!1;const c=s=>{i.push(s),n?.()},m=s=>c({type:"start",data:s}),r=s=>c({type:"chunk",data:s}),u=s=>{c({type:"complete",data:s}),a=!0,n?.()},d=s=>{c({type:"error",data:s}),a=!0,n?.()},A=s=>c({type:"toolCall",data:s}),h=()=>{a=!0,n?.()};e.on("message:start",m),e.on("message:chunk",r),e.on("message:complete",u),e.on("message:error",d),e.on("message:stopped",h),e.on("toolCall:received",A),e.sendMessage(o,l).catch(()=>{a=!0,n?.()});try{for(;!a||i.length>0;)i.length>0?yield i.shift():(await new Promise(s=>{n=s}),n=null)}finally{e.off("message:start",m),e.off("message:chunk",r),e.off("message:complete",u),e.off("message:error",d),e.off("message:stopped",h),e.off("toolCall:received",A)}}function C(e){let o,l,i,n,a,c;if(typeof window<"u"&&window.AGO){const r=window.AGO;o=r.basepath,l=r.widgetId,i=r.agent||r.defaultAgent,n=r.permission,a=r.email,c=r.jwt}if(typeof document<"u"){const r=u=>document.querySelector(`meta[name="${u}"]`)?.getAttribute("content")||void 0;o=o||r("ago-base-url"),l=l||r("ago-widget-id"),i=i||r("ago-agent")||r("ago-agent-id"),n=n||r("ago-permission"),a=a||r("ago-user-email")}if(typeof document<"u"){const r=[document.body,...Array.from(document.querySelectorAll("script[data-ago-base-url]"))].filter(Boolean);for(const u of r)u&&(o=o||u.getAttribute("data-ago-base-url")||void 0,l=l||u.getAttribute("data-ago-widget-id")||void 0,i=i||u.getAttribute("data-ago-agent")||u.getAttribute("data-ago-agent-id")||void 0,n=n||u.getAttribute("data-ago-permission")||void 0,a=a||u.getAttribute("data-ago-user-email")||void 0)}o=e?.baseUrl||o,l=e?.widgetId||l,i=e?.agent||e?.defaultAgentId||i,n=e?.permission||n,a=e?.userEmail||a,c=e?.userJwt||c;const m=e?.debug;return o?{baseUrl:o,widgetId:l,agent:i,permission:n,userEmail:a,userJwt:c,debug:m}:null}function k(e){const o=C(e);if(!o)throw new t.AgoError('createAgo(): could not detect AGO configuration. Set window.AGO, add <meta name="ago-base-url">, or pass { baseUrl } explicitly.',"config_missing_base_url");return new t.AgoClient(o)}function U(e,o){return{...e,handler:o}}exports.ActivityLedger=t.ActivityLedger;exports.AgoApiError=t.AgoApiError;exports.AgoClient=t.AgoClient;exports.AgoError=t.AgoError;exports.AgoFunctionError=t.AgoFunctionError;exports.AgoNetworkError=t.AgoNetworkError;exports.AgoStreamError=t.AgoStreamError;exports.ClientContextRegistry=t.ClientContextRegistry;exports.DEFAULT_MAX_ACTIVITY_ENTRIES=t.DEFAULT_MAX_ACTIVITY_ENTRIES;exports.EventEmitter=t.EventEmitter;exports.FunctionRegistry=t.FunctionRegistry;exports.SSEHandler=t.SSEHandler;exports.SignalCollector=t.SignalCollector;exports.attachAutoContinueAfterNavigation=p.attachAutoContinueAfterNavigation;exports.autoDetectConfig=C;exports.canInlineImage=t.canInlineImage;exports.copyToClipboard=g.copyToClipboard;exports.createAgo=k;exports.createAgoProactive=t.createAgoProactive;exports.createConversationSession=E.createConversationSession;exports.createFormCollector=f.createFormCollector;exports.createMessageStream=_;exports.createMockClient=S.createMockClient;exports.createStore=t.createStore;exports.defineFunction=w;exports.deriveFormStatus=f.deriveFormStatus;exports.formatFileSize=t.formatFileSize;exports.getLocalStorage=g.getLocalStorage;exports.getUserLocation=g.getUserLocation;exports.highlightElement=g.highlightElement;exports.isStreamNetworkError=t.isStreamNetworkError;exports.loadFormCollector=f.loadFormCollector;exports.logger=t.logger;exports.matchesRoutePattern=t.matchesRoutePattern;exports.matchesWhen=t.matchesWhen;exports.onFormError=q;exports.onFormSubmitted=T;exports.onFunctionInvoke=I;exports.onMessage=y;exports.onMessageChunk=v;exports.onMessageError=b;exports.onMessageStart=F;exports.onToolCall=M;exports.openUrl=g.openUrl;exports.partialDeepMatch=t.partialDeepMatch;exports.safeAttachmentUrl=t.safeAttachmentUrl;exports.scrollToElement=g.scrollToElement;exports.setLocalStorage=g.setLocalStorage;exports.setTheme=g.setTheme;exports.showConfirmDialog=g.showConfirmDialog;exports.showNotification=g.showNotification;exports.showToast=g.showToast;exports.submitForm=g.submitForm;exports.trackEvent=g.trackEvent;exports.validateConfig=t.validateConfig;exports.withHandler=U;
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { a as w, c as C, d as y, f as S, i as E, l as b, m as v, o as F, p as T, r as I, s as M, t as U, u as _ } from "./functions-tzyOZNp6.js";
2
- import { C as L, S as N, T as x, _ as D, a as G, b as c, c as O, d as R, f as q, g as P, h as H, l as J, m as j, n as z, o as B, p as V, r as W, s as X, t as p, u as Y, v as $, w as K, x as Q, y as Z } from "./AgoClient-PWPaekcg.js";
2
+ import { C as L, S as N, T as x, _ as D, a as G, b as c, c as O, d as R, f as q, g as P, h as H, l as J, m as j, n as z, o as B, p as V, r as W, s as X, t as p, u as Y, v as $, w as K, x as Q, y as Z } from "./AgoClient-BJjLTOw4.js";
3
3
  import { t as oe } from "./autoContinue-CC8K9mBU.js";
4
- import { t as re } from "./createConversationSession-BkruoOVm.js";
5
- import { n as ne, r as se, t as ie } from "./createFormCollector-CvVFNkp6.js";
4
+ import { t as re } from "./createConversationSession-Bgvx753t.js";
5
+ import { n as ne, r as se, t as ie } from "./createFormCollector-CM3qjGcM.js";
6
6
  import { t as ge } from "./createMockClient-BDLW6tVc.js";
7
7
  import "./testing.js";
8
8
  function me(e) {
package/dist/react.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var Pe=Object.create,G=Object.defineProperty,We=Object.getOwnPropertyDescriptor,Oe=Object.getOwnPropertyNames,ze=Object.getPrototypeOf,De=Object.prototype.hasOwnProperty,Le=(e,n)=>{let t={};for(var o in e)G(t,o,{get:e[o],enumerable:!0});return n||G(t,Symbol.toStringTag,{value:"Module"}),t},He=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(var r=Oe(n),c=0,i=r.length,l;c<i;c++)l=r[c],!De.call(e,l)&&l!==t&&G(e,l,{get:(u=>n[u]).bind(null,l),enumerable:!(o=We(n,l))||o.enumerable});return e},Q=(e,n,t)=>(t=e!=null?Pe(ze(e)):{},He(n||!e||!e.__esModule?G(t,"default",{value:e,enumerable:!0}):t,e));const P=require("./AgoClient-BHegN73y.cjs"),qe=require("./autoContinue-CP9pJR-V.cjs"),z=require("./createFormCollector-C1ixsjV0.cjs"),Be=require("./createMockClient-BSNuN3ys.cjs"),Y=require("./sheetController-DY-sC13T.cjs");let s=require("react");s=Q(s,1);let a=require("react/jsx-runtime"),X=require("react-markdown");X=Q(X,1);let Z=require("remark-gfm");Z=Q(Z,1);function pe(e){const[n,t]=(0,s.useState)(!1),o=(0,s.useRef)(null),r=(0,s.useMemo)(()=>{if(o.current&&(o.current.destroy(),o.current=null),!e)return null;const c=new P.AgoClient(e);return o.current=c,c},[e?.baseUrl,e?.widgetId]);return(0,s.useEffect)(()=>(r&&o.current===null&&(o.current=r,r.reviveAfterDestroy()),t(!0),()=>{o.current?.destroy(),o.current=null}),[r]),(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:r,isReady:n}}var ee=(0,s.createContext)(null),$e=({children:e,client:n,tools:t,helpers:o,pageContext:r,...c})=>{const{client:i}=pe(n?null:c),l=n||i;return(0,s.useEffect)(()=>{if(!(!t||t.length===0)){for(const u of t)l.register(u);return()=>{for(const u of t)l.unregisterFunction(u.name)}}},[l,t]),(0,s.useEffect)(()=>{if(!o)return;const u=[];return Promise.resolve().then(()=>require("./functions-CPs7omgM.cjs")).then(p=>p.functions_exports).then(p=>{for(const[g,S]of Object.entries(o)){const R=p[g];if(!R){console.warn(`[AGO] Unknown helper: "${g}"`);continue}const k=S===!0?R:{...R,handler:S};l.register(k),u.push(k.name)}}),()=>{for(const p of u)l.unregisterFunction(p)}},[l,o]),(0,s.useEffect)(()=>{r==="auto"&&l.enableAutoPageContext()},[l,r]),(0,a.jsx)(ee.Provider,{value:l,children:e})};function D(){const e=(0,s.useContext)(ee);if(!e)throw new Error('useAgoClient must be used within an <AgoProvider>. Wrap your component tree with <AgoProvider baseUrl="...">.');return e}function W(){return(0,s.useContext)(ee)}var Ke=new Set(["awaiting-approval"]);function ge(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 Ue(e){return e.type==="client_function"?e.functionName==="navigateToPage"?"navigation":"action":ge(e.type)}function ce(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 ue(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 Ge(e){switch(e.kind){case"navigation":return`Navigating to ${ue(e.arguments?.page)}`;case"action":return e.functionName==="setPageState"?"Updating the page":e.functionName==="openFilteredConversations"?"Opening conversations":e.toolDisplayName||e.message||ue(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 xe(e={}){const{includeReasoning:n=!1,labelFor:t}=e,o=W(),r=e.client||o;if(!r)throw new P.AgoError("useAgoActivity requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.","provider_missing_client");const[c,i]=(0,s.useState)([]),l=(0,s.useRef)(new Set),u=(0,s.useRef)(void 0),p=(0,s.useRef)(t);p.current=t;const g=(0,s.useCallback)((f,A)=>{i(C=>{const d=C.findIndex(m=>m.id===f),b={...d>=0?C[d]:{id:f,kind:"status",label:"",status:"running",requiresApproval:!1,createdAt:new Date},...A};return b.label=p.current?.(b)??Ge(b),d>=0?[...C.slice(0,d),b,...C.slice(d+1)]:[...C,b]})},[]);(0,s.useEffect)(()=>{const f=y=>{u.current=y.messageId},A=y=>{const N=ge(y.type);N==="reasoning"&&!n||g(y.id,{kind:N,status:ce(y.status,N),messageId:u.current,toolName:y.toolName,toolDisplayName:y.toolDisplayName,message:y.message,data:y.data,formSchema:y.formSchema,requiresApproval:N==="confirmation"||N==="form"})},C=y=>{y.invocationId&&g(y.invocationId,{kind:y.functionName==="navigateToPage"?"navigation":"action",status:"running",messageId:u.current,functionName:y.functionName,arguments:y.arguments})},d=y=>{y.invocationId&&g(y.invocationId,{kind:y.functionName==="navigateToPage"?"navigation":"action",status:"awaiting-approval",messageId:u.current,functionName:y.functionName,arguments:y.arguments,requiresApproval:!0})},b=y=>{if(!y.invocationId)return;const N=y.result,v=typeof y.result=="object"&&N!==null&&N.approved===!1&&N.reason==="user_rejected";g(y.invocationId,{status:y.error?"error":v?"rejected":"done",requiresApproval:!1})},m=y=>{for(const N of y.messages??[])if(N.role==="assistant")for(const v of N.toolCalls??[]){const T=Ue(v);T==="reasoning"&&!n||/waiting/i.test(v.status??"")||g(v.id,{kind:T,status:ce(v.status,T),messageId:N.id,toolName:v.toolName,toolDisplayName:v.toolDisplayName,functionName:v.functionName,arguments:v.arguments,message:v.message,data:v.data,formSchema:v.formSchema,requiresApproval:T==="confirmation"||T==="form"})}},x=y=>{i(N=>N.map(v=>v.status==="running"||v.status==="awaiting-approval"?{...v,status:y}:v))},w=()=>x("done"),j=()=>x("error");return r.on("message:start",f),r.on("toolCall:received",A),r.on("function:invoke",C),r.on("function:awaiting-approval",d),r.on("function:result",b),r.on("conversation:loaded",m),r.on("message:complete",w),r.on("message:error",j),()=>{r.off("message:start",f),r.off("toolCall:received",A),r.off("function:invoke",C),r.off("function:awaiting-approval",d),r.off("function:result",b),r.off("conversation:loaded",m),r.off("message:complete",w),r.off("message:error",j)}},[r,n,g]);const S=(0,s.useCallback)(async f=>{const A=c.find(C=>C.id===f);!A||A.status!=="awaiting-approval"||l.current.has(f)||A.kind!=="form"&&(l.current.add(f),g(f,{status:"running",requiresApproval:!1}),A.functionName?await r.approveFunction(f):await r.confirmToolCall(f))},[r,c,g]),R=(0,s.useCallback)(async f=>{const A=c.find(C=>C.id===f);!A||A.status!=="awaiting-approval"||l.current.has(f)||(l.current.add(f),g(f,{status:"rejected",requiresApproval:!1}),A.functionName?await r.rejectFunction(f):await r.rejectToolCall(f))},[r,c,g]),k=(0,s.useCallback)(async(f,A)=>{g(f,{status:"running",requiresApproval:!1}),await r.submitToolCallForm(f,A),g(f,{status:"done"})},[r,g]),_=(0,s.useCallback)(()=>{l.current.clear(),i([])},[]);return{items:c,latest:c.length>0?c[c.length-1]:void 0,isAwaitingApproval:c.some(f=>Ke.has(f.status)),approve:S,reject:R,submitForm:k,clear:_}}function te({client:e,conversationId:n}={}){const t=W(),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,c]=(0,s.useState)([]),[i,l]=(0,s.useState)(n),[u,p]=(0,s.useState)(!1),[g,S]=(0,s.useState)(null);(0,s.useEffect)(()=>{n&&n!==i&&(l(n),R(n))},[n]);const R=async k=>{try{c((await o.getMessages(k)).filter(_=>!_.hidden))}catch(_){S(_ instanceof Error?_:new Error("Failed to load messages"))}};return(0,s.useEffect)(()=>{const k=m=>m==="IN_PROGRESS"||m==="WAITING_CLIENT",_=m=>{i||l(m.conversationId),p(!0),c(x=>{const w=x.findIndex(j=>j.id===m.messageId);return w>=0?x.map((j,y)=>y===w?{...j,status:"IN_PROGRESS"}:j):x.some(j=>j.role==="assistant"&&k(j.status))?x:[...x,{id:m.messageId,conversationId:m.conversationId,content:"",role:"assistant",status:"IN_PROGRESS",createdAt:new Date}]})},f=m=>{c(x=>{const w=x.findIndex(j=>j.id===m.messageId);return w<0?x:x.map((j,y)=>y===w?{...j,content:j.content+m.content}:j)})},A=m=>{c(x=>{let w=-1;for(let j=x.length-1;j>=0;j--)if(x[j].role==="assistant"&&k(x[j].status)){w=j;break}return w<0?x:[...x.slice(0,w),{...x[w],...m},...x.slice(w+1)]})},C=m=>{c(x=>{const w=x.findIndex(j=>j.id===m.id);return w>=0?[...x.slice(0,w),m,...x.slice(w+1)]:[...x,m]}),p(!1)},d=m=>{S(new Error(m.error)),p(!1)},b=()=>{c(m=>{let x=-1;for(let w=m.length-1;w>=0;w--)if(m[w].role==="assistant"&&k(m[w].status)){x=w;break}return x<0?m:m[x].content?m.map((w,j)=>j===x?{...w,status:"CANCELED"}:w):m.filter((w,j)=>j!==x)}),p(!1)};return o.on("message:start",_),o.on("message:chunk",f),o.on("message:answer-complete",A),o.on("message:complete",C),o.on("message:error",d),o.on("message:stopped",b),()=>{o.off("message:start",_),o.off("message:chunk",f),o.off("message:answer-complete",A),o.off("message:complete",C),o.off("message:error",d),o.off("message:stopped",b)}},[o,i]),{messages:r,isLoading:u,error:g,sendMessage:(0,s.useCallback)(async(k,_)=>{p(!0),S(null);const f={id:`temp-${Date.now()}`,conversationId:i||"",content:k,role:"user",status:"DONE",attachments:_&&_.length>0?P.attachmentsFromFiles(_):void 0,createdAt:new Date},A={id:`temp-assistant-${Date.now()}`,conversationId:i||"",content:"",role:"assistant",status:"IN_PROGRESS",createdAt:new Date};c(C=>[...C,f,A]);try{const C=await o.sendMessage(k,{conversationId:i,files:_});return C.conversationId&&!i&&l(C.conversationId),c(d=>{const b=d.filter(x=>!x.id.startsWith("temp-")),m={...f,id:f.id.replace("temp-","user-"),conversationId:C.conversationId};return b.some(x=>x.id===C.id)?[...b,m].sort((x,w)=>new Date(x.createdAt).getTime()-new Date(w.createdAt).getTime()):[...b,m,C]}),C}catch(C){return S(C instanceof Error?C:new Error("Failed to send message")),p(!1),c(d=>d.filter(b=>!b.id.startsWith("temp-"))),null}},[o,i]),stop:(0,s.useCallback)(async()=>{await o.stop()},[o]),clearMessages:(0,s.useCallback)(()=>{c([]),l(void 0),S(null)},[]),conversationId:i}}var de={compact:!1,state:"peek",isModal:!1,surface:{style:{},attrs:{}}},Je={tabindex:"tabIndex"};function Ve(e){const n={};for(const[t,o]of Object.entries(e))n[Je[t]??t]=o;return n}function me(e){const n=e!==!1,t=n?e??{}:void 0,o=(0,s.useRef)(t?.onStateChange);o.current=t?.onStateChange;const r=(0,s.useMemo)(()=>{if(n)return Y.createSheetController({breakpoint:t?.breakpoint,initialState:t?.initialState,bottomOffset:t?.bottomOffset,peekHeight:t?.peekHeight,onStateChange:(i,l)=>o.current?.(i,l)})},[n,t?.breakpoint,t?.initialState,t?.bottomOffset,t?.peekHeight]),c=(0,s.useSyncExternalStore)((0,s.useCallback)(i=>r?.subscribe(i)??(()=>{}),[r]),(0,s.useCallback)(()=>r?.getSnapshot()??de,[r]),(0,s.useCallback)(()=>r?.getServerSnapshot()??de,[r]));return{sheet:(0,s.useMemo)(()=>({...c,surface:{...c.surface,attrs:Ve(c.surface.attrs)}}),[c]),expand:(0,s.useCallback)(i=>r?.expand(i),[r]),collapse:(0,s.useCallback)(i=>r?.collapse(i),[r]),toggle:(0,s.useCallback)(i=>r?.toggle(i),[r])}}var Ye=/(`[^`\n]+`|\*\*[^*\n]+\*\*|\*[^*\n]+\*|_[^_\n]+_)/g;function he(e){const n=e.split(Ye);return n.length===1?e:n.map((t,o)=>o%2===0||!t?t:t.startsWith("`")?(0,a.jsx)("code",{style:{fontFamily:"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",fontSize:"0.92em",padding:"0 3px",borderRadius:"3px",backgroundColor:"rgba(0, 0, 0, 0.06)"},children:t.slice(1,-1)},o):t.startsWith("**")?(0,a.jsx)("strong",{style:{fontWeight:600},children:t.slice(2,-2)},o):(0,a.jsx)("em",{children:t.slice(1,-1)},o))}var Xe=`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var Pe=Object.create,G=Object.defineProperty,We=Object.getOwnPropertyDescriptor,Oe=Object.getOwnPropertyNames,ze=Object.getPrototypeOf,De=Object.prototype.hasOwnProperty,Le=(e,n)=>{let t={};for(var o in e)G(t,o,{get:e[o],enumerable:!0});return n||G(t,Symbol.toStringTag,{value:"Module"}),t},He=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(var r=Oe(n),c=0,i=r.length,l;c<i;c++)l=r[c],!De.call(e,l)&&l!==t&&G(e,l,{get:(u=>n[u]).bind(null,l),enumerable:!(o=We(n,l))||o.enumerable});return e},Q=(e,n,t)=>(t=e!=null?Pe(ze(e)):{},He(n||!e||!e.__esModule?G(t,"default",{value:e,enumerable:!0}):t,e));const P=require("./AgoClient-B_u_d-XS.cjs"),qe=require("./autoContinue-CP9pJR-V.cjs"),z=require("./createFormCollector-ssBP8u0p.cjs"),Be=require("./createMockClient-BSNuN3ys.cjs"),Y=require("./sheetController-DY-sC13T.cjs");let s=require("react");s=Q(s,1);let a=require("react/jsx-runtime"),X=require("react-markdown");X=Q(X,1);let Z=require("remark-gfm");Z=Q(Z,1);function pe(e){const[n,t]=(0,s.useState)(!1),o=(0,s.useRef)(null),r=(0,s.useMemo)(()=>{if(o.current&&(o.current.destroy(),o.current=null),!e)return null;const c=new P.AgoClient(e);return o.current=c,c},[e?.baseUrl,e?.widgetId]);return(0,s.useEffect)(()=>(r&&o.current===null&&(o.current=r,r.reviveAfterDestroy()),t(!0),()=>{o.current?.destroy(),o.current=null}),[r]),(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:r,isReady:n}}var ee=(0,s.createContext)(null),$e=({children:e,client:n,tools:t,helpers:o,pageContext:r,...c})=>{const{client:i}=pe(n?null:c),l=n||i;return(0,s.useEffect)(()=>{if(!(!t||t.length===0)){for(const u of t)l.register(u);return()=>{for(const u of t)l.unregisterFunction(u.name)}}},[l,t]),(0,s.useEffect)(()=>{if(!o)return;const u=[];return Promise.resolve().then(()=>require("./functions-CPs7omgM.cjs")).then(p=>p.functions_exports).then(p=>{for(const[g,S]of Object.entries(o)){const R=p[g];if(!R){console.warn(`[AGO] Unknown helper: "${g}"`);continue}const k=S===!0?R:{...R,handler:S};l.register(k),u.push(k.name)}}),()=>{for(const p of u)l.unregisterFunction(p)}},[l,o]),(0,s.useEffect)(()=>{r==="auto"&&l.enableAutoPageContext()},[l,r]),(0,a.jsx)(ee.Provider,{value:l,children:e})};function D(){const e=(0,s.useContext)(ee);if(!e)throw new Error('useAgoClient must be used within an <AgoProvider>. Wrap your component tree with <AgoProvider baseUrl="...">.');return e}function W(){return(0,s.useContext)(ee)}var Ke=new Set(["awaiting-approval"]);function ge(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 Ue(e){return e.type==="client_function"?e.functionName==="navigateToPage"?"navigation":"action":ge(e.type)}function ce(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 ue(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 Ge(e){switch(e.kind){case"navigation":return`Navigating to ${ue(e.arguments?.page)}`;case"action":return e.functionName==="setPageState"?"Updating the page":e.functionName==="openFilteredConversations"?"Opening conversations":e.toolDisplayName||e.message||ue(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 xe(e={}){const{includeReasoning:n=!1,labelFor:t}=e,o=W(),r=e.client||o;if(!r)throw new P.AgoError("useAgoActivity requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.","provider_missing_client");const[c,i]=(0,s.useState)([]),l=(0,s.useRef)(new Set),u=(0,s.useRef)(void 0),p=(0,s.useRef)(t);p.current=t;const g=(0,s.useCallback)((f,A)=>{i(C=>{const d=C.findIndex(m=>m.id===f),b={...d>=0?C[d]:{id:f,kind:"status",label:"",status:"running",requiresApproval:!1,createdAt:new Date},...A};return b.label=p.current?.(b)??Ge(b),d>=0?[...C.slice(0,d),b,...C.slice(d+1)]:[...C,b]})},[]);(0,s.useEffect)(()=>{const f=y=>{u.current=y.messageId},A=y=>{const N=ge(y.type);N==="reasoning"&&!n||g(y.id,{kind:N,status:ce(y.status,N),messageId:u.current,toolName:y.toolName,toolDisplayName:y.toolDisplayName,message:y.message,data:y.data,formSchema:y.formSchema,requiresApproval:N==="confirmation"||N==="form"})},C=y=>{y.invocationId&&g(y.invocationId,{kind:y.functionName==="navigateToPage"?"navigation":"action",status:"running",messageId:u.current,functionName:y.functionName,arguments:y.arguments})},d=y=>{y.invocationId&&g(y.invocationId,{kind:y.functionName==="navigateToPage"?"navigation":"action",status:"awaiting-approval",messageId:u.current,functionName:y.functionName,arguments:y.arguments,requiresApproval:!0})},b=y=>{if(!y.invocationId)return;const N=y.result,v=typeof y.result=="object"&&N!==null&&N.approved===!1&&N.reason==="user_rejected";g(y.invocationId,{status:y.error?"error":v?"rejected":"done",requiresApproval:!1})},m=y=>{for(const N of y.messages??[])if(N.role==="assistant")for(const v of N.toolCalls??[]){const T=Ue(v);T==="reasoning"&&!n||/waiting/i.test(v.status??"")||g(v.id,{kind:T,status:ce(v.status,T),messageId:N.id,toolName:v.toolName,toolDisplayName:v.toolDisplayName,functionName:v.functionName,arguments:v.arguments,message:v.message,data:v.data,formSchema:v.formSchema,requiresApproval:T==="confirmation"||T==="form"})}},x=y=>{i(N=>N.map(v=>v.status==="running"||v.status==="awaiting-approval"?{...v,status:y}:v))},w=()=>x("done"),j=()=>x("error");return r.on("message:start",f),r.on("toolCall:received",A),r.on("function:invoke",C),r.on("function:awaiting-approval",d),r.on("function:result",b),r.on("conversation:loaded",m),r.on("message:complete",w),r.on("message:error",j),()=>{r.off("message:start",f),r.off("toolCall:received",A),r.off("function:invoke",C),r.off("function:awaiting-approval",d),r.off("function:result",b),r.off("conversation:loaded",m),r.off("message:complete",w),r.off("message:error",j)}},[r,n,g]);const S=(0,s.useCallback)(async f=>{const A=c.find(C=>C.id===f);!A||A.status!=="awaiting-approval"||l.current.has(f)||A.kind!=="form"&&(l.current.add(f),g(f,{status:"running",requiresApproval:!1}),A.functionName?await r.approveFunction(f):await r.confirmToolCall(f))},[r,c,g]),R=(0,s.useCallback)(async f=>{const A=c.find(C=>C.id===f);!A||A.status!=="awaiting-approval"||l.current.has(f)||(l.current.add(f),g(f,{status:"rejected",requiresApproval:!1}),A.functionName?await r.rejectFunction(f):await r.rejectToolCall(f))},[r,c,g]),k=(0,s.useCallback)(async(f,A)=>{g(f,{status:"running",requiresApproval:!1}),await r.submitToolCallForm(f,A),g(f,{status:"done"})},[r,g]),_=(0,s.useCallback)(()=>{l.current.clear(),i([])},[]);return{items:c,latest:c.length>0?c[c.length-1]:void 0,isAwaitingApproval:c.some(f=>Ke.has(f.status)),approve:S,reject:R,submitForm:k,clear:_}}function te({client:e,conversationId:n}={}){const t=W(),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,c]=(0,s.useState)([]),[i,l]=(0,s.useState)(n),[u,p]=(0,s.useState)(!1),[g,S]=(0,s.useState)(null);(0,s.useEffect)(()=>{n&&n!==i&&(l(n),R(n))},[n]);const R=async k=>{try{c((await o.getMessages(k)).filter(_=>!_.hidden))}catch(_){S(_ instanceof Error?_:new Error("Failed to load messages"))}};return(0,s.useEffect)(()=>{const k=m=>m==="IN_PROGRESS"||m==="WAITING_CLIENT",_=m=>{i||l(m.conversationId),p(!0),c(x=>{const w=x.findIndex(j=>j.id===m.messageId);return w>=0?x.map((j,y)=>y===w?{...j,status:"IN_PROGRESS"}:j):x.some(j=>j.role==="assistant"&&k(j.status))?x:[...x,{id:m.messageId,conversationId:m.conversationId,content:"",role:"assistant",status:"IN_PROGRESS",createdAt:new Date}]})},f=m=>{c(x=>{const w=x.findIndex(j=>j.id===m.messageId);return w<0?x:x.map((j,y)=>y===w?{...j,content:j.content+m.content}:j)})},A=m=>{c(x=>{let w=-1;for(let j=x.length-1;j>=0;j--)if(x[j].role==="assistant"&&k(x[j].status)){w=j;break}return w<0?x:[...x.slice(0,w),{...x[w],...m},...x.slice(w+1)]})},C=m=>{c(x=>{const w=x.findIndex(j=>j.id===m.id);return w>=0?[...x.slice(0,w),m,...x.slice(w+1)]:[...x,m]}),p(!1)},d=m=>{S(new Error(m.error)),p(!1)},b=()=>{c(m=>{let x=-1;for(let w=m.length-1;w>=0;w--)if(m[w].role==="assistant"&&k(m[w].status)){x=w;break}return x<0?m:m[x].content?m.map((w,j)=>j===x?{...w,status:"CANCELED"}:w):m.filter((w,j)=>j!==x)}),p(!1)};return o.on("message:start",_),o.on("message:chunk",f),o.on("message:answer-complete",A),o.on("message:complete",C),o.on("message:error",d),o.on("message:stopped",b),()=>{o.off("message:start",_),o.off("message:chunk",f),o.off("message:answer-complete",A),o.off("message:complete",C),o.off("message:error",d),o.off("message:stopped",b)}},[o,i]),{messages:r,isLoading:u,error:g,sendMessage:(0,s.useCallback)(async(k,_)=>{p(!0),S(null);const f={id:`temp-${Date.now()}`,conversationId:i||"",content:k,role:"user",status:"DONE",attachments:_&&_.length>0?P.attachmentsFromFiles(_):void 0,createdAt:new Date},A={id:`temp-assistant-${Date.now()}`,conversationId:i||"",content:"",role:"assistant",status:"IN_PROGRESS",createdAt:new Date};c(C=>[...C,f,A]);try{const C=await o.sendMessage(k,{conversationId:i,files:_});return C.conversationId&&!i&&l(C.conversationId),c(d=>{const b=d.filter(x=>!x.id.startsWith("temp-")),m={...f,id:f.id.replace("temp-","user-"),conversationId:C.conversationId};return b.some(x=>x.id===C.id)?[...b,m].sort((x,w)=>new Date(x.createdAt).getTime()-new Date(w.createdAt).getTime()):[...b,m,C]}),C}catch(C){return S(C instanceof Error?C:new Error("Failed to send message")),p(!1),c(d=>d.filter(b=>!b.id.startsWith("temp-"))),null}},[o,i]),stop:(0,s.useCallback)(async()=>{await o.stop()},[o]),clearMessages:(0,s.useCallback)(()=>{c([]),l(void 0),S(null)},[]),conversationId:i}}var de={compact:!1,state:"peek",isModal:!1,surface:{style:{},attrs:{}}},Je={tabindex:"tabIndex"};function Ve(e){const n={};for(const[t,o]of Object.entries(e))n[Je[t]??t]=o;return n}function me(e){const n=e!==!1,t=n?e??{}:void 0,o=(0,s.useRef)(t?.onStateChange);o.current=t?.onStateChange;const r=(0,s.useMemo)(()=>{if(n)return Y.createSheetController({breakpoint:t?.breakpoint,initialState:t?.initialState,bottomOffset:t?.bottomOffset,peekHeight:t?.peekHeight,onStateChange:(i,l)=>o.current?.(i,l)})},[n,t?.breakpoint,t?.initialState,t?.bottomOffset,t?.peekHeight]),c=(0,s.useSyncExternalStore)((0,s.useCallback)(i=>r?.subscribe(i)??(()=>{}),[r]),(0,s.useCallback)(()=>r?.getSnapshot()??de,[r]),(0,s.useCallback)(()=>r?.getServerSnapshot()??de,[r]));return{sheet:(0,s.useMemo)(()=>({...c,surface:{...c.surface,attrs:Ve(c.surface.attrs)}}),[c]),expand:(0,s.useCallback)(i=>r?.expand(i),[r]),collapse:(0,s.useCallback)(i=>r?.collapse(i),[r]),toggle:(0,s.useCallback)(i=>r?.toggle(i),[r])}}var Ye=/(`[^`\n]+`|\*\*[^*\n]+\*\*|\*[^*\n]+\*|_[^_\n]+_)/g;function he(e){const n=e.split(Ye);return n.length===1?e:n.map((t,o)=>o%2===0||!t?t:t.startsWith("`")?(0,a.jsx)("code",{style:{fontFamily:"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",fontSize:"0.92em",padding:"0 3px",borderRadius:"3px",backgroundColor:"rgba(0, 0, 0, 0.06)"},children:t.slice(1,-1)},o):t.startsWith("**")?(0,a.jsx)("strong",{style:{fontWeight:600},children:t.slice(2,-2)},o):(0,a.jsx)("em",{children:t.slice(1,-1)},o))}var Xe=`
2
2
  @keyframes ago-activity-enter {
3
3
  from { opacity: 0; transform: translateY(4px); }
4
4
  to { opacity: 1; transform: none; }
package/dist/react.js CHANGED
@@ -1,6 +1,6 @@
1
- import { a as Ee, b as Z, h as Me, i as Te, o as Fe, s as We, t as ze } from "./AgoClient-PWPaekcg.js";
1
+ import { a as Ee, b as Z, h as Me, i as Te, o as Fe, s as We, t as ze } from "./AgoClient-BJjLTOw4.js";
2
2
  import { t as Pe } from "./autoContinue-CC8K9mBU.js";
3
- import { n as Et, r as ue, t as pe } from "./createFormCollector-CvVFNkp6.js";
3
+ import { n as Et, r as ue, t as pe } from "./createFormCollector-CM3qjGcM.js";
4
4
  import { t as Tt } from "./createMockClient-BDLW6tVc.js";
5
5
  import { C as De, S as Le, n as He } from "./sheetController-CBUVOroo.js";
6
6
  import Be, { createContext as Oe, forwardRef as je, useCallback as R, useContext as fe, useEffect as N, useId as $e, useImperativeHandle as qe, useMemo as H, useRef as W, useState as z, useSyncExternalStore as ge } from "react";
package/dist/vue.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("./AgoClient-BHegN73y.cjs");let o=require("vue");var I=Symbol("ago-client"),L={install(t,e){const n=new w.AgoClient(e);t.provide(I,n)}};function d(t){if(t)return new w.AgoClient(t);const e=(0,o.inject)(I);if(!e)throw new Error("useAgo(): no AgoClient found. Either pass config or install AgoPlugin.");return e}function E(t={}){const e=t.client??d(),n=(0,o.ref)([]),s=(0,o.ref)(t.conversationId),a=(0,o.ref)(!1),i=(0,o.ref)(null),v=r=>{s.value||(s.value=r.conversationId)},f=r=>{const u=n.value.findIndex(l=>l.id===r.messageId);u>=0&&(n.value[u]={...n.value[u],content:n.value[u].content+r.content})},m=r=>{const u=n.value.findIndex(l=>l.id===r.id);u>=0?n.value[u]=r:n.value.push(r),a.value=!1},p=r=>{i.value=new Error(r.error),a.value=!1},g=()=>{let r=-1;for(let u=n.value.length-1;u>=0;u--){const l=n.value[u];if(l.role==="assistant"&&(l.status==="IN_PROGRESS"||l.status==="WAITING_CLIENT")){r=u;break}}r>=0&&(n.value[r].content?n.value[r]={...n.value[r],status:"CANCELED"}:n.value.splice(r,1)),a.value=!1};(0,o.onMounted)(()=>{e.on("message:start",v),e.on("message:chunk",f),e.on("message:complete",m),e.on("message:error",p),e.on("message:stopped",g)}),(0,o.onUnmounted)(()=>{e.off("message:start",v),e.off("message:chunk",f),e.off("message:complete",m),e.off("message:error",p),e.off("message:stopped",g)});async function C(r,u){a.value=!0,i.value=null;const l={id:`temp-${Date.now()}`,conversationId:s.value||"",content:r,role:"user",status:"DONE",createdAt:new Date},S={id:`temp-assistant-${Date.now()}`,conversationId:s.value||"",content:"",role:"assistant",status:"IN_PROGRESS",createdAt:new Date};n.value.push(l,S);try{const c=await e.sendMessage(r,{conversationId:s.value,files:u});c.conversationId&&!s.value&&(s.value=c.conversationId),n.value=n.value.filter(A=>!A.id.startsWith("temp-"));const h={...l,id:l.id.replace("temp-","user-"),conversationId:c.conversationId};return n.value.some(A=>A.id===c.id)?n.value.push(h):n.value.push(h,c),c}catch(c){return i.value=c instanceof Error?c:new Error("Failed to send"),a.value=!1,n.value=n.value.filter(h=>!h.id.startsWith("temp-")),null}}async function M(){await e.stop()}function y(){n.value=[],s.value=void 0,i.value=null}return{messages:n,isLoading:a,error:i,conversationId:s,sendMessage:C,stop:M,clearMessages:y}}function N(t={}){const e=t.client??d(),n=t.autoLoad??!0,s=(0,o.ref)([]),a=(0,o.ref)(null),i=(0,o.ref)(!1),v=(0,o.ref)(null);async function f(){i.value=!0,v.value=null;try{s.value=(await e.getConversations()).data}catch(g){v.value=g instanceof Error?g:new Error("Failed to load conversations")}finally{i.value=!1}}async function m(g){i.value=!0,v.value=null;try{a.value=await e.getConversation(g)}catch(C){v.value=C instanceof Error?C:new Error("Failed to load conversation")}finally{i.value=!1}}function p(){a.value=null}return(0,o.onMounted)(()=>{n&&f()}),{conversations:s,currentConversation:a,isLoading:i,error:v,selectConversation:m,startNewConversation:p,refreshConversations:f}}function P(t={}){const e=E({client:t.client,conversationId:t.conversationId}),n=N({client:t.client,autoLoad:t.autoLoad}),s=(0,o.computed)(()=>e.error.value||n.error.value);return{messages:e.messages,isLoading:e.isLoading,error:s,sendMessage:e.sendMessage,stop:e.stop,clearMessages:e.clearMessages,conversationId:e.conversationId,conversations:n.conversations,currentConversation:n.currentConversation,isConversationsLoading:n.isLoading,selectConversation:n.selectConversation,startNewConversation:n.startNewConversation,refreshConversations:n.refreshConversations}}function R(t,e){const n=d();(0,o.onMounted)(()=>{n.registerFunction(t,e.handler,{description:e.description,parameters:e.parameters,maxResultBytes:e.maxResultBytes})}),(0,o.onUnmounted)(()=>{n.unregisterFunction(t)})}function F(t,e){const n=d();(0,o.onMounted)(()=>{n.registerNavigationFunction(t,e)}),(0,o.onUnmounted)(()=>{n.unregisterNavigationFunction()})}function _(t,e){const n=d(),s=e?.functionName??"setPageState";(0,o.onMounted)(()=>{n.registerPageStateFunction(t,{...e,functionName:s})}),(0,o.onUnmounted)(()=>{n.unregisterPageStateFunction(s)})}function D(t,e){const n=d();(0,o.onMounted)(()=>{n.on(t,e)}),(0,o.onUnmounted)(()=>{n.off(t,e)})}function U(t){const e=(0,o.shallowRef)(t.get());return(0,o.onScopeDispose)(t.subscribe(n=>{e.value=n})),e}function b(){const t=d(),e=(0,o.shallowRef)(null),n=a=>{e.value=a,t.proactive?.shown(a)},s=({nudge:a})=>{e.value?.id===a.id&&(e.value=null)};return(0,o.onMounted)(()=>{t.on("nudge:ready",n),t.on("nudge:accepted",s),t.on("nudge:dismissed",s)}),(0,o.onUnmounted)(()=>{t.off("nudge:ready",n),t.off("nudge:accepted",s),t.off("nudge:dismissed",s)}),{nudge:e,accept:async()=>{const a=e.value;a&&(e.value=null,await t.proactive?.accept(a))},dismiss:()=>{const a=e.value;a&&(e.value=null,t.proactive?.dismiss(a))}}}exports.AGO_CLIENT_KEY=I;exports.AgoPlugin=L;exports.useAgo=d;exports.useAgoEvents=D;exports.useAgoFunction=R;exports.useAgoNavigation=F;exports.useAgoPageState=_;exports.useAgoStore=U;exports.useChat=P;exports.useConversation=N;exports.useMessages=E;exports.useProactiveNudge=b;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("./AgoClient-B_u_d-XS.cjs");let o=require("vue");var I=Symbol("ago-client"),L={install(t,e){const n=new w.AgoClient(e);t.provide(I,n)}};function d(t){if(t)return new w.AgoClient(t);const e=(0,o.inject)(I);if(!e)throw new Error("useAgo(): no AgoClient found. Either pass config or install AgoPlugin.");return e}function E(t={}){const e=t.client??d(),n=(0,o.ref)([]),s=(0,o.ref)(t.conversationId),a=(0,o.ref)(!1),i=(0,o.ref)(null),v=r=>{s.value||(s.value=r.conversationId)},f=r=>{const u=n.value.findIndex(l=>l.id===r.messageId);u>=0&&(n.value[u]={...n.value[u],content:n.value[u].content+r.content})},m=r=>{const u=n.value.findIndex(l=>l.id===r.id);u>=0?n.value[u]=r:n.value.push(r),a.value=!1},p=r=>{i.value=new Error(r.error),a.value=!1},g=()=>{let r=-1;for(let u=n.value.length-1;u>=0;u--){const l=n.value[u];if(l.role==="assistant"&&(l.status==="IN_PROGRESS"||l.status==="WAITING_CLIENT")){r=u;break}}r>=0&&(n.value[r].content?n.value[r]={...n.value[r],status:"CANCELED"}:n.value.splice(r,1)),a.value=!1};(0,o.onMounted)(()=>{e.on("message:start",v),e.on("message:chunk",f),e.on("message:complete",m),e.on("message:error",p),e.on("message:stopped",g)}),(0,o.onUnmounted)(()=>{e.off("message:start",v),e.off("message:chunk",f),e.off("message:complete",m),e.off("message:error",p),e.off("message:stopped",g)});async function C(r,u){a.value=!0,i.value=null;const l={id:`temp-${Date.now()}`,conversationId:s.value||"",content:r,role:"user",status:"DONE",createdAt:new Date},S={id:`temp-assistant-${Date.now()}`,conversationId:s.value||"",content:"",role:"assistant",status:"IN_PROGRESS",createdAt:new Date};n.value.push(l,S);try{const c=await e.sendMessage(r,{conversationId:s.value,files:u});c.conversationId&&!s.value&&(s.value=c.conversationId),n.value=n.value.filter(A=>!A.id.startsWith("temp-"));const h={...l,id:l.id.replace("temp-","user-"),conversationId:c.conversationId};return n.value.some(A=>A.id===c.id)?n.value.push(h):n.value.push(h,c),c}catch(c){return i.value=c instanceof Error?c:new Error("Failed to send"),a.value=!1,n.value=n.value.filter(h=>!h.id.startsWith("temp-")),null}}async function M(){await e.stop()}function y(){n.value=[],s.value=void 0,i.value=null}return{messages:n,isLoading:a,error:i,conversationId:s,sendMessage:C,stop:M,clearMessages:y}}function N(t={}){const e=t.client??d(),n=t.autoLoad??!0,s=(0,o.ref)([]),a=(0,o.ref)(null),i=(0,o.ref)(!1),v=(0,o.ref)(null);async function f(){i.value=!0,v.value=null;try{s.value=(await e.getConversations()).data}catch(g){v.value=g instanceof Error?g:new Error("Failed to load conversations")}finally{i.value=!1}}async function m(g){i.value=!0,v.value=null;try{a.value=await e.getConversation(g)}catch(C){v.value=C instanceof Error?C:new Error("Failed to load conversation")}finally{i.value=!1}}function p(){a.value=null}return(0,o.onMounted)(()=>{n&&f()}),{conversations:s,currentConversation:a,isLoading:i,error:v,selectConversation:m,startNewConversation:p,refreshConversations:f}}function P(t={}){const e=E({client:t.client,conversationId:t.conversationId}),n=N({client:t.client,autoLoad:t.autoLoad}),s=(0,o.computed)(()=>e.error.value||n.error.value);return{messages:e.messages,isLoading:e.isLoading,error:s,sendMessage:e.sendMessage,stop:e.stop,clearMessages:e.clearMessages,conversationId:e.conversationId,conversations:n.conversations,currentConversation:n.currentConversation,isConversationsLoading:n.isLoading,selectConversation:n.selectConversation,startNewConversation:n.startNewConversation,refreshConversations:n.refreshConversations}}function R(t,e){const n=d();(0,o.onMounted)(()=>{n.registerFunction(t,e.handler,{description:e.description,parameters:e.parameters,maxResultBytes:e.maxResultBytes})}),(0,o.onUnmounted)(()=>{n.unregisterFunction(t)})}function F(t,e){const n=d();(0,o.onMounted)(()=>{n.registerNavigationFunction(t,e)}),(0,o.onUnmounted)(()=>{n.unregisterNavigationFunction()})}function _(t,e){const n=d(),s=e?.functionName??"setPageState";(0,o.onMounted)(()=>{n.registerPageStateFunction(t,{...e,functionName:s})}),(0,o.onUnmounted)(()=>{n.unregisterPageStateFunction(s)})}function D(t,e){const n=d();(0,o.onMounted)(()=>{n.on(t,e)}),(0,o.onUnmounted)(()=>{n.off(t,e)})}function U(t){const e=(0,o.shallowRef)(t.get());return(0,o.onScopeDispose)(t.subscribe(n=>{e.value=n})),e}function b(){const t=d(),e=(0,o.shallowRef)(null),n=a=>{e.value=a,t.proactive?.shown(a)},s=({nudge:a})=>{e.value?.id===a.id&&(e.value=null)};return(0,o.onMounted)(()=>{t.on("nudge:ready",n),t.on("nudge:accepted",s),t.on("nudge:dismissed",s)}),(0,o.onUnmounted)(()=>{t.off("nudge:ready",n),t.off("nudge:accepted",s),t.off("nudge:dismissed",s)}),{nudge:e,accept:async()=>{const a=e.value;a&&(e.value=null,await t.proactive?.accept(a))},dismiss:()=>{const a=e.value;a&&(e.value=null,t.proactive?.dismiss(a))}}}exports.AGO_CLIENT_KEY=I;exports.AgoPlugin=L;exports.useAgo=d;exports.useAgoEvents=D;exports.useAgoFunction=R;exports.useAgoNavigation=F;exports.useAgoPageState=_;exports.useAgoStore=U;exports.useChat=P;exports.useConversation=N;exports.useMessages=E;exports.useProactiveNudge=b;
package/dist/vue.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as N } from "./AgoClient-PWPaekcg.js";
1
+ import { t as N } from "./AgoClient-BJjLTOw4.js";
2
2
  import { computed as R, inject as F, onMounted as f, onScopeDispose as P, onUnmounted as m, ref as v, shallowRef as y } from "vue";
3
3
  var A = /* @__PURE__ */ Symbol("ago-client"), k = { install(t, e) {
4
4
  const n = new N(e);
package/dist/widget.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ae=require("./AgoClient-BHegN73y.cjs"),en=require("./createConversationSession-BbUUukV0.cjs"),Ct=require("./createFormCollector-C1ixsjV0.cjs"),t=require("./sheetController-DY-sC13T.cjs");function tn(o){let i=[];const s=document.createElement("form");t.css(s,{display:"flex",flexDirection:"column",gap:"8px",padding:"12px",borderTop:`1px solid ${t.BORDER_COLOR}`,backgroundColor:t.PANEL_BACKGROUND}),s.className="ago-chat-input";const r=t.div({display:"flex",flexWrap:"wrap",gap:"6px"}),C=t.div({display:"flex",gap:"8px",alignItems:"flex-end"}),a=document.createElement("textarea");a.placeholder=o.placeholder,a.setAttribute("aria-label",o.placeholder),a.rows=1,t.css(a,{flex:"1",resize:"none",boxSizing:"border-box",padding:"10px 12px",border:`1px solid ${t.BORDER_COLOR}`,borderRadius:"12px",fontSize:"16px",fontFamily:t.FONT_VAR,lineHeight:"1.4",maxHeight:"110px",overflowY:"hidden"});const _=()=>{a.style.height="auto";const g=Math.min(a.scrollHeight+2,110);a.style.height=`${g}px`,a.style.overflowY=a.scrollHeight+2>110?"auto":"hidden"};a.addEventListener("input",()=>{_(),H()});const m='<svg width="18" height="18" viewBox="0 -960 960 960" fill="currentColor" aria-hidden="true"><path d="M440-160v-487L216-423l-56-57 320-320 320 320-56 57-224-224v487h-80Z"/></svg>',y='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" style="animation: ago-spin 0.8s linear infinite"><path d="M21 12a9 9 0 1 1-6.219-8.56"/></svg>',u='<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><rect x="5" y="5" width="14" height="14" rx="2"/></svg>',p=document.createElement("button");p.type="submit",p.setAttribute("aria-label","Send"),p.innerHTML=m,t.css(p,{flexShrink:"0",width:"44px",height:"44px",padding:"0",border:"none",borderRadius:"50%",backgroundColor:t.BRAND_COLOR,color:t.BRAND_TEXT_COLOR,display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer"});let R=!1;const M=()=>R&&!!o.onStop,H=()=>{const c=a.value.trim()!==""||i.length>0,g=M(),A=!g&&(R||!c);p.disabled=A,p.type=g?"button":"submit",p.setAttribute("aria-label",g?"Stop generating":"Send"),p.innerHTML=g?u:R?y:m,p.style.opacity=A&&!R?"0.5":"1",p.style.cursor=A?"default":"pointer"};p.addEventListener("click",()=>{M()&&o.onStop?.()});let B=null,O=null;o.allowFiles&&(B=document.createElement("input"),B.type="file",B.multiple=!0,t.css(B,{display:"none"}),O=document.createElement("button"),O.type="button",O.setAttribute("aria-label","Attach file"),O.textContent="📎",t.css(O,{flexShrink:"0",minWidth:"44px",minHeight:"44px",display:"flex",alignItems:"center",justifyContent:"center",padding:"0 12px",border:`1px solid ${t.BORDER_COLOR}`,borderRadius:"12px",backgroundColor:t.PANEL_BACKGROUND,cursor:"pointer",fontSize:"14px"}),O.addEventListener("click",()=>B?.click()),B.addEventListener("change",()=>{i=[...i,...Array.from(B?.files??[])],h()}));function h(){r.replaceChildren(),i.forEach((c,g)=>{const A=t.div({display:"flex",alignItems:"center",gap:"4px",padding:"4px 8px",backgroundColor:"#f0f4ff",border:`1px solid ${t.BORDER_COLOR}`,borderRadius:"8px",fontSize:"12px"}),q=document.createElement("span");q.textContent=c.name;const D=document.createElement("button");D.type="button",D.setAttribute("aria-label",`Remove ${c.name}`),D.textContent="×",t.css(D,{flexShrink:"0",width:"44px",height:"44px",margin:"-14px -12px -14px -4px",display:"flex",alignItems:"center",justifyContent:"center",border:"none",background:"transparent",cursor:"pointer",fontSize:"14px",lineHeight:"1"}),D.addEventListener("click",()=>{i=i.filter((N,G)=>G!==g),h()}),A.append(q,D),r.appendChild(A)}),H()}const x=()=>{const c=a.value,g=i;return a.value="",_(),i=[],h(),{content:c,files:g}},v=()=>{const{content:c,files:g}=x();(c.trim()||g.length>0)&&o.onSend(c.trim(),g.length>0?g:void 0)};return s.addEventListener("submit",c=>{c.preventDefault(),v()}),a.addEventListener("keydown",c=>{c.key==="Enter"&&!c.shiftKey&&(c.preventDefault(),v())}),O&&C.appendChild(O),C.append(a,p),B&&s.appendChild(B),s.append(r,C),H(),{inputRow:s,getValueAndClear:x,setDisabled:c=>{a.disabled=c,R=c,H()},focus:()=>a.focus(),restoreDraft:(c,g)=>{c&&!a.value.trim()&&(a.value=c,_()),g?.length&&(i=[...g,...i],h()),H()}}}var nn={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function se(o){return o.replace(/[&<>"']/g,i=>nn[i])}function yt(o){const i=o.trim();return/^(https?:|mailto:|tel:|#|\/|\.\/|\.\.\/)/i.test(i)||!/^[a-z][a-z0-9+.-]*:/i.test(i)?i:null}var Rt='"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace',Oe="";function ee(o){const i=[],s=C=>(i.push(C),`${Oe}${i.length-1}${Oe}`);let r=o;return r=r.replace(/`([^`]+)`/g,(C,a)=>s(`<code style="background:#f0f2f5;padding:2px 5px;border-radius:4px;font-size:13px;font-family:${Rt}">${se(a)}</code>`)),r=r.replace(/!\[([^\]]*)\]\(([^)\s]+)\)/g,(C,a,_)=>{const m=yt(_);return m?s(`<img alt="${se(a)}" src="${se(m)}" style="max-width:100%;border-radius:8px;margin:4px 0" />`):C}),r=r.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(C,a,_)=>{const m=yt(_);return m?s(`<a href="${se(m)}" target="_blank" rel="noopener noreferrer" style="color:#1b5fc4;text-decoration:underline">${ee(a)}</a>`):C}),r=se(r),r=r.replace(/\*\*([^*]+?)\*\*/g,"<strong>$1</strong>").replace(/__([^_]+?)__/g,"<strong>$1</strong>").replace(/~~([^~]+?)~~/g,"<del>$1</del>").replace(/(^|[^*])\*(?!\s)([^*]+?)\*/g,"$1<em>$2</em>").replace(/(^|[^\w_])_(?!\s)([^_]+?)_/g,"$1<em>$2</em>"),r=r.replace(new RegExp(`${Oe}(\\d+)${Oe}`,"g"),(C,a)=>i[Number(a)]),r}function U(o,i,s){const r=document.createElement(o);return Object.assign(r.style,i),s!==void 0&&(r.innerHTML=s),r}var St=/^ {0,3}([-*_])( *\1){2,} *$/,_t=/^ {0,3}(#{1,6})\s+(.*?)\s*#*\s*$/,Ot=/^ {0,3}(```+|~~~+)/,Ae=/^ {0,3}>\s?/,le=/^(\s*)([-*+]|\d+[.)])\s+(.*)$/,on=["20px","18px","16px","15px","14px","13px"],Xe=o=>o.match(/^\s*/)?.[0].length??0;function rn(o){return o.trim()===""||St.test(o)||_t.test(o)||Ot.test(o)||Ae.test(o)||le.test(o)}function At(o){const i=o[0].match(le),s=i[1].length,r=/\d/.test(i[2]),C=U(r?"ol":"ul",{margin:"0 0 8px 0",paddingLeft:"20px",listStyleType:r?"decimal":"disc",listStylePosition:"outside"});let a=0;for(;a<o.length;){const _=o[a].match(le),m=[];for(a++;a<o.length&&Xe(o[a])>s;)m.push(o[a]),a++;const y=U("li",{display:"list-item",margin:"2px 0",lineHeight:"1.6"}),u=_[3].match(/^\[([ xX])\]\s+(.*)$/);u?(y.style.listStyleType="none",y.style.marginLeft="-20px",y.innerHTML=`<span style="margin-right:6px">${u[1].toLowerCase()==="x"?"☑":"☐"}</span>${ee(u[2])}`):y.innerHTML=ee(_[3]),m.filter(p=>le.test(p)).length>0&&y.appendChild(At(m.filter(p=>p.trim()!==""))),C.appendChild(y)}return C}function sn(o){const i=m=>m.replace(/^\s*\|?/,"").replace(/\|?\s*$/,"").split("|").map(y=>y.trim()),s=U("div",{overflowX:"auto",margin:"0 0 8px 0"}),r=U("table",{borderCollapse:"collapse",width:"100%",fontSize:"13px"}),C=document.createElement("thead"),a=document.createElement("tr");for(const m of i(o[0]))a.appendChild(U("th",{border:"1px solid #dee3e8",padding:"6px 10px",textAlign:"left",backgroundColor:"#f5f7fa",fontWeight:"600"},ee(m)));C.appendChild(a),r.appendChild(C);const _=document.createElement("tbody");for(const m of o.slice(2)){const y=document.createElement("tr");for(const u of i(m))y.appendChild(U("td",{border:"1px solid #dee3e8",padding:"6px 10px"},ee(u)));_.appendChild(y)}return r.appendChild(_),s.appendChild(r),s}var an=o=>!!o&&/^\s*\|?\s*:?-{1,}:?\s*(\|\s*:?-{1,}:?\s*)*\|?\s*$/.test(o);function Le(o){const i=document.createDocumentFragment(),s=o.replace(/\r\n?/g,`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ae=require("./AgoClient-B_u_d-XS.cjs"),en=require("./createConversationSession-BCdwAhLF.cjs"),Ct=require("./createFormCollector-ssBP8u0p.cjs"),t=require("./sheetController-DY-sC13T.cjs");function tn(o){let i=[];const s=document.createElement("form");t.css(s,{display:"flex",flexDirection:"column",gap:"8px",padding:"12px",borderTop:`1px solid ${t.BORDER_COLOR}`,backgroundColor:t.PANEL_BACKGROUND}),s.className="ago-chat-input";const r=t.div({display:"flex",flexWrap:"wrap",gap:"6px"}),C=t.div({display:"flex",gap:"8px",alignItems:"flex-end"}),a=document.createElement("textarea");a.placeholder=o.placeholder,a.setAttribute("aria-label",o.placeholder),a.rows=1,t.css(a,{flex:"1",resize:"none",boxSizing:"border-box",padding:"10px 12px",border:`1px solid ${t.BORDER_COLOR}`,borderRadius:"12px",fontSize:"16px",fontFamily:t.FONT_VAR,lineHeight:"1.4",maxHeight:"110px",overflowY:"hidden"});const _=()=>{a.style.height="auto";const g=Math.min(a.scrollHeight+2,110);a.style.height=`${g}px`,a.style.overflowY=a.scrollHeight+2>110?"auto":"hidden"};a.addEventListener("input",()=>{_(),H()});const m='<svg width="18" height="18" viewBox="0 -960 960 960" fill="currentColor" aria-hidden="true"><path d="M440-160v-487L216-423l-56-57 320-320 320 320-56 57-224-224v487h-80Z"/></svg>',y='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true" style="animation: ago-spin 0.8s linear infinite"><path d="M21 12a9 9 0 1 1-6.219-8.56"/></svg>',u='<svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><rect x="5" y="5" width="14" height="14" rx="2"/></svg>',p=document.createElement("button");p.type="submit",p.setAttribute("aria-label","Send"),p.innerHTML=m,t.css(p,{flexShrink:"0",width:"44px",height:"44px",padding:"0",border:"none",borderRadius:"50%",backgroundColor:t.BRAND_COLOR,color:t.BRAND_TEXT_COLOR,display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer"});let R=!1;const M=()=>R&&!!o.onStop,H=()=>{const c=a.value.trim()!==""||i.length>0,g=M(),A=!g&&(R||!c);p.disabled=A,p.type=g?"button":"submit",p.setAttribute("aria-label",g?"Stop generating":"Send"),p.innerHTML=g?u:R?y:m,p.style.opacity=A&&!R?"0.5":"1",p.style.cursor=A?"default":"pointer"};p.addEventListener("click",()=>{M()&&o.onStop?.()});let B=null,O=null;o.allowFiles&&(B=document.createElement("input"),B.type="file",B.multiple=!0,t.css(B,{display:"none"}),O=document.createElement("button"),O.type="button",O.setAttribute("aria-label","Attach file"),O.textContent="📎",t.css(O,{flexShrink:"0",minWidth:"44px",minHeight:"44px",display:"flex",alignItems:"center",justifyContent:"center",padding:"0 12px",border:`1px solid ${t.BORDER_COLOR}`,borderRadius:"12px",backgroundColor:t.PANEL_BACKGROUND,cursor:"pointer",fontSize:"14px"}),O.addEventListener("click",()=>B?.click()),B.addEventListener("change",()=>{i=[...i,...Array.from(B?.files??[])],h()}));function h(){r.replaceChildren(),i.forEach((c,g)=>{const A=t.div({display:"flex",alignItems:"center",gap:"4px",padding:"4px 8px",backgroundColor:"#f0f4ff",border:`1px solid ${t.BORDER_COLOR}`,borderRadius:"8px",fontSize:"12px"}),q=document.createElement("span");q.textContent=c.name;const D=document.createElement("button");D.type="button",D.setAttribute("aria-label",`Remove ${c.name}`),D.textContent="×",t.css(D,{flexShrink:"0",width:"44px",height:"44px",margin:"-14px -12px -14px -4px",display:"flex",alignItems:"center",justifyContent:"center",border:"none",background:"transparent",cursor:"pointer",fontSize:"14px",lineHeight:"1"}),D.addEventListener("click",()=>{i=i.filter((N,G)=>G!==g),h()}),A.append(q,D),r.appendChild(A)}),H()}const x=()=>{const c=a.value,g=i;return a.value="",_(),i=[],h(),{content:c,files:g}},v=()=>{const{content:c,files:g}=x();(c.trim()||g.length>0)&&o.onSend(c.trim(),g.length>0?g:void 0)};return s.addEventListener("submit",c=>{c.preventDefault(),v()}),a.addEventListener("keydown",c=>{c.key==="Enter"&&!c.shiftKey&&(c.preventDefault(),v())}),O&&C.appendChild(O),C.append(a,p),B&&s.appendChild(B),s.append(r,C),H(),{inputRow:s,getValueAndClear:x,setDisabled:c=>{a.disabled=c,R=c,H()},focus:()=>a.focus(),restoreDraft:(c,g)=>{c&&!a.value.trim()&&(a.value=c,_()),g?.length&&(i=[...g,...i],h()),H()}}}var nn={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function se(o){return o.replace(/[&<>"']/g,i=>nn[i])}function yt(o){const i=o.trim();return/^(https?:|mailto:|tel:|#|\/|\.\/|\.\.\/)/i.test(i)||!/^[a-z][a-z0-9+.-]*:/i.test(i)?i:null}var Rt='"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace',Oe="";function ee(o){const i=[],s=C=>(i.push(C),`${Oe}${i.length-1}${Oe}`);let r=o;return r=r.replace(/`([^`]+)`/g,(C,a)=>s(`<code style="background:#f0f2f5;padding:2px 5px;border-radius:4px;font-size:13px;font-family:${Rt}">${se(a)}</code>`)),r=r.replace(/!\[([^\]]*)\]\(([^)\s]+)\)/g,(C,a,_)=>{const m=yt(_);return m?s(`<img alt="${se(a)}" src="${se(m)}" style="max-width:100%;border-radius:8px;margin:4px 0" />`):C}),r=r.replace(/\[([^\]]+)\]\(([^)\s]+)\)/g,(C,a,_)=>{const m=yt(_);return m?s(`<a href="${se(m)}" target="_blank" rel="noopener noreferrer" style="color:#1b5fc4;text-decoration:underline">${ee(a)}</a>`):C}),r=se(r),r=r.replace(/\*\*([^*]+?)\*\*/g,"<strong>$1</strong>").replace(/__([^_]+?)__/g,"<strong>$1</strong>").replace(/~~([^~]+?)~~/g,"<del>$1</del>").replace(/(^|[^*])\*(?!\s)([^*]+?)\*/g,"$1<em>$2</em>").replace(/(^|[^\w_])_(?!\s)([^_]+?)_/g,"$1<em>$2</em>"),r=r.replace(new RegExp(`${Oe}(\\d+)${Oe}`,"g"),(C,a)=>i[Number(a)]),r}function U(o,i,s){const r=document.createElement(o);return Object.assign(r.style,i),s!==void 0&&(r.innerHTML=s),r}var St=/^ {0,3}([-*_])( *\1){2,} *$/,_t=/^ {0,3}(#{1,6})\s+(.*?)\s*#*\s*$/,Ot=/^ {0,3}(```+|~~~+)/,Ae=/^ {0,3}>\s?/,le=/^(\s*)([-*+]|\d+[.)])\s+(.*)$/,on=["20px","18px","16px","15px","14px","13px"],Xe=o=>o.match(/^\s*/)?.[0].length??0;function rn(o){return o.trim()===""||St.test(o)||_t.test(o)||Ot.test(o)||Ae.test(o)||le.test(o)}function At(o){const i=o[0].match(le),s=i[1].length,r=/\d/.test(i[2]),C=U(r?"ol":"ul",{margin:"0 0 8px 0",paddingLeft:"20px",listStyleType:r?"decimal":"disc",listStylePosition:"outside"});let a=0;for(;a<o.length;){const _=o[a].match(le),m=[];for(a++;a<o.length&&Xe(o[a])>s;)m.push(o[a]),a++;const y=U("li",{display:"list-item",margin:"2px 0",lineHeight:"1.6"}),u=_[3].match(/^\[([ xX])\]\s+(.*)$/);u?(y.style.listStyleType="none",y.style.marginLeft="-20px",y.innerHTML=`<span style="margin-right:6px">${u[1].toLowerCase()==="x"?"☑":"☐"}</span>${ee(u[2])}`):y.innerHTML=ee(_[3]),m.filter(p=>le.test(p)).length>0&&y.appendChild(At(m.filter(p=>p.trim()!==""))),C.appendChild(y)}return C}function sn(o){const i=m=>m.replace(/^\s*\|?/,"").replace(/\|?\s*$/,"").split("|").map(y=>y.trim()),s=U("div",{overflowX:"auto",margin:"0 0 8px 0"}),r=U("table",{borderCollapse:"collapse",width:"100%",fontSize:"13px"}),C=document.createElement("thead"),a=document.createElement("tr");for(const m of i(o[0]))a.appendChild(U("th",{border:"1px solid #dee3e8",padding:"6px 10px",textAlign:"left",backgroundColor:"#f5f7fa",fontWeight:"600"},ee(m)));C.appendChild(a),r.appendChild(C);const _=document.createElement("tbody");for(const m of o.slice(2)){const y=document.createElement("tr");for(const u of i(m))y.appendChild(U("td",{border:"1px solid #dee3e8",padding:"6px 10px"},ee(u)));_.appendChild(y)}return r.appendChild(_),s.appendChild(r),s}var an=o=>!!o&&/^\s*\|?\s*:?-{1,}:?\s*(\|\s*:?-{1,}:?\s*)*\|?\s*$/.test(o);function Le(o){const i=document.createDocumentFragment(),s=o.replace(/\r\n?/g,`
2
2
  `).split(`
3
3
  `);let r=0;for(;r<s.length;){const a=s[r];if(a.trim()===""){r++;continue}const _=a.match(Ot);if(_){const u=_[1][0],p=[];for(r++;r<s.length&&!new RegExp(`^ {0,3}${u==="`"?"`{3,}":"~{3,}"}\\s*$`).test(s[r]);)p.push(s[r]),r++;r++;const R=U("pre",{margin:"0 0 8px 0"});R.appendChild(U("code",{display:"block",background:"#f5f5f5",padding:"8px 12px",borderRadius:"6px",fontSize:"13px",overflowX:"auto",fontFamily:Rt,whiteSpace:"pre"},se(p.join(`
4
4
  `)))),i.appendChild(R);continue}if(St.test(a)){i.appendChild(U("hr",{border:"none",borderTop:"1px solid #dee3e8",margin:"12px 0"})),r++;continue}const m=a.match(_t);if(m){const u=m[1].length;i.appendChild(U(`h${u}`,{margin:"16px 0 8px 0",fontSize:on[u-1],fontWeight:"600",lineHeight:"1.3"},ee(m[2]))),r++;continue}if(Ae.test(a)){const u=[];for(;r<s.length&&Ae.test(s[r]);)u.push(s[r].replace(Ae,"")),r++;const p=U("blockquote",{borderLeft:"4px solid #dee3e8",paddingLeft:"12px",margin:"0 0 8px 0",fontStyle:"italic",color:"#6b6d6f"});p.appendChild(Le(u.join(`
package/dist/widget.js CHANGED
@@ -1,6 +1,6 @@
1
- import { a as mn, b as hn, i as gn, o as xn, s as bn, t as yn } from "./AgoClient-PWPaekcg.js";
2
- import { t as wn } from "./createConversationSession-BkruoOVm.js";
3
- import { r as vn, t as Cn } from "./createFormCollector-CvVFNkp6.js";
1
+ import { a as mn, b as hn, i as gn, o as xn, s as bn, t as yn } from "./AgoClient-BJjLTOw4.js";
2
+ import { t as wn } from "./createConversationSession-Bgvx753t.js";
3
+ import { r as vn, t as Cn } from "./createFormCollector-CM3qjGcM.js";
4
4
  import { C as Qe, S as _t, _ as te, a as T, b as g, c as $e, d as Ot, f as Ye, g as En, h as ne, i as Lt, l as Sn, m as Bt, n as jn, o as Te, p as An, r as Je, s as Me, t as Vn, u as $t, v as Rn, x as kn, y as E } from "./sheetController-CBUVOroo.js";
5
5
  function In(n) {
6
6
  let o = [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useago/sdk",
3
- "version": "1.7.0",
3
+ "version": "1.7.1",
4
4
  "description": "Create In-APP AI agents that answers question and performs actions. Works with React, Vue, Angular and vanilla JS/TS.",
5
5
  "type": "module",
6
6
  "sideEffects": false,