site-operator-react 0.1.14 → 0.2.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/README.md +56 -3
- package/dist/index.d.ts +33 -2
- package/dist/site-operator-react.es.js +206 -162
- package/dist/site-operator-react.umd.js +4 -4
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -8,6 +8,8 @@ npm install site-operator-react
|
|
|
8
8
|
|
|
9
9
|
```tsx
|
|
10
10
|
import { AgentChat, type AppContext, type AppState } from 'site-operator-react';
|
|
11
|
+
import type { AgentChat as AgentChatElement } from 'site-operator';
|
|
12
|
+
import { useRef } from 'react';
|
|
11
13
|
|
|
12
14
|
const context: AppContext = {
|
|
13
15
|
v: "1.1",
|
|
@@ -67,9 +69,12 @@ const state: AppState = {
|
|
|
67
69
|
};
|
|
68
70
|
|
|
69
71
|
function App() {
|
|
72
|
+
const chatRef = useRef<AgentChatElement>(null);
|
|
73
|
+
|
|
70
74
|
return (
|
|
71
75
|
<div className="App">
|
|
72
76
|
<AgentChat
|
|
77
|
+
ref={chatRef}
|
|
73
78
|
backendUrl="http://localhost:8001/ag_ui"
|
|
74
79
|
appName="My React App"
|
|
75
80
|
context={{ appContext: context, appState: state }}
|
|
@@ -82,10 +87,12 @@ function App() {
|
|
|
82
87
|
|
|
83
88
|
### useChatPortal Hook
|
|
84
89
|
|
|
85
|
-
The `useChatPortal` hook allows you to register the "Copilot" capabilities (`AppContext`) for your application. This lets the agent understand the app structure and available targets.
|
|
90
|
+
The `useChatPortal` hook allows you to register the "Copilot" capabilities (`AppContext`) for your application. This lets the agent understand the app structure and available targets. It can also return the live `ChatController` from `AgentChat` when you pass a `chatRef`.
|
|
86
91
|
|
|
87
92
|
```tsx
|
|
88
93
|
import { useChatPortal, type AppContext } from 'site-operator-react';
|
|
94
|
+
import type { AgentChat as AgentChatElement } from 'site-operator';
|
|
95
|
+
import { useRef } from 'react';
|
|
89
96
|
|
|
90
97
|
const context: AppContext = {
|
|
91
98
|
v: "1.1",
|
|
@@ -98,11 +105,57 @@ const context: AppContext = {
|
|
|
98
105
|
};
|
|
99
106
|
|
|
100
107
|
function App() {
|
|
101
|
-
|
|
108
|
+
const chatRef = useRef<AgentChatElement>(null);
|
|
109
|
+
const controller = useChatPortal(context, { chatRef });
|
|
102
110
|
|
|
103
111
|
return (
|
|
104
|
-
|
|
112
|
+
<AgentChat ref={chatRef} context={{ appContext: context }} />
|
|
105
113
|
);
|
|
106
114
|
}
|
|
115
|
+
|
|
116
|
+
// How chatRef works:
|
|
117
|
+
// - pass it to <AgentChat /> so React forwards it to the web component
|
|
118
|
+
// - useChatPortal listens for the "controller-ready" event
|
|
119
|
+
// - once ready, it returns the live ChatController instance
|
|
120
|
+
// controller?.sendMessage('Hola');
|
|
107
121
|
```
|
|
108
122
|
|
|
123
|
+
### AgentChatProvider + AgentChatMount + useAgentChatController
|
|
124
|
+
|
|
125
|
+
If you prefer a React Context approach, wrap your app (or a subtree) with `AgentChatProvider`. It manages the `ref` and exposes the `ChatController` via `useAgentChatController`. Place `<AgentChatMount />` where you want the chat UI to render.
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
import { AgentChatProvider, AgentChatMount, useAgentChatController, type AppContext } from 'site-operator-react';
|
|
129
|
+
|
|
130
|
+
const context: AppContext = {
|
|
131
|
+
v: "1.1",
|
|
132
|
+
site: { name: "Mi Portal" },
|
|
133
|
+
user: { id: "u-123" },
|
|
134
|
+
nav: { routes: [] }
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
function ChatActions() {
|
|
138
|
+
const controller = useAgentChatController();
|
|
139
|
+
return (
|
|
140
|
+
<button onClick={() => controller?.startNewThread()}>
|
|
141
|
+
Nuevo chat
|
|
142
|
+
</button>
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function App() {
|
|
147
|
+
return (
|
|
148
|
+
<AgentChatProvider
|
|
149
|
+
backendUrl="http://localhost:8001/ag_ui"
|
|
150
|
+
appName="My React App"
|
|
151
|
+
context={{ appContext: context }}
|
|
152
|
+
>
|
|
153
|
+
<header>Mi App</header>
|
|
154
|
+
<main>
|
|
155
|
+
<AgentChatMount className="chat-root" />
|
|
156
|
+
</main>
|
|
157
|
+
<ChatActions />
|
|
158
|
+
</AgentChatProvider>
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
```
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
|
+
import { Action } from 'site-operator';
|
|
2
|
+
import { AgentChat as AgentChat_2 } from 'site-operator';
|
|
1
3
|
import { AgentState } from 'site-operator';
|
|
2
4
|
import { AppContext } from 'site-operator';
|
|
3
5
|
import { AppState } from 'site-operator';
|
|
6
|
+
import { ChatController } from 'site-operator';
|
|
4
7
|
import { ClickTarget } from 'site-operator';
|
|
5
8
|
import { default as default_2 } from 'react';
|
|
9
|
+
import { ExecutePlanResult } from 'site-operator';
|
|
10
|
+
import { RefObject } from 'react';
|
|
6
11
|
|
|
7
|
-
export declare const AgentChat: default_2.
|
|
12
|
+
export declare const AgentChat: default_2.ForwardRefExoticComponent<AgentChatProps & default_2.RefAttributes<AgentChat_2>>;
|
|
13
|
+
|
|
14
|
+
export declare const AgentChatMount: default_2.FC<AgentChatMountProps>;
|
|
15
|
+
|
|
16
|
+
export declare type AgentChatMountProps = default_2.HTMLAttributes<HTMLDivElement>;
|
|
8
17
|
|
|
9
18
|
export declare interface AgentChatProps {
|
|
10
19
|
backendUrl?: string;
|
|
@@ -20,6 +29,15 @@ export declare interface AgentChatProps {
|
|
|
20
29
|
context?: ContextProps;
|
|
21
30
|
}
|
|
22
31
|
|
|
32
|
+
export declare const AgentChatProvider: default_2.FC<AgentChatProviderProps>;
|
|
33
|
+
|
|
34
|
+
export declare type AgentChatProviderProps = AgentChatProps & {
|
|
35
|
+
children?: default_2.ReactNode;
|
|
36
|
+
handlers?: {
|
|
37
|
+
executePlan?: (plan: Action) => Promise<ExecutePlanResult>;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
|
|
23
41
|
export { AgentState }
|
|
24
42
|
|
|
25
43
|
export { AppContext }
|
|
@@ -47,11 +65,24 @@ export declare interface ThreadViewProps {
|
|
|
47
65
|
emptyText?: string;
|
|
48
66
|
}
|
|
49
67
|
|
|
68
|
+
export declare function useAgentChatController(): ChatController | null;
|
|
69
|
+
|
|
50
70
|
/**
|
|
51
71
|
* A hook to register a Chat Portal specification for the agent.
|
|
52
72
|
* This allows the agent to navigate and control the host application.
|
|
53
73
|
* @param context The AppContext defining site, user and navigation.
|
|
74
|
+
* If null/undefined, registration is skipped.
|
|
75
|
+
* @param options Optional refs for accessing the AgentChat controller and custom handlers.
|
|
76
|
+
* @returns ChatController instance if an AgentChat ref is provided.
|
|
54
77
|
*/
|
|
55
|
-
export declare function useChatPortal(context: AppContext
|
|
78
|
+
export declare function useChatPortal(context: AppContext | null | undefined, options?: UseChatPortalOptions & {
|
|
79
|
+
handlers?: {
|
|
80
|
+
executePlan?: (plan: Action) => Promise<ExecutePlanResult>;
|
|
81
|
+
};
|
|
82
|
+
}): ChatController | null;
|
|
83
|
+
|
|
84
|
+
export declare type UseChatPortalOptions = {
|
|
85
|
+
chatRef?: RefObject<AgentChat_2 | null>;
|
|
86
|
+
};
|
|
56
87
|
|
|
57
88
|
export { }
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { chatPortalService as
|
|
3
|
-
|
|
1
|
+
import q, { useRef as N, useImperativeHandle as ce, useEffect as A, useState as J, createContext as V, useContext as z } from "react";
|
|
2
|
+
import { chatPortalService as ie } from "site-operator";
|
|
3
|
+
import { createPortal as fe } from "react-dom";
|
|
4
|
+
var C = { exports: {} }, b = {};
|
|
4
5
|
/**
|
|
5
6
|
* @license React
|
|
6
7
|
* react-jsx-runtime.production.js
|
|
@@ -10,29 +11,29 @@ var S = { exports: {} }, v = {};
|
|
|
10
11
|
* This source code is licensed under the MIT license found in the
|
|
11
12
|
* LICENSE file in the root directory of this source tree.
|
|
12
13
|
*/
|
|
13
|
-
var
|
|
14
|
-
function
|
|
15
|
-
if (
|
|
16
|
-
|
|
17
|
-
var
|
|
18
|
-
function d
|
|
19
|
-
var
|
|
20
|
-
if (s !== void 0 && (
|
|
14
|
+
var L;
|
|
15
|
+
function de() {
|
|
16
|
+
if (L) return b;
|
|
17
|
+
L = 1;
|
|
18
|
+
var o = Symbol.for("react.transitional.element"), t = Symbol.for("react.fragment");
|
|
19
|
+
function i(d, n, s) {
|
|
20
|
+
var m = null;
|
|
21
|
+
if (s !== void 0 && (m = "" + s), n.key !== void 0 && (m = "" + n.key), "key" in n) {
|
|
21
22
|
s = {};
|
|
22
|
-
for (var
|
|
23
|
-
|
|
24
|
-
} else s =
|
|
25
|
-
return
|
|
26
|
-
$$typeof:
|
|
27
|
-
type:
|
|
28
|
-
key:
|
|
29
|
-
ref:
|
|
23
|
+
for (var f in n)
|
|
24
|
+
f !== "key" && (s[f] = n[f]);
|
|
25
|
+
} else s = n;
|
|
26
|
+
return n = s.ref, {
|
|
27
|
+
$$typeof: o,
|
|
28
|
+
type: d,
|
|
29
|
+
key: m,
|
|
30
|
+
ref: n !== void 0 ? n : null,
|
|
30
31
|
props: s
|
|
31
32
|
};
|
|
32
33
|
}
|
|
33
|
-
return
|
|
34
|
+
return b.Fragment = t, b.jsx = i, b.jsxs = i, b;
|
|
34
35
|
}
|
|
35
|
-
var
|
|
36
|
+
var T = {};
|
|
36
37
|
/**
|
|
37
38
|
* @license React
|
|
38
39
|
* react-jsx-runtime.development.js
|
|
@@ -42,124 +43,124 @@ var b = {};
|
|
|
42
43
|
* This source code is licensed under the MIT license found in the
|
|
43
44
|
* LICENSE file in the root directory of this source tree.
|
|
44
45
|
*/
|
|
45
|
-
var
|
|
46
|
-
function
|
|
47
|
-
return
|
|
48
|
-
function
|
|
46
|
+
var W;
|
|
47
|
+
function me() {
|
|
48
|
+
return W || (W = 1, process.env.NODE_ENV !== "production" && (function() {
|
|
49
|
+
function o(e) {
|
|
49
50
|
if (e == null) return null;
|
|
50
51
|
if (typeof e == "function")
|
|
51
|
-
return e.$$typeof ===
|
|
52
|
+
return e.$$typeof === ue ? null : e.displayName || e.name || null;
|
|
52
53
|
if (typeof e == "string") return e;
|
|
53
54
|
switch (e) {
|
|
54
|
-
case
|
|
55
|
+
case g:
|
|
55
56
|
return "Fragment";
|
|
56
|
-
case
|
|
57
|
+
case Q:
|
|
57
58
|
return "Profiler";
|
|
58
|
-
case
|
|
59
|
+
case Z:
|
|
59
60
|
return "StrictMode";
|
|
60
|
-
case
|
|
61
|
+
case te:
|
|
61
62
|
return "Suspense";
|
|
62
|
-
case
|
|
63
|
+
case ne:
|
|
63
64
|
return "SuspenseList";
|
|
64
|
-
case
|
|
65
|
+
case le:
|
|
65
66
|
return "Activity";
|
|
66
67
|
}
|
|
67
68
|
if (typeof e == "object")
|
|
68
69
|
switch (typeof e.tag == "number" && console.error(
|
|
69
70
|
"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
|
|
70
71
|
), e.$$typeof) {
|
|
71
|
-
case
|
|
72
|
+
case B:
|
|
72
73
|
return "Portal";
|
|
73
|
-
case
|
|
74
|
+
case ee:
|
|
74
75
|
return e.displayName || "Context";
|
|
75
|
-
case
|
|
76
|
+
case K:
|
|
76
77
|
return (e._context.displayName || "Context") + ".Consumer";
|
|
77
|
-
case
|
|
78
|
+
case re:
|
|
78
79
|
var r = e.render;
|
|
79
80
|
return e = e.displayName, e || (e = r.displayName || r.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e;
|
|
80
|
-
case
|
|
81
|
-
return r = e.displayName || null, r !== null ? r :
|
|
82
|
-
case
|
|
81
|
+
case ae:
|
|
82
|
+
return r = e.displayName || null, r !== null ? r : o(e.type) || "Memo";
|
|
83
|
+
case h:
|
|
83
84
|
r = e._payload, e = e._init;
|
|
84
85
|
try {
|
|
85
|
-
return
|
|
86
|
+
return o(e(r));
|
|
86
87
|
} catch {
|
|
87
88
|
}
|
|
88
89
|
}
|
|
89
90
|
return null;
|
|
90
91
|
}
|
|
91
|
-
function
|
|
92
|
+
function t(e) {
|
|
92
93
|
return "" + e;
|
|
93
94
|
}
|
|
94
|
-
function
|
|
95
|
+
function i(e) {
|
|
95
96
|
try {
|
|
96
|
-
|
|
97
|
+
t(e);
|
|
97
98
|
var r = !1;
|
|
98
99
|
} catch {
|
|
99
100
|
r = !0;
|
|
100
101
|
}
|
|
101
102
|
if (r) {
|
|
102
103
|
r = console;
|
|
103
|
-
var
|
|
104
|
-
return
|
|
104
|
+
var a = r.error, l = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
|
|
105
|
+
return a.call(
|
|
105
106
|
r,
|
|
106
107
|
"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
|
|
107
|
-
|
|
108
|
-
),
|
|
108
|
+
l
|
|
109
|
+
), t(e);
|
|
109
110
|
}
|
|
110
111
|
}
|
|
111
|
-
function
|
|
112
|
-
if (e ===
|
|
113
|
-
if (typeof e == "object" && e !== null && e.$$typeof ===
|
|
112
|
+
function d(e) {
|
|
113
|
+
if (e === g) return "<>";
|
|
114
|
+
if (typeof e == "object" && e !== null && e.$$typeof === h)
|
|
114
115
|
return "<...>";
|
|
115
116
|
try {
|
|
116
|
-
var r =
|
|
117
|
+
var r = o(e);
|
|
117
118
|
return r ? "<" + r + ">" : "<...>";
|
|
118
119
|
} catch {
|
|
119
120
|
return "<...>";
|
|
120
121
|
}
|
|
121
122
|
}
|
|
122
|
-
function
|
|
123
|
-
var e =
|
|
123
|
+
function n() {
|
|
124
|
+
var e = y.A;
|
|
124
125
|
return e === null ? null : e.getOwner();
|
|
125
126
|
}
|
|
126
127
|
function s() {
|
|
127
128
|
return Error("react-stack-top-frame");
|
|
128
129
|
}
|
|
129
|
-
function
|
|
130
|
-
if (
|
|
130
|
+
function m(e) {
|
|
131
|
+
if (Y.call(e, "key")) {
|
|
131
132
|
var r = Object.getOwnPropertyDescriptor(e, "key").get;
|
|
132
133
|
if (r && r.isReactWarning) return !1;
|
|
133
134
|
}
|
|
134
135
|
return e.key !== void 0;
|
|
135
136
|
}
|
|
136
|
-
function
|
|
137
|
-
function
|
|
138
|
-
|
|
137
|
+
function f(e, r) {
|
|
138
|
+
function a() {
|
|
139
|
+
$ || ($ = !0, console.error(
|
|
139
140
|
"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
|
|
140
141
|
r
|
|
141
142
|
));
|
|
142
143
|
}
|
|
143
|
-
|
|
144
|
-
get:
|
|
144
|
+
a.isReactWarning = !0, Object.defineProperty(e, "key", {
|
|
145
|
+
get: a,
|
|
145
146
|
configurable: !0
|
|
146
147
|
});
|
|
147
148
|
}
|
|
148
149
|
function R() {
|
|
149
|
-
var e =
|
|
150
|
-
return
|
|
150
|
+
var e = o(this.type);
|
|
151
|
+
return I[e] || (I[e] = !0, console.error(
|
|
151
152
|
"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
|
|
152
153
|
)), e = this.props.ref, e !== void 0 ? e : null;
|
|
153
154
|
}
|
|
154
|
-
function
|
|
155
|
-
var
|
|
155
|
+
function v(e, r, a, l, S, j) {
|
|
156
|
+
var u = a.ref;
|
|
156
157
|
return e = {
|
|
157
|
-
$$typeof:
|
|
158
|
+
$$typeof: x,
|
|
158
159
|
type: e,
|
|
159
160
|
key: r,
|
|
160
|
-
props:
|
|
161
|
-
_owner:
|
|
162
|
-
}, (
|
|
161
|
+
props: a,
|
|
162
|
+
_owner: l
|
|
163
|
+
}, (u !== void 0 ? u : null) !== null ? Object.defineProperty(e, "ref", {
|
|
163
164
|
enumerable: !1,
|
|
164
165
|
get: R
|
|
165
166
|
}) : Object.defineProperty(e, "ref", { enumerable: !1, value: null }), e._store = {}, Object.defineProperty(e._store, "validated", {
|
|
@@ -176,151 +177,194 @@ function ne() {
|
|
|
176
177
|
configurable: !1,
|
|
177
178
|
enumerable: !1,
|
|
178
179
|
writable: !0,
|
|
179
|
-
value:
|
|
180
|
+
value: S
|
|
180
181
|
}), Object.defineProperty(e, "_debugTask", {
|
|
181
182
|
configurable: !1,
|
|
182
183
|
enumerable: !1,
|
|
183
184
|
writable: !0,
|
|
184
|
-
value:
|
|
185
|
+
value: j
|
|
185
186
|
}), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
|
|
186
187
|
}
|
|
187
|
-
function
|
|
188
|
-
var
|
|
189
|
-
if (
|
|
190
|
-
if (
|
|
191
|
-
if (
|
|
192
|
-
for (
|
|
193
|
-
|
|
194
|
-
Object.freeze && Object.freeze(
|
|
188
|
+
function c(e, r, a, l, S, j) {
|
|
189
|
+
var u = r.children;
|
|
190
|
+
if (u !== void 0)
|
|
191
|
+
if (l)
|
|
192
|
+
if (oe(u)) {
|
|
193
|
+
for (l = 0; l < u.length; l++)
|
|
194
|
+
k(u[l]);
|
|
195
|
+
Object.freeze && Object.freeze(u);
|
|
195
196
|
} else
|
|
196
197
|
console.error(
|
|
197
198
|
"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
|
|
198
199
|
);
|
|
199
|
-
else
|
|
200
|
-
if (
|
|
201
|
-
|
|
202
|
-
var
|
|
203
|
-
return
|
|
200
|
+
else k(u);
|
|
201
|
+
if (Y.call(r, "key")) {
|
|
202
|
+
u = o(e);
|
|
203
|
+
var _ = Object.keys(r).filter(function(se) {
|
|
204
|
+
return se !== "key";
|
|
204
205
|
});
|
|
205
|
-
|
|
206
|
+
l = 0 < _.length ? "{key: someKey, " + _.join(": ..., ") + ": ...}" : "{key: someKey}", D[u + l] || (_ = 0 < _.length ? "{" + _.join(": ..., ") + ": ...}" : "{}", console.error(
|
|
206
207
|
`A props object containing a "key" prop is being spread into JSX:
|
|
207
208
|
let props = %s;
|
|
208
209
|
<%s {...props} />
|
|
209
210
|
React keys must be passed directly to JSX without using spread:
|
|
210
211
|
let props = %s;
|
|
211
212
|
<%s key={someKey} {...props} />`,
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
),
|
|
213
|
+
l,
|
|
214
|
+
u,
|
|
215
|
+
_,
|
|
216
|
+
u
|
|
217
|
+
), D[u + l] = !0);
|
|
217
218
|
}
|
|
218
|
-
if (
|
|
219
|
-
|
|
219
|
+
if (u = null, a !== void 0 && (i(a), u = "" + a), m(r) && (i(r.key), u = "" + r.key), "key" in r) {
|
|
220
|
+
a = {};
|
|
220
221
|
for (var w in r)
|
|
221
|
-
w !== "key" && (
|
|
222
|
-
} else
|
|
223
|
-
return
|
|
224
|
-
|
|
222
|
+
w !== "key" && (a[w] = r[w]);
|
|
223
|
+
} else a = r;
|
|
224
|
+
return u && f(
|
|
225
|
+
a,
|
|
225
226
|
typeof e == "function" ? e.displayName || e.name || "Unknown" : e
|
|
226
|
-
),
|
|
227
|
+
), v(
|
|
227
228
|
e,
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
229
|
+
u,
|
|
230
|
+
a,
|
|
231
|
+
n(),
|
|
232
|
+
S,
|
|
233
|
+
j
|
|
233
234
|
);
|
|
234
235
|
}
|
|
235
|
-
function
|
|
236
|
-
|
|
236
|
+
function k(e) {
|
|
237
|
+
E(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === h && (e._payload.status === "fulfilled" ? E(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
|
|
237
238
|
}
|
|
238
|
-
function
|
|
239
|
-
return typeof e == "object" && e !== null && e.$$typeof ===
|
|
239
|
+
function E(e) {
|
|
240
|
+
return typeof e == "object" && e !== null && e.$$typeof === x;
|
|
240
241
|
}
|
|
241
|
-
var
|
|
242
|
+
var P = q, x = Symbol.for("react.transitional.element"), B = Symbol.for("react.portal"), g = Symbol.for("react.fragment"), Z = Symbol.for("react.strict_mode"), Q = Symbol.for("react.profiler"), K = Symbol.for("react.consumer"), ee = Symbol.for("react.context"), re = Symbol.for("react.forward_ref"), te = Symbol.for("react.suspense"), ne = Symbol.for("react.suspense_list"), ae = Symbol.for("react.memo"), h = Symbol.for("react.lazy"), le = Symbol.for("react.activity"), ue = Symbol.for("react.client.reference"), y = P.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, Y = Object.prototype.hasOwnProperty, oe = Array.isArray, O = console.createTask ? console.createTask : function() {
|
|
242
243
|
return null;
|
|
243
244
|
};
|
|
244
|
-
|
|
245
|
+
P = {
|
|
245
246
|
react_stack_bottom_frame: function(e) {
|
|
246
247
|
return e();
|
|
247
248
|
}
|
|
248
249
|
};
|
|
249
|
-
var
|
|
250
|
-
|
|
250
|
+
var $, I = {}, M = P.react_stack_bottom_frame.bind(
|
|
251
|
+
P,
|
|
251
252
|
s
|
|
252
|
-
)(),
|
|
253
|
-
|
|
254
|
-
var
|
|
255
|
-
return
|
|
253
|
+
)(), F = O(d(s)), D = {};
|
|
254
|
+
T.Fragment = g, T.jsx = function(e, r, a) {
|
|
255
|
+
var l = 1e4 > y.recentlyCreatedOwnerStacks++;
|
|
256
|
+
return c(
|
|
256
257
|
e,
|
|
257
258
|
r,
|
|
258
|
-
|
|
259
|
+
a,
|
|
259
260
|
!1,
|
|
260
|
-
|
|
261
|
-
|
|
261
|
+
l ? Error("react-stack-top-frame") : M,
|
|
262
|
+
l ? O(d(e)) : F
|
|
262
263
|
);
|
|
263
|
-
},
|
|
264
|
-
var
|
|
265
|
-
return
|
|
264
|
+
}, T.jsxs = function(e, r, a) {
|
|
265
|
+
var l = 1e4 > y.recentlyCreatedOwnerStacks++;
|
|
266
|
+
return c(
|
|
266
267
|
e,
|
|
267
268
|
r,
|
|
268
|
-
|
|
269
|
+
a,
|
|
269
270
|
!0,
|
|
270
|
-
|
|
271
|
-
|
|
271
|
+
l ? Error("react-stack-top-frame") : M,
|
|
272
|
+
l ? O(d(e)) : F
|
|
272
273
|
);
|
|
273
274
|
};
|
|
274
|
-
})()),
|
|
275
|
+
})()), T;
|
|
275
276
|
}
|
|
276
|
-
var
|
|
277
|
-
function
|
|
278
|
-
return
|
|
277
|
+
var U;
|
|
278
|
+
function Ee() {
|
|
279
|
+
return U || (U = 1, process.env.NODE_ENV === "production" ? C.exports = de() : C.exports = me()), C.exports;
|
|
279
280
|
}
|
|
280
|
-
var
|
|
281
|
-
const
|
|
282
|
-
backendUrl:
|
|
283
|
-
conversationUrl:
|
|
284
|
-
appName:
|
|
285
|
-
agentAvatar:
|
|
286
|
-
inspector:
|
|
281
|
+
var p = Ee();
|
|
282
|
+
const G = q.forwardRef(({
|
|
283
|
+
backendUrl: o,
|
|
284
|
+
conversationUrl: t,
|
|
285
|
+
appName: i,
|
|
286
|
+
agentAvatar: d,
|
|
287
|
+
inspector: n,
|
|
287
288
|
interceptor: s,
|
|
288
|
-
className:
|
|
289
|
-
composer:
|
|
289
|
+
className: m,
|
|
290
|
+
composer: f,
|
|
290
291
|
thread: R,
|
|
291
|
-
header:
|
|
292
|
-
context:
|
|
293
|
-
}) => {
|
|
294
|
-
const
|
|
295
|
-
return
|
|
296
|
-
|
|
297
|
-
}, [
|
|
298
|
-
|
|
299
|
-
}, [
|
|
292
|
+
header: v,
|
|
293
|
+
context: c
|
|
294
|
+
}, k) => {
|
|
295
|
+
const E = N(null);
|
|
296
|
+
return ce(k, () => E.current), A(() => {
|
|
297
|
+
E.current && (c != null && c.appContext) && E.current.setAppContext(c.appContext);
|
|
298
|
+
}, [c == null ? void 0 : c.appContext]), A(() => {
|
|
299
|
+
E.current && (c != null && c.appState) && E.current.setAppState(c.appState);
|
|
300
|
+
}, [c == null ? void 0 : c.appState]), /* @__PURE__ */ p.jsx(
|
|
300
301
|
"agent-chat",
|
|
301
302
|
{
|
|
302
|
-
ref:
|
|
303
|
-
backendUrl:
|
|
304
|
-
conversationUrl:
|
|
305
|
-
appName:
|
|
306
|
-
agentAvatar:
|
|
307
|
-
disclaimer:
|
|
308
|
-
placeholder:
|
|
303
|
+
ref: E,
|
|
304
|
+
backendUrl: o,
|
|
305
|
+
conversationUrl: t,
|
|
306
|
+
appName: i,
|
|
307
|
+
agentAvatar: d,
|
|
308
|
+
disclaimer: f == null ? void 0 : f.disclaimer,
|
|
309
|
+
placeholder: f == null ? void 0 : f.placeholder,
|
|
309
310
|
emptyText: R == null ? void 0 : R.emptyText,
|
|
310
|
-
headerTitle:
|
|
311
|
-
hideHeader:
|
|
312
|
-
inspector:
|
|
311
|
+
headerTitle: v == null ? void 0 : v.title,
|
|
312
|
+
hideHeader: v == null ? void 0 : v.hide,
|
|
313
|
+
inspector: n ? "true" : void 0,
|
|
313
314
|
interceptor: s ? !0 : void 0,
|
|
314
|
-
class:
|
|
315
|
+
class: m
|
|
315
316
|
}
|
|
316
317
|
);
|
|
317
|
-
};
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
318
|
+
});
|
|
319
|
+
G.displayName = "AgentChat";
|
|
320
|
+
function ve(o, t) {
|
|
321
|
+
const [i, d] = J(null);
|
|
322
|
+
return A(() => {
|
|
323
|
+
o && ie.registerPortal(o, t == null ? void 0 : t.handlers);
|
|
324
|
+
}, [o, t == null ? void 0 : t.handlers]), A(() => {
|
|
325
|
+
var m;
|
|
326
|
+
const n = (m = t == null ? void 0 : t.chatRef) == null ? void 0 : m.current;
|
|
327
|
+
if (!n) return;
|
|
328
|
+
if (n.controller) {
|
|
329
|
+
d(n.controller);
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
const s = (f) => {
|
|
333
|
+
d(f.detail ?? null);
|
|
334
|
+
};
|
|
335
|
+
return n.addEventListener("controller-ready", s), () => {
|
|
336
|
+
n.removeEventListener("controller-ready", s);
|
|
337
|
+
};
|
|
338
|
+
}, [t == null ? void 0 : t.chatRef]), i;
|
|
339
|
+
}
|
|
340
|
+
const X = V(null), H = V(null);
|
|
341
|
+
function Te() {
|
|
342
|
+
return z(X);
|
|
322
343
|
}
|
|
344
|
+
const pe = ({ children: o, ...t }) => {
|
|
345
|
+
const i = z(H), d = N(null);
|
|
346
|
+
return A(() => {
|
|
347
|
+
if (i)
|
|
348
|
+
return i(d.current), () => {
|
|
349
|
+
i(null);
|
|
350
|
+
};
|
|
351
|
+
}, [i]), /* @__PURE__ */ p.jsx("div", { ref: d, ...t, children: o });
|
|
352
|
+
}, Ae = ({
|
|
353
|
+
children: o,
|
|
354
|
+
context: t,
|
|
355
|
+
handlers: i,
|
|
356
|
+
...d
|
|
357
|
+
}) => {
|
|
358
|
+
const n = N(null), s = ve(t == null ? void 0 : t.appContext, { chatRef: n, handlers: i }), [m, f] = J(null);
|
|
359
|
+
return /* @__PURE__ */ p.jsx(X.Provider, { value: s, children: /* @__PURE__ */ p.jsxs(H.Provider, { value: f, children: [
|
|
360
|
+
o,
|
|
361
|
+
m ? fe(/* @__PURE__ */ p.jsx(G, { ref: n, context: t, ...d }), m) : null
|
|
362
|
+
] }) });
|
|
363
|
+
};
|
|
323
364
|
export {
|
|
324
|
-
|
|
325
|
-
|
|
365
|
+
G as AgentChat,
|
|
366
|
+
pe as AgentChatMount,
|
|
367
|
+
Ae as AgentChatProvider,
|
|
368
|
+
Te as useAgentChatController,
|
|
369
|
+
ve as useChatPortal
|
|
326
370
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(E,l){typeof exports=="object"&&typeof module<"u"?l(exports,require("react"),require("site-operator"),require("react-dom")):typeof define=="function"&&define.amd?define(["exports","react","site-operator","react-dom"],l):(E=typeof globalThis<"u"?globalThis:E||self,l(E.SiteOperatorReact={},E.React,E.SiteOperator,E.ReactDOM))})(this,(function(E,l,H,B){"use strict";var h={exports:{}},b={};/**
|
|
2
2
|
* @license React
|
|
3
3
|
* react-jsx-runtime.production.js
|
|
4
4
|
*
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* This source code is licensed under the MIT license found in the
|
|
8
8
|
* LICENSE file in the root directory of this source tree.
|
|
9
|
-
*/var
|
|
9
|
+
*/var Y;function Z(){if(Y)return b;Y=1;var s=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function i(m,n,c){var v=null;if(c!==void 0&&(v=""+c),n.key!==void 0&&(v=""+n.key),"key"in n){c={};for(var d in n)d!=="key"&&(c[d]=n[d])}else c=n;return n=c.ref,{$$typeof:s,type:m,key:v,ref:n!==void 0?n:null,props:c}}return b.Fragment=t,b.jsx=i,b.jsxs=i,b}var p={};/**
|
|
10
10
|
* @license React
|
|
11
11
|
* react-jsx-runtime.development.js
|
|
12
12
|
*
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
*
|
|
15
15
|
* This source code is licensed under the MIT license found in the
|
|
16
16
|
* LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/var
|
|
17
|
+
*/var M;function Q(){return M||(M=1,process.env.NODE_ENV!=="production"&&(function(){function s(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===ie?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case O:return"Fragment";case ne:return"Profiler";case te:return"StrictMode";case ue:return"Suspense";case se:return"SuspenseList";case fe:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case re:return"Portal";case le:return e.displayName||"Context";case ae:return(e._context.displayName||"Context")+".Consumer";case oe:var r=e.render;return e=e.displayName,e||(e=r.displayName||r.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case ce:return r=e.displayName||null,r!==null?r:s(e.type)||"Memo";case g:r=e._payload,e=e._init;try{return s(e(r))}catch{}}return null}function t(e){return""+e}function i(e){try{t(e);var r=!1}catch{r=!0}if(r){r=console;var a=r.error,o=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return a.call(r,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",o),t(e)}}function m(e){if(e===O)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===g)return"<...>";try{var r=s(e);return r?"<"+r+">":"<...>"}catch{return"<...>"}}function n(){var e=j.A;return e===null?null:e.getOwner()}function c(){return Error("react-stack-top-frame")}function v(e){if(U.call(e,"key")){var r=Object.getOwnPropertyDescriptor(e,"key").get;if(r&&r.isReactWarning)return!1}return e.key!==void 0}function d(e,r){function a(){J||(J=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",r))}a.isReactWarning=!0,Object.defineProperty(e,"key",{get:a,configurable:!0})}function C(){var e=s(this.type);return V[e]||(V[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function _(e,r,a,o,k,N){var u=a.ref;return e={$$typeof:W,type:e,key:r,props:a,_owner:o},(u!==void 0?u:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:C}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:k}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:N}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function f(e,r,a,o,k,N){var u=r.children;if(u!==void 0)if(o)if(de(u)){for(o=0;o<u.length;o++)S(u[o]);Object.freeze&&Object.freeze(u)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else S(u);if(U.call(r,"key")){u=s(e);var T=Object.keys(r).filter(function(me){return me!=="key"});o=0<T.length?"{key: someKey, "+T.join(": ..., ")+": ...}":"{key: someKey}",X[u+o]||(T=0<T.length?"{"+T.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
18
18
|
let props = %s;
|
|
19
19
|
<%s {...props} />
|
|
20
20
|
React keys must be passed directly to JSX without using spread:
|
|
21
21
|
let props = %s;
|
|
22
|
-
<%s key={someKey} {...props} />`,
|
|
22
|
+
<%s key={someKey} {...props} />`,o,u,T,u),X[u+o]=!0)}if(u=null,a!==void 0&&(i(a),u=""+a),v(r)&&(i(r.key),u=""+r.key),"key"in r){a={};for(var x in r)x!=="key"&&(a[x]=r[x])}else a=r;return u&&d(a,typeof e=="function"?e.displayName||e.name||"Unknown":e),_(e,u,a,n(),k,N)}function S(e){R(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===g&&(e._payload.status==="fulfilled"?R(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function R(e){return typeof e=="object"&&e!==null&&e.$$typeof===W}var P=l,W=Symbol.for("react.transitional.element"),re=Symbol.for("react.portal"),O=Symbol.for("react.fragment"),te=Symbol.for("react.strict_mode"),ne=Symbol.for("react.profiler"),ae=Symbol.for("react.consumer"),le=Symbol.for("react.context"),oe=Symbol.for("react.forward_ref"),ue=Symbol.for("react.suspense"),se=Symbol.for("react.suspense_list"),ce=Symbol.for("react.memo"),g=Symbol.for("react.lazy"),fe=Symbol.for("react.activity"),ie=Symbol.for("react.client.reference"),j=P.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,U=Object.prototype.hasOwnProperty,de=Array.isArray,w=console.createTask?console.createTask:function(){return null};P={react_stack_bottom_frame:function(e){return e()}};var J,V={},z=P.react_stack_bottom_frame.bind(P,c)(),G=w(m(c)),X={};p.Fragment=O,p.jsx=function(e,r,a){var o=1e4>j.recentlyCreatedOwnerStacks++;return f(e,r,a,!1,o?Error("react-stack-top-frame"):z,o?w(m(e)):G)},p.jsxs=function(e,r,a){var o=1e4>j.recentlyCreatedOwnerStacks++;return f(e,r,a,!0,o?Error("react-stack-top-frame"):z,o?w(m(e)):G)}})()),p}var I;function K(){return I||(I=1,process.env.NODE_ENV==="production"?h.exports=Z():h.exports=Q()),h.exports}var A=K();const y=l.forwardRef(({backendUrl:s,conversationUrl:t,appName:i,agentAvatar:m,inspector:n,interceptor:c,className:v,composer:d,thread:C,header:_,context:f},S)=>{const R=l.useRef(null);return l.useImperativeHandle(S,()=>R.current),l.useEffect(()=>{R.current&&(f!=null&&f.appContext)&&R.current.setAppContext(f.appContext)},[f==null?void 0:f.appContext]),l.useEffect(()=>{R.current&&(f!=null&&f.appState)&&R.current.setAppState(f.appState)},[f==null?void 0:f.appState]),A.jsx("agent-chat",{ref:R,backendUrl:s,conversationUrl:t,appName:i,agentAvatar:m,disclaimer:d==null?void 0:d.disclaimer,placeholder:d==null?void 0:d.placeholder,emptyText:C==null?void 0:C.emptyText,headerTitle:_==null?void 0:_.title,hideHeader:_==null?void 0:_.hide,inspector:n?"true":void 0,interceptor:c?!0:void 0,class:v})});y.displayName="AgentChat";function D(s,t){const[i,m]=l.useState(null);return l.useEffect(()=>{s&&H.chatPortalService.registerPortal(s,t==null?void 0:t.handlers)},[s,t==null?void 0:t.handlers]),l.useEffect(()=>{var v;const n=(v=t==null?void 0:t.chatRef)==null?void 0:v.current;if(!n)return;if(n.controller){m(n.controller);return}const c=d=>{m(d.detail??null)};return n.addEventListener("controller-ready",c),()=>{n.removeEventListener("controller-ready",c)}},[t==null?void 0:t.chatRef]),i}const F=l.createContext(null),L=l.createContext(null);function q(){return l.useContext(F)}const $=({children:s,...t})=>{const i=l.useContext(L),m=l.useRef(null);return l.useEffect(()=>{if(i)return i(m.current),()=>{i(null)}},[i]),A.jsx("div",{ref:m,...t,children:s})},ee=({children:s,context:t,handlers:i,...m})=>{const n=l.useRef(null),c=D(t==null?void 0:t.appContext,{chatRef:n,handlers:i}),[v,d]=l.useState(null);return A.jsx(F.Provider,{value:c,children:A.jsxs(L.Provider,{value:d,children:[s,v?B.createPortal(A.jsx(y,{ref:n,context:t,...m}),v):null]})})};E.AgentChat=y,E.AgentChatMount=$,E.AgentChatProvider=ee,E.useAgentChatController=q,E.useChatPortal=D,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "site-operator-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "React wrapper for site-operator, providing AgentChat component and hooks.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "jostvian",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"dev": "vite build --watch"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"site-operator": "^0.
|
|
35
|
+
"site-operator": "^0.2.4"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"react": "^19.0.0",
|
|
@@ -47,4 +47,4 @@
|
|
|
47
47
|
"vite": "^6.0.0",
|
|
48
48
|
"vite-plugin-dts": "^4.5.0"
|
|
49
49
|
}
|
|
50
|
-
}
|
|
50
|
+
}
|