@useago/sdk 1.5.3 → 1.5.4
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 +18 -0
- package/README.md +10 -0
- package/dist/AgoClient-BW0YZsis.js +1681 -0
- package/dist/AgoClient-Ba3ICq4K.cjs +8 -0
- package/dist/angular.cjs +1 -1
- package/dist/angular.d.cts +41 -0
- package/dist/angular.d.ts +41 -0
- package/dist/angular.js +2 -2
- package/dist/{createConversationSession-C7cnnWKW.js → createConversationSession-BjsgjL-v.js} +1 -1
- package/dist/{createConversationSession-BCb0D6bt.cjs → createConversationSession-okoz3teC.cjs} +1 -1
- package/dist/{createFormCollector-t_fGyuTD.cjs → createFormCollector-BWIh1pMl.cjs} +1 -1
- package/dist/{createFormCollector-iCDwAwYJ.js → createFormCollector-Bay2UpRv.js} +1 -1
- package/dist/devtools.d.cts +41 -0
- package/dist/devtools.d.ts +41 -0
- package/dist/functions-CPs7omgM.cjs +1 -0
- package/dist/helpers.cjs +1 -1
- package/dist/helpers.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +54 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.js +64 -62
- package/dist/react.cjs +3 -3
- package/dist/react.d.cts +55 -0
- package/dist/react.d.ts +55 -0
- package/dist/react.js +142 -122
- package/dist/testing.cjs +1 -1
- package/dist/testing.d.cts +41 -0
- package/dist/testing.d.ts +41 -0
- package/dist/testing.js +1 -1
- package/dist/vue.cjs +1 -1
- package/dist/vue.d.cts +41 -0
- package/dist/vue.d.ts +41 -0
- package/dist/vue.js +1 -1
- package/dist/widget.cjs +1 -1
- package/dist/widget.d.cts +41 -0
- package/dist/widget.d.ts +41 -0
- package/dist/widget.js +3 -3
- package/llms-full.txt +29 -0
- package/package.json +1 -1
- package/dist/AgoClient-BGkFSNZF.cjs +0 -8
- package/dist/AgoClient-CW-BLT1_.js +0 -1542
- package/dist/functions-IGSjjvF4.cjs +0 -1
- package/dist/rolldown-runtime-16Nf8qvH.cjs +0 -1
- /package/dist/{autoContinue-D3Mmaaca.js → autoContinue-CC8K9mBU.js} +0 -0
- /package/dist/{autoContinue-CcCTva-D.cjs → autoContinue-CP9pJR-V.cjs} +0 -0
- /package/dist/{createMockClient-Br0TWgLO.js → createMockClient-DcuNlufr.js} +0 -0
- /package/dist/{createMockClient-BwNLPjeT.cjs → createMockClient-Dw-cyISN.cjs} +0 -0
- /package/dist/{functions-CApuQZ2b.js → functions-tzyOZNp6.js} +0 -0
package/dist/index.d.cts
CHANGED
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
export declare interface ActivityEntry {
|
|
2
|
+
ts: number;
|
|
3
|
+
actor: "user" | "agent";
|
|
4
|
+
name: string;
|
|
5
|
+
summary: string;
|
|
6
|
+
data?: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export declare interface ActivityInput {
|
|
10
|
+
actor?: "user" | "agent";
|
|
11
|
+
name: string;
|
|
12
|
+
summary: string;
|
|
13
|
+
data?: Record<string, unknown>;
|
|
14
|
+
ts?: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Capped, in-memory log of recent user and agent actions (oldest dropped first). */
|
|
18
|
+
export declare class ActivityLedger {
|
|
19
|
+
private entries;
|
|
20
|
+
private readonly maxEntries;
|
|
21
|
+
constructor(maxEntries?: number);
|
|
22
|
+
add(input: ActivityInput): ActivityEntry;
|
|
23
|
+
getRecent(): ActivityEntry[];
|
|
24
|
+
get size(): number;
|
|
25
|
+
clear(): void;
|
|
26
|
+
}
|
|
27
|
+
|
|
1
28
|
/**
|
|
2
29
|
* Agent information
|
|
3
30
|
*/
|
|
@@ -64,6 +91,8 @@ export declare class AgoClient {
|
|
|
64
91
|
private functionRegistry;
|
|
65
92
|
private contextRegistry;
|
|
66
93
|
private eventEmitter;
|
|
94
|
+
private activityLedger;
|
|
95
|
+
private lastSentPageState;
|
|
67
96
|
private config;
|
|
68
97
|
/** Conversations already warned about an empty reply (one warning each). */
|
|
69
98
|
private warnedEmptyConversations;
|
|
@@ -374,6 +403,19 @@ export declare class AgoClient {
|
|
|
374
403
|
* Get the current context snapshot.
|
|
375
404
|
*/
|
|
376
405
|
getContextSnapshot(): ContextSnapshot | null;
|
|
406
|
+
private buildSendContext;
|
|
407
|
+
/**
|
|
408
|
+
* Record something the user just did so the agent is aware of it on the next
|
|
409
|
+
* message. `actor` defaults to `"user"`. Keep `summary` short and high-signal
|
|
410
|
+
* (no raw payloads, secrets, or PII).
|
|
411
|
+
*/
|
|
412
|
+
recordActivity(entry: ActivityInput): void;
|
|
413
|
+
/** Recent user + agent actions, oldest first (a copy). */
|
|
414
|
+
getRecentActivity(): ActivityEntry[];
|
|
415
|
+
clearActivity(): void;
|
|
416
|
+
private addActivity;
|
|
417
|
+
private recordAgentAction;
|
|
418
|
+
private registerActivityContext;
|
|
377
419
|
/**
|
|
378
420
|
* Subscribe to an event
|
|
379
421
|
*/
|
|
@@ -545,6 +587,8 @@ export declare interface AgoClientEvents {
|
|
|
545
587
|
"nudge:accepted": {
|
|
546
588
|
nudge: ProactiveNudgeInstance;
|
|
547
589
|
};
|
|
590
|
+
/** A user- or agent-action was recorded into the activity ledger. */
|
|
591
|
+
"activity:recorded": ActivityEntry;
|
|
548
592
|
}
|
|
549
593
|
|
|
550
594
|
/**
|
|
@@ -606,6 +650,14 @@ export declare interface AgoConfig {
|
|
|
606
650
|
* with `maxResultBytes` on its definition; `Infinity` disables the guard.
|
|
607
651
|
*/
|
|
608
652
|
maxFunctionResultBytes?: number;
|
|
653
|
+
/**
|
|
654
|
+
* Max number of recent actions kept in the in-memory activity ledger that
|
|
655
|
+
* rides along as the `activity:recent` context entry. Older entries drop
|
|
656
|
+
* first. Default `10`. Larger values give the agent more history at the cost
|
|
657
|
+
* of tokens on every message. Each entry's `data` is also size-clamped (long
|
|
658
|
+
* strings truncated, large arrays capped) so one event can't bloat the context.
|
|
659
|
+
*/
|
|
660
|
+
maxActivityEntries?: number;
|
|
609
661
|
/**
|
|
610
662
|
* Enable the proactive mode: declarative triggers evaluated client-side
|
|
611
663
|
* against friction signals (dwell/idle time, rage clicks, route bounces…)
|
|
@@ -1238,6 +1290,8 @@ export declare function createMockClient(options?: MockAgoClientOptions): MockAg
|
|
|
1238
1290
|
|
|
1239
1291
|
export declare function createStore<T>(initial: T, persist?: PersistOptions): Store<T>;
|
|
1240
1292
|
|
|
1293
|
+
export declare const DEFAULT_MAX_ACTIVITY_ENTRIES = 10;
|
|
1294
|
+
|
|
1241
1295
|
/**
|
|
1242
1296
|
* Create a reusable function definition.
|
|
1243
1297
|
* Returns the same object — this is an identity function for discoverability and type-checking.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
export declare interface ActivityEntry {
|
|
2
|
+
ts: number;
|
|
3
|
+
actor: "user" | "agent";
|
|
4
|
+
name: string;
|
|
5
|
+
summary: string;
|
|
6
|
+
data?: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export declare interface ActivityInput {
|
|
10
|
+
actor?: "user" | "agent";
|
|
11
|
+
name: string;
|
|
12
|
+
summary: string;
|
|
13
|
+
data?: Record<string, unknown>;
|
|
14
|
+
ts?: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Capped, in-memory log of recent user and agent actions (oldest dropped first). */
|
|
18
|
+
export declare class ActivityLedger {
|
|
19
|
+
private entries;
|
|
20
|
+
private readonly maxEntries;
|
|
21
|
+
constructor(maxEntries?: number);
|
|
22
|
+
add(input: ActivityInput): ActivityEntry;
|
|
23
|
+
getRecent(): ActivityEntry[];
|
|
24
|
+
get size(): number;
|
|
25
|
+
clear(): void;
|
|
26
|
+
}
|
|
27
|
+
|
|
1
28
|
/**
|
|
2
29
|
* Agent information
|
|
3
30
|
*/
|
|
@@ -64,6 +91,8 @@ export declare class AgoClient {
|
|
|
64
91
|
private functionRegistry;
|
|
65
92
|
private contextRegistry;
|
|
66
93
|
private eventEmitter;
|
|
94
|
+
private activityLedger;
|
|
95
|
+
private lastSentPageState;
|
|
67
96
|
private config;
|
|
68
97
|
/** Conversations already warned about an empty reply (one warning each). */
|
|
69
98
|
private warnedEmptyConversations;
|
|
@@ -374,6 +403,19 @@ export declare class AgoClient {
|
|
|
374
403
|
* Get the current context snapshot.
|
|
375
404
|
*/
|
|
376
405
|
getContextSnapshot(): ContextSnapshot | null;
|
|
406
|
+
private buildSendContext;
|
|
407
|
+
/**
|
|
408
|
+
* Record something the user just did so the agent is aware of it on the next
|
|
409
|
+
* message. `actor` defaults to `"user"`. Keep `summary` short and high-signal
|
|
410
|
+
* (no raw payloads, secrets, or PII).
|
|
411
|
+
*/
|
|
412
|
+
recordActivity(entry: ActivityInput): void;
|
|
413
|
+
/** Recent user + agent actions, oldest first (a copy). */
|
|
414
|
+
getRecentActivity(): ActivityEntry[];
|
|
415
|
+
clearActivity(): void;
|
|
416
|
+
private addActivity;
|
|
417
|
+
private recordAgentAction;
|
|
418
|
+
private registerActivityContext;
|
|
377
419
|
/**
|
|
378
420
|
* Subscribe to an event
|
|
379
421
|
*/
|
|
@@ -545,6 +587,8 @@ export declare interface AgoClientEvents {
|
|
|
545
587
|
"nudge:accepted": {
|
|
546
588
|
nudge: ProactiveNudgeInstance;
|
|
547
589
|
};
|
|
590
|
+
/** A user- or agent-action was recorded into the activity ledger. */
|
|
591
|
+
"activity:recorded": ActivityEntry;
|
|
548
592
|
}
|
|
549
593
|
|
|
550
594
|
/**
|
|
@@ -606,6 +650,14 @@ export declare interface AgoConfig {
|
|
|
606
650
|
* with `maxResultBytes` on its definition; `Infinity` disables the guard.
|
|
607
651
|
*/
|
|
608
652
|
maxFunctionResultBytes?: number;
|
|
653
|
+
/**
|
|
654
|
+
* Max number of recent actions kept in the in-memory activity ledger that
|
|
655
|
+
* rides along as the `activity:recent` context entry. Older entries drop
|
|
656
|
+
* first. Default `10`. Larger values give the agent more history at the cost
|
|
657
|
+
* of tokens on every message. Each entry's `data` is also size-clamped (long
|
|
658
|
+
* strings truncated, large arrays capped) so one event can't bloat the context.
|
|
659
|
+
*/
|
|
660
|
+
maxActivityEntries?: number;
|
|
609
661
|
/**
|
|
610
662
|
* Enable the proactive mode: declarative triggers evaluated client-side
|
|
611
663
|
* against friction signals (dwell/idle time, rage clicks, route bounces…)
|
|
@@ -1238,6 +1290,8 @@ export declare function createMockClient(options?: MockAgoClientOptions): MockAg
|
|
|
1238
1290
|
|
|
1239
1291
|
export declare function createStore<T>(initial: T, persist?: PersistOptions): Store<T>;
|
|
1240
1292
|
|
|
1293
|
+
export declare const DEFAULT_MAX_ACTIVITY_ENTRIES = 10;
|
|
1294
|
+
|
|
1241
1295
|
/**
|
|
1242
1296
|
* Create a reusable function definition.
|
|
1243
1297
|
* Returns the same object — this is an identity function for discoverability and type-checking.
|
package/dist/index.js
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { C as
|
|
3
|
-
import { t as
|
|
4
|
-
import { t as
|
|
5
|
-
import { n as
|
|
6
|
-
import { t as
|
|
1
|
+
import { a as h, c as w, d as C, f as y, i as E, l as S, m as b, o as v, p as F, r as T, s as I, t as M, u as U } from "./functions-tzyOZNp6.js";
|
|
2
|
+
import { C as k, S as L, T as N, _ as x, a as D, b as d, c as G, d as O, f as R, g as q, h as P, l as H, m as J, n as j, o as z, p as B, r as V, s as W, t as c, u as X, v as Y, w as $, x as K, y as Q } from "./AgoClient-BW0YZsis.js";
|
|
3
|
+
import { t as ee } from "./autoContinue-CC8K9mBU.js";
|
|
4
|
+
import { t as oe } from "./createConversationSession-BjsgjL-v.js";
|
|
5
|
+
import { n as ae, r as ne, t as se } from "./createFormCollector-Bay2UpRv.js";
|
|
6
|
+
import { t as ue } from "./createMockClient-DcuNlufr.js";
|
|
7
7
|
import "./testing.js";
|
|
8
|
-
function
|
|
8
|
+
function fe(e) {
|
|
9
9
|
return e;
|
|
10
10
|
}
|
|
11
|
-
function
|
|
11
|
+
function me(e, t) {
|
|
12
12
|
return e.on("message:complete", t), () => e.off("message:complete", t);
|
|
13
13
|
}
|
|
14
|
-
function
|
|
14
|
+
function le(e, t) {
|
|
15
15
|
return e.on("message:chunk", t), () => e.off("message:chunk", t);
|
|
16
16
|
}
|
|
17
|
-
function
|
|
17
|
+
function de(e, t) {
|
|
18
18
|
return e.on("message:start", t), () => e.off("message:start", t);
|
|
19
19
|
}
|
|
20
|
-
function
|
|
20
|
+
function ce(e, t) {
|
|
21
21
|
return e.on("message:error", t), () => e.off("message:error", t);
|
|
22
22
|
}
|
|
23
|
-
function
|
|
23
|
+
function pe(e, t) {
|
|
24
24
|
return e.on("toolCall:received", t), () => e.off("toolCall:received", t);
|
|
25
25
|
}
|
|
26
|
-
function
|
|
26
|
+
function Ae(e, t) {
|
|
27
27
|
return e.on("form:submitted", t), () => e.off("form:submitted", t);
|
|
28
28
|
}
|
|
29
|
-
function
|
|
29
|
+
function he(e, t) {
|
|
30
30
|
return e.on("form:error", t), () => e.off("form:error", t);
|
|
31
31
|
}
|
|
32
|
-
function
|
|
32
|
+
function we(e, t) {
|
|
33
33
|
return e.on("function:invoke", t), () => e.off("function:invoke", t);
|
|
34
34
|
}
|
|
35
|
-
async function*
|
|
35
|
+
async function* Ce(e, t, u) {
|
|
36
36
|
const a = [];
|
|
37
37
|
let r = null, n = !1;
|
|
38
38
|
const g = (s) => {
|
|
@@ -95,70 +95,72 @@ function p(e) {
|
|
|
95
95
|
debug: f
|
|
96
96
|
} : null;
|
|
97
97
|
}
|
|
98
|
-
function
|
|
98
|
+
function ye(e) {
|
|
99
99
|
const t = p(e);
|
|
100
100
|
if (!t) throw new d('createAgo(): could not detect AGO configuration. Set window.AGO, add <meta name="ago-base-url">, or pass { baseUrl } explicitly.', "config_missing_base_url");
|
|
101
101
|
return new c(t);
|
|
102
102
|
}
|
|
103
|
-
function
|
|
103
|
+
function Ee(e, t) {
|
|
104
104
|
return {
|
|
105
105
|
...e,
|
|
106
106
|
handler: t
|
|
107
107
|
};
|
|
108
108
|
}
|
|
109
109
|
export {
|
|
110
|
-
|
|
110
|
+
$ as ActivityLedger,
|
|
111
|
+
Q as AgoApiError,
|
|
111
112
|
c as AgoClient,
|
|
112
113
|
d as AgoError,
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
114
|
+
K as AgoFunctionError,
|
|
115
|
+
L as AgoNetworkError,
|
|
116
|
+
k as AgoStreamError,
|
|
117
|
+
X as ClientContextRegistry,
|
|
118
|
+
N as DEFAULT_MAX_ACTIVITY_ENTRIES,
|
|
119
|
+
V as EventEmitter,
|
|
120
|
+
x as FunctionRegistry,
|
|
121
|
+
G as SSEHandler,
|
|
122
|
+
q as SignalCollector,
|
|
123
|
+
ee as attachAutoContinueAfterNavigation,
|
|
122
124
|
p as autoDetectConfig,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
125
|
+
D as canInlineImage,
|
|
126
|
+
M as copyToClipboard,
|
|
127
|
+
ye as createAgo,
|
|
128
|
+
O as createAgoProactive,
|
|
129
|
+
oe as createConversationSession,
|
|
130
|
+
se as createFormCollector,
|
|
131
|
+
Ce as createMessageStream,
|
|
132
|
+
ue as createMockClient,
|
|
131
133
|
P as createStore,
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
134
|
+
fe as defineFunction,
|
|
135
|
+
ae as deriveFormStatus,
|
|
136
|
+
z as formatFileSize,
|
|
137
|
+
T as getLocalStorage,
|
|
138
|
+
E as getUserLocation,
|
|
139
|
+
h as highlightElement,
|
|
140
|
+
H as isStreamNetworkError,
|
|
141
|
+
ne as loadFormCollector,
|
|
142
|
+
Y as logger,
|
|
143
|
+
R as matchesRoutePattern,
|
|
144
|
+
B as matchesWhen,
|
|
145
|
+
he as onFormError,
|
|
146
|
+
Ae as onFormSubmitted,
|
|
147
|
+
we as onFunctionInvoke,
|
|
148
|
+
me as onMessage,
|
|
149
|
+
le as onMessageChunk,
|
|
150
|
+
ce as onMessageError,
|
|
151
|
+
de as onMessageStart,
|
|
152
|
+
pe as onToolCall,
|
|
151
153
|
v as openUrl,
|
|
152
|
-
|
|
154
|
+
J as partialDeepMatch,
|
|
153
155
|
W as safeAttachmentUrl,
|
|
154
156
|
I as scrollToElement,
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
157
|
+
w as setLocalStorage,
|
|
158
|
+
S as setTheme,
|
|
159
|
+
U as showConfirmDialog,
|
|
158
160
|
C as showNotification,
|
|
159
161
|
y as showToast,
|
|
160
162
|
F as submitForm,
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
163
|
+
b as trackEvent,
|
|
164
|
+
j as validateConfig,
|
|
165
|
+
Ee as withHandler
|
|
164
166
|
};
|
package/dist/react.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});
|
|
2
|
-
`)?(0,
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var Q=Object.create,T=Object.defineProperty,ee=Object.getOwnPropertyDescriptor,te=Object.getOwnPropertyNames,ne=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty,oe=(e,n)=>{let t={};for(var o in e)T(t,o,{get:e[o],enumerable:!0});return n||T(t,Symbol.toStringTag,{value:"Module"}),t},se=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(var r=te(n),i=0,u=r.length,s;i<u;i++)s=r[i],!re.call(e,s)&&s!==t&&T(e,s,{get:(f=>n[f]).bind(null,s),enumerable:!(o=ee(n,s))||o.enumerable});return e},O=(e,n,t)=>(t=e!=null?Q(ne(e)):{},se(n||!e||!e.__esModule?T(t,"default",{value:e,enumerable:!0}):t,e));const _=require("./AgoClient-Ba3ICq4K.cjs"),ae=require("./autoContinue-CP9pJR-V.cjs"),M=require("./createFormCollector-BWIh1pMl.cjs"),ie=require("./createMockClient-Dw-cyISN.cjs");let a=require("react");a=O(a,1);let l=require("react/jsx-runtime"),D=require("react-markdown");D=O(D,1);let W=require("remark-gfm");W=O(W,1);function B(e){const[n,t]=(0,a.useState)(!1),o=(0,a.useRef)(null),r=(0,a.useMemo)(()=>{if(o.current&&(o.current.destroy(),o.current=null),!e)return null;const i=new _.AgoClient(e);return o.current=i,i},[e?.baseUrl,e?.widgetId]);return(0,a.useEffect)(()=>(r&&o.current===null&&(o.current=r,r.reviveAfterDestroy()),t(!0),()=>{o.current?.destroy(),o.current=null}),[r]),(0,a.useEffect)(()=>{o.current&&e&&o.current.updateConfig({agent:e.agent,defaultAgentId:e.defaultAgentId,permission:e.permission,userEmail:e.userEmail,userJwt:e.userJwt,debug:e.debug,warnOnEmptyReply:e.warnOnEmptyReply})},[e?.agent,e?.defaultAgentId,e?.permission,e?.userEmail,e?.userJwt,e?.debug,e?.warnOnEmptyReply]),{client:r,isReady:n}}var q=(0,a.createContext)(null),le=({children:e,client:n,tools:t,helpers:o,pageContext:r,...i})=>{const{client:u}=B(n?null:i),s=n||u;return(0,a.useEffect)(()=>{if(!(!t||t.length===0)){for(const f of t)s.register(f);return()=>{for(const f of t)s.unregisterFunction(f.name)}}},[s,t]),(0,a.useEffect)(()=>{if(!o)return;const f=[];return Promise.resolve().then(()=>require("./functions-CPs7omgM.cjs")).then(d=>d.functions_exports).then(d=>{for(const[m,S]of Object.entries(o)){const I=d[m];if(!I){console.warn(`[AGO] Unknown helper: "${m}"`);continue}const A=S===!0?I:{...I,handler:S};s.register(A),f.push(A.name)}}),()=>{for(const d of f)s.unregisterFunction(d)}},[s,o]),(0,a.useEffect)(()=>{r==="auto"&&s.enableAutoPageContext()},[s,r]),(0,l.jsx)(q.Provider,{value:s,children:e})};function F(){const e=(0,a.useContext)(q);if(!e)throw new Error('useAgoClient must be used within an <AgoProvider>. Wrap your component tree with <AgoProvider baseUrl="...">.');return e}function E(){return(0,a.useContext)(q)}function z({client:e,conversationId:n}={}){const t=E(),o=e||t;if(!o)throw new Error("useMessages requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.");const[r,i]=(0,a.useState)([]),[u,s]=(0,a.useState)(n),[f,d]=(0,a.useState)(!1),[m,S]=(0,a.useState)(null);(0,a.useEffect)(()=>{n&&n!==u&&(s(n),I(n))},[n]);const I=async A=>{try{i((await o.getMessages(A)).filter(k=>!k.hidden))}catch(k){S(k instanceof Error?k:new Error("Failed to load messages"))}};return(0,a.useEffect)(()=>{const A=g=>g==="IN_PROGRESS"||g==="WAITING_CLIENT",k=g=>{u||s(g.conversationId),d(!0),i(y=>{const w=y.findIndex(C=>C.id===g.messageId);return w>=0?y.map((C,R)=>R===w?{...C,status:"IN_PROGRESS"}:C):y.some(C=>C.role==="assistant"&&A(C.status))?y:[...y,{id:g.messageId,conversationId:g.conversationId,content:"",role:"assistant",status:"IN_PROGRESS",createdAt:new Date}]})},p=g=>{i(y=>{const w=y.findIndex(C=>C.id===g.messageId);return w<0?y:y.map((C,R)=>R===w?{...C,content:C.content+g.content}:C)})},h=g=>{i(y=>{let w=-1;for(let C=y.length-1;C>=0;C--)if(y[C].role==="assistant"&&A(y[C].status)){w=C;break}return w<0?y:[...y.slice(0,w),{...y[w],...g},...y.slice(w+1)]})},c=g=>{i(y=>{const w=y.findIndex(C=>C.id===g.id);return w>=0?[...y.slice(0,w),g,...y.slice(w+1)]:[...y,g]}),d(!1)},b=g=>{S(new Error(g.error)),d(!1)};return o.on("message:start",k),o.on("message:chunk",p),o.on("message:answer-complete",h),o.on("message:complete",c),o.on("message:error",b),()=>{o.off("message:start",k),o.off("message:chunk",p),o.off("message:answer-complete",h),o.off("message:complete",c),o.off("message:error",b)}},[o,u]),{messages:r,isLoading:f,error:m,sendMessage:(0,a.useCallback)(async(A,k)=>{d(!0),S(null);const p={id:`temp-${Date.now()}`,conversationId:u||"",content:A,role:"user",status:"DONE",attachments:k&&k.length>0?_.attachmentsFromFiles(k):void 0,createdAt:new Date},h={id:`temp-assistant-${Date.now()}`,conversationId:u||"",content:"",role:"assistant",status:"IN_PROGRESS",createdAt:new Date};i(c=>[...c,p,h]);try{const c=await o.sendMessage(A,{conversationId:u,files:k});return c.conversationId&&!u&&s(c.conversationId),i(b=>{const g=b.filter(w=>!w.id.startsWith("temp-")),y={...p,id:p.id.replace("temp-","user-"),conversationId:c.conversationId};return g.some(w=>w.id===c.id)?[...g,y].sort((w,C)=>new Date(w.createdAt).getTime()-new Date(C.createdAt).getTime()):[...g,y,c]}),c}catch(c){return S(c instanceof Error?c:new Error("Failed to send message")),d(!1),i(b=>b.filter(g=>!g.id.startsWith("temp-"))),null}},[o,u]),clearMessages:(0,a.useCallback)(()=>{i([]),s(void 0),S(null)},[]),conversationId:u}}var U=({onSend:e,disabled:n=!1,placeholder:t="Type a message...",allowFiles:o=!1,className:r=""})=>{const[i,u]=(0,a.useState)(""),[s,f]=(0,a.useState)([]),d=(0,a.useRef)(null),m=(0,a.useRef)(null),S=(0,a.useCallback)(()=>{const c=m.current;if(!c)return;const b=110;c.style.height="auto",c.style.height=`${Math.min(c.scrollHeight+2,b)}px`,c.style.overflowY=c.scrollHeight+2>b?"auto":"hidden"},[]),I=(0,a.useCallback)(c=>{c.preventDefault(),(i.trim()||s.length>0)&&(e(i.trim(),s.length>0?s:void 0),u(""),f([]),requestAnimationFrame(S))},[i,s,e,S]),A=(0,a.useCallback)(c=>{c.key==="Enter"&&!c.shiftKey&&(c.preventDefault(),I(c))},[I]),k=(0,a.useCallback)(c=>{const b=Array.from(c.target.files||[]);f(g=>[...g,...b])},[]),p=(0,a.useCallback)(c=>{f(b=>b.filter((g,y)=>y!==c))},[]),h=i.trim()||s.length>0;return(0,l.jsxs)("form",{onSubmit:I,className:`ago-chat-input ${r}`,style:{display:"flex",flexDirection:"column",gap:"8px",padding:"12px 16px",borderTop:"1px solid #dee3e8",backgroundColor:"#fff"},children:[s.length>0&&(0,l.jsx)("div",{className:"ago-chat-input__files",style:{display:"flex",flexWrap:"wrap",gap:"6px"},children:s.map((c,b)=>(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"6px",padding:"4px 10px",backgroundColor:"#f0f2f5",borderRadius:"6px",fontSize:"12px",color:"#30373e"},children:[(0,l.jsx)("span",{style:{maxWidth:"120px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.name}),(0,l.jsx)("button",{type:"button",onClick:()=>p(b),"aria-label":`Remove ${c.name}`,style:{border:"none",background:"none",cursor:"pointer",padding:"0",color:"#6b6d6f",fontSize:"14px",lineHeight:1},children:"×"})]},b))}),(0,l.jsxs)("div",{style:{display:"flex",gap:"8px",alignItems:"flex-end"},children:[o&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("button",{type:"button",onClick:()=>d.current?.click(),disabled:n,"aria-label":"Attach file",style:{padding:"8px",border:"1px solid #dee3e8",borderRadius:"8px",backgroundColor:"#fff",cursor:n?"not-allowed":"pointer",color:"#6b6d6f",fontSize:"16px",lineHeight:1},children:"+"}),(0,l.jsx)("input",{ref:d,type:"file",multiple:!0,onChange:k,style:{display:"none"}})]}),(0,l.jsx)("textarea",{ref:m,value:i,onChange:c=>{u(c.target.value),S()},onKeyDown:A,placeholder:t,"aria-label":t,disabled:n,rows:1,style:{flex:1,padding:"10px 14px",border:"1px solid #dee3e8",borderRadius:"20px",resize:"none",outline:"none",boxSizing:"border-box",maxHeight:"110px",overflowY:"hidden",fontFamily:"inherit",fontSize:"16px",lineHeight:1.4,color:"#30373e",backgroundColor:"#f8f8f8",transition:"border-color 0.15s"},onFocus:c=>{c.currentTarget.style.borderColor="#1b5fc4"},onBlur:c=>{c.currentTarget.style.borderColor="#dee3e8"}}),(0,l.jsx)("button",{type:"submit",disabled:n||!h,style:{padding:"10px 18px",border:"none",borderRadius:"20px",backgroundColor:n||!h?"#b5bfc8":"#03182f",color:"#fff",cursor:n||!h?"not-allowed":"pointer",fontWeight:500,fontSize:"16px",transition:"background-color 0.15s"},children:"Send"})]})]})},ce=({href:e,children:n,...t})=>(0,l.jsx)("a",{href:e,target:"_blank",rel:"noopener noreferrer",style:{color:"#1b5fc4",textDecoration:"underline"},...t,children:n}),ue=({children:e,...n})=>(0,l.jsx)("p",{style:{margin:"0 0 8px 0",lineHeight:"1.6"},...n,children:e}),P=(e,n)=>{const t=({children:o,...r})=>a.default.createElement(`h${e}`,{style:{margin:"16px 0 8px 0",fontSize:n,fontWeight:600,lineHeight:"1.3"},...r},o);return t.displayName=`MarkdownHeading${e}`,t},de=({children:e,...n})=>(0,l.jsx)("ul",{style:{margin:"0 0 8px 0",paddingLeft:"20px",listStyleType:"disc",listStylePosition:"outside"},...n,children:e}),fe=({children:e,...n})=>(0,l.jsx)("ol",{style:{margin:"0 0 8px 0",paddingLeft:"20px",listStyleType:"decimal",listStylePosition:"outside"},...n,children:e}),ge=({children:e,...n})=>(0,l.jsx)("li",{style:{display:"list-item",margin:"2px 0",lineHeight:"1.6"},...n,children:e}),pe=({className:e,children:n,...t})=>e!==void 0||String(n).includes(`
|
|
2
|
+
`)?(0,l.jsx)("code",{style:{display:"block",background:"#f5f5f5",padding:"8px 12px",borderRadius:"6px",fontSize:"13px",overflowX:"auto",fontFamily:'"IBM Plex Mono", monospace'},...t,children:n}):(0,l.jsx)("code",{style:{background:"#f0f2f5",padding:"2px 5px",borderRadius:"4px",fontSize:"13px",fontFamily:'"IBM Plex Mono", monospace'},...t,children:n}),me=({children:e,...n})=>(0,l.jsx)("pre",{style:{margin:"0 0 8px 0"},...n,children:e}),xe=({children:e,...n})=>(0,l.jsx)("blockquote",{style:{borderLeft:"4px solid #dee3e8",paddingLeft:"12px",margin:"0 0 8px 0",fontStyle:"italic",color:"#6b6d6f"},...n,children:e}),he=({children:e,...n})=>(0,l.jsx)("div",{style:{overflowX:"auto",margin:"0 0 8px 0"},children:(0,l.jsx)("table",{style:{borderCollapse:"collapse",width:"100%",fontSize:"13px"},...n,children:e})}),ye=({children:e,...n})=>(0,l.jsx)("th",{style:{border:"1px solid #dee3e8",padding:"6px 10px",textAlign:"left",backgroundColor:"#f5f7fa",fontWeight:600},...n,children:e}),ve=({children:e,...n})=>(0,l.jsx)("td",{style:{border:"1px solid #dee3e8",padding:"6px 10px"},...n,children:e}),be=({alt:e,...n})=>(0,l.jsx)("img",{alt:e??"",style:{maxWidth:"100%",borderRadius:"8px",margin:"4px 0"},...n}),Ce=e=>(0,l.jsx)("hr",{style:{border:"none",borderTop:"1px solid #dee3e8",margin:"12px 0"},...e}),we={a:ce,p:ue,h1:P(1,"20px"),h2:P(2,"18px"),h3:P(3,"16px"),h4:P(4,"15px"),h5:P(5,"14px"),h6:P(6,"13px"),ul:de,ol:fe,li:ge,code:pe,pre:me,blockquote:xe,table:he,th:ye,td:ve,img:be,hr:Ce},Se=[W.default],G=({content:e})=>(0,l.jsx)(D.default,{remarkPlugins:Se,components:we,children:e}),Ae=({attachment:e,isUser:n})=>{const t=_.safeAttachmentUrl(e.url);if(_.canInlineImage(e))return(0,l.jsx)("a",{href:t,target:"_blank",rel:"noopener noreferrer",style:{display:"inline-block",textDecoration:"none"},children:(0,l.jsx)("img",{src:t,alt:e.name,loading:"lazy",style:{maxWidth:"180px",maxHeight:"160px",objectFit:"cover",borderRadius:"10px",border:"1px solid #dee3e8",display:"block"}})});const o=_.formatFileSize(e.fileSize),r=(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("span",{style:{fontSize:"16px",lineHeight:1,flexShrink:0},"aria-hidden":!0,children:"📄"}),(0,l.jsxs)("span",{style:{display:"flex",flexDirection:"column",minWidth:0},children:[(0,l.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:"160px"},title:e.name,children:e.name}),o&&(0,l.jsx)("span",{style:{fontSize:"11px",color:"#6b6d6f"},children:o})]})]}),i={display:"inline-flex",alignItems:"center",gap:"8px",padding:"8px 12px",borderRadius:"10px",border:"1px solid #dee3e8",backgroundColor:n?"rgba(255,255,255,0.12)":"#fff",color:n?"#fff":"#30373e",fontSize:"13px",textDecoration:"none",maxWidth:"220px"};return t?(0,l.jsx)("a",{href:t,target:"_blank",rel:"noopener noreferrer",style:i,children:r}):(0,l.jsx)("div",{style:i,children:r})},ke=({source:e,index:n})=>{const t=(0,l.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px",width:"100%",minWidth:0},children:[(0,l.jsx)("div",{style:{flexShrink:0,width:"18px",height:"18px",borderRadius:"3px",border:"1px solid #1b5fc4",color:"#1b5fc4",fontSize:"11px",fontWeight:500,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"#f0f4ff"},children:n+1}),(0,l.jsx)("div",{style:{fontSize:"12px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:"#30373e"},title:e.title,children:e.title})]}),o={display:"flex",alignItems:"center",padding:"8px 10px",border:"1px solid #dee3e8",borderRadius:"8px",backgroundColor:"#fff",cursor:e.url?"pointer":"default",textDecoration:"none",color:"inherit",minWidth:0,transition:"border-color 0.15s"};return e.url?(0,l.jsx)("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",style:o,onMouseEnter:r=>{r.currentTarget.style.borderColor="#1b5fc4"},onMouseLeave:r=>{r.currentTarget.style.borderColor="#dee3e8"},children:t}):(0,l.jsx)("div",{style:o,children:t})},je=()=>(0,l.jsxs)("div",{style:{display:"flex",gap:"4px",padding:"4px 0"},children:[[0,1,2].map(e=>(0,l.jsx)("div",{style:{width:"6px",height:"6px",borderRadius:"50%",backgroundColor:"#b5bfc8",animation:"ago-pulse 1.2s ease-in-out infinite",animationDelay:`${e*.2}s`}},e)),(0,l.jsx)("style",{children:`
|
|
3
3
|
@keyframes ago-pulse {
|
|
4
4
|
0%, 80%, 100% { opacity: 0.3; transform: scale(0.8); }
|
|
5
5
|
40% { opacity: 1; transform: scale(1); }
|
|
6
6
|
}
|
|
7
|
-
`})]}),G=({message:e,className:r="",showAgentName:t=!1,isLast:o=!1,onFollowUpClick:n})=>{const l=e.role==="user",u=e.status==="IN_PROGRESS"||e.status==="WAITING_CLIENT";return(0,a.jsxs)("div",{className:`ago-message ago-message--${e.role} ${r}`,style:{display:"flex",flexDirection:"column",alignItems:l?"flex-end":"flex-start",marginBottom:"16px"},children:[!l&&t&&e.agent&&(0,a.jsx)("div",{className:"ago-message__agent",style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"13px",fontWeight:500,color:"#30373e",marginBottom:"6px",padding:"0 4px"},children:e.agent.displayName||e.agent.name}),!l&&e.sources&&e.sources.length>0&&(0,a.jsx)("div",{className:"ago-message__sources",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"6px",marginBottom:"10px",width:"100%",maxWidth:"85%"},children:e.sources.map((i,g)=>(0,a.jsx)(he,{source:i,index:g},i.id))}),e.attachments&&e.attachments.length>0&&(0,a.jsx)("div",{className:"ago-message__attachments",style:{display:"flex",flexWrap:"wrap",gap:"6px",marginBottom:"6px",justifyContent:l?"flex-end":"flex-start",maxWidth:"75%"},children:e.attachments.map(i=>(0,a.jsx)(xe,{attachment:i,isUser:l},i.id))}),(e.content||u)&&(0,a.jsx)("div",{className:"ago-message__content",style:{maxWidth:l?"75%":"100%",padding:l?"10px 14px":"2px 8px",borderRadius:l?"16px":"0",backgroundColor:l?"#03182f":"transparent",color:l?"#fff":"#30373e",wordBreak:"break-word",fontSize:"16px",lineHeight:"1.6"},children:e.content?(0,a.jsx)(U,{content:e.content}):u&&(0,a.jsx)(ye,{})}),o&&e.followUpReplies&&e.followUpReplies.length>0&&(0,a.jsx)("div",{className:"ago-message__followups",style:{display:"flex",flexWrap:"wrap",gap:"8px",marginTop:"10px"},children:e.followUpReplies.map((i,g)=>(0,a.jsx)("button",{type:"button",className:"ago-message__followup-btn",disabled:!n,onClick:n?()=>n(i):void 0,style:{minHeight:"36px",padding:"6px 14px",fontSize:"13px",borderRadius:"16px",border:"1px solid #dee3e8",backgroundColor:"#fff",color:"#30373e",cursor:n?"pointer":"default",transition:"border-color 0.15s"},onMouseEnter:d=>{d.currentTarget.style.borderColor="#1b5fc4"},onMouseLeave:d=>{d.currentTarget.style.borderColor="#dee3e8"},children:i},g))})]})},be=({client:e,conversationId:r,title:t="Chat",welcomeMessage:o="Hello! How can I help you today?",placeholder:n="Type a message...",allowFiles:l=!1,height:u=500,logoUrl:i,showAgentName:g=!1,forms:d,onFollowUpClick:m,className:S="",onMessageSent:I,onMessageReceived:k})=>{const A=(0,s.useRef)(null),p=F(),h=e??p,{messages:c,isLoading:v,error:f,sendMessage:y}=z({client:e,conversationId:r});(0,s.useEffect)(()=>{if(!h||!d||d.length===0)return;let x=!1;const j=[];return Promise.all(d.map(N=>N.schema!=null?Promise.resolve(_.createFormCollector(N)):_.loadFormCollector(h,N))).then(N=>{if(!x)for(const X of N)j.push(X.install(h))}).catch(()=>{}),()=>{x=!0,j.forEach(N=>N())}},[h,d?JSON.stringify(d.map(x=>[x.name,x.schema??null,x.submit??!1,x.description??null])):""]),(0,s.useEffect)(()=>{A.current?.scrollIntoView({behavior:"smooth"})},[c]),(0,s.useEffect)(()=>{const x=c[c.length-1];x&&x.role==="assistant"&&x.status==="DONE"&&k&&k({id:x.id,content:x.content})},[c,k]);const w=async(x,j)=>{I?.(x),await y(x,j)},C=c[c.length-1],E=v&&C?.role==="assistant"&&(C.status==="IN_PROGRESS"||C.status==="WAITING_CLIENT"),b=m===!1?void 0:m??(x=>w(x));return(0,a.jsxs)("div",{className:`ago-chat-widget ${S}`,style:{display:"flex",flexDirection:"column",height:typeof u=="number"?`${u}px`:u,border:"1px solid #dee3e8",borderRadius:"16px",overflow:"hidden",backgroundColor:"#fff",fontFamily:'"IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',textAlign:"left",boxShadow:"rgba(15, 15, 15, 0.08) 0px 2px 16px 0px"},children:[(0,a.jsxs)("div",{className:"ago-chat-widget__header",style:{padding:"14px 16px",borderBottom:"1px solid #dee3e8",backgroundColor:"#03182f",color:"#e8f0fe",display:"flex",alignItems:"center",gap:"10px"},children:[i&&(0,a.jsx)("img",{src:i,alt:"Logo",style:{height:"24px",width:"auto"}}),(0,a.jsx)("h3",{style:{margin:0,fontSize:"15px",fontWeight:600},children:t})]}),(0,a.jsxs)("div",{className:"ago-chat-widget__messages",role:"log","aria-live":"polite","aria-relevant":"additions text","aria-atomic":!1,style:{flex:1,overflow:"auto",padding:"16px",backgroundColor:"#fbfbfb"},children:[c.length===0?(0,a.jsx)("div",{style:{textAlign:"center",color:"#6b6d6f",padding:"24px 16px",fontSize:"16px",lineHeight:"1.5"},children:o}):c.map((x,j)=>(0,a.jsx)(G,{message:x,showAgentName:g,isLast:j===c.length-1,onFollowUpClick:b},x.id)),f&&(0,a.jsx)("div",{role:"alert",style:{padding:"10px 14px",backgroundColor:"#fef2f2",color:"#dc2626",borderRadius:"12px",marginTop:"8px",fontSize:"13px",border:"1px solid #fecaca"},children:f.message}),(0,a.jsx)("div",{ref:A})]}),(0,a.jsx)(B,{onSend:w,disabled:E,placeholder:n,allowFiles:l})]})};function K(e={}){const r=F(),t=e.client??r;if(!t)throw new R.AgoError("useProactiveNudge: no AgoClient. Pass one via options.client or wrap your tree with <AgoProvider>.","proactive_missing_client");const[o,n]=(0,s.useState)(null),l=(0,s.useRef)(o);l.current=o;const u=(0,s.useRef)(e.onExpand);return u.current=e.onExpand,(0,s.useEffect)(()=>{const i=d=>{n(d),t.proactive?.shown(d)},g=({nudge:d})=>{n(m=>m?.id===d.id?null:m)};return t.on("nudge:ready",i),t.on("nudge:accepted",g),t.on("nudge:dismissed",g),()=>{t.off("nudge:ready",i),t.off("nudge:accepted",g),t.off("nudge:dismissed",g)}},[t]),{nudge:o,accept:(0,s.useCallback)(async()=>{const i=l.current;i&&(n(null),await t.proactive?.accept(i),(i.source==="agent"||i.goal)&&u.current?.(i))},[t]),dismiss:(0,s.useCallback)(()=>{const i=l.current;i&&(n(null),t.proactive?.dismiss(i))},[t])}}var ve=({client:e,onExpand:r,autoHideMs:t,position:o="bottom-right",openChatLabel:n="Open chat",className:l=""})=>{const{nudge:u,accept:i,dismiss:g}=K({client:e,onExpand:r});if((0,s.useEffect)(()=>{if(!u||!t)return;const m=setTimeout(()=>g(),t);return()=>clearTimeout(m)},[u,t,g]),!u)return null;const d=u.source==="agent"||!!u.goal;return(0,a.jsxs)("div",{className:`ago-nudge ${l}`,role:"status","aria-live":"polite",style:{position:"fixed",bottom:"90px",...o==="bottom-left"?{left:"20px"}:{right:"20px"},zIndex:2147483e3,maxWidth:"320px",padding:"14px 16px",backgroundColor:"#fff",color:"#03182f",border:"1px solid #dee3e8",borderRadius:"16px",boxShadow:"rgba(15, 15, 15, 0.12) 0px 4px 20px 0px",fontFamily:'"IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',fontSize:"14px",lineHeight:1.5,textAlign:"left"},children:[(0,a.jsx)("button",{type:"button",className:"ago-nudge__close","aria-label":"Dismiss",onClick:g,style:{position:"absolute",top:"6px",right:"8px",border:"none",background:"transparent",color:"#6b6d6f",fontSize:"16px",lineHeight:1,cursor:"pointer",padding:"4px"},children:"×"}),(0,a.jsx)("div",{className:"ago-nudge__message",style:{paddingRight:"16px"},children:u.message}),(u.action||d)&&(0,a.jsxs)("div",{className:"ago-nudge__actions",style:{display:"flex",gap:"8px",marginTop:"10px",flexWrap:"wrap"},children:[u.action&&(0,a.jsx)("button",{type:"button",className:"ago-nudge__action",onClick:()=>{i()},style:{border:"none",borderRadius:"10px",padding:"6px 12px",backgroundColor:"#03182f",color:"#e8f0fe",fontSize:"13px",fontWeight:600,cursor:"pointer"},children:u.action.label}),d&&(0,a.jsx)("button",{type:"button",className:"ago-nudge__expand",onClick:()=>{i()},style:{border:"1px solid #dee3e8",borderRadius:"10px",padding:"6px 12px",backgroundColor:"#fff",color:"#03182f",fontSize:"13px",fontWeight:600,cursor:"pointer"},children:n})]})]})};function J({client:e,autoLoad:r=!0}={}){const t=F(),o=e||t;if(!o)throw new Error("useConversation requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.");const[n,l]=(0,s.useState)([]),[u,i]=(0,s.useState)(null),[g,d]=(0,s.useState)(!1),[m,S]=(0,s.useState)(null),I=(0,s.useCallback)(async()=>{d(!0),S(null);try{l(await o.getConversations())}catch(p){S(p instanceof Error?p:new Error("Failed to load conversations"))}finally{d(!1)}},[o]),k=(0,s.useCallback)(async p=>{d(!0),S(null);try{i(await o.getConversation(p))}catch(h){S(h instanceof Error?h:new Error("Failed to load conversation"))}finally{d(!1)}},[o]),A=(0,s.useCallback)(()=>{i(null)},[]);return(0,s.useEffect)(()=>{r&&I()},[r,I]),{conversations:n,currentConversation:u,isLoading:g,error:m,selectConversation:k,startNewConversation:A,refreshConversations:I}}function Ce(e={}){const r=F(),t=e.client||r;if(!t)throw new Error("useChat requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.");const o=z({client:t,conversationId:e.conversationId}),n=J({client:t,autoLoad:e.autoLoad});return{messages:o.messages,isLoading:o.isLoading,error:o.error||n.error,sendMessage:o.sendMessage,clearMessages:o.clearMessages,conversationId:o.conversationId,conversations:n.conversations,currentConversation:n.currentConversation,isConversationsLoading:n.isLoading,selectConversation:n.selectConversation,startNewConversation:n.startNewConversation,refreshConversations:n.refreshConversations}}function we(e,r){const t=M(),{name:o,description:n,parameters:l,handler:u,maxResultBytes:i,requiresApproval:g}=typeof e=="string"?{name:e,...r}:e,d=(0,s.useRef)(u);d.current=u,(0,s.useEffect)(()=>{const m=S=>d.current(S);return t.registerFunction(o,m,{description:n,parameters:l,maxResultBytes:i,requiresApproval:g}),()=>{t.unregisterFunction(o)}},[t,o,n,l,i,g])}function Se(e,r){const t=M(),o=(0,s.useRef)(e);o.current=e,(0,s.useEffect)(()=>(t.registerNavigationFunction(n=>o.current(n),r),()=>{t.unregisterNavigationFunction()}),[t,r])}function ke(e,r){const t=M(),o=r?.functionName??"setPageState",n=r?.requiresApproval,l=(0,s.useRef)(e);l.current=e,(0,s.useEffect)(()=>{const u=l.current.map(i=>{const g=()=>l.current.find(d=>d.name===i.name)??i;return{name:i.name,description:i.description,schema:i.schema,get:i.get?()=>g().get?.():void 0,set:d=>g().set(d)}});return t.registerPageStateFunction(u,{functionName:o,requiresApproval:n}),()=>{t.unregisterPageStateFunction(o)}},[t,o,n])}function Ae(e){const r=M(),t=(0,s.useRef)(e);t.current=e,(0,s.useEffect)(()=>Z.attachAutoContinueAfterNavigation(r,()=>t.current),[r])}var je=new Set(["awaiting-approval"]);function V(e){switch(e){case"progress_indicator":return"progress";case"reasoning":return"reasoning";case"confirmation_input":return"confirmation";case"form":return"form";default:return"status"}}function Ie(e){return e.type==="client_function"?e.functionName==="navigateToPage"?"navigation":"action":V(e.type)}function L(e,r){const t=(e??"").toLowerCase();return t.includes("reject")?"rejected":t.includes("error")||t.includes("fail")?"error":t.includes("done")||t.includes("complet")?"done":(t.includes("waiting")||t.includes("pending"))&&(r==="confirmation"||r==="form")?"awaiting-approval":"running"}function $(e){return typeof e!="string"||!e?"page":e.replace(/[-_]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/\b\w/g,r=>r.toUpperCase()).trim()}function Ne(e){switch(e.kind){case"navigation":return`Navigating to ${$(e.arguments?.page)}`;case"action":return e.functionName==="setPageState"?"Updating the page":e.functionName==="openFilteredConversations"?"Opening conversations":e.toolDisplayName||e.message||$(e.functionName)||"Working";case"progress":return e.message||"Working";case"reasoning":return e.message||"Thinking";case"confirmation":return e.message||"Waiting for your confirmation";case"form":return e.message||e.toolDisplayName||"Please fill in the form";default:return e.message||e.toolDisplayName||e.toolName||"Working"}}function Ee(e={}){const{includeReasoning:r=!1,labelFor:t}=e,o=F(),n=e.client||o;if(!n)throw new R.AgoError("useAgoActivity requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.","provider_missing_client");const[l,u]=(0,s.useState)([]),i=(0,s.useRef)(new Set),g=(0,s.useRef)(void 0),d=(0,s.useRef)(t);d.current=t;const m=(0,s.useCallback)((p,h)=>{u(c=>{const v=c.findIndex(y=>y.id===p),f={...v>=0?c[v]:{id:p,kind:"status",label:"",status:"running",requiresApproval:!1,createdAt:new Date},...h};return f.label=d.current?.(f)??Ne(f),v>=0?[...c.slice(0,v),f,...c.slice(v+1)]:[...c,f]})},[]);(0,s.useEffect)(()=>{const p=b=>{g.current=b.messageId},h=b=>{const x=V(b.type);x==="reasoning"&&!r||m(b.id,{kind:x,status:L(b.status,x),messageId:g.current,toolName:b.toolName,toolDisplayName:b.toolDisplayName,message:b.message,data:b.data,formSchema:b.formSchema,requiresApproval:x==="confirmation"||x==="form"})},c=b=>{b.invocationId&&m(b.invocationId,{kind:b.functionName==="navigateToPage"?"navigation":"action",status:"running",messageId:g.current,functionName:b.functionName,arguments:b.arguments})},v=b=>{b.invocationId&&m(b.invocationId,{kind:b.functionName==="navigateToPage"?"navigation":"action",status:"awaiting-approval",messageId:g.current,functionName:b.functionName,arguments:b.arguments,requiresApproval:!0})},f=b=>{if(!b.invocationId)return;const x=b.result,j=typeof b.result=="object"&&x!==null&&x.approved===!1&&x.reason==="user_rejected";m(b.invocationId,{status:b.error?"error":j?"rejected":"done",requiresApproval:!1})},y=b=>{for(const x of b.messages??[])if(x.role==="assistant")for(const j of x.toolCalls??[]){const N=Ie(j);N==="reasoning"&&!r||/waiting/i.test(j.status??"")||m(j.id,{kind:N,status:L(j.status,N),messageId:x.id,toolName:j.toolName,toolDisplayName:j.toolDisplayName,functionName:j.functionName,arguments:j.arguments,message:j.message,data:j.data,formSchema:j.formSchema,requiresApproval:N==="confirmation"||N==="form"})}},w=b=>{u(x=>x.map(j=>j.status==="running"||j.status==="awaiting-approval"?{...j,status:b}:j))},C=()=>w("done"),E=()=>w("error");return n.on("message:start",p),n.on("toolCall:received",h),n.on("function:invoke",c),n.on("function:awaiting-approval",v),n.on("function:result",f),n.on("conversation:loaded",y),n.on("message:complete",C),n.on("message:error",E),()=>{n.off("message:start",p),n.off("toolCall:received",h),n.off("function:invoke",c),n.off("function:awaiting-approval",v),n.off("function:result",f),n.off("conversation:loaded",y),n.off("message:complete",C),n.off("message:error",E)}},[n,r,m]);const S=(0,s.useCallback)(async p=>{const h=l.find(c=>c.id===p);!h||h.status!=="awaiting-approval"||i.current.has(p)||h.kind!=="form"&&(i.current.add(p),m(p,{status:"running",requiresApproval:!1}),h.functionName?await n.approveFunction(p):await n.confirmToolCall(p))},[n,l,m]),I=(0,s.useCallback)(async p=>{const h=l.find(c=>c.id===p);!h||h.status!=="awaiting-approval"||i.current.has(p)||(i.current.add(p),m(p,{status:"rejected",requiresApproval:!1}),h.functionName?await n.rejectFunction(p):await n.rejectToolCall(p))},[n,l,m]),k=(0,s.useCallback)(async(p,h)=>{m(p,{status:"running",requiresApproval:!1}),await n.submitToolCallForm(p,h),m(p,{status:"done"})},[n,m]),A=(0,s.useCallback)(()=>{i.current.clear(),u([])},[]);return{items:l,latest:l.length>0?l[l.length-1]:void 0,isAwaitingApproval:l.some(p=>je.has(p.status)),approve:S,reject:I,submitForm:k,clear:A}}function Re(e,r){const t=M(),o=(0,s.useId)(),n=r??o,l=(0,s.useRef)(e);l.current=e;const u=typeof e=="function";(0,s.useEffect)(()=>{if(typeof l.current=="function"){const i=()=>l.current();return t.addDynamicContext(n,i),()=>{t.removeDynamicContext(n)}}return t.setContext(n,l.current),()=>{t.removeContext(n)}},[t,n,u,u?"":JSON.stringify(e)])}function Y(e){return(0,s.useSyncExternalStore)(e.subscribe,e.get,e.get)}var H={missing:[],complete:!1};function _e(e){const r=M(),t=e.schema!=null,o=JSON.stringify(e.schema??null),n=e.submit,l=n?typeof n=="string"?`client:${n}`:n.via==="backend"?"backend":"handler"in n?"client:handler":`client:${n.url}`:"none",u=JSON.stringify(e.initialValues??null),i=(0,s.useMemo)(()=>t?_.createFormCollector(e):null,[t,e.name,o,l,u,e.autoSubmit]),[g,d]=(0,s.useState)({collector:null,loading:!t,error:null});(0,s.useEffect)(()=>{if(t)return;let v=!1;return d({collector:null,loading:!0,error:null}),_.loadFormCollector(r,e).then(f=>{v||d({collector:f,loading:!1,error:null})}).catch(f=>{v||d({collector:null,loading:!1,error:f instanceof Error?f:new Error(String(f))})}),()=>{v=!0}},[r,t,e.name,l,u,e.autoSubmit]);const m=t?i:g.collector,S=t?!1:g.loading,I=t?null:g.error;(0,s.useEffect)(()=>{if(m)return m.install(r)},[r,m]);const k=(0,s.useMemo)(()=>R.createStore({values:e.initialValues??{},submitted:!1}),[u]),A=Y(m?.store??k),p=(0,s.useMemo)(()=>m?.getStatus()??H,[A,m]),h=(0,s.useMemo)(()=>({...A,...p}),[A,p]),c=(0,s.useMemo)(()=>({name:e.name,store:k,functions:[],contextKey:`form:${e.name}`,contextProvider:()=>({name:`Form: ${e.name}`,description:""}),definitionContextKey:`form:${e.name}:definition`,definitionContextProvider:()=>({name:`Form definition: ${e.name}`,description:"",stable:!0}),install:()=>()=>{},hydrate:()=>{},submit:async()=>({ok:!1,error:"Form definition not loaded yet."}),getValues:()=>k.get().values,setValues:()=>{},reset:()=>{},getStatus:()=>H}),[e.name,k]);return{...m??c,state:h,loading:S,error:I}}exports.AgoNudge=ve;exports.AgoProvider=ee;exports.ChatInput=B;exports.ChatWidget=be;exports.Markdown=U;exports.Message=G;exports.createFormCollector=_.createFormCollector;exports.createMockClient=Q.createMockClient;exports.deriveFormStatus=_.deriveFormStatus;exports.loadFormCollector=_.loadFormCollector;exports.useAgo=O;exports.useAgoActivity=Ee;exports.useAgoAutoContinueAfterNavigation=Ae;exports.useAgoClient=M;exports.useAgoContext=Re;exports.useAgoFunction=we;exports.useAgoNavigation=Se;exports.useAgoPageState=ke;exports.useAgoStore=Y;exports.useChat=Ce;exports.useConversation=J;exports.useFormCollector=_e;exports.useMessages=z;exports.useOptionalAgoClient=F;exports.useProactiveNudge=K;
|
|
7
|
+
`})]}),K=({message:e,className:n="",showAgentName:t=!1,isLast:o=!1,onFollowUpClick:r})=>{const i=e.role==="user",u=e.status==="IN_PROGRESS"||e.status==="WAITING_CLIENT";return(0,l.jsxs)("div",{className:`ago-message ago-message--${e.role} ${n}`,style:{display:"flex",flexDirection:"column",alignItems:i?"flex-end":"flex-start",marginBottom:"16px"},children:[!i&&t&&e.agent&&(0,l.jsx)("div",{className:"ago-message__agent",style:{display:"flex",alignItems:"center",gap:"6px",fontSize:"13px",fontWeight:500,color:"#30373e",marginBottom:"6px",padding:"0 4px"},children:e.agent.displayName||e.agent.name}),!i&&e.sources&&e.sources.length>0&&(0,l.jsx)("div",{className:"ago-message__sources",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"6px",marginBottom:"10px",width:"100%",maxWidth:"85%"},children:e.sources.map((s,f)=>(0,l.jsx)(ke,{source:s,index:f},s.id))}),e.attachments&&e.attachments.length>0&&(0,l.jsx)("div",{className:"ago-message__attachments",style:{display:"flex",flexWrap:"wrap",gap:"6px",marginBottom:"6px",justifyContent:i?"flex-end":"flex-start",maxWidth:"75%"},children:e.attachments.map(s=>(0,l.jsx)(Ae,{attachment:s,isUser:i},s.id))}),(e.content||u)&&(0,l.jsx)("div",{className:"ago-message__content",style:{maxWidth:i?"75%":"100%",padding:i?"10px 14px":"2px 8px",borderRadius:i?"16px":"0",backgroundColor:i?"#03182f":"transparent",color:i?"#fff":"#30373e",wordBreak:"break-word",fontSize:"16px",lineHeight:"1.6"},children:e.content?(0,l.jsx)(G,{content:e.content}):u&&(0,l.jsx)(je,{})}),o&&e.followUpReplies&&e.followUpReplies.length>0&&(0,l.jsx)("div",{className:"ago-message__followups",style:{display:"flex",flexWrap:"wrap",gap:"8px",marginTop:"10px"},children:e.followUpReplies.map((s,f)=>(0,l.jsx)("button",{type:"button",className:"ago-message__followup-btn",disabled:!r,onClick:r?()=>r(s):void 0,style:{minHeight:"36px",padding:"6px 14px",fontSize:"13px",borderRadius:"16px",border:"1px solid #dee3e8",backgroundColor:"#fff",color:"#30373e",cursor:r?"pointer":"default",transition:"border-color 0.15s"},onMouseEnter:d=>{d.currentTarget.style.borderColor="#1b5fc4"},onMouseLeave:d=>{d.currentTarget.style.borderColor="#dee3e8"},children:s},f))})]})},Ie=({client:e,conversationId:n,title:t="Chat",welcomeMessage:o="Hello! How can I help you today?",placeholder:r="Type a message...",allowFiles:i=!1,height:u=500,logoUrl:s,showAgentName:f=!1,forms:d,onFollowUpClick:m,className:S="",onMessageSent:I,onMessageReceived:A})=>{const k=(0,a.useRef)(null),p=E(),h=e??p,{messages:c,isLoading:b,error:g,sendMessage:y}=z({client:e,conversationId:n});(0,a.useEffect)(()=>{if(!h||!d||d.length===0)return;let x=!1;const j=[];return Promise.all(d.map(N=>N.schema!=null?Promise.resolve(M.createFormCollector(N)):M.loadFormCollector(h,N))).then(N=>{if(!x)for(const Z of N)j.push(Z.install(h))}).catch(()=>{}),()=>{x=!0,j.forEach(N=>N())}},[h,d?JSON.stringify(d.map(x=>[x.name,x.schema??null,x.submit??!1,x.description??null])):""]),(0,a.useEffect)(()=>{k.current?.scrollIntoView({behavior:"smooth"})},[c]),(0,a.useEffect)(()=>{const x=c[c.length-1];x&&x.role==="assistant"&&x.status==="DONE"&&A&&A({id:x.id,content:x.content})},[c,A]);const w=async(x,j)=>{I?.(x),await y(x,j)},C=c[c.length-1],R=b&&C?.role==="assistant"&&(C.status==="IN_PROGRESS"||C.status==="WAITING_CLIENT"),v=m===!1?void 0:m??(x=>w(x));return(0,l.jsxs)("div",{className:`ago-chat-widget ${S}`,style:{display:"flex",flexDirection:"column",height:typeof u=="number"?`${u}px`:u,border:"1px solid #dee3e8",borderRadius:"16px",overflow:"hidden",backgroundColor:"#fff",fontFamily:'"IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',textAlign:"left",boxShadow:"rgba(15, 15, 15, 0.08) 0px 2px 16px 0px"},children:[(0,l.jsxs)("div",{className:"ago-chat-widget__header",style:{padding:"14px 16px",borderBottom:"1px solid #dee3e8",backgroundColor:"#03182f",color:"#e8f0fe",display:"flex",alignItems:"center",gap:"10px"},children:[s&&(0,l.jsx)("img",{src:s,alt:"Logo",style:{height:"24px",width:"auto"}}),(0,l.jsx)("h3",{style:{margin:0,fontSize:"15px",fontWeight:600},children:t})]}),(0,l.jsxs)("div",{className:"ago-chat-widget__messages",role:"log","aria-live":"polite","aria-relevant":"additions text","aria-atomic":!1,style:{flex:1,overflow:"auto",padding:"16px",backgroundColor:"#fbfbfb"},children:[c.length===0?(0,l.jsx)("div",{style:{textAlign:"center",color:"#6b6d6f",padding:"24px 16px",fontSize:"16px",lineHeight:"1.5"},children:o}):c.map((x,j)=>(0,l.jsx)(K,{message:x,showAgentName:f,isLast:j===c.length-1,onFollowUpClick:v},x.id)),g&&(0,l.jsx)("div",{role:"alert",style:{padding:"10px 14px",backgroundColor:"#fef2f2",color:"#dc2626",borderRadius:"12px",marginTop:"8px",fontSize:"13px",border:"1px solid #fecaca"},children:g.message}),(0,l.jsx)("div",{ref:k})]}),(0,l.jsx)(U,{onSend:w,disabled:R,placeholder:r,allowFiles:i})]})};function J(e={}){const n=E(),t=e.client??n;if(!t)throw new _.AgoError("useProactiveNudge: no AgoClient. Pass one via options.client or wrap your tree with <AgoProvider>.","proactive_missing_client");const[o,r]=(0,a.useState)(null),i=(0,a.useRef)(o);i.current=o;const u=(0,a.useRef)(e.onExpand);return u.current=e.onExpand,(0,a.useEffect)(()=>{const s=d=>{r(d),t.proactive?.shown(d)},f=({nudge:d})=>{r(m=>m?.id===d.id?null:m)};return t.on("nudge:ready",s),t.on("nudge:accepted",f),t.on("nudge:dismissed",f),()=>{t.off("nudge:ready",s),t.off("nudge:accepted",f),t.off("nudge:dismissed",f)}},[t]),{nudge:o,accept:(0,a.useCallback)(async()=>{const s=i.current;s&&(r(null),await t.proactive?.accept(s),(s.source==="agent"||s.goal)&&u.current?.(s))},[t]),dismiss:(0,a.useCallback)(()=>{const s=i.current;s&&(r(null),t.proactive?.dismiss(s))},[t])}}var Ne=({client:e,onExpand:n,autoHideMs:t,position:o="bottom-right",openChatLabel:r="Open chat",className:i=""})=>{const{nudge:u,accept:s,dismiss:f}=J({client:e,onExpand:n});if((0,a.useEffect)(()=>{if(!u||!t)return;const m=setTimeout(()=>f(),t);return()=>clearTimeout(m)},[u,t,f]),!u)return null;const d=u.source==="agent"||!!u.goal;return(0,l.jsxs)("div",{className:`ago-nudge ${i}`,role:"status","aria-live":"polite",style:{position:"fixed",bottom:"90px",...o==="bottom-left"?{left:"20px"}:{right:"20px"},zIndex:2147483e3,maxWidth:"320px",padding:"14px 16px",backgroundColor:"#fff",color:"#03182f",border:"1px solid #dee3e8",borderRadius:"16px",boxShadow:"rgba(15, 15, 15, 0.12) 0px 4px 20px 0px",fontFamily:'"IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',fontSize:"14px",lineHeight:1.5,textAlign:"left"},children:[(0,l.jsx)("button",{type:"button",className:"ago-nudge__close","aria-label":"Dismiss",onClick:f,style:{position:"absolute",top:"6px",right:"8px",border:"none",background:"transparent",color:"#6b6d6f",fontSize:"16px",lineHeight:1,cursor:"pointer",padding:"4px"},children:"×"}),(0,l.jsx)("div",{className:"ago-nudge__message",style:{paddingRight:"16px"},children:u.message}),(u.action||d)&&(0,l.jsxs)("div",{className:"ago-nudge__actions",style:{display:"flex",gap:"8px",marginTop:"10px",flexWrap:"wrap"},children:[u.action&&(0,l.jsx)("button",{type:"button",className:"ago-nudge__action",onClick:()=>{s()},style:{border:"none",borderRadius:"10px",padding:"6px 12px",backgroundColor:"#03182f",color:"#e8f0fe",fontSize:"13px",fontWeight:600,cursor:"pointer"},children:u.action.label}),d&&(0,l.jsx)("button",{type:"button",className:"ago-nudge__expand",onClick:()=>{s()},style:{border:"1px solid #dee3e8",borderRadius:"10px",padding:"6px 12px",backgroundColor:"#fff",color:"#03182f",fontSize:"13px",fontWeight:600,cursor:"pointer"},children:r})]})]})};function V({client:e,autoLoad:n=!0}={}){const t=E(),o=e||t;if(!o)throw new Error("useConversation requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.");const[r,i]=(0,a.useState)([]),[u,s]=(0,a.useState)(null),[f,d]=(0,a.useState)(!1),[m,S]=(0,a.useState)(null),I=(0,a.useCallback)(async()=>{d(!0),S(null);try{i(await o.getConversations())}catch(p){S(p instanceof Error?p:new Error("Failed to load conversations"))}finally{d(!1)}},[o]),A=(0,a.useCallback)(async p=>{d(!0),S(null);try{s(await o.getConversation(p))}catch(h){S(h instanceof Error?h:new Error("Failed to load conversation"))}finally{d(!1)}},[o]),k=(0,a.useCallback)(()=>{s(null)},[]);return(0,a.useEffect)(()=>{n&&I()},[n,I]),{conversations:r,currentConversation:u,isLoading:f,error:m,selectConversation:A,startNewConversation:k,refreshConversations:I}}function _e(e={}){const n=E(),t=e.client||n;if(!t)throw new Error("useChat requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.");const o=z({client:t,conversationId:e.conversationId}),r=V({client:t,autoLoad:e.autoLoad});return{messages:o.messages,isLoading:o.isLoading,error:o.error||r.error,sendMessage:o.sendMessage,clearMessages:o.clearMessages,conversationId:o.conversationId,conversations:r.conversations,currentConversation:r.currentConversation,isConversationsLoading:r.isLoading,selectConversation:r.selectConversation,startNewConversation:r.startNewConversation,refreshConversations:r.refreshConversations}}function Re(e,n){const t=F(),{name:o,description:r,parameters:i,handler:u,maxResultBytes:s,requiresApproval:f}=typeof e=="string"?{name:e,...n}:e,d=(0,a.useRef)(u);d.current=u,(0,a.useEffect)(()=>{const m=S=>d.current(S);return t.registerFunction(o,m,{description:r,parameters:i,maxResultBytes:s,requiresApproval:f}),()=>{t.unregisterFunction(o)}},[t,o,r,i,s,f])}function Ee(e,n){const t=F(),o=(0,a.useRef)(e);o.current=e,(0,a.useEffect)(()=>(t.registerNavigationFunction(r=>o.current(r),n),()=>{t.unregisterNavigationFunction()}),[t,n])}function Me(e,n){const t=F(),o=n?.functionName??"setPageState",r=n?.requiresApproval,i=(0,a.useRef)(e);i.current=e,(0,a.useEffect)(()=>{const u=i.current.map(s=>{const f=()=>i.current.find(d=>d.name===s.name)??s;return{name:s.name,description:s.description,schema:s.schema,get:s.get?()=>f().get?.():void 0,set:d=>f().set(d)}});return t.registerPageStateFunction(u,{functionName:o,requiresApproval:r}),()=>{t.unregisterPageStateFunction(o)}},[t,o,r])}function Fe(e){const n=F(),t=(0,a.useRef)(e);t.current=e,(0,a.useEffect)(()=>ae.attachAutoContinueAfterNavigation(n,()=>t.current),[n])}var Pe=new Set(["awaiting-approval"]);function Y(e){switch(e){case"progress_indicator":return"progress";case"reasoning":return"reasoning";case"confirmation_input":return"confirmation";case"form":return"form";default:return"status"}}function Te(e){return e.type==="client_function"?e.functionName==="navigateToPage"?"navigation":"action":Y(e.type)}function L(e,n){const t=(e??"").toLowerCase();return t.includes("reject")?"rejected":t.includes("error")||t.includes("fail")?"error":t.includes("done")||t.includes("complet")?"done":(t.includes("waiting")||t.includes("pending"))&&(n==="confirmation"||n==="form")?"awaiting-approval":"running"}function $(e){return typeof e!="string"||!e?"page":e.replace(/[-_]+/g," ").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/\b\w/g,n=>n.toUpperCase()).trim()}function De(e){switch(e.kind){case"navigation":return`Navigating to ${$(e.arguments?.page)}`;case"action":return e.functionName==="setPageState"?"Updating the page":e.functionName==="openFilteredConversations"?"Opening conversations":e.toolDisplayName||e.message||$(e.functionName)||"Working";case"progress":return e.message||"Working";case"reasoning":return e.message||"Thinking";case"confirmation":return e.message||"Waiting for your confirmation";case"form":return e.message||e.toolDisplayName||"Please fill in the form";default:return e.message||e.toolDisplayName||e.toolName||"Working"}}function We(e={}){const{includeReasoning:n=!1,labelFor:t}=e,o=E(),r=e.client||o;if(!r)throw new _.AgoError("useAgoActivity requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.","provider_missing_client");const[i,u]=(0,a.useState)([]),s=(0,a.useRef)(new Set),f=(0,a.useRef)(void 0),d=(0,a.useRef)(t);d.current=t;const m=(0,a.useCallback)((p,h)=>{u(c=>{const b=c.findIndex(y=>y.id===p),g={...b>=0?c[b]:{id:p,kind:"status",label:"",status:"running",requiresApproval:!1,createdAt:new Date},...h};return g.label=d.current?.(g)??De(g),b>=0?[...c.slice(0,b),g,...c.slice(b+1)]:[...c,g]})},[]);(0,a.useEffect)(()=>{const p=v=>{f.current=v.messageId},h=v=>{const x=Y(v.type);x==="reasoning"&&!n||m(v.id,{kind:x,status:L(v.status,x),messageId:f.current,toolName:v.toolName,toolDisplayName:v.toolDisplayName,message:v.message,data:v.data,formSchema:v.formSchema,requiresApproval:x==="confirmation"||x==="form"})},c=v=>{v.invocationId&&m(v.invocationId,{kind:v.functionName==="navigateToPage"?"navigation":"action",status:"running",messageId:f.current,functionName:v.functionName,arguments:v.arguments})},b=v=>{v.invocationId&&m(v.invocationId,{kind:v.functionName==="navigateToPage"?"navigation":"action",status:"awaiting-approval",messageId:f.current,functionName:v.functionName,arguments:v.arguments,requiresApproval:!0})},g=v=>{if(!v.invocationId)return;const x=v.result,j=typeof v.result=="object"&&x!==null&&x.approved===!1&&x.reason==="user_rejected";m(v.invocationId,{status:v.error?"error":j?"rejected":"done",requiresApproval:!1})},y=v=>{for(const x of v.messages??[])if(x.role==="assistant")for(const j of x.toolCalls??[]){const N=Te(j);N==="reasoning"&&!n||/waiting/i.test(j.status??"")||m(j.id,{kind:N,status:L(j.status,N),messageId:x.id,toolName:j.toolName,toolDisplayName:j.toolDisplayName,functionName:j.functionName,arguments:j.arguments,message:j.message,data:j.data,formSchema:j.formSchema,requiresApproval:N==="confirmation"||N==="form"})}},w=v=>{u(x=>x.map(j=>j.status==="running"||j.status==="awaiting-approval"?{...j,status:v}:j))},C=()=>w("done"),R=()=>w("error");return r.on("message:start",p),r.on("toolCall:received",h),r.on("function:invoke",c),r.on("function:awaiting-approval",b),r.on("function:result",g),r.on("conversation:loaded",y),r.on("message:complete",C),r.on("message:error",R),()=>{r.off("message:start",p),r.off("toolCall:received",h),r.off("function:invoke",c),r.off("function:awaiting-approval",b),r.off("function:result",g),r.off("conversation:loaded",y),r.off("message:complete",C),r.off("message:error",R)}},[r,n,m]);const S=(0,a.useCallback)(async p=>{const h=i.find(c=>c.id===p);!h||h.status!=="awaiting-approval"||s.current.has(p)||h.kind!=="form"&&(s.current.add(p),m(p,{status:"running",requiresApproval:!1}),h.functionName?await r.approveFunction(p):await r.confirmToolCall(p))},[r,i,m]),I=(0,a.useCallback)(async p=>{const h=i.find(c=>c.id===p);!h||h.status!=="awaiting-approval"||s.current.has(p)||(s.current.add(p),m(p,{status:"rejected",requiresApproval:!1}),h.functionName?await r.rejectFunction(p):await r.rejectToolCall(p))},[r,i,m]),A=(0,a.useCallback)(async(p,h)=>{m(p,{status:"running",requiresApproval:!1}),await r.submitToolCallForm(p,h),m(p,{status:"done"})},[r,m]),k=(0,a.useCallback)(()=>{s.current.clear(),u([])},[]);return{items:i,latest:i.length>0?i[i.length-1]:void 0,isAwaitingApproval:i.some(p=>Pe.has(p.status)),approve:S,reject:I,submitForm:A,clear:k}}function Oe(e={}){const n=E(),t=e.client||n;if(!t)throw new _.AgoError("useAgoActivityLog requires an AgoClient. Either pass it as options.client or wrap your app in <AgoProvider>.","provider_missing_client");const[o,r]=(0,a.useState)(()=>t.getRecentActivity());(0,a.useEffect)(()=>{r(t.getRecentActivity());const s=()=>r(t.getRecentActivity());return t.on("activity:recorded",s),()=>t.off("activity:recorded",s)},[t]);const i=(0,a.useCallback)(s=>t.recordActivity(s),[t]),u=(0,a.useCallback)(()=>{t.clearActivity(),r([])},[t]);return{entries:o,latest:o.length>0?o[o.length-1]:void 0,record:i,clear:u}}function qe(e,n){const t=F(),o=(0,a.useId)(),r=n??o,i=(0,a.useRef)(e);i.current=e;const u=typeof e=="function";(0,a.useEffect)(()=>{if(typeof i.current=="function"){const s=()=>i.current();return t.addDynamicContext(r,s),()=>{t.removeDynamicContext(r)}}return t.setContext(r,i.current),()=>{t.removeContext(r)}},[t,r,u,u?"":JSON.stringify(e)])}function X(e){return(0,a.useSyncExternalStore)(e.subscribe,e.get,e.get)}var H={missing:[],complete:!1};function ze(e){const n=F(),t=e.schema!=null,o=JSON.stringify(e.schema??null),r=e.submit,i=r?typeof r=="string"?`client:${r}`:r.via==="backend"?"backend":"handler"in r?"client:handler":`client:${r.url}`:"none",u=JSON.stringify(e.initialValues??null),s=(0,a.useMemo)(()=>t?M.createFormCollector(e):null,[t,e.name,o,i,u,e.autoSubmit]),[f,d]=(0,a.useState)({collector:null,loading:!t,error:null});(0,a.useEffect)(()=>{if(t)return;let b=!1;return d({collector:null,loading:!0,error:null}),M.loadFormCollector(n,e).then(g=>{b||d({collector:g,loading:!1,error:null})}).catch(g=>{b||d({collector:null,loading:!1,error:g instanceof Error?g:new Error(String(g))})}),()=>{b=!0}},[n,t,e.name,i,u,e.autoSubmit]);const m=t?s:f.collector,S=t?!1:f.loading,I=t?null:f.error;(0,a.useEffect)(()=>{if(m)return m.install(n)},[n,m]);const A=(0,a.useMemo)(()=>_.createStore({values:e.initialValues??{},submitted:!1}),[u]),k=X(m?.store??A),p=(0,a.useMemo)(()=>m?.getStatus()??H,[k,m]),h=(0,a.useMemo)(()=>({...k,...p}),[k,p]),c=(0,a.useMemo)(()=>({name:e.name,store:A,functions:[],contextKey:`form:${e.name}`,contextProvider:()=>({name:`Form: ${e.name}`,description:""}),definitionContextKey:`form:${e.name}:definition`,definitionContextProvider:()=>({name:`Form definition: ${e.name}`,description:"",stable:!0}),install:()=>()=>{},hydrate:()=>{},submit:async()=>({ok:!1,error:"Form definition not loaded yet."}),getValues:()=>A.get().values,setValues:()=>{},reset:()=>{},getStatus:()=>H}),[e.name,A]);return{...m??c,state:h,loading:S,error:I}}exports.AgoNudge=Ne;exports.AgoProvider=le;exports.ChatInput=U;exports.ChatWidget=Ie;exports.Markdown=G;exports.Message=K;exports.__exportAll=oe;exports.createFormCollector=M.createFormCollector;exports.createMockClient=ie.createMockClient;exports.deriveFormStatus=M.deriveFormStatus;exports.loadFormCollector=M.loadFormCollector;exports.useAgo=B;exports.useAgoActivity=We;exports.useAgoActivityLog=Oe;exports.useAgoAutoContinueAfterNavigation=Fe;exports.useAgoClient=F;exports.useAgoContext=qe;exports.useAgoFunction=Re;exports.useAgoNavigation=Ee;exports.useAgoPageState=Me;exports.useAgoStore=X;exports.useChat=_e;exports.useConversation=V;exports.useFormCollector=ze;exports.useMessages=z;exports.useOptionalAgoClient=E;exports.useProactiveNudge=J;
|