langgraph-ui-components 0.0.25 → 0.0.27
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 +412 -51
- package/dist/_virtual/index.cjs6.js +1 -1
- package/dist/_virtual/index.cjs8.js +1 -1
- package/dist/_virtual/index.es6.js +2 -2
- package/dist/_virtual/index.es8.js +2 -2
- package/dist/assets/langgraph-ui-components.css +1 -1
- package/dist/components/ChatBody.cjs.js +2 -2
- package/dist/components/ChatBody.cjs.js.map +1 -1
- package/dist/components/ChatBody.d.ts.map +1 -1
- package/dist/components/ChatBody.es.js +137 -98
- package/dist/components/ChatBody.es.js.map +1 -1
- package/dist/components/messages/AgentMessage.cjs.js +3 -1
- package/dist/components/messages/AgentMessage.cjs.js.map +1 -1
- package/dist/components/messages/AgentMessage.d.ts +3 -1
- package/dist/components/messages/AgentMessage.d.ts.map +1 -1
- package/dist/components/messages/AgentMessage.es.js +197 -112
- package/dist/components/messages/AgentMessage.es.js.map +1 -1
- package/dist/entries/components.cjs.js +1 -1
- package/dist/entries/components.d.ts.map +1 -1
- package/dist/entries/components.es.js +4 -5
- package/dist/entries/components.es.js.map +1 -1
- package/dist/entries/hooks.cjs.js +1 -1
- package/dist/entries/hooks.d.ts.map +1 -1
- package/dist/entries/hooks.es.js +5 -6
- package/dist/entries/hooks.es.js.map +1 -1
- package/dist/entries/providers.cjs.js +1 -1
- package/dist/entries/providers.d.ts +1 -1
- package/dist/entries/providers.d.ts.map +1 -1
- package/dist/entries/providers.es.js +18 -19
- package/dist/entries/providers.es.js.map +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +28 -29
- package/dist/index.es.js.map +1 -1
- package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.cjs.js +1 -1
- package/dist/node_modules/.pnpm/eventemitter3@4.0.7/node_modules/eventemitter3/index.es.js +1 -1
- package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.cjs.js +1 -1
- package/dist/node_modules/.pnpm/p-timeout@3.2.0/node_modules/p-timeout/index.es.js +1 -1
- package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/cjs/styles/prism/index.cjs.js +1 -1
- package/dist/node_modules/.pnpm/react-syntax-highlighter@16.1.0_react@19.2.3/node_modules/react-syntax-highlighter/dist/cjs/styles/prism/index.es.js +1 -1
- package/dist/providers/ChatProvider.cjs.js +1 -1
- package/dist/providers/ChatProvider.cjs.js.map +1 -1
- package/dist/providers/ChatProvider.d.ts +17 -1
- package/dist/providers/ChatProvider.d.ts.map +1 -1
- package/dist/providers/ChatProvider.es.js +18 -17
- package/dist/providers/ChatProvider.es.js.map +1 -1
- package/dist/providers/ChatRuntime.es.js +4 -4
- package/dist/providers/CustomComponentProvider.cjs.js +1 -1
- package/dist/providers/CustomComponentProvider.cjs.js.map +1 -1
- package/dist/providers/CustomComponentProvider.d.ts +11 -0
- package/dist/providers/CustomComponentProvider.d.ts.map +1 -1
- package/dist/providers/CustomComponentProvider.es.js +51 -35
- package/dist/providers/CustomComponentProvider.es.js.map +1 -1
- package/dist/providers/Stream.cjs.js +1 -1
- package/dist/providers/Stream.cjs.js.map +1 -1
- package/dist/providers/Stream.d.ts.map +1 -1
- package/dist/providers/Stream.es.js +113 -94
- package/dist/providers/Stream.es.js.map +1 -1
- package/dist/providers/Thread.cjs.js +1 -1
- package/dist/providers/Thread.cjs.js.map +1 -1
- package/dist/providers/Thread.d.ts +2 -1
- package/dist/providers/Thread.d.ts.map +1 -1
- package/dist/providers/Thread.es.js +19 -19
- package/dist/providers/Thread.es.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/src/components/ChatBody.tsx +88 -28
- package/src/components/messages/AgentMessage.tsx +281 -81
- package/src/entries/components.ts +0 -2
- package/src/entries/hooks.ts +0 -2
- package/src/entries/providers.ts +1 -3
- package/src/index.css +2 -2
- package/src/index.ts +1 -3
- package/src/providers/ChatProvider.tsx +18 -1
- package/src/providers/CustomComponentProvider.tsx +41 -0
- package/src/providers/Stream.tsx +34 -15
- package/src/providers/Thread.tsx +2 -2
- package/dist/components/ToolCallFunctions.cjs.js +0 -2
- package/dist/components/ToolCallFunctions.cjs.js.map +0 -1
- package/dist/components/ToolCallFunctions.es.js +0 -75
- package/dist/components/ToolCallFunctions.es.js.map +0 -1
|
@@ -1,158 +1,243 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { cn as
|
|
3
|
-
import { getContentString as
|
|
4
|
-
import { BotMessageSquare as
|
|
5
|
-
import
|
|
6
|
-
import { AgentMarkdown as
|
|
7
|
-
import { BranchSwitcher as
|
|
8
|
-
import { MessageActions as
|
|
9
|
-
function
|
|
10
|
-
if (!
|
|
11
|
-
const e =
|
|
1
|
+
import { jsxs as m, jsx as s, Fragment as F } from "react/jsx-runtime";
|
|
2
|
+
import { cn as O } from "../../utils/tailwindUtil.es.js";
|
|
3
|
+
import { getContentString as q } from "../../utils/utils.es.js";
|
|
4
|
+
import { BotMessageSquare as J, LoaderCircle as S, Sparkles as W, ChevronRight as D, Wrench as G } from "lucide-react";
|
|
5
|
+
import H, { useState as Q, useEffect as U } from "react";
|
|
6
|
+
import { AgentMarkdown as $ } from "../ui/AgentMarkdown.es.js";
|
|
7
|
+
import { BranchSwitcher as V } from "./BranchSwitcher.es.js";
|
|
8
|
+
import { MessageActions as X } from "./MessageActions.es.js";
|
|
9
|
+
function Y(t) {
|
|
10
|
+
if (!t) return null;
|
|
11
|
+
const e = t.additional_kwargs;
|
|
12
12
|
return e && typeof e.reasoning_content == "string" && e.reasoning_content.length > 0 ? e.reasoning_content : null;
|
|
13
13
|
}
|
|
14
|
-
function
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
function Z({
|
|
15
|
+
reasoningText: t,
|
|
16
|
+
toolStatuses: e,
|
|
17
|
+
isStreaming: n,
|
|
18
|
+
fontSize: p
|
|
18
19
|
}) {
|
|
19
|
-
const [
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}, [
|
|
23
|
-
|
|
20
|
+
const [u, a] = Q(!1);
|
|
21
|
+
U(() => {
|
|
22
|
+
a(!!n);
|
|
23
|
+
}, [n]);
|
|
24
|
+
const y = e && e.length > 0, b = !!t && t.length > 0;
|
|
25
|
+
return !y && !b && !n ? null : /* @__PURE__ */ m("div", { className: "my-1", children: [
|
|
26
|
+
/* @__PURE__ */ m(
|
|
24
27
|
"button",
|
|
25
28
|
{
|
|
26
29
|
type: "button",
|
|
27
|
-
onClick: () =>
|
|
30
|
+
onClick: () => a((f) => !f),
|
|
28
31
|
className: "inline-flex items-center gap-1.5 text-xs text-zinc-400/80 transition-colors hover:text-zinc-300",
|
|
29
32
|
children: [
|
|
30
|
-
|
|
31
|
-
/* @__PURE__ */
|
|
32
|
-
/* @__PURE__ */
|
|
33
|
-
|
|
33
|
+
n ? /* @__PURE__ */ s(S, { className: "size-3 animate-spin" }) : /* @__PURE__ */ s(W, { className: "size-3" }),
|
|
34
|
+
/* @__PURE__ */ s("span", { children: n ? "Thinking" : "Thought" }),
|
|
35
|
+
/* @__PURE__ */ s(
|
|
36
|
+
D,
|
|
34
37
|
{
|
|
35
|
-
className:
|
|
38
|
+
className: O(
|
|
36
39
|
"size-3 transition-transform duration-200",
|
|
37
|
-
|
|
40
|
+
u && "rotate-90"
|
|
38
41
|
)
|
|
39
42
|
}
|
|
40
43
|
)
|
|
41
44
|
]
|
|
42
45
|
}
|
|
43
46
|
),
|
|
44
|
-
|
|
47
|
+
u && /* @__PURE__ */ m("div", { className: "mt-1.5 border-l-2 border-white/10 pl-4 space-y-1", children: [
|
|
48
|
+
y && e.map((f) => /* @__PURE__ */ m("div", { className: "flex items-center gap-2 text-sm text-zinc-300 py-0.5", children: [
|
|
49
|
+
!f.isCompleted && /* @__PURE__ */ s(S, { className: "size-3.5 animate-spin text-zinc-400" }),
|
|
50
|
+
/* @__PURE__ */ s(G, { className: "size-3.5 text-zinc-500" }),
|
|
51
|
+
/* @__PURE__ */ s("span", { children: f.label })
|
|
52
|
+
] }, f.key)),
|
|
53
|
+
b && /* @__PURE__ */ s("div", { className: "text-sm text-zinc-300", children: /* @__PURE__ */ s($, { fontSize: p, children: t }) })
|
|
54
|
+
] })
|
|
45
55
|
] });
|
|
46
56
|
}
|
|
47
|
-
function
|
|
48
|
-
if (!
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
57
|
+
function P(t) {
|
|
58
|
+
if (!t || typeof t != "object") return null;
|
|
59
|
+
const e = t, n = typeof e.visible == "boolean" ? e.visible : typeof e.show == "boolean" ? e.show : typeof e.display == "boolean" ? e.display : typeof e.hidden == "boolean" ? !e.hidden : !0;
|
|
60
|
+
return {
|
|
61
|
+
id: typeof e.id == "string" ? e.id : void 0,
|
|
62
|
+
name: typeof e.name == "string" ? e.name : void 0,
|
|
63
|
+
label: typeof e.label == "string" ? e.label : void 0,
|
|
64
|
+
event: typeof e.event == "string" ? e.event : void 0,
|
|
65
|
+
visible: n
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function ee(t) {
|
|
69
|
+
if (!t) return [];
|
|
70
|
+
const e = t.additional_kwargs;
|
|
71
|
+
return !e || !Array.isArray(e.tool_status) ? [] : e.tool_status.map(P).filter((n) => n !== null);
|
|
72
|
+
}
|
|
73
|
+
function te(t) {
|
|
74
|
+
if (!t) return !1;
|
|
75
|
+
const e = t.additional_kwargs;
|
|
76
|
+
return e ? Object.prototype.hasOwnProperty.call(e, "tool_status") : !1;
|
|
77
|
+
}
|
|
78
|
+
function z(t) {
|
|
79
|
+
return t ? t.toLowerCase().replace(/\s+/g, " ").replace(/\s*event:\s*metadata\s*$/i, "").trim() : "";
|
|
80
|
+
}
|
|
81
|
+
function ne(t) {
|
|
82
|
+
return !(t.visible === !1 || z(t.label).length === 0 || t.event?.toLowerCase() === "metadata" || /\bevent:\s*metadata\b/i.test(t.label ?? ""));
|
|
83
|
+
}
|
|
84
|
+
function oe(t, e) {
|
|
85
|
+
if (!e) return t;
|
|
86
|
+
if (typeof e == "string") {
|
|
87
|
+
const n = e.trim();
|
|
88
|
+
return n.length === 0 ? t : `${t} ${n.slice(0, 80)}${n.length > 80 ? "..." : ""}`;
|
|
65
89
|
}
|
|
66
|
-
if (typeof
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
90
|
+
if (typeof e == "object")
|
|
91
|
+
try {
|
|
92
|
+
const n = JSON.stringify(e);
|
|
93
|
+
return `${t} ${n.length > 80 ? `${n.slice(0, 80)}...` : n}`;
|
|
94
|
+
} catch {
|
|
95
|
+
return t;
|
|
96
|
+
}
|
|
97
|
+
return t;
|
|
98
|
+
}
|
|
99
|
+
function se(t, e, n, p) {
|
|
100
|
+
if (!t || t.length === 0) return null;
|
|
101
|
+
const u = t, a = u.filter((o) => o.type === "tool"), y = u.some((o) => te(o)), b = new Set(
|
|
102
|
+
a.map((o) => o.tool_call_id).filter((o) => typeof o == "string" && o.length > 0)
|
|
103
|
+
), f = new Set(
|
|
104
|
+
a.map((o) => o.name).filter((o) => typeof o == "string" && o.length > 0)
|
|
105
|
+
), d = [], h = [], g = [], x = /* @__PURE__ */ new Set();
|
|
106
|
+
let r = 0;
|
|
107
|
+
const I = (o) => {
|
|
108
|
+
if (e)
|
|
109
|
+
for (const i of ee(o)) {
|
|
110
|
+
if (!ne(i)) continue;
|
|
111
|
+
const c = z(i.label) || z(i.name) || "tool";
|
|
112
|
+
if (x.has(c)) continue;
|
|
113
|
+
x.add(c);
|
|
114
|
+
const w = i.label ?? i.name ?? "Running tool", k = (i.id ? b.has(i.id) : !1) || (i.name ? f.has(i.name) : !1) || !n;
|
|
115
|
+
d.push({ key: c, label: w, isCompleted: k });
|
|
116
|
+
}
|
|
77
117
|
};
|
|
78
|
-
for (
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
{
|
|
91
|
-
text: y,
|
|
92
|
-
isStreaming: N,
|
|
93
|
-
fontSize: a
|
|
94
|
-
},
|
|
95
|
-
`thinking-${c}`
|
|
96
|
-
)
|
|
97
|
-
), c++;
|
|
118
|
+
for (const o of u) {
|
|
119
|
+
if (o.type !== "ai") continue;
|
|
120
|
+
const i = o.content, c = Y(o);
|
|
121
|
+
if (I(o), typeof i == "string") {
|
|
122
|
+
c ? h.push(c) : i.length > 0 && (g.push(
|
|
123
|
+
/* @__PURE__ */ s("div", { className: "py-1", children: /* @__PURE__ */ s($, { fontSize: p, children: i }) }, `text-content-${o.id ?? r}`)
|
|
124
|
+
), r++);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (!Array.isArray(i)) {
|
|
128
|
+
c && h.push(c);
|
|
129
|
+
continue;
|
|
98
130
|
}
|
|
131
|
+
const w = i;
|
|
132
|
+
let k = "", K = !1;
|
|
133
|
+
const _ = () => {
|
|
134
|
+
k.length > 0 && (g.push(
|
|
135
|
+
/* @__PURE__ */ s("div", { className: "py-1", children: /* @__PURE__ */ s($, { fontSize: p, children: k }) }, `text-${o.id ?? r}-${r}`)
|
|
136
|
+
), k = "", r++);
|
|
137
|
+
};
|
|
138
|
+
for (let v = 0; v < w.length; v++) {
|
|
139
|
+
const l = w[v];
|
|
140
|
+
if (l.type === "text" && typeof l.text == "string") {
|
|
141
|
+
k += l.text;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (l.type === "reasoning" && typeof l.reasoning == "string" || l.type === "thinking" && typeof l.thinking == "string") {
|
|
145
|
+
_(), K = !0;
|
|
146
|
+
const T = l.reasoning ?? l.thinking;
|
|
147
|
+
h.push(T);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (e && !y && l.type === "tool_use") {
|
|
151
|
+
_();
|
|
152
|
+
const T = typeof l.id == "string" ? l.id : void 0, j = typeof l.name == "string" ? l.name : "tool", C = z(j) || `tool-${v}`;
|
|
153
|
+
if (!x.has(C)) {
|
|
154
|
+
x.add(C);
|
|
155
|
+
const L = oe(j, l.input), E = T ? b.has(T) : !n;
|
|
156
|
+
d.push({ key: C, label: L, isCompleted: E });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
!K && c ? (k = "", h.push(c)) : _();
|
|
99
161
|
}
|
|
100
|
-
|
|
162
|
+
if (e && !n && !y && d.length === 0 && g.length === 0 && a.length > 0)
|
|
163
|
+
for (const o of a)
|
|
164
|
+
d.push({
|
|
165
|
+
key: `tool-msg-${o.id ?? r}`,
|
|
166
|
+
label: "Tool call completed",
|
|
167
|
+
isCompleted: !0
|
|
168
|
+
}), r++;
|
|
169
|
+
const N = [], M = g.length > 0, R = h.join(`
|
|
170
|
+
|
|
171
|
+
`), B = e && d.length > 0 || R.length > 0, A = !!n && !M;
|
|
172
|
+
return (B || A) && N.push(
|
|
173
|
+
/* @__PURE__ */ s(
|
|
174
|
+
Z,
|
|
175
|
+
{
|
|
176
|
+
reasoningText: R || void 0,
|
|
177
|
+
toolStatuses: e ? d : void 0,
|
|
178
|
+
isStreaming: A,
|
|
179
|
+
fontSize: p
|
|
180
|
+
},
|
|
181
|
+
"agent-activity"
|
|
182
|
+
)
|
|
183
|
+
), N.push(...g), N.length > 0 ? /* @__PURE__ */ s(F, { children: N }) : null;
|
|
101
184
|
}
|
|
102
|
-
function
|
|
103
|
-
agentName:
|
|
185
|
+
function ie({
|
|
186
|
+
agentName: t,
|
|
104
187
|
fontSize: e,
|
|
105
|
-
message:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
188
|
+
message: n,
|
|
189
|
+
groupedMessages: p,
|
|
190
|
+
showToolActivity: u = !0,
|
|
191
|
+
isStreaming: a = !1,
|
|
192
|
+
onRegenerate: y,
|
|
193
|
+
feedback: b,
|
|
194
|
+
onFeedback: f,
|
|
195
|
+
branch: d,
|
|
196
|
+
branchOptions: h,
|
|
197
|
+
onBranchSelect: g
|
|
113
198
|
}) {
|
|
114
|
-
const
|
|
115
|
-
return /* @__PURE__ */
|
|
116
|
-
/* @__PURE__ */
|
|
117
|
-
/* @__PURE__ */
|
|
199
|
+
const x = q(n?.content), r = se(p ?? [n], u, a, e);
|
|
200
|
+
return /* @__PURE__ */ m("div", { className: "agent-message flex flex-col gap-1 w-full group", children: [
|
|
201
|
+
/* @__PURE__ */ m("div", { className: "flex items-center gap-3 w-full", children: [
|
|
202
|
+
/* @__PURE__ */ s(
|
|
118
203
|
"div",
|
|
119
204
|
{
|
|
120
205
|
className: "rounded-full size-8 shrink-0 bg-zinc-800 flex items-center justify-center p-2",
|
|
121
206
|
"data-alt": "AI Avatar",
|
|
122
|
-
children: /* @__PURE__ */
|
|
207
|
+
children: /* @__PURE__ */ s(J, { className: "text-xs", color: "white" })
|
|
123
208
|
}
|
|
124
209
|
),
|
|
125
|
-
/* @__PURE__ */
|
|
210
|
+
/* @__PURE__ */ s("span", { className: "text-zinc-500 text-sm", children: t || "Agent" })
|
|
126
211
|
] }),
|
|
127
|
-
/* @__PURE__ */
|
|
128
|
-
/* @__PURE__ */
|
|
129
|
-
/* @__PURE__ */
|
|
130
|
-
|
|
212
|
+
/* @__PURE__ */ m("div", { className: "flex flex-1 flex-col gap-1 items-start min-w-0", children: [
|
|
213
|
+
/* @__PURE__ */ s("div", { className: "text-content text-foreground", style: e ? { fontSize: e } : void 0, children: r || /* @__PURE__ */ m(F, { children: [
|
|
214
|
+
/* @__PURE__ */ s("div", { className: "flex items-center gap-2 text-zinc-500", children: /* @__PURE__ */ s("span", { children: "Thinking..." }) }),
|
|
215
|
+
a && x && /* @__PURE__ */ s("span", { className: "inline-block w-2 h-4 ml-1 bg-zinc-400 animate-pulse" })
|
|
131
216
|
] }) }),
|
|
132
|
-
!
|
|
133
|
-
|
|
217
|
+
!a && d && h && g && h.length > 1 && /* @__PURE__ */ s(
|
|
218
|
+
V,
|
|
134
219
|
{
|
|
135
|
-
branch:
|
|
136
|
-
branchOptions:
|
|
137
|
-
onSelect:
|
|
138
|
-
isLoading:
|
|
220
|
+
branch: d,
|
|
221
|
+
branchOptions: h,
|
|
222
|
+
onSelect: g,
|
|
223
|
+
isLoading: a
|
|
139
224
|
}
|
|
140
225
|
),
|
|
141
|
-
!
|
|
142
|
-
|
|
226
|
+
!a && x && /* @__PURE__ */ s(
|
|
227
|
+
X,
|
|
143
228
|
{
|
|
144
|
-
message:
|
|
145
|
-
onRegenerate:
|
|
146
|
-
feedback:
|
|
147
|
-
onFeedback:
|
|
229
|
+
message: n,
|
|
230
|
+
onRegenerate: y,
|
|
231
|
+
feedback: b,
|
|
232
|
+
onFeedback: f,
|
|
148
233
|
className: ""
|
|
149
234
|
}
|
|
150
235
|
)
|
|
151
236
|
] })
|
|
152
237
|
] });
|
|
153
238
|
}
|
|
154
|
-
const
|
|
239
|
+
const ge = H.memo(ie, (t, e) => e.isStreaming ? !1 : t.message.id === e.message.id && t.groupedMessages?.length === e.groupedMessages?.length && t.showToolActivity === e.showToolActivity && t.isStreaming === e.isStreaming && t.feedback === e.feedback && t.onRegenerate === e.onRegenerate && t.onFeedback === e.onFeedback && t.branch === e.branch && t.branchOptions?.length === e.branchOptions?.length && t.onBranchSelect === e.onBranchSelect);
|
|
155
240
|
export {
|
|
156
|
-
|
|
241
|
+
ge as default
|
|
157
242
|
};
|
|
158
243
|
//# sourceMappingURL=AgentMessage.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentMessage.es.js","sources":["../../../src/components/messages/AgentMessage.tsx"],"sourcesContent":["import { cn } from \"@/utils/tailwindUtil\";\nimport { getContentString } from \"@/utils/utils\";\nimport type { Message } from \"@langchain/langgraph-sdk\";\nimport { BotMessageSquare, ChevronRight, LoaderCircle, Sparkles } from \"lucide-react\";\nimport React, { useEffect, useState } from \"react\";\nimport { AgentMarkdown } from \"../ui/AgentMarkdown\";\nimport { BranchSwitcher } from \"./BranchSwitcher\";\nimport { MessageActions, type MessageFeedback } from \"./MessageActions\";\n\nfunction getReasoningFromKwargs(message: Message | undefined): string | null {\n if (!message) return null;\n const ak = (message as Record<string, unknown>).additional_kwargs as\n | Record<string, unknown>\n | undefined;\n if (\n ak &&\n typeof ak.reasoning_content === \"string\" &&\n ak.reasoning_content.length > 0\n ) {\n return ak.reasoning_content;\n }\n return null;\n}\n\nfunction InlineThinking({\n text,\n isStreaming,\n fontSize,\n}: {\n text: string;\n isStreaming?: boolean;\n fontSize?: string;\n}) {\n const [expanded, setExpanded] = useState(false);\n\n useEffect(() => {\n setExpanded(!!isStreaming);\n }, [isStreaming]);\n\n return (\n <div className=\"my-1\">\n <button\n type=\"button\"\n onClick={() => setExpanded((p) => !p)}\n className=\"inline-flex items-center gap-1.5 text-xs text-zinc-400/80 transition-colors hover:text-zinc-300\"\n >\n {isStreaming ? (\n <LoaderCircle className=\"size-3 animate-spin\" />\n ) : (\n <Sparkles className=\"size-3\" />\n )}\n <span>{isStreaming ? \"Thinking\" : \"Thought\"}</span>\n <ChevronRight\n className={cn(\n \"size-3 transition-transform duration-200\",\n expanded && \"rotate-90\",\n )}\n />\n </button>\n {expanded && (\n <div className=\"mt-1.5 border-l-2 border-white/10 pl-4 text-sm text-zinc-300\">\n <AgentMarkdown fontSize={fontSize}>{text}</AgentMarkdown>\n </div>\n )}\n </div>\n );\n}\n\nfunction renderContentInline(\n message: Message | undefined,\n isActivelyStreaming?: boolean,\n fontSize?: string,\n) {\n if (!message) return null;\n const content = message.content;\n const parts: React.ReactNode[] = [];\n\n const kwargsReasoning = getReasoningFromKwargs(message);\n if (kwargsReasoning) {\n const hasTextContent =\n typeof content === \"string\"\n ? content.length > 0\n : Array.isArray(content) &&\n (content as Record<string, unknown>[]).some(\n (block) =>\n block.type === \"text\" &&\n typeof block.text === \"string\" &&\n (block.text as string).length > 0,\n );\n\n parts.push(\n <InlineThinking\n key=\"kwargs-reasoning\"\n text={kwargsReasoning}\n isStreaming={isActivelyStreaming && !hasTextContent}\n fontSize={fontSize}\n />,\n );\n }\n\n if (typeof content === \"string\") {\n if (content.length > 0) {\n parts.push(\n <div key=\"text-content\" className=\"py-1\">\n <AgentMarkdown fontSize={fontSize}>{content}</AgentMarkdown>\n </div>,\n );\n }\n return parts.length > 0 ? <>{parts}</> : null;\n }\n\n if (!Array.isArray(content)) return null;\n\n const blocks = content as Record<string, unknown>[];\n let textAccum = \"\";\n let idx = 0;\n\n const flushText = () => {\n if (textAccum.length > 0) {\n parts.push(\n <div key={`text-${idx}`} className=\"py-1\">\n <AgentMarkdown fontSize={fontSize}>{textAccum}</AgentMarkdown>\n </div>,\n );\n textAccum = \"\";\n idx++;\n }\n };\n\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i];\n if (block.type === \"text\" && typeof block.text === \"string\") {\n textAccum += block.text;\n } else if (\n (block.type === \"reasoning\" && typeof block.reasoning === \"string\") ||\n (block.type === \"thinking\" && typeof block.thinking === \"string\")\n ) {\n flushText();\n const text = (block.reasoning ?? block.thinking) as string;\n const hasTextAfter = blocks.slice(i + 1).some(\n (b) =>\n b.type === \"text\" &&\n typeof b.text === \"string\" &&\n (b.text as string).length > 0,\n );\n const isThisBlockStreaming = isActivelyStreaming && !hasTextAfter;\n parts.push(\n <InlineThinking\n key={`thinking-${idx}`}\n text={text}\n isStreaming={isThisBlockStreaming}\n fontSize={fontSize}\n />,\n );\n idx++;\n }\n }\n\n flushText();\n return parts.length > 0 ? <>{parts}</> : null;\n}\n\nfunction AgentMessage({\n agentName,\n fontSize,\n message,\n isStreaming = false,\n onRegenerate,\n feedback,\n onFeedback,\n branch,\n branchOptions,\n onBranchSelect,\n}: {\n agentName?: string;\n fontSize?: string;\n message: Message;\n isStreaming?: boolean;\n onRegenerate?: (parentCheckpoint: any | null | undefined, messageId: string, currentMessage: any) => void;\n feedback?: MessageFeedback;\n onFeedback?: (messageId: string, feedback: MessageFeedback) => void;\n branch?: string;\n branchOptions?: string[];\n onBranchSelect?: (branch: string) => void;\n}) {\n const content = getContentString(message?.content);\n const inlineContent = renderContentInline(message, isStreaming, fontSize);\n\n return (\n <div className=\"agent-message flex flex-col gap-1 w-full group\">\n <div className=\"flex items-center gap-3 w-full\">\n <div\n className=\"rounded-full size-8 shrink-0 bg-zinc-800 flex items-center justify-center p-2\"\n data-alt=\"AI Avatar\"\n >\n <BotMessageSquare className=\"text-xs\" color=\"white\" />\n </div>\n <span className=\"text-zinc-500 text-sm\">{agentName || \"Agent\"}</span>\n </div>\n <div className=\"flex flex-1 flex-col gap-1 items-start min-w-0\">\n <div className=\"text-content text-foreground\" style={fontSize ? { fontSize } : undefined}>\n {inlineContent ? (\n inlineContent\n ) : (\n <>\n <div className=\"flex items-center gap-2 text-zinc-500\">\n {/* <Loader2 className=\"animate-spin\" size={16} /> */}\n <span>Thinking...</span>\n </div>\n {isStreaming && content && (\n <span className=\"inline-block w-2 h-4 ml-1 bg-zinc-400 animate-pulse\" />\n )}\n </>\n )}\n </div>\n\n {/* Branch switcher - show when multiple branches exist */}\n {!isStreaming && branch && branchOptions && onBranchSelect && branchOptions.length > 1 && (\n <BranchSwitcher\n branch={branch}\n branchOptions={branchOptions}\n onSelect={onBranchSelect}\n isLoading={isStreaming}\n />\n )}\n\n {/* Show actions only when not streaming and content exists */}\n {!isStreaming && content && (\n <MessageActions\n message={message}\n onRegenerate={onRegenerate}\n feedback={feedback}\n onFeedback={onFeedback}\n className=\"\"\n />\n )}\n </div>\n </div>\n );\n}\n\n// Memoize - only re-render if message ID changes or streaming state changes\nexport default React.memo(AgentMessage, (prevProps, nextProps) => {\n // If it's streaming, we need to re-render to show updates\n if (nextProps.isStreaming) {\n return false; // Always re-render when streaming\n }\n\n // Otherwise, only re-render if the message ID, feedback, branch, or callbacks changed\n return (\n prevProps.message.id === nextProps.message.id &&\n prevProps.isStreaming === nextProps.isStreaming &&\n prevProps.feedback === nextProps.feedback &&\n prevProps.onRegenerate === nextProps.onRegenerate &&\n prevProps.onFeedback === nextProps.onFeedback &&\n prevProps.branch === nextProps.branch &&\n prevProps.branchOptions?.length === nextProps.branchOptions?.length &&\n prevProps.onBranchSelect === nextProps.onBranchSelect\n );\n});\n"],"names":["getReasoningFromKwargs","message","ak","InlineThinking","text","isStreaming","fontSize","expanded","setExpanded","useState","useEffect","jsxs","p","jsx","LoaderCircle","Sparkles","ChevronRight","cn","AgentMarkdown","renderContentInline","isActivelyStreaming","content","parts","kwargsReasoning","hasTextContent","block","Fragment","blocks","textAccum","idx","flushText","i","hasTextAfter","b","isThisBlockStreaming","AgentMessage","agentName","onRegenerate","feedback","onFeedback","branch","branchOptions","onBranchSelect","getContentString","inlineContent","BotMessageSquare","BranchSwitcher","MessageActions","AgentMessage$1","React","prevProps","nextProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AgentMessage.es.js","sources":["../../../src/components/messages/AgentMessage.tsx"],"sourcesContent":["import { cn } from \"@/utils/tailwindUtil\";\nimport { getContentString } from \"@/utils/utils\";\nimport type { Message } from \"@langchain/langgraph-sdk\";\nimport { BotMessageSquare, ChevronRight, LoaderCircle, Sparkles, Wrench } from \"lucide-react\";\nimport React, { useEffect, useState } from \"react\";\nimport { AgentMarkdown } from \"../ui/AgentMarkdown\";\nimport { BranchSwitcher } from \"./BranchSwitcher\";\nimport { MessageActions, type MessageFeedback } from \"./MessageActions\";\n\ntype ToolStatusEntry = {\n id?: string;\n name?: string;\n label?: string;\n event?: string;\n visible?: boolean;\n};\n\nfunction getReasoningFromKwargs(message: Message | undefined): string | null {\n if (!message) return null;\n const ak = (message as Record<string, unknown>).additional_kwargs as\n | Record<string, unknown>\n | undefined;\n if (\n ak &&\n typeof ak.reasoning_content === \"string\" &&\n ak.reasoning_content.length > 0\n ) {\n return ak.reasoning_content;\n }\n return null;\n}\n\nfunction AgentActivity({\n reasoningText,\n toolStatuses,\n isStreaming,\n fontSize,\n}: {\n reasoningText?: string;\n toolStatuses?: Array<{ key: string; label: string; isCompleted: boolean }>;\n isStreaming?: boolean;\n fontSize?: string;\n}) {\n const [expanded, setExpanded] = useState(false);\n\n useEffect(() => {\n setExpanded(!!isStreaming);\n }, [isStreaming]);\n\n const hasTools = toolStatuses && toolStatuses.length > 0;\n const hasReasoning = !!reasoningText && reasoningText.length > 0;\n\n if (!hasTools && !hasReasoning && !isStreaming) return null;\n\n return (\n <div className=\"my-1\">\n <button\n type=\"button\"\n onClick={() => setExpanded((p) => !p)}\n className=\"inline-flex items-center gap-1.5 text-xs text-zinc-400/80 transition-colors hover:text-zinc-300\"\n >\n {isStreaming ? (\n <LoaderCircle className=\"size-3 animate-spin\" />\n ) : (\n <Sparkles className=\"size-3\" />\n )}\n <span>{isStreaming ? \"Thinking\" : \"Thought\"}</span>\n <ChevronRight\n className={cn(\n \"size-3 transition-transform duration-200\",\n expanded && \"rotate-90\",\n )}\n />\n </button>\n {expanded && (\n <div className=\"mt-1.5 border-l-2 border-white/10 pl-4 space-y-1\">\n {hasTools && toolStatuses!.map((ts) => (\n <div key={ts.key} className=\"flex items-center gap-2 text-sm text-zinc-300 py-0.5\">\n {!ts.isCompleted && (\n <LoaderCircle className=\"size-3.5 animate-spin text-zinc-400\" />\n )}\n <Wrench className=\"size-3.5 text-zinc-500\" />\n <span>{ts.label}</span>\n </div>\n ))}\n {hasReasoning && (\n <div className=\"text-sm text-zinc-300\">\n <AgentMarkdown fontSize={fontSize}>{reasoningText!}</AgentMarkdown>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction toToolStatusEntry(value: unknown): ToolStatusEntry | null {\n if (!value || typeof value !== \"object\") return null;\n const v = value as Record<string, unknown>;\n\n const visible =\n typeof v.visible === \"boolean\"\n ? v.visible\n : typeof v.show === \"boolean\"\n ? v.show\n : typeof v.display === \"boolean\"\n ? v.display\n : typeof v.hidden === \"boolean\"\n ? !v.hidden\n : true;\n\n return {\n id: typeof v.id === \"string\" ? v.id : undefined,\n name: typeof v.name === \"string\" ? v.name : undefined,\n label: typeof v.label === \"string\" ? v.label : undefined,\n event: typeof v.event === \"string\" ? v.event : undefined,\n visible,\n };\n}\n\nfunction getToolStatusFromKwargs(message: Message | undefined): ToolStatusEntry[] {\n if (!message) return [];\n const ak = (message as Record<string, unknown>).additional_kwargs as\n | Record<string, unknown>\n | undefined;\n\n if (!ak || !Array.isArray(ak.tool_status)) return [];\n\n return (ak.tool_status as unknown[])\n .map(toToolStatusEntry)\n .filter((s): s is ToolStatusEntry => s !== null);\n}\n\nfunction hasToolStatusFieldInKwargs(message: Message | undefined): boolean {\n if (!message) return false;\n const ak = (message as Record<string, unknown>).additional_kwargs as\n | Record<string, unknown>\n | undefined;\n if (!ak) return false;\n return Object.prototype.hasOwnProperty.call(ak, \"tool_status\");\n}\n\nfunction normalizeSemanticKey(value: string | undefined): string {\n if (!value) return \"\";\n return value\n .toLowerCase()\n .replace(/\\s+/g, \" \")\n .replace(/\\s*event:\\s*metadata\\s*$/i, \"\")\n .trim();\n}\n\nfunction shouldRenderToolStatus(status: ToolStatusEntry): boolean {\n if (status.visible === false) return false;\n\n const labelKey = normalizeSemanticKey(status.label);\n if (labelKey.length === 0) return false;\n\n // Filter transport/debug noise like \"event: metadata\".\n if (status.event?.toLowerCase() === \"metadata\") return false;\n if (/\\bevent:\\s*metadata\\b/i.test(status.label ?? \"\")) return false;\n\n return true;\n}\n\nfunction normalizeToolLabel(name: string, input: unknown): string {\n if (!input) return name;\n if (typeof input === \"string\") {\n const trimmed = input.trim();\n if (trimmed.length === 0) return name;\n return `${name} ${trimmed.slice(0, 80)}${trimmed.length > 80 ? \"...\" : \"\"}`;\n }\n if (typeof input === \"object\") {\n try {\n const json = JSON.stringify(input);\n return `${name} ${json.length > 80 ? `${json.slice(0, 80)}...` : json}`;\n } catch {\n return name;\n }\n }\n return name;\n}\n\nfunction renderContentInline(\n groupedMessages: Message[] | undefined,\n showToolActivity: boolean,\n isActivelyStreaming?: boolean,\n fontSize?: string,\n) {\n if (!groupedMessages || groupedMessages.length === 0) return null;\n\n const timeline = groupedMessages;\n const toolMessages = timeline.filter((m) => m.type === \"tool\");\n const hasBackendToolStatus = timeline.some((m) => hasToolStatusFieldInKwargs(m));\n\n const completedToolIds = new Set(\n toolMessages\n .map((m) => (m as Record<string, unknown>).tool_call_id)\n .filter((id): id is string => typeof id === \"string\" && id.length > 0),\n );\n const completedToolNames = new Set(\n toolMessages\n .map((m) => (m as Record<string, unknown>).name)\n .filter((name): name is string => typeof name === \"string\" && name.length > 0),\n );\n\n // ── Collect activity (reasoning + tool statuses) and text content separately ──\n const collectedToolStatuses: Array<{ key: string; label: string; isCompleted: boolean }> = [];\n const reasoningTexts: string[] = [];\n const textParts: React.ReactNode[] = [];\n const renderedToolKeys = new Set<string>();\n let textIdx = 0;\n\n const collectToolStatusFromKwargs = (message: Message) => {\n if (!showToolActivity) return;\n for (const status of getToolStatusFromKwargs(message)) {\n if (!shouldRenderToolStatus(status)) continue;\n const semanticKey =\n normalizeSemanticKey(status.label) || normalizeSemanticKey(status.name) || \"tool\";\n if (renderedToolKeys.has(semanticKey)) continue;\n renderedToolKeys.add(semanticKey);\n const label = status.label ?? status.name ?? \"Running tool\";\n const isCompleted =\n (status.id ? completedToolIds.has(status.id) : false) ||\n (status.name ? completedToolNames.has(status.name) : false) ||\n !isActivelyStreaming;\n collectedToolStatuses.push({ key: semanticKey, label, isCompleted });\n }\n };\n\n for (const message of timeline) {\n if (message.type !== \"ai\") continue;\n\n const content = message.content;\n const kwargsReasoning = getReasoningFromKwargs(message);\n\n // Collect tool statuses from kwargs\n collectToolStatusFromKwargs(message);\n\n if (typeof content === \"string\") {\n if (kwargsReasoning) {\n // When reasoning_content exists in kwargs, the string content is the\n // same thinking text (set by messages-tuple before wrapModelCall clears\n // it). Capture it only as reasoning to avoid duplication.\n reasoningTexts.push(kwargsReasoning);\n } else if (content.length > 0) {\n textParts.push(\n <div key={`text-content-${message.id ?? textIdx}`} className=\"py-1\">\n <AgentMarkdown fontSize={fontSize}>{content}</AgentMarkdown>\n </div>,\n );\n textIdx++;\n }\n continue;\n }\n\n if (!Array.isArray(content)) {\n if (kwargsReasoning) reasoningTexts.push(kwargsReasoning);\n continue;\n }\n\n const blocks = content as Record<string, unknown>[];\n let textAccum = \"\";\n let hasReasoningBlock = false;\n\n const flushText = () => {\n if (textAccum.length > 0) {\n textParts.push(\n <div key={`text-${message.id ?? textIdx}-${textIdx}`} className=\"py-1\">\n <AgentMarkdown fontSize={fontSize}>{textAccum}</AgentMarkdown>\n </div>,\n );\n textAccum = \"\";\n textIdx++;\n }\n };\n\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i];\n if (block.type === \"text\" && typeof block.text === \"string\") {\n textAccum += block.text;\n continue;\n }\n\n if (\n (block.type === \"reasoning\" && typeof block.reasoning === \"string\") ||\n (block.type === \"thinking\" && typeof block.thinking === \"string\")\n ) {\n flushText();\n hasReasoningBlock = true;\n const text = (block.reasoning ?? block.thinking) as string;\n reasoningTexts.push(text);\n continue;\n }\n\n if (showToolActivity && !hasBackendToolStatus && block.type === \"tool_use\") {\n flushText();\n const toolId = typeof block.id === \"string\" ? block.id : undefined;\n const toolName = typeof block.name === \"string\" ? block.name : \"tool\";\n const semanticKey = normalizeSemanticKey(toolName) || `tool-${i}`;\n if (!renderedToolKeys.has(semanticKey)) {\n renderedToolKeys.add(semanticKey);\n const label = normalizeToolLabel(toolName, (block as Record<string, unknown>).input);\n const isCompleted = toolId ? completedToolIds.has(toolId) : !isActivelyStreaming;\n collectedToolStatuses.push({ key: semanticKey, label, isCompleted });\n }\n }\n }\n\n if (!hasReasoningBlock && kwargsReasoning) {\n // Same as the string-content case: kwargs reasoning duplicates the\n // text blocks, so discard accumulated text and capture as reasoning only.\n textAccum = \"\";\n reasoningTexts.push(kwargsReasoning);\n } else {\n flushText();\n }\n }\n\n // Fallback for legacy payloads without backend tool_status (only after streaming completes)\n if (showToolActivity && !isActivelyStreaming && !hasBackendToolStatus && collectedToolStatuses.length === 0 && textParts.length === 0 && toolMessages.length > 0) {\n for (const toolMessage of toolMessages) {\n collectedToolStatuses.push({\n key: `tool-msg-${toolMessage.id ?? textIdx}`,\n label: \"Tool call completed\",\n isCompleted: true,\n });\n textIdx++;\n }\n }\n\n // ── Assemble output: AgentActivity block first, then text content ──\n const parts: React.ReactNode[] = [];\n const hasTextContent = textParts.length > 0;\n const combinedReasoning = reasoningTexts.join(\"\\n\\n\");\n const hasActivity =\n (showToolActivity && collectedToolStatuses.length > 0) ||\n combinedReasoning.length > 0;\n const activityIsStreaming = !!isActivelyStreaming && !hasTextContent;\n\n if (hasActivity || activityIsStreaming) {\n parts.push(\n <AgentActivity\n key=\"agent-activity\"\n reasoningText={combinedReasoning || undefined}\n toolStatuses={showToolActivity ? collectedToolStatuses : undefined}\n isStreaming={activityIsStreaming}\n fontSize={fontSize}\n />,\n );\n }\n\n parts.push(...textParts);\n\n return parts.length > 0 ? <>{parts}</> : null;\n}\n\nfunction AgentMessage({\n agentName,\n fontSize,\n message,\n groupedMessages,\n showToolActivity = true,\n isStreaming = false,\n onRegenerate,\n feedback,\n onFeedback,\n branch,\n branchOptions,\n onBranchSelect,\n}: {\n agentName?: string;\n fontSize?: string;\n message: Message;\n groupedMessages?: Message[];\n showToolActivity?: boolean;\n isStreaming?: boolean;\n onRegenerate?: (parentCheckpoint: any | null | undefined, messageId: string, currentMessage: any) => void;\n feedback?: MessageFeedback;\n onFeedback?: (messageId: string, feedback: MessageFeedback) => void;\n branch?: string;\n branchOptions?: string[];\n onBranchSelect?: (branch: string) => void;\n}) {\n const content = getContentString(message?.content);\n const inlineContent = renderContentInline(groupedMessages ?? [message], showToolActivity, isStreaming, fontSize);\n\n return (\n <div className=\"agent-message flex flex-col gap-1 w-full group\">\n <div className=\"flex items-center gap-3 w-full\">\n <div\n className=\"rounded-full size-8 shrink-0 bg-zinc-800 flex items-center justify-center p-2\"\n data-alt=\"AI Avatar\"\n >\n <BotMessageSquare className=\"text-xs\" color=\"white\" />\n </div>\n <span className=\"text-zinc-500 text-sm\">{agentName || \"Agent\"}</span>\n </div>\n <div className=\"flex flex-1 flex-col gap-1 items-start min-w-0\">\n <div className=\"text-content text-foreground\" style={fontSize ? { fontSize } : undefined}>\n {inlineContent ? (\n inlineContent\n ) : (\n <>\n <div className=\"flex items-center gap-2 text-zinc-500\">\n {/* <Loader2 className=\"animate-spin\" size={16} /> */}\n <span>Thinking...</span>\n </div>\n {isStreaming && content && (\n <span className=\"inline-block w-2 h-4 ml-1 bg-zinc-400 animate-pulse\" />\n )}\n </>\n )}\n </div>\n\n {/* Branch switcher - show when multiple branches exist */}\n {!isStreaming && branch && branchOptions && onBranchSelect && branchOptions.length > 1 && (\n <BranchSwitcher\n branch={branch}\n branchOptions={branchOptions}\n onSelect={onBranchSelect}\n isLoading={isStreaming}\n />\n )}\n\n {/* Show actions only when not streaming and content exists */}\n {!isStreaming && content && (\n <MessageActions\n message={message}\n onRegenerate={onRegenerate}\n feedback={feedback}\n onFeedback={onFeedback}\n className=\"\"\n />\n )}\n </div>\n </div>\n );\n}\n\n// Memoize - only re-render if message ID changes or streaming state changes\nexport default React.memo(AgentMessage, (prevProps, nextProps) => {\n // If it's streaming, we need to re-render to show updates\n if (nextProps.isStreaming) {\n return false; // Always re-render when streaming\n }\n\n // Otherwise, only re-render if the message ID, feedback, branch, or callbacks changed\n return (\n prevProps.message.id === nextProps.message.id &&\n prevProps.groupedMessages?.length === nextProps.groupedMessages?.length &&\n prevProps.showToolActivity === nextProps.showToolActivity &&\n prevProps.isStreaming === nextProps.isStreaming &&\n prevProps.feedback === nextProps.feedback &&\n prevProps.onRegenerate === nextProps.onRegenerate &&\n prevProps.onFeedback === nextProps.onFeedback &&\n prevProps.branch === nextProps.branch &&\n prevProps.branchOptions?.length === nextProps.branchOptions?.length &&\n prevProps.onBranchSelect === nextProps.onBranchSelect\n );\n});\n"],"names":["getReasoningFromKwargs","message","ak","AgentActivity","reasoningText","toolStatuses","isStreaming","fontSize","expanded","setExpanded","useState","useEffect","hasTools","hasReasoning","jsxs","p","jsx","LoaderCircle","Sparkles","ChevronRight","cn","ts","Wrench","AgentMarkdown","toToolStatusEntry","value","v","visible","getToolStatusFromKwargs","s","hasToolStatusFieldInKwargs","normalizeSemanticKey","shouldRenderToolStatus","status","normalizeToolLabel","name","input","trimmed","json","renderContentInline","groupedMessages","showToolActivity","isActivelyStreaming","timeline","toolMessages","m","hasBackendToolStatus","completedToolIds","id","completedToolNames","collectedToolStatuses","reasoningTexts","textParts","renderedToolKeys","textIdx","collectToolStatusFromKwargs","semanticKey","label","isCompleted","content","kwargsReasoning","blocks","textAccum","hasReasoningBlock","flushText","i","block","text","toolId","toolName","toolMessage","parts","hasTextContent","combinedReasoning","hasActivity","activityIsStreaming","Fragment","AgentMessage","agentName","onRegenerate","feedback","onFeedback","branch","branchOptions","onBranchSelect","getContentString","inlineContent","BotMessageSquare","BranchSwitcher","MessageActions","AgentMessage$1","React","prevProps","nextProps"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"})
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../pages/Sidebar/sidebar.cjs.js"),t=require("../pages/Chat/Chat.cjs.js");exports.Sidebar=e;exports.Chat=t.Chat;
|
|
2
2
|
//# sourceMappingURL=components.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/entries/components.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/entries/components.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAG1C,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,wBAAwB,EACxB,aAAa,EACb,WAAW,EACX,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { Chat as f } from "../pages/Chat/Chat.es.js";
|
|
1
|
+
import { default as e } from "../pages/Sidebar/sidebar.es.js";
|
|
2
|
+
import { Chat as t } from "../pages/Chat/Chat.es.js";
|
|
4
3
|
export {
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
t as Chat,
|
|
5
|
+
e as Sidebar
|
|
7
6
|
};
|
|
8
7
|
//# sourceMappingURL=components.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"})
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../hooks/useTools.cjs.js"),s=require("../hooks/use-models.cjs.js");exports.useTools=e.useTools;exports.useToolsDefault=e.useTools;exports.useModels=s.useModels;
|
|
2
2
|
//# sourceMappingURL=hooks.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/entries/hooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/entries/hooks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/entries/hooks.es.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { useModels as t } from "../hooks/use-models.es.js";
|
|
1
|
+
import { useTools as e, useTools as l } from "../hooks/useTools.es.js";
|
|
2
|
+
import { useModels as r } from "../hooks/use-models.es.js";
|
|
4
3
|
export {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
r as useModels,
|
|
5
|
+
e as useTools,
|
|
6
|
+
l as useToolsDefault
|
|
8
7
|
};
|
|
9
8
|
//# sourceMappingURL=hooks.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hooks.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"})
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../providers/ChatProvider.cjs.js"),e=require("../providers/ChatRuntime.cjs.js"),r=require("../providers/Thread.cjs.js"),t=require("../providers/Stream.cjs.js"),o=require("../providers/FileProvider.cjs.js"),i=require("../providers/CustomComponentProvider.cjs.js"),s=require("../providers/useChatSuggestions.cjs.js");exports.ChatProvider=u.ChatProvider;exports.ChatRuntimeProvider=e.ChatRuntimeProvider;exports.useChatRuntime=e.useChatRuntime;exports.ThreadProvider=r.ThreadProvider;exports.useThread=r.useThread;exports.StreamProvider=t.StreamProvider;exports.useStreamContext=t.useStreamContext;exports.FileProvider=o.FileProvider;exports.useFileProvider=o.useFileProvider;exports.CustomComponentProvider=i.CustomComponentProvider;exports.useCustomComponents=i.useCustomComponents;exports.useChatSuggestions=s.useChatSuggestions;
|
|
2
2
|
//# sourceMappingURL=providers.cjs.js.map
|
|
@@ -4,7 +4,7 @@ export { ThreadProvider } from '../providers/Thread';
|
|
|
4
4
|
export { StreamProvider } from '../providers/Stream';
|
|
5
5
|
export { FileProvider } from '../providers/FileProvider';
|
|
6
6
|
export { CustomComponentProvider } from '../providers/CustomComponentProvider';
|
|
7
|
-
export type { CustomComponentContextValue } from '../providers/CustomComponentProvider';
|
|
7
|
+
export type { CustomComponentContextValue, InterruptComponentProps } from '../providers/CustomComponentProvider';
|
|
8
8
|
export { useThread } from '../providers/Thread';
|
|
9
9
|
export { useStreamContext } from '../providers/Stream';
|
|
10
10
|
export { useChatRuntime } from '../providers/ChatRuntime';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/entries/providers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/entries/providers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,YAAY,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAGjH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGrE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { useChatSuggestions as l } from "../providers/useChatSuggestions.es.js";
|
|
1
|
+
import { ChatProvider as o } from "../providers/ChatProvider.es.js";
|
|
2
|
+
import { ChatRuntimeProvider as m, useChatRuntime as i } from "../providers/ChatRuntime.es.js";
|
|
3
|
+
import { ThreadProvider as u, useThread as d } from "../providers/Thread.es.js";
|
|
4
|
+
import { StreamProvider as C, useStreamContext as a } from "../providers/Stream.es.js";
|
|
5
|
+
import { FileProvider as x, useFileProvider as f } from "../providers/FileProvider.es.js";
|
|
6
|
+
import { CustomComponentProvider as P, useCustomComponents as h } from "../providers/CustomComponentProvider.es.js";
|
|
7
|
+
import { useChatSuggestions as g } from "../providers/useChatSuggestions.es.js";
|
|
9
8
|
export {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
9
|
+
o as ChatProvider,
|
|
10
|
+
m as ChatRuntimeProvider,
|
|
11
|
+
P as CustomComponentProvider,
|
|
12
|
+
x as FileProvider,
|
|
13
|
+
C as StreamProvider,
|
|
14
|
+
u as ThreadProvider,
|
|
15
|
+
i as useChatRuntime,
|
|
16
|
+
g as useChatSuggestions,
|
|
17
|
+
h as useCustomComponents,
|
|
18
|
+
f as useFileProvider,
|
|
19
|
+
a as useStreamContext,
|
|
21
20
|
d as useThread
|
|
22
21
|
};
|
|
23
22
|
//# sourceMappingURL=providers.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"providers.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"})
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./pages/Sidebar/sidebar.cjs.js"),n=require("./pages/Chat/Chat.cjs.js"),a=require("./providers/ChatProvider.cjs.js"),e=require("./providers/ChatRuntime.cjs.js"),r=require("./providers/Thread.cjs.js"),o=require("./providers/Stream.cjs.js"),t=require("./providers/FileProvider.cjs.js"),s=require("./providers/CustomComponentProvider.cjs.js"),u=require("./hooks/useTools.cjs.js"),d=require("./providers/useChatSuggestions.cjs.js"),C=require("./hooks/use-models.cjs.js");exports.Sidebar=i;exports.Chat=n.Chat;exports.ChatProvider=a.ChatProvider;exports.ChatRuntimeProvider=e.ChatRuntimeProvider;exports.useChatRuntime=e.useChatRuntime;exports.ThreadProvider=r.ThreadProvider;exports.useThread=r.useThread;exports.StreamProvider=o.StreamProvider;exports.useStreamContext=o.useStreamContext;exports.FileProvider=t.FileProvider;exports.useFileProvider=t.useFileProvider;exports.CustomComponentProvider=s.CustomComponentProvider;exports.useCustomComponents=s.useCustomComponents;exports.useTools=u.useTools;exports.useToolsDefault=u.useTools;exports.useChatSuggestions=d.useChatSuggestions;exports.useModels=C.useModels;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|