@assistant-ui/react-devtools 1.2.16 → 1.2.18
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/dist/shell/DevToolsPanel.js +128 -143
- package/dist/shell/DevToolsPanel.js.map +1 -1
- package/dist/shell/tabs/ThreadTab.js +214 -235
- package/dist/shell/tabs/ThreadTab.js.map +1 -1
- package/dist/utils/serialization.d.ts.map +1 -1
- package/dist/utils/serialization.js +59 -33
- package/dist/utils/serialization.js.map +1 -1
- package/dist/utils/toolNormalization.d.ts.map +1 -1
- package/dist/utils/toolNormalization.js +49 -17
- package/dist/utils/toolNormalization.js.map +1 -1
- package/dist/utils/unserializable.d.ts +6 -0
- package/dist/utils/unserializable.d.ts.map +1 -0
- package/dist/utils/unserializable.js +13 -0
- package/dist/utils/unserializable.js.map +1 -0
- package/dist/views/context/contextNodes.d.ts.map +1 -1
- package/dist/views/context/contextNodes.js +18 -5
- package/dist/views/context/contextNodes.js.map +1 -1
- package/package.json +8 -8
- package/src/data/projectApi.test.ts +39 -0
- package/src/shell/DevToolsPanel.tsx +7 -5
- package/src/shell/tabs/ThreadTab.tsx +10 -6
- package/src/utils/serialization.test.ts +106 -0
- package/src/utils/serialization.ts +79 -45
- package/src/utils/toolNormalization.test.ts +66 -0
- package/src/utils/toolNormalization.ts +64 -30
- package/src/utils/unserializable.ts +9 -0
- package/src/views/context/contextNodes.test.ts +21 -0
- package/src/views/context/contextNodes.ts +13 -1
|
@@ -4,12 +4,12 @@ import { useDevToolsClient } from "../data/useDevToolsClient.js";
|
|
|
4
4
|
import { CenteredMessage } from "../views/ui/CenteredMessage.js";
|
|
5
5
|
import { builtinPlugins } from "./registry.js";
|
|
6
6
|
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
|
|
7
|
-
import {
|
|
7
|
+
import { useState } from "@assistant-ui/tap/react-shim";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
import clsx from "clsx";
|
|
10
10
|
//#region src/shell/DevToolsPanel.tsx
|
|
11
11
|
const DevToolsPanel = (t0) => {
|
|
12
|
-
const $ = c(
|
|
12
|
+
const $ = c(50);
|
|
13
13
|
const { plugins, theme: t1, onClose, client } = t0;
|
|
14
14
|
const theme = t1 === void 0 ? "light" : t1;
|
|
15
15
|
const resolvedClient = client ?? inProcessClient;
|
|
@@ -22,33 +22,18 @@ const DevToolsPanel = (t0) => {
|
|
|
22
22
|
} else t2 = $[0];
|
|
23
23
|
const [selectionByApi, setSelectionByApi] = useState(t2);
|
|
24
24
|
const { apiIds, selected, clearEvents, switchToThread } = useDevToolsClient(selectedApiId, resolvedClient);
|
|
25
|
+
const resolvedApiId = selectedApiId !== null && apiIds.includes(selectedApiId) ? selectedApiId : apiIds[0] ?? null;
|
|
26
|
+
if (resolvedApiId !== selectedApiId) setSelectedApiId(resolvedApiId);
|
|
25
27
|
let t3;
|
|
28
|
+
if ($[1] !== plugins) {
|
|
29
|
+
t3 = [...builtinPlugins, ...plugins ?? []].sort(_temp);
|
|
30
|
+
$[1] = plugins;
|
|
31
|
+
$[2] = t3;
|
|
32
|
+
} else t3 = $[2];
|
|
33
|
+
const allPlugins = t3;
|
|
26
34
|
let t4;
|
|
27
|
-
if ($[
|
|
28
|
-
|
|
29
|
-
if (selectedApiId !== null && apiIds.includes(selectedApiId)) return;
|
|
30
|
-
setSelectedApiId(apiIds[0] ?? null);
|
|
31
|
-
};
|
|
32
|
-
t4 = [apiIds, selectedApiId];
|
|
33
|
-
$[1] = apiIds;
|
|
34
|
-
$[2] = selectedApiId;
|
|
35
|
-
$[3] = t3;
|
|
36
|
-
$[4] = t4;
|
|
37
|
-
} else {
|
|
38
|
-
t3 = $[3];
|
|
39
|
-
t4 = $[4];
|
|
40
|
-
}
|
|
41
|
-
useEffect(t3, t4);
|
|
42
|
-
let t5;
|
|
43
|
-
if ($[5] !== plugins) {
|
|
44
|
-
t5 = [...builtinPlugins, ...plugins ?? []].sort(_temp);
|
|
45
|
-
$[5] = plugins;
|
|
46
|
-
$[6] = t5;
|
|
47
|
-
} else t5 = $[6];
|
|
48
|
-
const allPlugins = t5;
|
|
49
|
-
let t6;
|
|
50
|
-
if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
|
|
51
|
-
t6 = (apiId, tabId, nodeId) => {
|
|
35
|
+
if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
|
|
36
|
+
t4 = (apiId, tabId, nodeId) => {
|
|
52
37
|
setSelectionByApi((prev) => ({
|
|
53
38
|
...prev,
|
|
54
39
|
[apiId]: {
|
|
@@ -57,12 +42,12 @@ const DevToolsPanel = (t0) => {
|
|
|
57
42
|
}
|
|
58
43
|
}));
|
|
59
44
|
};
|
|
60
|
-
$[
|
|
61
|
-
} else
|
|
62
|
-
const setSelectionFor =
|
|
63
|
-
let
|
|
64
|
-
if ($[
|
|
65
|
-
|
|
45
|
+
$[3] = t4;
|
|
46
|
+
} else t4 = $[3];
|
|
47
|
+
const setSelectionFor = t4;
|
|
48
|
+
let t5;
|
|
49
|
+
if ($[4] !== allPlugins || $[5] !== clearEvents || $[6] !== selected || $[7] !== selectedApiId || $[8] !== theme) {
|
|
50
|
+
t5 = selected && selectedApiId !== null ? allPlugins.filter((plugin) => plugin.isAvailable ? plugin.isAvailable({
|
|
66
51
|
apiId: selectedApiId,
|
|
67
52
|
data: selected,
|
|
68
53
|
clearEvents,
|
|
@@ -70,25 +55,25 @@ const DevToolsPanel = (t0) => {
|
|
|
70
55
|
selection: null,
|
|
71
56
|
setSelection: _temp2
|
|
72
57
|
}) : true) : allPlugins;
|
|
73
|
-
$[
|
|
74
|
-
$[
|
|
75
|
-
$[
|
|
76
|
-
$[
|
|
77
|
-
$[
|
|
78
|
-
$[
|
|
79
|
-
} else
|
|
80
|
-
const visiblePlugins =
|
|
81
|
-
let
|
|
82
|
-
if ($[
|
|
83
|
-
|
|
84
|
-
$[
|
|
85
|
-
$[
|
|
86
|
-
$[
|
|
87
|
-
} else
|
|
88
|
-
const activePlugin =
|
|
89
|
-
let
|
|
90
|
-
if ($[
|
|
91
|
-
|
|
58
|
+
$[4] = allPlugins;
|
|
59
|
+
$[5] = clearEvents;
|
|
60
|
+
$[6] = selected;
|
|
61
|
+
$[7] = selectedApiId;
|
|
62
|
+
$[8] = theme;
|
|
63
|
+
$[9] = t5;
|
|
64
|
+
} else t5 = $[9];
|
|
65
|
+
const visiblePlugins = t5;
|
|
66
|
+
let t6;
|
|
67
|
+
if ($[10] !== activeTabId || $[11] !== visiblePlugins) {
|
|
68
|
+
t6 = visiblePlugins.find((plugin_0) => plugin_0.id === activeTabId) ?? visiblePlugins[0];
|
|
69
|
+
$[10] = activeTabId;
|
|
70
|
+
$[11] = visiblePlugins;
|
|
71
|
+
$[12] = t6;
|
|
72
|
+
} else t6 = $[12];
|
|
73
|
+
const activePlugin = t6;
|
|
74
|
+
let t7;
|
|
75
|
+
if ($[13] !== activePlugin || $[14] !== clearEvents || $[15] !== resolvedClient || $[16] !== selected || $[17] !== selectedApiId || $[18] !== selectionByApi || $[19] !== switchToThread || $[20] !== theme) {
|
|
76
|
+
t7 = selected && selectedApiId !== null && activePlugin ? {
|
|
92
77
|
apiId: selectedApiId,
|
|
93
78
|
data: selected,
|
|
94
79
|
clearEvents,
|
|
@@ -97,22 +82,22 @@ const DevToolsPanel = (t0) => {
|
|
|
97
82
|
setSelection: (nodeId_0) => setSelectionFor(selectedApiId, activePlugin.id, nodeId_0),
|
|
98
83
|
switchToThread: resolvedClient.switchToThread ? (threadId) => switchToThread(selectedApiId, threadId) : void 0
|
|
99
84
|
} : null;
|
|
100
|
-
$[
|
|
101
|
-
$[
|
|
102
|
-
$[
|
|
103
|
-
$[
|
|
104
|
-
$[
|
|
105
|
-
$[
|
|
106
|
-
$[
|
|
107
|
-
$[
|
|
108
|
-
$[
|
|
109
|
-
} else
|
|
110
|
-
const ctx =
|
|
111
|
-
let
|
|
112
|
-
if ($[
|
|
113
|
-
let
|
|
114
|
-
if ($[
|
|
115
|
-
|
|
85
|
+
$[13] = activePlugin;
|
|
86
|
+
$[14] = clearEvents;
|
|
87
|
+
$[15] = resolvedClient;
|
|
88
|
+
$[16] = selected;
|
|
89
|
+
$[17] = selectedApiId;
|
|
90
|
+
$[18] = selectionByApi;
|
|
91
|
+
$[19] = switchToThread;
|
|
92
|
+
$[20] = theme;
|
|
93
|
+
$[21] = t7;
|
|
94
|
+
} else t7 = $[21];
|
|
95
|
+
const ctx = t7;
|
|
96
|
+
let t8;
|
|
97
|
+
if ($[22] !== activePlugin?.id || $[23] !== visiblePlugins) {
|
|
98
|
+
let t9;
|
|
99
|
+
if ($[25] !== activePlugin?.id) {
|
|
100
|
+
t9 = (plugin_1) => {
|
|
116
101
|
const active = activePlugin?.id === plugin_1.id;
|
|
117
102
|
return /* @__PURE__ */ jsxs("button", {
|
|
118
103
|
type: "button",
|
|
@@ -121,26 +106,26 @@ const DevToolsPanel = (t0) => {
|
|
|
121
106
|
children: [plugin_1.label, active ? /* @__PURE__ */ jsx("span", { className: "bg-foreground absolute inset-x-2 -bottom-px h-0.5 rounded-full" }) : null]
|
|
122
107
|
}, plugin_1.id);
|
|
123
108
|
};
|
|
124
|
-
$[
|
|
125
|
-
$[
|
|
126
|
-
} else
|
|
127
|
-
|
|
128
|
-
$[
|
|
129
|
-
$[
|
|
130
|
-
$[
|
|
131
|
-
} else
|
|
132
|
-
let
|
|
133
|
-
if ($[
|
|
134
|
-
|
|
109
|
+
$[25] = activePlugin?.id;
|
|
110
|
+
$[26] = t9;
|
|
111
|
+
} else t9 = $[26];
|
|
112
|
+
t8 = visiblePlugins.map(t9);
|
|
113
|
+
$[22] = activePlugin?.id;
|
|
114
|
+
$[23] = visiblePlugins;
|
|
115
|
+
$[24] = t8;
|
|
116
|
+
} else t8 = $[24];
|
|
117
|
+
let t9;
|
|
118
|
+
if ($[27] !== t8) {
|
|
119
|
+
t9 = /* @__PURE__ */ jsx("div", {
|
|
135
120
|
className: "flex h-full items-center",
|
|
136
|
-
children:
|
|
121
|
+
children: t8
|
|
137
122
|
});
|
|
138
|
-
$[
|
|
139
|
-
$[
|
|
140
|
-
} else
|
|
141
|
-
let
|
|
142
|
-
if ($[
|
|
143
|
-
|
|
123
|
+
$[27] = t8;
|
|
124
|
+
$[28] = t9;
|
|
125
|
+
} else t9 = $[28];
|
|
126
|
+
let t10;
|
|
127
|
+
if ($[29] !== apiIds || $[30] !== selectedApiId) {
|
|
128
|
+
t10 = apiIds.length > 1 ? /* @__PURE__ */ jsx("select", {
|
|
144
129
|
value: selectedApiId ?? "",
|
|
145
130
|
onChange: (event) => {
|
|
146
131
|
const value = Number(event.target.value);
|
|
@@ -149,28 +134,28 @@ const DevToolsPanel = (t0) => {
|
|
|
149
134
|
className: "border-border text-muted-foreground hover:text-foreground h-7 rounded-md border bg-transparent px-2 text-[12px] transition-colors",
|
|
150
135
|
children: apiIds.map(_temp3)
|
|
151
136
|
}) : null;
|
|
152
|
-
$[
|
|
153
|
-
$[
|
|
154
|
-
$[
|
|
155
|
-
} else
|
|
137
|
+
$[29] = apiIds;
|
|
138
|
+
$[30] = selectedApiId;
|
|
139
|
+
$[31] = t10;
|
|
140
|
+
} else t10 = $[31];
|
|
141
|
+
let t11;
|
|
142
|
+
if ($[32] === Symbol.for("react.memo_cache_sentinel")) {
|
|
143
|
+
t11 = /* @__PURE__ */ jsx("span", { className: "size-1.5 rounded-full bg-emerald-500" });
|
|
144
|
+
$[32] = t11;
|
|
145
|
+
} else t11 = $[32];
|
|
146
|
+
const t12 = apiIds.length > 0 ? `${apiIds.length} instance${apiIds.length > 1 ? "s" : ""}` : "Waiting";
|
|
156
147
|
let t13;
|
|
157
|
-
if ($[
|
|
158
|
-
t13 = /* @__PURE__ */
|
|
159
|
-
$[36] = t13;
|
|
160
|
-
} else t13 = $[36];
|
|
161
|
-
const t14 = apiIds.length > 0 ? `${apiIds.length} instance${apiIds.length > 1 ? "s" : ""}` : "Waiting";
|
|
162
|
-
let t15;
|
|
163
|
-
if ($[37] !== t14) {
|
|
164
|
-
t15 = /* @__PURE__ */ jsxs("span", {
|
|
148
|
+
if ($[33] !== t12) {
|
|
149
|
+
t13 = /* @__PURE__ */ jsxs("span", {
|
|
165
150
|
className: "text-muted-foreground flex items-center gap-1.5 text-[11px]",
|
|
166
|
-
children: [
|
|
151
|
+
children: [t11, t12]
|
|
167
152
|
});
|
|
168
|
-
$[
|
|
169
|
-
$[
|
|
170
|
-
} else
|
|
171
|
-
let
|
|
172
|
-
if ($[
|
|
173
|
-
|
|
153
|
+
$[33] = t12;
|
|
154
|
+
$[34] = t13;
|
|
155
|
+
} else t13 = $[34];
|
|
156
|
+
let t14;
|
|
157
|
+
if ($[35] !== onClose) {
|
|
158
|
+
t14 = onClose ? /* @__PURE__ */ jsx("button", {
|
|
174
159
|
type: "button",
|
|
175
160
|
onClick: onClose,
|
|
176
161
|
"aria-label": "Close DevTools",
|
|
@@ -190,55 +175,55 @@ const DevToolsPanel = (t0) => {
|
|
|
190
175
|
})
|
|
191
176
|
})
|
|
192
177
|
}) : null;
|
|
193
|
-
$[
|
|
194
|
-
$[
|
|
195
|
-
} else
|
|
196
|
-
let
|
|
197
|
-
if ($[
|
|
198
|
-
|
|
178
|
+
$[35] = onClose;
|
|
179
|
+
$[36] = t14;
|
|
180
|
+
} else t14 = $[36];
|
|
181
|
+
let t15;
|
|
182
|
+
if ($[37] !== t10 || $[38] !== t13 || $[39] !== t14) {
|
|
183
|
+
t15 = /* @__PURE__ */ jsxs("div", {
|
|
199
184
|
className: "flex items-center gap-2 pe-1",
|
|
200
185
|
children: [
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
186
|
+
t10,
|
|
187
|
+
t13,
|
|
188
|
+
t14
|
|
204
189
|
]
|
|
205
190
|
});
|
|
206
|
-
$[
|
|
207
|
-
$[
|
|
208
|
-
$[
|
|
209
|
-
$[
|
|
210
|
-
} else
|
|
211
|
-
let
|
|
212
|
-
if ($[
|
|
213
|
-
|
|
191
|
+
$[37] = t10;
|
|
192
|
+
$[38] = t13;
|
|
193
|
+
$[39] = t14;
|
|
194
|
+
$[40] = t15;
|
|
195
|
+
} else t15 = $[40];
|
|
196
|
+
let t16;
|
|
197
|
+
if ($[41] !== t15 || $[42] !== t9) {
|
|
198
|
+
t16 = /* @__PURE__ */ jsxs("nav", {
|
|
214
199
|
className: "border-border flex h-10 shrink-0 items-center justify-between gap-2 border-b px-2 select-none",
|
|
215
|
-
children: [
|
|
200
|
+
children: [t9, t15]
|
|
216
201
|
});
|
|
217
|
-
$[
|
|
218
|
-
$[
|
|
219
|
-
$[
|
|
220
|
-
} else
|
|
221
|
-
let
|
|
222
|
-
if ($[
|
|
223
|
-
|
|
202
|
+
$[41] = t15;
|
|
203
|
+
$[42] = t9;
|
|
204
|
+
$[43] = t16;
|
|
205
|
+
} else t16 = $[43];
|
|
206
|
+
let t17;
|
|
207
|
+
if ($[44] !== activePlugin || $[45] !== ctx) {
|
|
208
|
+
t17 = /* @__PURE__ */ jsx("section", {
|
|
224
209
|
className: "bg-background min-h-0 flex-1 overflow-hidden",
|
|
225
210
|
children: ctx && activePlugin ? /* @__PURE__ */ jsx(activePlugin.Component, { ...ctx }) : /* @__PURE__ */ jsx(CenteredMessage, { children: "Waiting for assistant-ui instance..." })
|
|
226
211
|
});
|
|
227
|
-
$[
|
|
228
|
-
$[
|
|
229
|
-
$[
|
|
230
|
-
} else
|
|
231
|
-
let
|
|
232
|
-
if ($[
|
|
233
|
-
|
|
212
|
+
$[44] = activePlugin;
|
|
213
|
+
$[45] = ctx;
|
|
214
|
+
$[46] = t17;
|
|
215
|
+
} else t17 = $[46];
|
|
216
|
+
let t18;
|
|
217
|
+
if ($[47] !== t16 || $[48] !== t17) {
|
|
218
|
+
t18 = /* @__PURE__ */ jsxs("div", {
|
|
234
219
|
className: "text-foreground flex h-full flex-col text-[13px]",
|
|
235
|
-
children: [
|
|
220
|
+
children: [t16, t17]
|
|
236
221
|
});
|
|
237
|
-
$[
|
|
238
|
-
$[
|
|
239
|
-
$[
|
|
240
|
-
} else
|
|
241
|
-
return
|
|
222
|
+
$[47] = t16;
|
|
223
|
+
$[48] = t17;
|
|
224
|
+
$[49] = t18;
|
|
225
|
+
} else t18 = $[49];
|
|
226
|
+
return t18;
|
|
242
227
|
};
|
|
243
228
|
function _temp(a, b) {
|
|
244
229
|
return (a.order ?? 0) - (b.order ?? 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevToolsPanel.js","names":["c","_c","useCallback","useEffect","useMemo","useState","clsx","useDevToolsClient","inProcessClient","DevToolsClient","CenteredMessage","builtinPlugins","DevToolsPanelPlugin","DevToolsTabContext","DevToolsPanelProps","plugins","theme","onClose","client","DevToolsPanel","t0","$","t1","undefined","resolvedClient","selectedApiId","setSelectedApiId","activeTabId","setActiveTabId","t2","Symbol","for","selectionByApi","setSelectionByApi","apiIds","selected","clearEvents","switchToThread","t3","t4","includes","t5","sort","_temp","allPlugins","t6","apiId","tabId","nodeId","prev","setSelectionFor","t7","filter","plugin","isAvailable","data","selection","setSelection","_temp2","visiblePlugins","t8","find","plugin_0","id","activePlugin","t9","nodeId_0","threadId","ctx","t10","t11","plugin_1","active","label","map","t12","length","event","value","Number","target","isNaN","_temp3","t13","t14","t15","t16","t17","t18","t19","t20","a","b","order"],"sources":["../../src/shell/DevToolsPanel.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { useDevToolsClient } from \"../data/useDevToolsClient\";\nimport { inProcessClient } from \"../data/createInProcessClient\";\nimport type { DevToolsClient } from \"../data/types\";\nimport { CenteredMessage } from \"../views/ui\";\nimport {\n builtinPlugins,\n type DevToolsPanelPlugin,\n type DevToolsTabContext,\n} from \"./registry\";\n\nexport interface DevToolsPanelProps {\n /** Additional inspector tabs appended after the builtins. */\n plugins?: DevToolsPanelPlugin[] | undefined;\n /** Resolved theme, used to style plugin content and the dark variant. */\n theme?: \"light\" | \"dark\";\n /** When provided, a close control is rendered at the end of the tab bar. */\n onClose?: (() => void) | undefined;\n /** Data source. Defaults to the in-process DevToolsHooks client. */\n client?: DevToolsClient | undefined;\n}\n\nexport const DevToolsPanel = ({\n plugins,\n theme = \"light\",\n onClose,\n client,\n}: DevToolsPanelProps) => {\n const resolvedClient = client ?? inProcessClient;\n const [selectedApiId, setSelectedApiId] = useState<number | null>(null);\n const [activeTabId, setActiveTabId] = useState<string>(\"thread\");\n const [selectionByApi, setSelectionByApi] = useState<\n Record<number, Record<string, string | null>>\n >({});\n const { apiIds, selected, clearEvents, switchToThread } = useDevToolsClient(\n selectedApiId,\n resolvedClient,\n );\n\n useEffect(() => {\n if (selectedApiId !== null && apiIds.includes(selectedApiId)) return;\n setSelectedApiId(apiIds[0] ?? null);\n }, [apiIds, selectedApiId]);\n\n const allPlugins = useMemo(\n () =>\n [...builtinPlugins, ...(plugins ?? [])].sort(\n (a, b) => (a.order ?? 0) - (b.order ?? 0),\n ),\n [plugins],\n );\n\n const setSelectionFor = useCallback(\n (apiId: number, tabId: string, nodeId: string | null) => {\n setSelectionByApi((prev) => ({\n ...prev,\n [apiId]: { ...prev[apiId], [tabId]: nodeId },\n }));\n },\n [],\n );\n\n const visiblePlugins =\n selected && selectedApiId !== null\n ? allPlugins.filter((plugin) =>\n plugin.isAvailable\n ? plugin.isAvailable({\n apiId: selectedApiId,\n data: selected,\n clearEvents,\n theme,\n selection: null,\n setSelection: () => {},\n })\n : true,\n )\n : allPlugins;\n\n const activePlugin =\n visiblePlugins.find((plugin) => plugin.id === activeTabId) ??\n visiblePlugins[0];\n\n const ctx: DevToolsTabContext | null =\n selected && selectedApiId !== null && activePlugin\n ? {\n apiId: selectedApiId,\n data: selected,\n clearEvents,\n theme,\n selection: selectionByApi[selectedApiId]?.[activePlugin.id] ?? null,\n setSelection: (nodeId) =>\n setSelectionFor(selectedApiId, activePlugin.id, nodeId),\n switchToThread: resolvedClient.switchToThread\n ? (threadId) => switchToThread(selectedApiId, threadId)\n : undefined,\n }\n : null;\n\n return (\n <div className=\"text-foreground flex h-full flex-col text-[13px]\">\n <nav className=\"border-border flex h-10 shrink-0 items-center justify-between gap-2 border-b px-2 select-none\">\n <div className=\"flex h-full items-center\">\n {visiblePlugins.map((plugin) => {\n const active = activePlugin?.id === plugin.id;\n return (\n <button\n type=\"button\"\n key={plugin.id}\n onClick={() => setActiveTabId(plugin.id)}\n className={clsx(\n \"relative flex h-full items-center px-3 font-medium transition-colors\",\n active\n ? \"text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {plugin.label}\n {active ? (\n <span className=\"bg-foreground absolute inset-x-2 -bottom-px h-0.5 rounded-full\" />\n ) : null}\n </button>\n );\n })}\n </div>\n\n <div className=\"flex items-center gap-2 pe-1\">\n {apiIds.length > 1 ? (\n <select\n value={selectedApiId ?? \"\"}\n onChange={(event) => {\n const value = Number(event.target.value);\n setSelectedApiId(Number.isNaN(value) ? null : value);\n }}\n className=\"border-border text-muted-foreground hover:text-foreground h-7 rounded-md border bg-transparent px-2 text-[12px] transition-colors\"\n >\n {apiIds.map((id) => (\n <option key={id} value={id}>\n API #{id}\n </option>\n ))}\n </select>\n ) : null}\n\n <span className=\"text-muted-foreground flex items-center gap-1.5 text-[11px]\">\n <span className=\"size-1.5 rounded-full bg-emerald-500\" />\n {apiIds.length > 0\n ? `${apiIds.length} instance${apiIds.length > 1 ? \"s\" : \"\"}`\n : \"Waiting\"}\n </span>\n\n {onClose ? (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close DevTools\"\n className=\"text-muted-foreground hover:bg-accent hover:text-foreground flex size-7 items-center justify-center rounded-md transition-colors\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M18 6 6 18M6 6l12 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n ) : null}\n </div>\n </nav>\n\n <section className=\"bg-background min-h-0 flex-1 overflow-hidden\">\n {ctx && activePlugin ? (\n <activePlugin.Component {...ctx} />\n ) : (\n <CenteredMessage>\n Waiting for assistant-ui instance...\n </CenteredMessage>\n )}\n </section>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DevToolsPanel.js","names":["c","_c","useCallback","useMemo","useState","clsx","useDevToolsClient","inProcessClient","DevToolsClient","CenteredMessage","builtinPlugins","DevToolsPanelPlugin","DevToolsTabContext","DevToolsPanelProps","plugins","theme","onClose","client","DevToolsPanel","t0","$","t1","undefined","resolvedClient","selectedApiId","setSelectedApiId","activeTabId","setActiveTabId","t2","Symbol","for","selectionByApi","setSelectionByApi","apiIds","selected","clearEvents","switchToThread","resolvedApiId","includes","t3","sort","_temp","allPlugins","t4","apiId","tabId","nodeId","prev","setSelectionFor","t5","filter","plugin","isAvailable","data","selection","setSelection","_temp2","visiblePlugins","t6","find","plugin_0","id","activePlugin","t7","nodeId_0","threadId","ctx","t8","t9","plugin_1","active","label","map","t10","length","event","value","Number","target","isNaN","_temp3","t11","t12","t13","t14","t15","t16","t17","t18","a","b","order"],"sources":["../../src/shell/DevToolsPanel.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\nimport clsx from \"clsx\";\nimport { useDevToolsClient } from \"../data/useDevToolsClient\";\nimport { inProcessClient } from \"../data/createInProcessClient\";\nimport type { DevToolsClient } from \"../data/types\";\nimport { CenteredMessage } from \"../views/ui\";\nimport {\n builtinPlugins,\n type DevToolsPanelPlugin,\n type DevToolsTabContext,\n} from \"./registry\";\n\nexport interface DevToolsPanelProps {\n /** Additional inspector tabs appended after the builtins. */\n plugins?: DevToolsPanelPlugin[] | undefined;\n /** Resolved theme, used to style plugin content and the dark variant. */\n theme?: \"light\" | \"dark\";\n /** When provided, a close control is rendered at the end of the tab bar. */\n onClose?: (() => void) | undefined;\n /** Data source. Defaults to the in-process DevToolsHooks client. */\n client?: DevToolsClient | undefined;\n}\n\nexport const DevToolsPanel = ({\n plugins,\n theme = \"light\",\n onClose,\n client,\n}: DevToolsPanelProps) => {\n const resolvedClient = client ?? inProcessClient;\n const [selectedApiId, setSelectedApiId] = useState<number | null>(null);\n const [activeTabId, setActiveTabId] = useState<string>(\"thread\");\n const [selectionByApi, setSelectionByApi] = useState<\n Record<number, Record<string, string | null>>\n >({});\n const { apiIds, selected, clearEvents, switchToThread } = useDevToolsClient(\n selectedApiId,\n resolvedClient,\n );\n\n const resolvedApiId =\n selectedApiId !== null && apiIds.includes(selectedApiId)\n ? selectedApiId\n : (apiIds[0] ?? null);\n\n if (resolvedApiId !== selectedApiId) setSelectedApiId(resolvedApiId);\n\n const allPlugins = useMemo(\n () =>\n [...builtinPlugins, ...(plugins ?? [])].sort(\n (a, b) => (a.order ?? 0) - (b.order ?? 0),\n ),\n [plugins],\n );\n\n const setSelectionFor = useCallback(\n (apiId: number, tabId: string, nodeId: string | null) => {\n setSelectionByApi((prev) => ({\n ...prev,\n [apiId]: { ...prev[apiId], [tabId]: nodeId },\n }));\n },\n [],\n );\n\n const visiblePlugins =\n selected && selectedApiId !== null\n ? allPlugins.filter((plugin) =>\n plugin.isAvailable\n ? plugin.isAvailable({\n apiId: selectedApiId,\n data: selected,\n clearEvents,\n theme,\n selection: null,\n setSelection: () => {},\n })\n : true,\n )\n : allPlugins;\n\n const activePlugin =\n visiblePlugins.find((plugin) => plugin.id === activeTabId) ??\n visiblePlugins[0];\n\n const ctx: DevToolsTabContext | null =\n selected && selectedApiId !== null && activePlugin\n ? {\n apiId: selectedApiId,\n data: selected,\n clearEvents,\n theme,\n selection: selectionByApi[selectedApiId]?.[activePlugin.id] ?? null,\n setSelection: (nodeId) =>\n setSelectionFor(selectedApiId, activePlugin.id, nodeId),\n switchToThread: resolvedClient.switchToThread\n ? (threadId) => switchToThread(selectedApiId, threadId)\n : undefined,\n }\n : null;\n\n return (\n <div className=\"text-foreground flex h-full flex-col text-[13px]\">\n <nav className=\"border-border flex h-10 shrink-0 items-center justify-between gap-2 border-b px-2 select-none\">\n <div className=\"flex h-full items-center\">\n {visiblePlugins.map((plugin) => {\n const active = activePlugin?.id === plugin.id;\n return (\n <button\n type=\"button\"\n key={plugin.id}\n onClick={() => setActiveTabId(plugin.id)}\n className={clsx(\n \"relative flex h-full items-center px-3 font-medium transition-colors\",\n active\n ? \"text-foreground\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {plugin.label}\n {active ? (\n <span className=\"bg-foreground absolute inset-x-2 -bottom-px h-0.5 rounded-full\" />\n ) : null}\n </button>\n );\n })}\n </div>\n\n <div className=\"flex items-center gap-2 pe-1\">\n {apiIds.length > 1 ? (\n <select\n value={selectedApiId ?? \"\"}\n onChange={(event) => {\n const value = Number(event.target.value);\n setSelectedApiId(Number.isNaN(value) ? null : value);\n }}\n className=\"border-border text-muted-foreground hover:text-foreground h-7 rounded-md border bg-transparent px-2 text-[12px] transition-colors\"\n >\n {apiIds.map((id) => (\n <option key={id} value={id}>\n API #{id}\n </option>\n ))}\n </select>\n ) : null}\n\n <span className=\"text-muted-foreground flex items-center gap-1.5 text-[11px]\">\n <span className=\"size-1.5 rounded-full bg-emerald-500\" />\n {apiIds.length > 0\n ? `${apiIds.length} instance${apiIds.length > 1 ? \"s\" : \"\"}`\n : \"Waiting\"}\n </span>\n\n {onClose ? (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close DevTools\"\n className=\"text-muted-foreground hover:bg-accent hover:text-foreground flex size-7 items-center justify-center rounded-md transition-colors\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M18 6 6 18M6 6l12 12\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n ) : null}\n </div>\n </nav>\n\n <section className=\"bg-background min-h-0 flex-1 overflow-hidden\">\n {ctx && activePlugin ? (\n <activePlugin.Component {...ctx} />\n ) : (\n <CenteredMessage>\n Waiting for assistant-ui instance...\n </CenteredMessage>\n )}\n </section>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;AAyBA,MAAakB,iBAAgBC,OAAA;CAAA,MAAAC,IAAAnB,EAAA,EAAA;CAAC,MAAA,EAAAa,SAAAC,OAAAM,IAAAL,SAAAC,WAAAE;CAE5B,MAAAJ,QAAAM,OAAAC,KAAAA,IAAA,UAAAD;CAIA,MAAAE,iBAAuBN,UAAAV;CACvB,MAAA,CAAAiB,eAAAC,oBAA0CrB,SAAwB,IAAI;CACtE,MAAA,CAAAsB,aAAAC,kBAAsCvB,SAAiB,QAAQ;CAAE,IAAAwB;CAAA,IAAAR,EAAA,OAAAS,OAAAC,IAAA,2BAAA,GAAA;EAG/DF,KAAA,CAAC;EAACR,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAFJ,MAAA,CAAAW,gBAAAC,qBAA4C5B,SAE1CwB,EAAE;CACJ,MAAA,EAAAK,QAAAC,UAAAC,aAAAC,mBAA0D9B,kBACxDkB,eACAD,cACF;CAEA,MAAAc,gBACEb,kBAAkB,QAAQS,OAAMK,SAAUd,aAAa,IAAvDA,gBAEKS,OAAM,MAAN;CAEP,IAAII,kBAAkBb,eAAeC,iBAAiBY,aAAa;CAAE,IAAAE;CAAA,IAAAnB,EAAA,OAAAN,SAAA;EAIjEyB,KAAA,CAAA,GAAI7B,gBAAc,GAAMI,WAAA,CAAA,CAAa,CAAE,CAAA0B,KACrCC,KACF;EAACrB,EAAA,KAAAN;EAAAM,EAAA,KAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAJL,MAAAsB,aAEIH;CAIF,IAAAI;CAAA,IAAAvB,EAAA,OAAAS,OAAAC,IAAA,2BAAA,GAAA;EAGAa,MAAAC,OAAAC,OAAAC,WAAA;GACEd,mBAAkBe,UAAW;IAAA,GACxBA;KACFH,QAAQ;KAAA,GAAKG,KAAKH;MAASC,QAAQC;IAAO;GAC7C,EAAE;EAAC;EACJ1B,EAAA,KAAAuB;CAAA,OAAAA,KAAAvB,EAAA;CANH,MAAA4B,kBAAwBL;CAQtB,IAAAM;CAAA,IAAA7B,EAAA,OAAAsB,cAAAtB,EAAA,OAAAe,eAAAf,EAAA,OAAAc,YAAAd,EAAA,OAAAI,iBAAAJ,EAAA,OAAAL,OAAA;EAGAkC,KAAAf,YAAYV,kBAAkB,OAC1BkB,WAAUQ,QAAQC,WAChBA,OAAMC,cACFD,OAAMC,YAAa;GAAAR,OACVpB;GAAa6B,MACdnB;GAAQC;GAAApB;GAAAuC,WAGH;GAAIC,cACDC;EAChB,CACG,IATP,IAWO,IAbbd;EAactB,EAAA,KAAAsB;EAAAtB,EAAA,KAAAe;EAAAf,EAAA,KAAAc;EAAAd,EAAA,KAAAI;EAAAJ,EAAA,KAAAL;EAAAK,EAAA,KAAA6B;CAAA,OAAAA,KAAA7B,EAAA;CAdhB,MAAAqC,iBACER;CAae,IAAAS;CAAA,IAAAtC,EAAA,QAAAM,eAAAN,EAAA,QAAAqC,gBAAA;EAGfC,KAAAD,eAAcE,MAAMC,aAAYT,SAAMU,OAAQnC,WAC9B,KAAhB+B,eAAc;EAAGrC,EAAA,MAAAM;EAAAN,EAAA,MAAAqC;EAAArC,EAAA,MAAAsC;CAAA,OAAAA,KAAAtC,EAAA;CAFnB,MAAA0C,eACEJ;CACkB,IAAAK;CAAA,IAAA3C,EAAA,QAAA0C,gBAAA1C,EAAA,QAAAe,eAAAf,EAAA,QAAAG,kBAAAH,EAAA,QAAAc,YAAAd,EAAA,QAAAI,iBAAAJ,EAAA,QAAAW,kBAAAX,EAAA,QAAAgB,kBAAAhB,EAAA,QAAAL,OAAA;EAGlBgD,KAAA7B,YAAYV,kBAAkB,QAA9BsC,eAAA;GAAAlB,OAEapB;GAAa6B,MACdnB;GAAQC;GAAApB;GAAAuC,WAGHvB,eAAeP,cAAiC,GAAhBsC,aAAYD,OAA5C;GAAwDN,eACrDS,aACZhB,gBAAgBxB,eAAesC,aAAYD,IAAKf,QAAM;GAACV,gBACzCb,eAAca,kBAAd6B,aACE7B,eAAeZ,eAAeyC,QAAQ,IADxC3C,KAAAA;EAIf,IAbP;EAaQF,EAAA,MAAA0C;EAAA1C,EAAA,MAAAe;EAAAf,EAAA,MAAAG;EAAAH,EAAA,MAAAc;EAAAd,EAAA,MAAAI;EAAAJ,EAAA,MAAAW;EAAAX,EAAA,MAAAgB;EAAAhB,EAAA,MAAAL;EAAAK,EAAA,MAAA2C;CAAA,OAAAA,KAAA3C,EAAA;CAdV,MAAA8C,MACEH;CAaS,IAAAI;CAAA,IAAA/C,EAAA,QAAA0C,cAAAD,MAAAzC,EAAA,QAAAqC,gBAAA;EAAA,IAAAW;EAAA,IAAAhD,EAAA,QAAA0C,cAAAD,IAAA;GAMiBO,MAAAC,aAAA;IAClB,MAAAC,SAAeR,cAAYD,OAASV,SAAMU;IAAI,OAE5C,qBAAA,UAAA;KACO,MAAA;KAEI,eAAMlC,eAAewB,SAAMU,EAAG;KAC5B,WAAAxD,KACT,wEACAiE,SAAA,oBAAA,6CAGF;KATF,UAAA,CAWGnB,SAAMoB,OACND,SACC,oBAAA,QAAA,EAAgB,WAAA,iEAAgE,CAAA,IADjF,IAGM;IAbFnB,GAAAA,SAAMU,EAaJ;GAAA;GAEZzC,EAAA,MAAA0C,cAAAD;GAAAzC,EAAA,MAAAgD;EAAA,OAAAA,KAAAhD,EAAA;EApBA+C,KAAAV,eAAce,IAAKJ,EAoBnB;EAAChD,EAAA,MAAA0C,cAAAD;EAAAzC,EAAA,MAAAqC;EAAArC,EAAA,MAAA+C;CAAA,OAAAA,KAAA/C,EAAA;CAAA,IAAAgD;CAAA,IAAAhD,EAAA,QAAA+C,IAAA;EArBJC,KAAA,oBAAA,OAAA;GAAe,WAAA;GACZD,UAAAA;EAqBG,CAAA;EAAA/C,EAAA,MAAA+C;EAAA/C,EAAA,MAAAgD;CAAA,OAAAA,KAAAhD,EAAA;CAAA,IAAAqD;CAAA,IAAArD,EAAA,QAAAa,UAAAb,EAAA,QAAAI,eAAA;EAGHiD,MAAAxC,OAAMyC,SAAU,IACf,oBAAA,UAAA;GACS,OAAAlD,iBAAA;GACG,WAAAmD,UAAA;IACR,MAAAC,QAAcC,OAAOF,MAAKG,OAAOF,KAAM;IACvCnD,iBAAiBoD,OAAME,MAAOH,KAAoB,IAAjC,OAAAA,KAAkC;GAAC;GAE5C,WAAA;GAET3C,UAAAA,OAAMuC,IAAKQ,MAIX;EACM,CAAA,IAdV;EAeO5D,EAAA,MAAAa;EAAAb,EAAA,MAAAI;EAAAJ,EAAA,MAAAqD;CAAA,OAAAA,MAAArD,EAAA;CAAA,IAAA6D;CAAA,IAAA7D,EAAA,QAAAS,OAAAC,IAAA,2BAAA,GAAA;EAGNmD,MAAA,oBAAA,QAAA,EAAgB,WAAA,uCAAsC,CAAA;EAAG7D,EAAA,MAAA6D;CAAA,OAAAA,MAAA7D,EAAA;CACxD,MAAA8D,MAAAjD,OAAMyC,SAAU,IAAhB,GACMzC,OAAMyC,OAAO,WAAYzC,OAAMyC,SAAU,IAAhB,MAAA,OAD/B;CAEY,IAAAS;CAAA,IAAA/D,EAAA,QAAA8D,KAAA;EAJfC,MAAA,qBAAA,QAAA;GAAgB,WAAA;GAAhB,UAAA,CACEF,KACCC,GAGI;;EAAA9D,EAAA,MAAA8D;EAAA9D,EAAA,MAAA+D;CAAA,OAAAA,MAAA/D,EAAA;CAAA,IAAAgE;CAAA,IAAAhE,EAAA,QAAAJ,SAAA;EAENoE,MAAApE,UACC,oBAAA,UAAA;GACO,MAAA;GACIA,SAAAA;GACE,cAAA;GACD,WAAA;GAEV,UAAA,oBAAA,OAAA;IACQ,OAAA;IACC,QAAA;IACC,SAAA;IACH,MAAA;IACO,eAAA;IAEZ,UAAA,oBAAA,QAAA;KACI,GAAA;KACK,QAAA;KACK,aAAA;KACE,eAAA;KACC,gBAAA;IAAO,CAAA;GAEpB,CAAA;EACC,CAAA,IAtBV;EAuBOI,EAAA,MAAAJ;EAAAI,EAAA,MAAAgE;CAAA,OAAAA,MAAAhE,EAAA;CAAA,IAAAiE;CAAA,IAAAjE,EAAA,QAAAqD,OAAArD,EAAA,QAAA+D,OAAA/D,EAAA,QAAAgE,KAAA;EAhDVC,MAAA,qBAAA,OAAA;GAAe,WAAA;GAAf,UAAA;IACGZ;IAiBDU;IAOCC;GAwBG;;EAAAhE,EAAA,MAAAqD;EAAArD,EAAA,MAAA+D;EAAA/D,EAAA,MAAAgE;EAAAhE,EAAA,MAAAiE;CAAA,OAAAA,MAAAjE,EAAA;CAAA,IAAAkE;CAAA,IAAAlE,EAAA,QAAAiE,OAAAjE,EAAA,QAAAgD,IAAA;EA1ERkB,MAAA,qBAAA,OAAA;GAAe,WAAA;GAAf,UAAA,CACElB,IAwBAiB,GAkDI;;EAAAjE,EAAA,MAAAiE;EAAAjE,EAAA,MAAAgD;EAAAhD,EAAA,MAAAkE;CAAA,OAAAA,MAAAlE,EAAA;CAAA,IAAAmE;CAAA,IAAAnE,EAAA,QAAA0C,gBAAA1C,EAAA,QAAA8C,KAAA;EAENqB,MAAA,oBAAA,WAAA;GAAmB,WAAA;GAChBrB,UAAAA,OAAAJ,eACC,oBAAA,aAAA,WAAA,EAAA,GAA4BI,IAAG,CAAA,IAE/B,oBAAC,iBAAD,EAAA,UAAiB,uCAAD,CAAA;EAIV,CAAA;EAAA9C,EAAA,MAAA0C;EAAA1C,EAAA,MAAA8C;EAAA9C,EAAA,MAAAmE;CAAA,OAAAA,MAAAnE,EAAA;CAAA,IAAAoE;CAAA,IAAApE,EAAA,QAAAkE,OAAAlE,EAAA,QAAAmE,KAAA;EAtFZC,MAAA,qBAAA,OAAA;GAAe,WAAA;GAAf,UAAA,CACEF,KA6EAC,GASI;;EAAAnE,EAAA,MAAAkE;EAAAlE,EAAA,MAAAmE;EAAAnE,EAAA,MAAAoE;CAAA,OAAAA,MAAApE,EAAA;CAAA,OAvFNoE;AAuFM;AAtKmB,SAAA/C,MAAAgD,GAAAC,GAAA;CAAA,QA2BVD,EAACE,SAAD,MAAiBD,EAACC,SAAD;AAAa;AA3BpB,SAAAnC,SAAA,CAAA;AAAA,SAAAwB,OAAAnB,IAAA;CAAA,OAoHb,qBAAA,UAAA;EAAwBA,OAAAA;EAAxB,UAAA,CAA4B,SACpBA,EACC;CAFIA,GAAAA,EAEJ;AAAA"}
|