@getcatalystiq/agent-plane-ui 0.1.18 → 0.1.20
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/agent-identity-tab-ETPM6LQN.js +2 -0
- package/dist/agent-identity-tab-F4MU2HP2.cjs +11 -0
- package/dist/chunk-CE2RHDPY.js +422 -0
- package/dist/chunk-CHJL4MZI.cjs +277 -0
- package/dist/chunk-L45SI32F.js +275 -0
- package/dist/chunk-VZ43ATC5.cjs +454 -0
- package/dist/{chunk-P4N2P42X.js → chunk-XFI227OB.js} +77 -46
- package/dist/{chunk-4XBBDUSZ.cjs → chunk-XXF4U7WL.cjs} +93 -64
- package/dist/editor.cjs +26 -387
- package/dist/editor.d.cts +50 -1
- package/dist/editor.d.ts +50 -1
- package/dist/editor.js +7 -374
- package/dist/index.cjs +583 -666
- package/dist/index.d.cts +0 -2
- package/dist/index.d.ts +0 -2
- package/dist/index.js +19 -125
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkVZ43ATC5_cjs = require('./chunk-VZ43ATC5.cjs');
|
|
4
|
+
var chunkXXF4U7WL_cjs = require('./chunk-XXF4U7WL.cjs');
|
|
4
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var
|
|
6
|
+
var React = require('react');
|
|
6
7
|
var swr = require('swr');
|
|
7
8
|
var ReactMarkdown = require('react-markdown');
|
|
8
9
|
var cmdk = require('cmdk');
|
|
@@ -29,7 +30,7 @@ function _interopNamespace(e) {
|
|
|
29
30
|
return Object.freeze(n);
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
var
|
|
33
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
33
34
|
var ReactMarkdown__default = /*#__PURE__*/_interopDefault(ReactMarkdown);
|
|
34
35
|
var Popover__namespace = /*#__PURE__*/_interopNamespace(Popover);
|
|
35
36
|
var remarkGfm__default = /*#__PURE__*/_interopDefault(remarkGfm);
|
|
@@ -50,12 +51,12 @@ function Select({ className = "", ...props }) {
|
|
|
50
51
|
] }) })
|
|
51
52
|
] });
|
|
52
53
|
}
|
|
53
|
-
var Textarea =
|
|
54
|
+
var Textarea = React__namespace.forwardRef(
|
|
54
55
|
({ className, ...props }, ref) => {
|
|
55
56
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
56
57
|
"textarea",
|
|
57
58
|
{
|
|
58
|
-
className:
|
|
59
|
+
className: chunkXXF4U7WL_cjs.cn(
|
|
59
60
|
"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
|
|
60
61
|
className
|
|
61
62
|
),
|
|
@@ -66,20 +67,12 @@ var Textarea = React3__namespace.forwardRef(
|
|
|
66
67
|
}
|
|
67
68
|
);
|
|
68
69
|
Textarea.displayName = "Textarea";
|
|
69
|
-
function FormField({ label, children, error, hint }) {
|
|
70
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
71
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-xs font-medium text-muted-foreground", children: label }),
|
|
72
|
-
children,
|
|
73
|
-
hint && !error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-1", children: hint }),
|
|
74
|
-
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-destructive mt-1", children: error })
|
|
75
|
-
] });
|
|
76
|
-
}
|
|
77
70
|
function FormError({ error }) {
|
|
78
71
|
if (!error) return null;
|
|
79
72
|
return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-destructive", children: error });
|
|
80
73
|
}
|
|
81
74
|
function SectionHeader({ title, children, className }) {
|
|
82
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className:
|
|
75
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkXXF4U7WL_cjs.cn("flex items-center justify-between mb-3", className), children: [
|
|
83
76
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold", children: title }),
|
|
84
77
|
children
|
|
85
78
|
] });
|
|
@@ -103,13 +96,13 @@ function DetailPageHeader({ backHref, backLabel, title, actions, badge, subtitle
|
|
|
103
96
|
] });
|
|
104
97
|
}
|
|
105
98
|
function MetricCard({ label, children, className }) {
|
|
106
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
107
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
108
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
99
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(chunkVZ43ATC5_cjs.Card, { className, children: [
|
|
100
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardHeader, { className: "pb-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardTitle, { className: "text-sm font-medium text-muted-foreground", children: label }) }),
|
|
101
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-2xl font-bold", children }) })
|
|
109
102
|
] });
|
|
110
103
|
}
|
|
111
104
|
function AdminTable({ children, footer, className }) {
|
|
112
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className:
|
|
105
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkXXF4U7WL_cjs.cn("rounded-lg border border-border", className), children: [
|
|
113
106
|
/* @__PURE__ */ jsxRuntime.jsx("table", { className: "w-full text-sm", children }),
|
|
114
107
|
footer
|
|
115
108
|
] });
|
|
@@ -118,10 +111,10 @@ function AdminTableHead({ children }) {
|
|
|
118
111
|
return /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsx("tr", { className: "border-b border-border bg-muted/50", children }) });
|
|
119
112
|
}
|
|
120
113
|
function Th({ children, className, align = "left" }) {
|
|
121
|
-
return /* @__PURE__ */ jsxRuntime.jsx("th", { className:
|
|
114
|
+
return /* @__PURE__ */ jsxRuntime.jsx("th", { className: chunkXXF4U7WL_cjs.cn("p-3 font-medium", align === "right" ? "text-right" : "text-left", className), children });
|
|
122
115
|
}
|
|
123
116
|
function AdminTableRow({ children, className }) {
|
|
124
|
-
return /* @__PURE__ */ jsxRuntime.jsx("tr", { className:
|
|
117
|
+
return /* @__PURE__ */ jsxRuntime.jsx("tr", { className: chunkXXF4U7WL_cjs.cn("border-b border-border hover:bg-muted/30 transition-colors", className), children });
|
|
125
118
|
}
|
|
126
119
|
function EmptyRow({ colSpan, children = "No results found" }) {
|
|
127
120
|
return /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan, className: "p-8 text-center text-muted-foreground", children }) });
|
|
@@ -164,7 +157,7 @@ function PaginationBar({
|
|
|
164
157
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-3 py-2 border-t border-border bg-muted/20 text-sm", children: [
|
|
165
158
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [
|
|
166
159
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Rows per page:" }),
|
|
167
|
-
PAGE_SIZE_OPTIONS.map((ps) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
160
|
+
PAGE_SIZE_OPTIONS.map((ps) => /* @__PURE__ */ jsxRuntime.jsx(React__namespace.default.Fragment, { children: renderLink(
|
|
168
161
|
buildHref(1, ps),
|
|
169
162
|
ps,
|
|
170
163
|
`px-2 py-0.5 rounded text-xs ${pageSize === ps ? "bg-primary text-primary-foreground font-medium" : "hover:bg-muted"}`
|
|
@@ -195,7 +188,7 @@ function parsePaginationParams(pageParam, pageSizeParam, defaultPageSize = 20) {
|
|
|
195
188
|
return { page, pageSize, offset };
|
|
196
189
|
}
|
|
197
190
|
function Tabs({ tabs, defaultTab = 0 }) {
|
|
198
|
-
const [active, setActive] =
|
|
191
|
+
const [active, setActive] = React.useState(defaultTab);
|
|
199
192
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
200
193
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4", children: tabs.map((tab, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
201
194
|
"button",
|
|
@@ -212,71 +205,6 @@ function Tabs({ tabs, defaultTab = 0 }) {
|
|
|
212
205
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-6", children: tabs[active]?.content })
|
|
213
206
|
] });
|
|
214
207
|
}
|
|
215
|
-
function Dialog({ open, onOpenChange, children }) {
|
|
216
|
-
React3__namespace.useEffect(() => {
|
|
217
|
-
if (!open) return;
|
|
218
|
-
function onKeyDown(e) {
|
|
219
|
-
if (e.key === "Escape") onOpenChange(false);
|
|
220
|
-
}
|
|
221
|
-
document.addEventListener("keydown", onKeyDown);
|
|
222
|
-
return () => document.removeEventListener("keydown", onKeyDown);
|
|
223
|
-
}, [open, onOpenChange]);
|
|
224
|
-
React3__namespace.useEffect(() => {
|
|
225
|
-
if (!open) return;
|
|
226
|
-
const prev = document.body.style.overflow;
|
|
227
|
-
document.body.style.overflow = "hidden";
|
|
228
|
-
return () => {
|
|
229
|
-
document.body.style.overflow = prev;
|
|
230
|
-
};
|
|
231
|
-
}, [open]);
|
|
232
|
-
if (!open) return null;
|
|
233
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: [
|
|
234
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
235
|
-
"div",
|
|
236
|
-
{
|
|
237
|
-
className: "absolute inset-0 bg-black/60 animate-dialog-overlay",
|
|
238
|
-
onClick: () => onOpenChange(false)
|
|
239
|
-
}
|
|
240
|
-
),
|
|
241
|
-
children
|
|
242
|
-
] });
|
|
243
|
-
}
|
|
244
|
-
function DialogContent({ className, children, ...props }) {
|
|
245
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
246
|
-
"div",
|
|
247
|
-
{
|
|
248
|
-
className: chunk4XBBDUSZ_cjs.cn(
|
|
249
|
-
"relative z-10 w-full bg-background border border-border rounded-xl shadow-2xl mx-4 max-h-[85vh] overflow-y-auto animate-dialog-content",
|
|
250
|
-
className
|
|
251
|
-
),
|
|
252
|
-
onClick: (e) => e.stopPropagation(),
|
|
253
|
-
...props,
|
|
254
|
-
children
|
|
255
|
-
}
|
|
256
|
-
);
|
|
257
|
-
}
|
|
258
|
-
function DialogHeader({ className, children, ...props }) {
|
|
259
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk4XBBDUSZ_cjs.cn("px-6 pt-6 pb-0", className), ...props, children });
|
|
260
|
-
}
|
|
261
|
-
function DialogBody({ className, children, ...props }) {
|
|
262
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk4XBBDUSZ_cjs.cn("px-6 py-4", className), ...props, children });
|
|
263
|
-
}
|
|
264
|
-
function DialogFooter({ className, children, ...props }) {
|
|
265
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
266
|
-
"div",
|
|
267
|
-
{
|
|
268
|
-
className: chunk4XBBDUSZ_cjs.cn("flex items-center justify-end gap-2 px-6 py-4 border-t border-border bg-muted/30 rounded-b-xl", className),
|
|
269
|
-
...props,
|
|
270
|
-
children
|
|
271
|
-
}
|
|
272
|
-
);
|
|
273
|
-
}
|
|
274
|
-
function DialogTitle({ className, children, ...props }) {
|
|
275
|
-
return /* @__PURE__ */ jsxRuntime.jsx("h2", { className: chunk4XBBDUSZ_cjs.cn("text-base font-semibold", className), ...props, children });
|
|
276
|
-
}
|
|
277
|
-
function DialogDescription({ className, children, ...props }) {
|
|
278
|
-
return /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunk4XBBDUSZ_cjs.cn("text-sm text-muted-foreground mt-1", className), ...props, children });
|
|
279
|
-
}
|
|
280
208
|
function ConfirmDialog({
|
|
281
209
|
open,
|
|
282
210
|
onOpenChange,
|
|
@@ -289,20 +217,20 @@ function ConfirmDialog({
|
|
|
289
217
|
onConfirm,
|
|
290
218
|
variant = "destructive"
|
|
291
219
|
}) {
|
|
292
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "max-w-sm", children: [
|
|
293
|
-
/* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: title }) }),
|
|
294
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogBody, { children: [
|
|
220
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogContent, { className: "max-w-sm", children: [
|
|
221
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogTitle, { children: title }) }),
|
|
222
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogBody, { children: [
|
|
295
223
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", children }),
|
|
296
224
|
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-destructive mt-3", children: error })
|
|
297
225
|
] }),
|
|
298
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
|
|
299
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
300
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
226
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogFooter, { children: [
|
|
227
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", variant: "outline", onClick: () => onOpenChange(false), disabled: loading, children: "Cancel" }),
|
|
228
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", variant, onClick: onConfirm, disabled: loading, children: loading ? loadingLabel : confirmLabel })
|
|
301
229
|
] })
|
|
302
230
|
] }) });
|
|
303
231
|
}
|
|
304
232
|
function CopyButton({ text, className = "" }) {
|
|
305
|
-
const [copied, setCopied] =
|
|
233
|
+
const [copied, setCopied] = React.useState(false);
|
|
306
234
|
async function handleCopy() {
|
|
307
235
|
await navigator.clipboard.writeText(text);
|
|
308
236
|
setCopied(true);
|
|
@@ -329,7 +257,7 @@ function CopyButton({ text, className = "" }) {
|
|
|
329
257
|
}
|
|
330
258
|
function RunStatusBadge({ status }) {
|
|
331
259
|
const variant = status === "completed" ? "default" : status === "running" ? "secondary" : status === "failed" || status === "timed_out" ? "destructive" : "outline";
|
|
332
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
260
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant, children: status.replace("_", " ") });
|
|
333
261
|
}
|
|
334
262
|
var STYLES = {
|
|
335
263
|
schedule: "bg-blue-500/10 text-blue-400",
|
|
@@ -354,8 +282,8 @@ function LocalDate({ value, fallback = "\u2014" }) {
|
|
|
354
282
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: new Date(value).toLocaleString() });
|
|
355
283
|
}
|
|
356
284
|
function DashboardPage({ initialData, chartComponent: ChartComponent }) {
|
|
357
|
-
const { LinkComponent, basePath } =
|
|
358
|
-
const { data, error, isLoading } =
|
|
285
|
+
const { LinkComponent, basePath } = chunkXXF4U7WL_cjs.useNavigation();
|
|
286
|
+
const { data, error, isLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
359
287
|
"dashboard",
|
|
360
288
|
async (client) => {
|
|
361
289
|
const [stats2, daily_stats2] = await Promise.all([
|
|
@@ -374,10 +302,10 @@ function DashboardPage({ initialData, chartComponent: ChartComponent }) {
|
|
|
374
302
|
}
|
|
375
303
|
if (isLoading || !data) {
|
|
376
304
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
377
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-4", children: Array.from({ length: 4 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
305
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-4", children: Array.from({ length: 4 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-24 rounded-lg" }, i)) }),
|
|
378
306
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
379
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
380
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
307
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-64 rounded-lg" }),
|
|
308
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-64 rounded-lg" })
|
|
381
309
|
] })
|
|
382
310
|
] });
|
|
383
311
|
}
|
|
@@ -405,12 +333,12 @@ var SOURCES = [
|
|
|
405
333
|
];
|
|
406
334
|
var VALID_SOURCES = SOURCES.filter((s) => s.value).map((s) => s.value);
|
|
407
335
|
function RunListPage({ initialData }) {
|
|
408
|
-
const { LinkComponent, basePath } =
|
|
409
|
-
const [page, setPage] =
|
|
410
|
-
const [pageSize, setPageSize] =
|
|
411
|
-
const [sourceFilter, setSourceFilter] =
|
|
336
|
+
const { LinkComponent, basePath } = chunkXXF4U7WL_cjs.useNavigation();
|
|
337
|
+
const [page, setPage] = React.useState(1);
|
|
338
|
+
const [pageSize, setPageSize] = React.useState(20);
|
|
339
|
+
const [sourceFilter, setSourceFilter] = React.useState(null);
|
|
412
340
|
const cacheKey = `runs-${page}-${pageSize}-${sourceFilter || "all"}`;
|
|
413
|
-
const { data, error, isLoading } =
|
|
341
|
+
const { data, error, isLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
414
342
|
cacheKey,
|
|
415
343
|
(client) => {
|
|
416
344
|
return client.runs.list({
|
|
@@ -421,12 +349,12 @@ function RunListPage({ initialData }) {
|
|
|
421
349
|
},
|
|
422
350
|
initialData ? { fallbackData: initialData } : void 0
|
|
423
351
|
);
|
|
424
|
-
const handleSourceChange =
|
|
352
|
+
const handleSourceChange = React.useCallback((e) => {
|
|
425
353
|
const value = e.target.value;
|
|
426
354
|
setSourceFilter(VALID_SOURCES.includes(value) ? value : null);
|
|
427
355
|
setPage(1);
|
|
428
356
|
}, []);
|
|
429
|
-
const handlePaginationNavigate =
|
|
357
|
+
const handlePaginationNavigate = React.useCallback((href) => {
|
|
430
358
|
const url = new URL(href, "http://localhost");
|
|
431
359
|
const p = parseInt(url.searchParams.get("page") || "1", 10);
|
|
432
360
|
const ps = parseInt(url.searchParams.get("pageSize") || "20", 10);
|
|
@@ -441,8 +369,8 @@ function RunListPage({ initialData }) {
|
|
|
441
369
|
}
|
|
442
370
|
if (isLoading || !data) {
|
|
443
371
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
444
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
445
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
372
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-9 w-40" }),
|
|
373
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-96 rounded-lg" })
|
|
446
374
|
] });
|
|
447
375
|
}
|
|
448
376
|
const runs = data.data;
|
|
@@ -602,10 +530,10 @@ function buildConversation(events) {
|
|
|
602
530
|
return items;
|
|
603
531
|
}
|
|
604
532
|
function TranscriptViewer({ transcript, prompt }) {
|
|
605
|
-
const conversation =
|
|
606
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
607
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
608
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
533
|
+
const conversation = React.useMemo(() => buildConversation(transcript), [transcript]);
|
|
534
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(chunkVZ43ATC5_cjs.Card, { children: [
|
|
535
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardTitle, { className: "text-base", children: "Transcript" }) }),
|
|
536
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkVZ43ATC5_cjs.CardContent, { className: "space-y-3", children: [
|
|
609
537
|
prompt && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-border bg-muted/20 px-4 py-3", children: [
|
|
610
538
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs font-medium text-muted-foreground mb-1", children: "Prompt" }),
|
|
611
539
|
/* @__PURE__ */ jsxRuntime.jsx("pre", { className: "text-xs font-mono whitespace-pre-wrap", children: prompt })
|
|
@@ -635,7 +563,7 @@ function ConversationView({ items }) {
|
|
|
635
563
|
}) });
|
|
636
564
|
}
|
|
637
565
|
function A2AIncomingItem({ item }) {
|
|
638
|
-
const [expanded, setExpanded] =
|
|
566
|
+
const [expanded, setExpanded] = React.useState(false);
|
|
639
567
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-border bg-muted/30 overflow-hidden", children: [
|
|
640
568
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
641
569
|
"button",
|
|
@@ -643,7 +571,7 @@ function A2AIncomingItem({ item }) {
|
|
|
643
571
|
onClick: () => setExpanded(!expanded),
|
|
644
572
|
className: "w-full flex items-center gap-2 px-4 py-2 text-left hover:bg-muted/50 transition-colors",
|
|
645
573
|
children: [
|
|
646
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
574
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "outline", className: "text-[10px]", children: "A2A incoming" }),
|
|
647
575
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground", children: [
|
|
648
576
|
"to ",
|
|
649
577
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-foreground", children: item.sender })
|
|
@@ -661,10 +589,10 @@ function A2AIncomingItem({ item }) {
|
|
|
661
589
|
] });
|
|
662
590
|
}
|
|
663
591
|
function SystemItem({ item }) {
|
|
664
|
-
const [expanded, setExpanded] =
|
|
592
|
+
const [expanded, setExpanded] = React.useState(false);
|
|
665
593
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-border bg-muted/30 overflow-hidden", children: [
|
|
666
594
|
/* @__PURE__ */ jsxRuntime.jsxs("button", { onClick: () => setExpanded(!expanded), className: "w-full flex items-center gap-2 px-4 py-2 text-left hover:bg-muted/50 transition-colors", children: [
|
|
667
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
595
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "outline", className: "text-[10px]", children: "system" }),
|
|
668
596
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground flex-1", children: [
|
|
669
597
|
"Model: ",
|
|
670
598
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono", children: item.model }),
|
|
@@ -690,7 +618,7 @@ function SystemItem({ item }) {
|
|
|
690
618
|
] });
|
|
691
619
|
}
|
|
692
620
|
function AssistantItem({ item }) {
|
|
693
|
-
const [expanded, setExpanded] =
|
|
621
|
+
const [expanded, setExpanded] = React.useState(false);
|
|
694
622
|
const preview = item.text?.split("\n")[0]?.slice(0, 120) ?? "";
|
|
695
623
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-border overflow-hidden", children: [
|
|
696
624
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -699,7 +627,7 @@ function AssistantItem({ item }) {
|
|
|
699
627
|
onClick: () => setExpanded(!expanded),
|
|
700
628
|
className: "w-full flex items-center gap-2 px-4 py-2 text-left hover:bg-muted/30 transition-colors",
|
|
701
629
|
children: [
|
|
702
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
630
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "outline", className: "text-[10px]", children: "assistant" }),
|
|
703
631
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground truncate flex-1", children: preview }),
|
|
704
632
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground flex-shrink-0", children: expanded ? "\u25B2" : "\u25BC" })
|
|
705
633
|
]
|
|
@@ -709,7 +637,7 @@ function AssistantItem({ item }) {
|
|
|
709
637
|
] });
|
|
710
638
|
}
|
|
711
639
|
function ToolItem({ item }) {
|
|
712
|
-
const [expanded, setExpanded] =
|
|
640
|
+
const [expanded, setExpanded] = React.useState(false);
|
|
713
641
|
const hasOutput = item.toolOutput && item.toolOutput.length > 0;
|
|
714
642
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-border overflow-hidden", children: [
|
|
715
643
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -718,9 +646,9 @@ function ToolItem({ item }) {
|
|
|
718
646
|
onClick: () => setExpanded(!expanded),
|
|
719
647
|
className: "w-full flex items-center gap-2 px-4 py-2 text-left hover:bg-muted/30 transition-colors",
|
|
720
648
|
children: [
|
|
721
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
649
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "secondary", className: "text-[10px]", children: "tool" }),
|
|
722
650
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium font-mono", children: item.toolName }),
|
|
723
|
-
hasOutput && /* @__PURE__ */ jsxRuntime.jsx(
|
|
651
|
+
hasOutput && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "outline", className: "text-[10px] ml-auto", children: "has output" }),
|
|
724
652
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: expanded ? "\u25B2" : "\u25BC" })
|
|
725
653
|
]
|
|
726
654
|
}
|
|
@@ -759,18 +687,18 @@ function ResultItem({ item }) {
|
|
|
759
687
|
}
|
|
760
688
|
function ErrorItem({ item }) {
|
|
761
689
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-md border border-destructive/30 bg-destructive/5 px-4 py-3", children: [
|
|
762
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
690
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "destructive", className: "text-[10px]", children: "error" }) }),
|
|
763
691
|
/* @__PURE__ */ jsxRuntime.jsx("pre", { className: "mt-1 text-xs font-mono text-destructive whitespace-pre-wrap", children: item.error })
|
|
764
692
|
] });
|
|
765
693
|
}
|
|
766
694
|
function RunDetailPage({ runId, initialData, initialTranscript }) {
|
|
767
695
|
const { mutate } = swr.useSWRConfig();
|
|
768
|
-
const { data: run, error, isLoading } =
|
|
696
|
+
const { data: run, error, isLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
769
697
|
`run-${runId}`,
|
|
770
698
|
(client) => client.runs.get(runId),
|
|
771
699
|
initialData ? { fallbackData: initialData } : void 0
|
|
772
700
|
);
|
|
773
|
-
const { data: transcript } =
|
|
701
|
+
const { data: transcript } = chunkVZ43ATC5_cjs.useApi(
|
|
774
702
|
run?.transcript_blob_url ? `transcript-${runId}` : null,
|
|
775
703
|
(client) => client.runs.transcriptArray(runId),
|
|
776
704
|
initialTranscript ? { fallbackData: initialTranscript } : void 0
|
|
@@ -783,14 +711,14 @@ function RunDetailPage({ runId, initialData, initialTranscript }) {
|
|
|
783
711
|
}
|
|
784
712
|
if (isLoading || !run) {
|
|
785
713
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
786
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-4", children: Array.from({ length: 4 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
787
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
714
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-4", children: Array.from({ length: 4 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-24 rounded-lg" }, i)) }),
|
|
715
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-96 rounded-lg" })
|
|
788
716
|
] });
|
|
789
717
|
}
|
|
790
718
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
791
719
|
(run.status === "running" || run.status === "pending") && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-end", children: /* @__PURE__ */ jsxRuntime.jsx(CancelRunButton, { runId: run.id, onCancelled: () => mutate(`run-${runId}`) }) }),
|
|
792
720
|
run.triggered_by === "a2a" && run.requested_by_key_name && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
|
|
793
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
721
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "outline", className: "text-[10px]", children: "A2A" }),
|
|
794
722
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
795
723
|
"Requested by ",
|
|
796
724
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-foreground", children: run.requested_by_key_name })
|
|
@@ -821,15 +749,15 @@ function RunDetailPage({ runId, initialData, initialTranscript }) {
|
|
|
821
749
|
] })
|
|
822
750
|
] })
|
|
823
751
|
] }),
|
|
824
|
-
run.error_messages && run.error_messages.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
825
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
826
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
827
|
-
run.error_type && /* @__PURE__ */ jsxRuntime.jsx(
|
|
752
|
+
run.error_messages && run.error_messages.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(chunkVZ43ATC5_cjs.Card, { children: [
|
|
753
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardTitle, { className: "text-base text-destructive", children: "Errors" }) }),
|
|
754
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkVZ43ATC5_cjs.CardContent, { className: "space-y-2", children: [
|
|
755
|
+
run.error_type && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "destructive", children: run.error_type }),
|
|
828
756
|
run.error_messages.map((msg, i) => /* @__PURE__ */ jsxRuntime.jsx("pre", { className: "whitespace-pre-wrap text-sm text-destructive font-mono bg-destructive/10 rounded-md p-3", children: msg }, i))
|
|
829
757
|
] })
|
|
830
758
|
] }),
|
|
831
759
|
/* @__PURE__ */ jsxRuntime.jsx(TranscriptViewer, { transcript: transcript || [], prompt: run.prompt }),
|
|
832
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
760
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Card, { children: /* @__PURE__ */ jsxRuntime.jsxs("details", { children: [
|
|
833
761
|
/* @__PURE__ */ jsxRuntime.jsxs("summary", { className: "flex items-center justify-between px-6 py-4 cursor-pointer list-none hover:bg-muted/30 transition-colors rounded-xl", children: [
|
|
834
762
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-semibold", children: "Metadata" }),
|
|
835
763
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "\\u25BC" })
|
|
@@ -854,9 +782,9 @@ function RunDetailPage({ runId, initialData, initialTranscript }) {
|
|
|
854
782
|
] });
|
|
855
783
|
}
|
|
856
784
|
function CancelRunButton({ runId, onCancelled }) {
|
|
857
|
-
const [open, setOpen] =
|
|
858
|
-
const [cancelling, setCancelling] =
|
|
859
|
-
const client =
|
|
785
|
+
const [open, setOpen] = React.useState(false);
|
|
786
|
+
const [cancelling, setCancelling] = React.useState(false);
|
|
787
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
860
788
|
async function handleConfirm() {
|
|
861
789
|
setCancelling(true);
|
|
862
790
|
try {
|
|
@@ -870,7 +798,7 @@ function CancelRunButton({ runId, onCancelled }) {
|
|
|
870
798
|
}
|
|
871
799
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
872
800
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
873
|
-
|
|
801
|
+
chunkXXF4U7WL_cjs.Button,
|
|
874
802
|
{
|
|
875
803
|
variant: "destructive",
|
|
876
804
|
size: "sm",
|
|
@@ -878,15 +806,15 @@ function CancelRunButton({ runId, onCancelled }) {
|
|
|
878
806
|
children: "Stop Run"
|
|
879
807
|
}
|
|
880
808
|
),
|
|
881
|
-
/* @__PURE__ */ jsxRuntime.jsx(Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "max-w-sm", children: [
|
|
882
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
|
|
883
|
-
/* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "Stop this run?" }),
|
|
884
|
-
/* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { children: "This will terminate the sandbox immediately." })
|
|
809
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Dialog, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogContent, { className: "max-w-sm", children: [
|
|
810
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogHeader, { children: [
|
|
811
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogTitle, { children: "Stop this run?" }),
|
|
812
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogDescription, { children: "This will terminate the sandbox immediately." })
|
|
885
813
|
] }),
|
|
886
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
|
|
887
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
814
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogFooter, { children: [
|
|
815
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { variant: "outline", size: "sm", onClick: () => setOpen(false), disabled: cancelling, children: "Cancel" }),
|
|
888
816
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
889
|
-
|
|
817
|
+
chunkXXF4U7WL_cjs.Button,
|
|
890
818
|
{
|
|
891
819
|
variant: "destructive",
|
|
892
820
|
size: "sm",
|
|
@@ -902,23 +830,23 @@ function CancelRunButton({ runId, onCancelled }) {
|
|
|
902
830
|
var emptyForm = { name: "", slug: "", description: "", base_url: "", mcp_endpoint_path: "/mcp" };
|
|
903
831
|
function McpServerListPage({ initialData }) {
|
|
904
832
|
const { mutate } = swr.useSWRConfig();
|
|
905
|
-
const client =
|
|
906
|
-
const { data: servers, error, isLoading } =
|
|
833
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
834
|
+
const { data: servers, error, isLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
907
835
|
"mcp-servers",
|
|
908
836
|
(c) => c.customConnectors.listServers(),
|
|
909
837
|
initialData ? { fallbackData: initialData } : void 0
|
|
910
838
|
);
|
|
911
|
-
const [showCreate, setShowCreate] =
|
|
912
|
-
const [creating, setCreating] =
|
|
913
|
-
const [createForm, setCreateForm] =
|
|
914
|
-
const [createError, setCreateError] =
|
|
915
|
-
const [editTarget, setEditTarget] =
|
|
916
|
-
const [editing, setEditing] =
|
|
917
|
-
const [editForm, setEditForm] =
|
|
918
|
-
const [editError, setEditError] =
|
|
919
|
-
const [deleteTarget, setDeleteTarget] =
|
|
920
|
-
const [deleting, setDeleting] =
|
|
921
|
-
const [deleteError, setDeleteError] =
|
|
839
|
+
const [showCreate, setShowCreate] = React.useState(false);
|
|
840
|
+
const [creating, setCreating] = React.useState(false);
|
|
841
|
+
const [createForm, setCreateForm] = React.useState(emptyForm);
|
|
842
|
+
const [createError, setCreateError] = React.useState("");
|
|
843
|
+
const [editTarget, setEditTarget] = React.useState(null);
|
|
844
|
+
const [editing, setEditing] = React.useState(false);
|
|
845
|
+
const [editForm, setEditForm] = React.useState({ name: "", description: "" });
|
|
846
|
+
const [editError, setEditError] = React.useState("");
|
|
847
|
+
const [deleteTarget, setDeleteTarget] = React.useState(null);
|
|
848
|
+
const [deleting, setDeleting] = React.useState(false);
|
|
849
|
+
const [deleteError, setDeleteError] = React.useState("");
|
|
922
850
|
async function handleCreate() {
|
|
923
851
|
setCreating(true);
|
|
924
852
|
setCreateError("");
|
|
@@ -973,10 +901,10 @@ function McpServerListPage({ initialData }) {
|
|
|
973
901
|
] }) });
|
|
974
902
|
}
|
|
975
903
|
if (isLoading || !servers) {
|
|
976
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
904
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-96 rounded-lg" });
|
|
977
905
|
}
|
|
978
906
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
979
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
907
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { variant: "outline", size: "sm", onClick: () => setShowCreate(true), children: "+ New Connector" }) }),
|
|
980
908
|
/* @__PURE__ */ jsxRuntime.jsxs(AdminTable, { children: [
|
|
981
909
|
/* @__PURE__ */ jsxRuntime.jsxs(AdminTableHead, { children: [
|
|
982
910
|
/* @__PURE__ */ jsxRuntime.jsx(Th, { children: "Name" }),
|
|
@@ -1003,12 +931,12 @@ function McpServerListPage({ initialData }) {
|
|
|
1003
931
|
) }),
|
|
1004
932
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 font-mono text-xs text-muted-foreground", children: s.slug }),
|
|
1005
933
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 font-mono text-xs text-muted-foreground truncate max-w-xs", title: s.base_url, children: s.base_url }),
|
|
1006
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
934
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: s.client_id ? "default" : "secondary", children: s.client_id ? "Registered" : "No DCR" }) }),
|
|
1007
935
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-right", children: s.connection_count }),
|
|
1008
936
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-right text-green-500", children: s.active_count }),
|
|
1009
937
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-muted-foreground text-xs", children: new Date(s.created_at).toLocaleDateString() }),
|
|
1010
938
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-right", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1011
|
-
|
|
939
|
+
chunkXXF4U7WL_cjs.Button,
|
|
1012
940
|
{
|
|
1013
941
|
variant: "destructive",
|
|
1014
942
|
size: "sm",
|
|
@@ -1021,29 +949,29 @@ function McpServerListPage({ initialData }) {
|
|
|
1021
949
|
servers.length === 0 && /* @__PURE__ */ jsxRuntime.jsx(EmptyRow, { colSpan: 8, children: 'No custom connectors registered. Click "+ New Connector" to add one.' })
|
|
1022
950
|
] })
|
|
1023
951
|
] }),
|
|
1024
|
-
/* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: showCreate, onOpenChange: setShowCreate, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "max-w-lg", children: [
|
|
1025
|
-
/* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "Register Connector" }) }),
|
|
1026
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogBody, { className: "space-y-3", children: [
|
|
952
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Dialog, { open: showCreate, onOpenChange: setShowCreate, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogContent, { className: "max-w-lg", children: [
|
|
953
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogTitle, { children: "Register Connector" }) }),
|
|
954
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogBody, { className: "space-y-3", children: [
|
|
1027
955
|
createError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: createError }),
|
|
1028
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Name", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1029
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Slug", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1030
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Description", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1031
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Base URL", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1032
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "MCP Endpoint Path", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
956
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Name", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { value: createForm.name, onChange: (e) => setCreateForm({ ...createForm, name: e.target.value }), placeholder: "My MCP Server" }) }),
|
|
957
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Slug", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { value: createForm.slug, onChange: (e) => setCreateForm({ ...createForm, slug: e.target.value }), placeholder: "my-mcp-server" }) }),
|
|
958
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Description", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { value: createForm.description, onChange: (e) => setCreateForm({ ...createForm, description: e.target.value }), placeholder: "What this connector does" }) }),
|
|
959
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Base URL", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { value: createForm.base_url, onChange: (e) => setCreateForm({ ...createForm, base_url: e.target.value }), placeholder: "https://my-server.example.com" }) }),
|
|
960
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "MCP Endpoint Path", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { value: createForm.mcp_endpoint_path, onChange: (e) => setCreateForm({ ...createForm, mcp_endpoint_path: e.target.value }), placeholder: "/mcp" }) })
|
|
1033
961
|
] }),
|
|
1034
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
|
|
1035
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1036
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
962
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogFooter, { children: [
|
|
963
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { variant: "outline", onClick: () => setShowCreate(false), children: "Cancel" }),
|
|
964
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { onClick: handleCreate, disabled: creating || !createForm.name || !createForm.base_url, children: creating ? "Creating..." : "Create" })
|
|
1037
965
|
] })
|
|
1038
966
|
] }) }),
|
|
1039
|
-
/* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: !!editTarget, onOpenChange: (open) => {
|
|
967
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Dialog, { open: !!editTarget, onOpenChange: (open) => {
|
|
1040
968
|
if (!open) setEditTarget(null);
|
|
1041
|
-
}, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "max-w-lg", children: [
|
|
1042
|
-
/* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "Edit Connector" }) }),
|
|
1043
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogBody, { className: "space-y-3", children: [
|
|
969
|
+
}, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogContent, { className: "max-w-lg", children: [
|
|
970
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogTitle, { children: "Edit Connector" }) }),
|
|
971
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogBody, { className: "space-y-3", children: [
|
|
1044
972
|
editError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: editError }),
|
|
1045
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Name", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1046
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Description", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
973
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Name", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { value: editForm.name, onChange: (e) => setEditForm({ ...editForm, name: e.target.value }) }) }),
|
|
974
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Description", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { value: editForm.description, onChange: (e) => setEditForm({ ...editForm, description: e.target.value }) }) }),
|
|
1047
975
|
editTarget && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-muted-foreground space-y-1", children: [
|
|
1048
976
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1049
977
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: "Slug:" }),
|
|
@@ -1062,9 +990,9 @@ function McpServerListPage({ initialData }) {
|
|
|
1062
990
|
] })
|
|
1063
991
|
] })
|
|
1064
992
|
] }),
|
|
1065
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
|
|
1066
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1067
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
993
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogFooter, { children: [
|
|
994
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { variant: "outline", onClick: () => setEditTarget(null), children: "Cancel" }),
|
|
995
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { onClick: handleEdit, disabled: editing || !editForm.name, children: editing ? "Saving..." : "Save" })
|
|
1068
996
|
] })
|
|
1069
997
|
] }) }),
|
|
1070
998
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -1094,20 +1022,20 @@ function McpServerListPage({ initialData }) {
|
|
|
1094
1022
|
}
|
|
1095
1023
|
function PluginMarketplaceListPage({ initialData }) {
|
|
1096
1024
|
const { mutate } = swr.useSWRConfig();
|
|
1097
|
-
const client =
|
|
1098
|
-
const { LinkComponent, basePath } =
|
|
1099
|
-
const { data: marketplaces, error, isLoading } =
|
|
1025
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
1026
|
+
const { LinkComponent, basePath } = chunkXXF4U7WL_cjs.useNavigation();
|
|
1027
|
+
const { data: marketplaces, error, isLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
1100
1028
|
"plugin-marketplaces",
|
|
1101
1029
|
(c) => c.pluginMarketplaces.list(),
|
|
1102
1030
|
initialData ? { fallbackData: initialData } : void 0
|
|
1103
1031
|
);
|
|
1104
|
-
const [showAdd, setShowAdd] =
|
|
1105
|
-
const [adding, setAdding] =
|
|
1106
|
-
const [addError, setAddError] =
|
|
1107
|
-
const [newMarketplace, setNewMarketplace] =
|
|
1108
|
-
const [deleteTarget, setDeleteTarget] =
|
|
1109
|
-
const [deleting, setDeleting] =
|
|
1110
|
-
const [deleteError, setDeleteError] =
|
|
1032
|
+
const [showAdd, setShowAdd] = React.useState(false);
|
|
1033
|
+
const [adding, setAdding] = React.useState(false);
|
|
1034
|
+
const [addError, setAddError] = React.useState("");
|
|
1035
|
+
const [newMarketplace, setNewMarketplace] = React.useState({ name: "", github_repo: "" });
|
|
1036
|
+
const [deleteTarget, setDeleteTarget] = React.useState(null);
|
|
1037
|
+
const [deleting, setDeleting] = React.useState(false);
|
|
1038
|
+
const [deleteError, setDeleteError] = React.useState("");
|
|
1111
1039
|
function resetAddForm() {
|
|
1112
1040
|
setNewMarketplace({ name: "", github_repo: "" });
|
|
1113
1041
|
setAddError("");
|
|
@@ -1147,26 +1075,26 @@ function PluginMarketplaceListPage({ initialData }) {
|
|
|
1147
1075
|
] }) });
|
|
1148
1076
|
}
|
|
1149
1077
|
if (isLoading || !marketplaces) {
|
|
1150
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1078
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-96 rounded-lg" });
|
|
1151
1079
|
}
|
|
1152
1080
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
1153
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1154
|
-
/* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: showAdd, onOpenChange: (v) => {
|
|
1081
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { variant: "outline", size: "sm", onClick: () => setShowAdd(true), children: "+ Add Marketplace" }) }),
|
|
1082
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Dialog, { open: showAdd, onOpenChange: (v) => {
|
|
1155
1083
|
setShowAdd(v);
|
|
1156
1084
|
if (!v) resetAddForm();
|
|
1157
|
-
}, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "max-w-md", children: [
|
|
1158
|
-
/* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "Add Marketplace" }) }),
|
|
1159
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogBody, { className: "space-y-3", children: [
|
|
1160
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Name", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1161
|
-
|
|
1085
|
+
}, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogContent, { className: "max-w-md", children: [
|
|
1086
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogTitle, { children: "Add Marketplace" }) }),
|
|
1087
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogBody, { className: "space-y-3", children: [
|
|
1088
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Name", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1089
|
+
chunkXXF4U7WL_cjs.Input,
|
|
1162
1090
|
{
|
|
1163
1091
|
value: newMarketplace.name,
|
|
1164
1092
|
onChange: (e) => setNewMarketplace({ ...newMarketplace, name: e.target.value }),
|
|
1165
1093
|
placeholder: "My Marketplace"
|
|
1166
1094
|
}
|
|
1167
1095
|
) }),
|
|
1168
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "GitHub Repo", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1169
|
-
|
|
1096
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "GitHub Repo", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1097
|
+
chunkXXF4U7WL_cjs.Input,
|
|
1170
1098
|
{
|
|
1171
1099
|
value: newMarketplace.github_repo,
|
|
1172
1100
|
onChange: (e) => setNewMarketplace({ ...newMarketplace, github_repo: e.target.value }),
|
|
@@ -1175,12 +1103,12 @@ function PluginMarketplaceListPage({ initialData }) {
|
|
|
1175
1103
|
) }),
|
|
1176
1104
|
/* @__PURE__ */ jsxRuntime.jsx(FormError, { error: addError })
|
|
1177
1105
|
] }),
|
|
1178
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
|
|
1179
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1106
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogFooter, { children: [
|
|
1107
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { variant: "outline", size: "sm", onClick: () => {
|
|
1180
1108
|
setShowAdd(false);
|
|
1181
1109
|
resetAddForm();
|
|
1182
1110
|
}, children: "Cancel" }),
|
|
1183
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1111
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", onClick: handleAdd, disabled: adding || !newMarketplace.name || !newMarketplace.github_repo, children: adding ? "Adding..." : "Add Marketplace" })
|
|
1184
1112
|
] })
|
|
1185
1113
|
] }) }),
|
|
1186
1114
|
/* @__PURE__ */ jsxRuntime.jsxs(AdminTable, { children: [
|
|
@@ -1202,7 +1130,7 @@ function PluginMarketplaceListPage({ initialData }) {
|
|
|
1202
1130
|
children: m.name
|
|
1203
1131
|
}
|
|
1204
1132
|
),
|
|
1205
|
-
m.is_owned && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1133
|
+
m.is_owned && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "secondary", className: "ml-2 text-xs", children: "Owned" })
|
|
1206
1134
|
] }),
|
|
1207
1135
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1208
1136
|
"a",
|
|
@@ -1214,10 +1142,10 @@ function PluginMarketplaceListPage({ initialData }) {
|
|
|
1214
1142
|
children: m.github_repo
|
|
1215
1143
|
}
|
|
1216
1144
|
) }),
|
|
1217
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-right", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1145
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-right", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: m.agent_count > 0 ? "default" : "secondary", children: m.agent_count }) }),
|
|
1218
1146
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-muted-foreground text-xs", children: new Date(m.created_at).toLocaleDateString() }),
|
|
1219
1147
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-right", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1220
|
-
|
|
1148
|
+
chunkXXF4U7WL_cjs.Button,
|
|
1221
1149
|
{
|
|
1222
1150
|
variant: "destructive",
|
|
1223
1151
|
size: "sm",
|
|
@@ -1257,20 +1185,20 @@ function PluginMarketplaceListPage({ initialData }) {
|
|
|
1257
1185
|
}
|
|
1258
1186
|
function PluginMarketplaceDetailPage({ marketplaceId, initialData, initialPlugins }) {
|
|
1259
1187
|
const { mutate } = swr.useSWRConfig();
|
|
1260
|
-
const client =
|
|
1261
|
-
const { LinkComponent, basePath } =
|
|
1262
|
-
const { data: marketplace, error, isLoading } =
|
|
1188
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
1189
|
+
const { LinkComponent, basePath } = chunkXXF4U7WL_cjs.useNavigation();
|
|
1190
|
+
const { data: marketplace, error, isLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
1263
1191
|
`marketplace-${marketplaceId}`,
|
|
1264
1192
|
(c) => c.pluginMarketplaces.get(marketplaceId),
|
|
1265
1193
|
initialData ? { fallbackData: initialData } : void 0
|
|
1266
1194
|
);
|
|
1267
|
-
const { data: plugins } =
|
|
1195
|
+
const { data: plugins } = chunkVZ43ATC5_cjs.useApi(
|
|
1268
1196
|
`marketplace-${marketplaceId}-plugins`,
|
|
1269
1197
|
(c) => c.pluginMarketplaces.listPlugins(marketplaceId),
|
|
1270
1198
|
initialPlugins ? { fallbackData: initialPlugins } : void 0
|
|
1271
1199
|
);
|
|
1272
|
-
const [tokenInput, setTokenInput] =
|
|
1273
|
-
const [savingToken, setSavingToken] =
|
|
1200
|
+
const [tokenInput, setTokenInput] = React.useState("");
|
|
1201
|
+
const [savingToken, setSavingToken] = React.useState(false);
|
|
1274
1202
|
async function handleSaveToken() {
|
|
1275
1203
|
setSavingToken(true);
|
|
1276
1204
|
try {
|
|
@@ -1290,14 +1218,14 @@ function PluginMarketplaceDetailPage({ marketplaceId, initialData, initialPlugin
|
|
|
1290
1218
|
}
|
|
1291
1219
|
if (isLoading || !marketplace) {
|
|
1292
1220
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
1293
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1294
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1295
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1221
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-12 w-64" }),
|
|
1222
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-32 rounded-lg" }),
|
|
1223
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-64 rounded-lg" })
|
|
1296
1224
|
] });
|
|
1297
1225
|
}
|
|
1298
1226
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
1299
1227
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
1300
|
-
marketplace.has_token && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1228
|
+
marketplace.has_token && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "secondary", children: "Owned" }),
|
|
1301
1229
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1302
1230
|
"a",
|
|
1303
1231
|
{
|
|
@@ -1309,13 +1237,13 @@ function PluginMarketplaceDetailPage({ marketplaceId, initialData, initialPlugin
|
|
|
1309
1237
|
}
|
|
1310
1238
|
)
|
|
1311
1239
|
] }),
|
|
1312
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1313
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1314
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1240
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkVZ43ATC5_cjs.Card, { children: [
|
|
1241
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardTitle, { className: "text-base", children: "GitHub Token" }) }),
|
|
1242
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3", children: [
|
|
1315
1243
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: marketplace.has_token ? "A GitHub token is configured. You can update it below." : "Add a GitHub personal access token to enable write access and private repo support." }),
|
|
1316
1244
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
|
|
1317
1245
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1318
|
-
|
|
1246
|
+
chunkXXF4U7WL_cjs.Input,
|
|
1319
1247
|
{
|
|
1320
1248
|
type: "password",
|
|
1321
1249
|
placeholder: "ghp_...",
|
|
@@ -1324,30 +1252,30 @@ function PluginMarketplaceDetailPage({ marketplaceId, initialData, initialPlugin
|
|
|
1324
1252
|
className: "flex-1"
|
|
1325
1253
|
}
|
|
1326
1254
|
),
|
|
1327
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1255
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", onClick: handleSaveToken, disabled: savingToken || !tokenInput, children: savingToken ? "Saving..." : marketplace.has_token ? "Update Token" : "Save Token" })
|
|
1328
1256
|
] })
|
|
1329
1257
|
] }) })
|
|
1330
1258
|
] }),
|
|
1331
1259
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1332
1260
|
/* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { title: "Plugins" }),
|
|
1333
|
-
!plugins ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1261
|
+
!plugins ? /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-48 rounded-lg" }) : plugins.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "No plugins found in this marketplace." }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4", children: plugins.map((plugin) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1334
1262
|
LinkComponent,
|
|
1335
1263
|
{
|
|
1336
1264
|
href: `${basePath}/plugin-marketplaces/${marketplaceId}/plugins/${plugin.name}`,
|
|
1337
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1338
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1265
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(chunkVZ43ATC5_cjs.Card, { className: "hover:border-primary/50 transition-colors cursor-pointer h-full", children: [
|
|
1266
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardHeader, { className: "pb-2", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkVZ43ATC5_cjs.CardTitle, { className: "text-sm font-medium flex items-center justify-between", children: [
|
|
1339
1267
|
plugin.displayName,
|
|
1340
1268
|
plugin.version && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground font-normal", children: [
|
|
1341
1269
|
"v",
|
|
1342
1270
|
plugin.version
|
|
1343
1271
|
] })
|
|
1344
1272
|
] }) }),
|
|
1345
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1273
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkVZ43ATC5_cjs.CardContent, { children: [
|
|
1346
1274
|
plugin.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mb-3", children: plugin.description }),
|
|
1347
1275
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1.5", children: [
|
|
1348
|
-
plugin.hasAgents && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1349
|
-
plugin.hasSkills && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1350
|
-
plugin.hasMcpJson && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1276
|
+
plugin.hasAgents && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "secondary", className: "text-xs", children: "Agents" }),
|
|
1277
|
+
plugin.hasSkills && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "secondary", className: "text-xs", children: "Skills" }),
|
|
1278
|
+
plugin.hasMcpJson && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "secondary", className: "text-xs", children: "MCP" })
|
|
1351
1279
|
] })
|
|
1352
1280
|
] })
|
|
1353
1281
|
] })
|
|
@@ -1366,13 +1294,13 @@ function AgentsTab({
|
|
|
1366
1294
|
return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground py-4", children: "No agents defined in this plugin." });
|
|
1367
1295
|
}
|
|
1368
1296
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: agents.map((agent) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1369
|
-
|
|
1297
|
+
chunkVZ43ATC5_cjs.Card,
|
|
1370
1298
|
{
|
|
1371
1299
|
className: `cursor-pointer transition-colors hover:border-primary/50 ${selectedFilename === agent.filename ? "border-primary ring-1 ring-primary/30" : ""}`,
|
|
1372
1300
|
onClick: () => onSelectAgent(agent.filename),
|
|
1373
1301
|
children: [
|
|
1374
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1375
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1302
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardHeader, { className: "pb-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardTitle, { className: "text-sm font-medium", children: agent.name }) }),
|
|
1303
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkVZ43ATC5_cjs.CardContent, { children: [
|
|
1376
1304
|
agent.description ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: agent.description }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground italic", children: "No description" }),
|
|
1377
1305
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground/60 mt-2 font-mono", children: agent.filename })
|
|
1378
1306
|
] })
|
|
@@ -1390,13 +1318,13 @@ function SkillsTab({
|
|
|
1390
1318
|
return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground py-4", children: "No skills defined in this plugin." });
|
|
1391
1319
|
}
|
|
1392
1320
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4", children: skills.map((skill) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1393
|
-
|
|
1321
|
+
chunkVZ43ATC5_cjs.Card,
|
|
1394
1322
|
{
|
|
1395
1323
|
className: `cursor-pointer transition-colors hover:border-primary/50 ${selectedSkill === skill ? "border-primary ring-1 ring-primary/30" : ""}`,
|
|
1396
1324
|
onClick: () => onSelectSkill(skill),
|
|
1397
1325
|
children: [
|
|
1398
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1399
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1326
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardHeader, { className: "pb-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardTitle, { className: "text-sm font-medium", children: skill }) }),
|
|
1327
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground font-mono", children: [
|
|
1400
1328
|
"skills/",
|
|
1401
1329
|
skill,
|
|
1402
1330
|
"/"
|
|
@@ -1416,13 +1344,13 @@ function ConnectorsTab({
|
|
|
1416
1344
|
return /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground py-4", children: "No connectors defined in this plugin." });
|
|
1417
1345
|
}
|
|
1418
1346
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1419
|
-
|
|
1347
|
+
chunkVZ43ATC5_cjs.Card,
|
|
1420
1348
|
{
|
|
1421
1349
|
className: `cursor-pointer transition-colors hover:border-primary/50 ${selected ? "border-primary ring-1 ring-primary/30" : ""}`,
|
|
1422
1350
|
onClick: onSelectConnector,
|
|
1423
1351
|
children: [
|
|
1424
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1425
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1352
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardHeader, { className: "pb-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardTitle, { className: "text-sm font-medium", children: ".mcp.json" }) }),
|
|
1353
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.CardContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: "This plugin includes an MCP connector configuration that will be suggested to agents using it." }) })
|
|
1426
1354
|
]
|
|
1427
1355
|
}
|
|
1428
1356
|
);
|
|
@@ -1444,8 +1372,8 @@ function FileEditorInline({
|
|
|
1444
1372
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1445
1373
|
saveError && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-destructive", children: saveError }),
|
|
1446
1374
|
saveSuccess && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-green-500", children: saveSuccess }),
|
|
1447
|
-
!readOnly && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1448
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1375
|
+
!readOnly && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", onClick: onSave, disabled: saving, className: "h-7 text-xs", children: saving ? "Saving..." : "Save" }),
|
|
1376
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", variant: "ghost", onClick: onClose, className: "h-7 text-xs", children: "Close" })
|
|
1449
1377
|
] })
|
|
1450
1378
|
] }),
|
|
1451
1379
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -1461,21 +1389,21 @@ function FileEditorInline({
|
|
|
1461
1389
|
] });
|
|
1462
1390
|
}
|
|
1463
1391
|
function PluginDetailPage({ marketplaceId, pluginName }) {
|
|
1464
|
-
const { LinkComponent, basePath } =
|
|
1465
|
-
const client =
|
|
1466
|
-
const { data: plugin, error, isLoading } =
|
|
1392
|
+
const { LinkComponent, basePath } = chunkXXF4U7WL_cjs.useNavigation();
|
|
1393
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
1394
|
+
const { data: plugin, error, isLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
1467
1395
|
`marketplace-${marketplaceId}-plugin-${pluginName}`,
|
|
1468
1396
|
(c) => c.pluginMarketplaces.getPlugin(marketplaceId, pluginName)
|
|
1469
1397
|
);
|
|
1470
|
-
const [editorState, setEditorState] =
|
|
1471
|
-
const [pluginFiles, setPluginFiles] =
|
|
1472
|
-
const [filesLoading, setFilesLoading] =
|
|
1473
|
-
const [filesError, setFilesError] =
|
|
1474
|
-
const [editedContent, setEditedContent] =
|
|
1475
|
-
const [saving, setSaving] =
|
|
1476
|
-
const [saveError, setSaveError] =
|
|
1477
|
-
const [saveSuccess, setSaveSuccess] =
|
|
1478
|
-
const fetchFiles =
|
|
1398
|
+
const [editorState, setEditorState] = React.useState(null);
|
|
1399
|
+
const [pluginFiles, setPluginFiles] = React.useState(null);
|
|
1400
|
+
const [filesLoading, setFilesLoading] = React.useState(false);
|
|
1401
|
+
const [filesError, setFilesError] = React.useState("");
|
|
1402
|
+
const [editedContent, setEditedContent] = React.useState(/* @__PURE__ */ new Map());
|
|
1403
|
+
const [saving, setSaving] = React.useState(false);
|
|
1404
|
+
const [saveError, setSaveError] = React.useState("");
|
|
1405
|
+
const [saveSuccess, setSaveSuccess] = React.useState("");
|
|
1406
|
+
const fetchFiles = React.useCallback(async () => {
|
|
1479
1407
|
if (pluginFiles) return pluginFiles;
|
|
1480
1408
|
setFilesLoading(true);
|
|
1481
1409
|
setFilesError("");
|
|
@@ -1490,7 +1418,7 @@ function PluginDetailPage({ marketplaceId, pluginName }) {
|
|
|
1490
1418
|
setFilesLoading(false);
|
|
1491
1419
|
}
|
|
1492
1420
|
}, [client, marketplaceId, pluginName, pluginFiles]);
|
|
1493
|
-
const handleSelectAgent =
|
|
1421
|
+
const handleSelectAgent = React.useCallback(async (filename) => {
|
|
1494
1422
|
if (editorState?.type === "agent" && editorState.identifier === filename) {
|
|
1495
1423
|
setEditorState(null);
|
|
1496
1424
|
return;
|
|
@@ -1502,7 +1430,7 @@ function PluginDetailPage({ marketplaceId, pluginName }) {
|
|
|
1502
1430
|
setEditorState({ type: "agent", identifier: filename });
|
|
1503
1431
|
}
|
|
1504
1432
|
}, [editorState, fetchFiles]);
|
|
1505
|
-
const handleSelectSkill =
|
|
1433
|
+
const handleSelectSkill = React.useCallback(async (skill) => {
|
|
1506
1434
|
if (editorState?.type === "skill" && editorState.identifier === skill) {
|
|
1507
1435
|
setEditorState(null);
|
|
1508
1436
|
return;
|
|
@@ -1514,7 +1442,7 @@ function PluginDetailPage({ marketplaceId, pluginName }) {
|
|
|
1514
1442
|
setEditorState({ type: "skill", identifier: skill });
|
|
1515
1443
|
}
|
|
1516
1444
|
}, [editorState, fetchFiles]);
|
|
1517
|
-
const handleSelectConnector =
|
|
1445
|
+
const handleSelectConnector = React.useCallback(async () => {
|
|
1518
1446
|
if (editorState?.type === "connector") {
|
|
1519
1447
|
setEditorState(null);
|
|
1520
1448
|
return;
|
|
@@ -1607,9 +1535,9 @@ function PluginDetailPage({ marketplaceId, pluginName }) {
|
|
|
1607
1535
|
}
|
|
1608
1536
|
if (isLoading || !plugin) {
|
|
1609
1537
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
1610
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1611
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1612
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1538
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-8 w-48" }),
|
|
1539
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-4 w-96" }),
|
|
1540
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-64 rounded-lg" })
|
|
1613
1541
|
] });
|
|
1614
1542
|
}
|
|
1615
1543
|
const readOnly = pluginFiles ? !pluginFiles.isOwned : true;
|
|
@@ -1626,7 +1554,7 @@ function PluginDetailPage({ marketplaceId, pluginName }) {
|
|
|
1626
1554
|
selectedFilename: editorState?.type === "agent" ? editorState.identifier : null
|
|
1627
1555
|
}
|
|
1628
1556
|
),
|
|
1629
|
-
editorState?.type === "agent" && editorFile && (filesLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1557
|
+
editorState?.type === "agent" && editorFile && (filesLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-[400px] rounded-md" }) }) : filesError ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-sm text-destructive", children: filesError }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1630
1558
|
FileEditorInline,
|
|
1631
1559
|
{
|
|
1632
1560
|
filePath: editorFile.path,
|
|
@@ -1653,7 +1581,7 @@ function PluginDetailPage({ marketplaceId, pluginName }) {
|
|
|
1653
1581
|
selectedSkill: editorState?.type === "skill" ? editorState.identifier : null
|
|
1654
1582
|
}
|
|
1655
1583
|
),
|
|
1656
|
-
editorState?.type === "skill" && editorFile && (filesLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1584
|
+
editorState?.type === "skill" && editorFile && (filesLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-[400px] rounded-md" }) }) : filesError ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-sm text-destructive", children: filesError }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1657
1585
|
FileEditorInline,
|
|
1658
1586
|
{
|
|
1659
1587
|
filePath: editorFile.path,
|
|
@@ -1681,7 +1609,7 @@ function PluginDetailPage({ marketplaceId, pluginName }) {
|
|
|
1681
1609
|
selected: editorState?.type === "connector"
|
|
1682
1610
|
}
|
|
1683
1611
|
),
|
|
1684
|
-
editorState?.type === "connector" && editorFile && (filesLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1612
|
+
editorState?.type === "connector" && editorFile && (filesLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-[400px] rounded-md" }) }) : filesError ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-sm text-destructive", children: filesError }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
1685
1613
|
FileEditorInline,
|
|
1686
1614
|
{
|
|
1687
1615
|
filePath: editorFile.path,
|
|
@@ -1702,11 +1630,11 @@ function PluginDetailPage({ marketplaceId, pluginName }) {
|
|
|
1702
1630
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1703
1631
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
1704
1632
|
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-2xl font-semibold", children: plugin.displayName }),
|
|
1705
|
-
plugin.version && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1633
|
+
plugin.version && /* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.Badge, { variant: "outline", children: [
|
|
1706
1634
|
"v",
|
|
1707
1635
|
plugin.version
|
|
1708
1636
|
] }),
|
|
1709
|
-
pluginFiles && (pluginFiles.isOwned ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1637
|
+
pluginFiles && (pluginFiles.isOwned ? /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "secondary", children: "Editable" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "outline", children: "Read-only" }))
|
|
1710
1638
|
] }),
|
|
1711
1639
|
plugin.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mt-1", children: plugin.description })
|
|
1712
1640
|
] }),
|
|
@@ -1716,12 +1644,12 @@ function PluginDetailPage({ marketplaceId, pluginName }) {
|
|
|
1716
1644
|
var TIMEZONES = typeof Intl !== "undefined" && Intl.supportedValuesOf ? Intl.supportedValuesOf("timeZone") : ["UTC"];
|
|
1717
1645
|
function SettingsPage({ initialData, hideDangerZone }) {
|
|
1718
1646
|
const { mutate } = swr.useSWRConfig();
|
|
1719
|
-
const { data: tenantData, error: tenantError, isLoading: tenantLoading } =
|
|
1647
|
+
const { data: tenantData, error: tenantError, isLoading: tenantLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
1720
1648
|
"settings-tenant",
|
|
1721
1649
|
(c) => c.tenants.getMe(),
|
|
1722
1650
|
initialData ? { fallbackData: initialData.tenant } : void 0
|
|
1723
1651
|
);
|
|
1724
|
-
const { data: apiKeysData, error: apiKeysError, isLoading: apiKeysLoading } =
|
|
1652
|
+
const { data: apiKeysData, error: apiKeysError, isLoading: apiKeysLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
1725
1653
|
"settings-keys",
|
|
1726
1654
|
(c) => c.keys.list ? c.keys.list() : Promise.resolve([]),
|
|
1727
1655
|
initialData ? { fallbackData: initialData.api_keys } : void 0
|
|
@@ -1737,8 +1665,8 @@ function SettingsPage({ initialData, hideDangerZone }) {
|
|
|
1737
1665
|
}
|
|
1738
1666
|
if (isLoading || !data) {
|
|
1739
1667
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
1740
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1741
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1668
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-48 rounded-lg" }),
|
|
1669
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-64 rounded-lg" })
|
|
1742
1670
|
] });
|
|
1743
1671
|
}
|
|
1744
1672
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
@@ -1754,13 +1682,13 @@ function SettingsPage({ initialData, hideDangerZone }) {
|
|
|
1754
1682
|
] });
|
|
1755
1683
|
}
|
|
1756
1684
|
function CompanyForm({ tenant, onSaved }) {
|
|
1757
|
-
const client =
|
|
1758
|
-
const fileInputRef =
|
|
1759
|
-
const [name, setName] =
|
|
1760
|
-
const [budget, setBudget] =
|
|
1761
|
-
const [timezone, setTimezone] =
|
|
1762
|
-
const [logoUrl, setLogoUrl] =
|
|
1763
|
-
const [saving, setSaving] =
|
|
1685
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
1686
|
+
const fileInputRef = React.useRef(null);
|
|
1687
|
+
const [name, setName] = React.useState(tenant.name);
|
|
1688
|
+
const [budget, setBudget] = React.useState(tenant.monthly_budget_usd.toString());
|
|
1689
|
+
const [timezone, setTimezone] = React.useState(tenant.timezone);
|
|
1690
|
+
const [logoUrl, setLogoUrl] = React.useState(tenant.logo_url ?? "");
|
|
1691
|
+
const [saving, setSaving] = React.useState(false);
|
|
1764
1692
|
const isDirty = name !== tenant.name || budget !== tenant.monthly_budget_usd.toString() || timezone !== tenant.timezone || (logoUrl || "") !== (tenant.logo_url ?? "");
|
|
1765
1693
|
async function handleSave() {
|
|
1766
1694
|
setSaving(true);
|
|
@@ -1784,8 +1712,8 @@ function CompanyForm({ tenant, onSaved }) {
|
|
|
1784
1712
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
|
|
1785
1713
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "Upload a logo for your company. Recommended size: 256x256px." }),
|
|
1786
1714
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1787
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1788
|
-
logoUrl && /* @__PURE__ */ jsxRuntime.jsx(
|
|
1715
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", variant: "outline", onClick: () => fileInputRef.current?.click(), children: "Upload image" }),
|
|
1716
|
+
logoUrl && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", variant: "outline", onClick: () => setLogoUrl(""), children: "Remove" }),
|
|
1789
1717
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1790
1718
|
"input",
|
|
1791
1719
|
{
|
|
@@ -1810,14 +1738,14 @@ function CompanyForm({ tenant, onSaved }) {
|
|
|
1810
1738
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-muted-foreground/25 p-5", children: [
|
|
1811
1739
|
/* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { title: "Company Details" }),
|
|
1812
1740
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-4", children: [
|
|
1813
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Name", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1814
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Slug", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1815
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Status", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center h-9", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1816
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Timezone", children: /* @__PURE__ */ jsxRuntime.jsx(Select, { value: timezone, onChange: (e) => setTimezone(e.target.value), children: TIMEZONES.map((tz) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: tz, children: tz.replace(/_/g, " ") }, tz)) }) }),
|
|
1817
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Monthly Budget (USD)", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
1741
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Name", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { value: name, onChange: (e) => setName(e.target.value) }) }),
|
|
1742
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Slug", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { value: tenant.slug, readOnly: true, disabled: true, className: "opacity-60" }) }),
|
|
1743
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Status", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center h-9", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: tenant.status === "active" ? "default" : "destructive", children: tenant.status }) }) }),
|
|
1744
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Timezone", children: /* @__PURE__ */ jsxRuntime.jsx(Select, { value: timezone, onChange: (e) => setTimezone(e.target.value), children: TIMEZONES.map((tz) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: tz, children: tz.replace(/_/g, " ") }, tz)) }) }),
|
|
1745
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Monthly Budget (USD)", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
1818
1746
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground text-sm", children: "$" }),
|
|
1819
1747
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1820
|
-
|
|
1748
|
+
chunkXXF4U7WL_cjs.Input,
|
|
1821
1749
|
{
|
|
1822
1750
|
type: "number",
|
|
1823
1751
|
step: "0.01",
|
|
@@ -1829,18 +1757,18 @@ function CompanyForm({ tenant, onSaved }) {
|
|
|
1829
1757
|
] }) })
|
|
1830
1758
|
] })
|
|
1831
1759
|
] }),
|
|
1832
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1760
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { onClick: handleSave, disabled: saving || !isDirty, size: "sm", children: saving ? "Saving..." : "Save Changes" }) })
|
|
1833
1761
|
] });
|
|
1834
1762
|
}
|
|
1835
1763
|
function ApiKeysSection({ initialKeys, onChanged }) {
|
|
1836
|
-
const client =
|
|
1837
|
-
const [creating, setCreating] =
|
|
1838
|
-
const [newKeyName, setNewKeyName] =
|
|
1839
|
-
const [showCreate, setShowCreate] =
|
|
1840
|
-
const [rawKey, setRawKey] =
|
|
1841
|
-
const [revokeTarget, setRevokeTarget] =
|
|
1842
|
-
const [revoking, setRevoking] =
|
|
1843
|
-
const [revokeError, setRevokeError] =
|
|
1764
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
1765
|
+
const [creating, setCreating] = React.useState(false);
|
|
1766
|
+
const [newKeyName, setNewKeyName] = React.useState("default");
|
|
1767
|
+
const [showCreate, setShowCreate] = React.useState(false);
|
|
1768
|
+
const [rawKey, setRawKey] = React.useState(null);
|
|
1769
|
+
const [revokeTarget, setRevokeTarget] = React.useState(null);
|
|
1770
|
+
const [revoking, setRevoking] = React.useState(false);
|
|
1771
|
+
const [revokeError, setRevokeError] = React.useState("");
|
|
1844
1772
|
async function handleCreate() {
|
|
1845
1773
|
setCreating(true);
|
|
1846
1774
|
try {
|
|
@@ -1870,17 +1798,17 @@ function ApiKeysSection({ initialKeys, onChanged }) {
|
|
|
1870
1798
|
const activeKeys = initialKeys.filter((k) => !k.revoked_at);
|
|
1871
1799
|
const revokedKeys = initialKeys.filter((k) => k.revoked_at);
|
|
1872
1800
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-muted-foreground/25 p-5", children: [
|
|
1873
|
-
/* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { title: "API Keys", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1801
|
+
/* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { title: "API Keys", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { variant: "outline", size: "sm", onClick: () => setShowCreate(!showCreate), children: showCreate ? "Cancel" : "+ New Key" }) }),
|
|
1874
1802
|
rawKey && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4 p-3 rounded-lg border border-yellow-500/50 bg-yellow-500/10", children: [
|
|
1875
1803
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium mb-1", children: "New API key created \u2014 copy it now, it won't be shown again:" }),
|
|
1876
1804
|
/* @__PURE__ */ jsxRuntime.jsx("code", { className: "block text-xs font-mono bg-black/20 p-2 rounded break-all select-all", children: rawKey }),
|
|
1877
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1805
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", variant: "outline", className: "mt-2", onClick: () => setRawKey(null), children: "Dismiss" })
|
|
1878
1806
|
] }),
|
|
1879
1807
|
showCreate && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4 flex gap-2 items-end", children: [
|
|
1880
1808
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
1881
1809
|
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-xs font-medium text-muted-foreground", children: "Key Name" }),
|
|
1882
1810
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1883
|
-
|
|
1811
|
+
chunkXXF4U7WL_cjs.Input,
|
|
1884
1812
|
{
|
|
1885
1813
|
value: newKeyName,
|
|
1886
1814
|
onChange: (e) => setNewKeyName(e.target.value),
|
|
@@ -1889,7 +1817,7 @@ function ApiKeysSection({ initialKeys, onChanged }) {
|
|
|
1889
1817
|
}
|
|
1890
1818
|
)
|
|
1891
1819
|
] }),
|
|
1892
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1820
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", onClick: handleCreate, disabled: creating, children: creating ? "Creating..." : "Create" })
|
|
1893
1821
|
] }),
|
|
1894
1822
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-lg border border-border", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full text-sm", children: [
|
|
1895
1823
|
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border bg-muted/50", children: [
|
|
@@ -1907,11 +1835,11 @@ function ApiKeysSection({ initialKeys, onChanged }) {
|
|
|
1907
1835
|
k.key_prefix,
|
|
1908
1836
|
"..."
|
|
1909
1837
|
] }),
|
|
1910
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1838
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "default", children: "active" }) }),
|
|
1911
1839
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-muted-foreground text-xs", children: k.last_used_at ? new Date(k.last_used_at).toLocaleString() : "never" }),
|
|
1912
1840
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-muted-foreground text-xs", children: new Date(k.created_at).toLocaleDateString() }),
|
|
1913
1841
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-right", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1914
|
-
|
|
1842
|
+
chunkXXF4U7WL_cjs.Button,
|
|
1915
1843
|
{
|
|
1916
1844
|
size: "sm",
|
|
1917
1845
|
variant: "destructive",
|
|
@@ -1926,7 +1854,7 @@ function ApiKeysSection({ initialKeys, onChanged }) {
|
|
|
1926
1854
|
k.key_prefix,
|
|
1927
1855
|
"..."
|
|
1928
1856
|
] }),
|
|
1929
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1857
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "destructive", children: "revoked" }) }),
|
|
1930
1858
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-muted-foreground text-xs", children: k.last_used_at ? new Date(k.last_used_at).toLocaleString() : "never" }),
|
|
1931
1859
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-muted-foreground text-xs", children: new Date(k.created_at).toLocaleDateString() }),
|
|
1932
1860
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3" })
|
|
@@ -1959,11 +1887,11 @@ function ApiKeysSection({ initialKeys, onChanged }) {
|
|
|
1959
1887
|
] });
|
|
1960
1888
|
}
|
|
1961
1889
|
function DangerZone({ tenantId, tenantName }) {
|
|
1962
|
-
const client =
|
|
1963
|
-
const { onNavigate, basePath } =
|
|
1964
|
-
const [open, setOpen] =
|
|
1965
|
-
const [deleting, setDeleting] =
|
|
1966
|
-
const [error, setError] =
|
|
1890
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
1891
|
+
const { onNavigate, basePath } = chunkXXF4U7WL_cjs.useNavigation();
|
|
1892
|
+
const [open, setOpen] = React.useState(false);
|
|
1893
|
+
const [deleting, setDeleting] = React.useState(false);
|
|
1894
|
+
const [error, setError] = React.useState("");
|
|
1967
1895
|
async function handleDelete() {
|
|
1968
1896
|
setDeleting(true);
|
|
1969
1897
|
setError("");
|
|
@@ -1983,7 +1911,7 @@ function DangerZone({ tenantId, tenantName }) {
|
|
|
1983
1911
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold text-destructive", children: "Danger Zone" }),
|
|
1984
1912
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Permanently delete this company and all its agents, runs, sessions, and API keys." })
|
|
1985
1913
|
] }),
|
|
1986
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1914
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", variant: "destructive", onClick: () => setOpen(true), children: "Delete Company" })
|
|
1987
1915
|
] }),
|
|
1988
1916
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1989
1917
|
ConfirmDialog,
|
|
@@ -2043,15 +1971,15 @@ var TAG_TITLES = {
|
|
|
2043
1971
|
"image-generation": "Image Generation"
|
|
2044
1972
|
};
|
|
2045
1973
|
function ModelSelector({ value, onChange, disabled }) {
|
|
2046
|
-
const client =
|
|
2047
|
-
const [open, setOpen] =
|
|
2048
|
-
const [models, setModels] =
|
|
2049
|
-
const [loading, setLoading] =
|
|
2050
|
-
const [error, setError] =
|
|
2051
|
-
const [search, setSearch] =
|
|
2052
|
-
const [providerFilter, setProviderFilter] =
|
|
2053
|
-
const hasFetchedRef =
|
|
2054
|
-
|
|
1974
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
1975
|
+
const [open, setOpen] = React.useState(false);
|
|
1976
|
+
const [models, setModels] = React.useState(null);
|
|
1977
|
+
const [loading, setLoading] = React.useState(false);
|
|
1978
|
+
const [error, setError] = React.useState(false);
|
|
1979
|
+
const [search, setSearch] = React.useState("");
|
|
1980
|
+
const [providerFilter, setProviderFilter] = React.useState("all");
|
|
1981
|
+
const hasFetchedRef = React.useRef(false);
|
|
1982
|
+
React.useEffect(() => {
|
|
2055
1983
|
if (!open || hasFetchedRef.current) return;
|
|
2056
1984
|
hasFetchedRef.current = true;
|
|
2057
1985
|
let cancelled = false;
|
|
@@ -2072,12 +2000,12 @@ function ModelSelector({ value, onChange, disabled }) {
|
|
|
2072
2000
|
cancelled = true;
|
|
2073
2001
|
};
|
|
2074
2002
|
}, [open, client]);
|
|
2075
|
-
const providers =
|
|
2003
|
+
const providers = React.useMemo(() => {
|
|
2076
2004
|
if (!models) return [];
|
|
2077
2005
|
const set = new Set(models.map((m) => m.provider));
|
|
2078
2006
|
return Array.from(set).sort();
|
|
2079
2007
|
}, [models]);
|
|
2080
|
-
const grouped =
|
|
2008
|
+
const grouped = React.useMemo(() => {
|
|
2081
2009
|
if (!models) return {};
|
|
2082
2010
|
let filtered = models;
|
|
2083
2011
|
if (providerFilter !== "all") {
|
|
@@ -2093,7 +2021,7 @@ function ModelSelector({ value, onChange, disabled }) {
|
|
|
2093
2021
|
}, [models, providerFilter]);
|
|
2094
2022
|
const selectedModel = models?.find((m) => m.id === value);
|
|
2095
2023
|
const displayName = selectedModel?.name || value || "Select model...";
|
|
2096
|
-
const searchMatchesAny =
|
|
2024
|
+
const searchMatchesAny = React.useMemo(() => {
|
|
2097
2025
|
if (!search || !models) return true;
|
|
2098
2026
|
const lower = search.toLowerCase();
|
|
2099
2027
|
return models.some(
|
|
@@ -2247,11 +2175,11 @@ function ModelSelector({ value, onChange, disabled }) {
|
|
|
2247
2175
|
] });
|
|
2248
2176
|
}
|
|
2249
2177
|
function AddAgentDialog({ onCreated }) {
|
|
2250
|
-
const client =
|
|
2251
|
-
const [open, setOpen] =
|
|
2252
|
-
const [saving, setSaving] =
|
|
2253
|
-
const [error, setError] =
|
|
2254
|
-
const [form, setForm] =
|
|
2178
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
2179
|
+
const [open, setOpen] = React.useState(false);
|
|
2180
|
+
const [saving, setSaving] = React.useState(false);
|
|
2181
|
+
const [error, setError] = React.useState("");
|
|
2182
|
+
const [form, setForm] = React.useState({
|
|
2255
2183
|
name: "",
|
|
2256
2184
|
description: "",
|
|
2257
2185
|
model: "claude-sonnet-4-6",
|
|
@@ -2299,15 +2227,15 @@ function AddAgentDialog({ onCreated }) {
|
|
|
2299
2227
|
}
|
|
2300
2228
|
}
|
|
2301
2229
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2302
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2303
|
-
/* @__PURE__ */ jsxRuntime.jsx(Dialog, { open, onOpenChange: (v) => {
|
|
2230
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { variant: "outline", size: "sm", onClick: () => setOpen(true), children: "+ New Agent" }),
|
|
2231
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Dialog, { open, onOpenChange: (v) => {
|
|
2304
2232
|
setOpen(v);
|
|
2305
2233
|
if (!v) resetForm();
|
|
2306
|
-
}, children: /* @__PURE__ */ jsxRuntime.jsx(DialogContent, { className: "max-w-md", children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit, children: [
|
|
2307
|
-
/* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "Add Agent" }) }),
|
|
2308
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogBody, { className: "space-y-3", children: [
|
|
2309
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Name", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2310
|
-
|
|
2234
|
+
}, children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogContent, { className: "max-w-md", children: /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmit, children: [
|
|
2235
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogTitle, { children: "Add Agent" }) }),
|
|
2236
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogBody, { className: "space-y-3", children: [
|
|
2237
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Name", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2238
|
+
chunkXXF4U7WL_cjs.Input,
|
|
2311
2239
|
{
|
|
2312
2240
|
value: form.name,
|
|
2313
2241
|
onChange: (e) => setForm((f) => ({ ...f, name: e.target.value })),
|
|
@@ -2315,28 +2243,28 @@ function AddAgentDialog({ onCreated }) {
|
|
|
2315
2243
|
required: true
|
|
2316
2244
|
}
|
|
2317
2245
|
) }),
|
|
2318
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Description", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2319
|
-
|
|
2246
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Description", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2247
|
+
chunkXXF4U7WL_cjs.Input,
|
|
2320
2248
|
{
|
|
2321
2249
|
value: form.description,
|
|
2322
2250
|
onChange: (e) => setForm((f) => ({ ...f, description: e.target.value })),
|
|
2323
2251
|
placeholder: "What does this agent do?"
|
|
2324
2252
|
}
|
|
2325
2253
|
) }),
|
|
2326
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Model", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2254
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Model", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2327
2255
|
ModelSelector,
|
|
2328
2256
|
{
|
|
2329
2257
|
value: form.model,
|
|
2330
2258
|
onChange: (modelId) => setForm((f) => ({
|
|
2331
2259
|
...f,
|
|
2332
2260
|
model: modelId,
|
|
2333
|
-
runner:
|
|
2334
|
-
permission_mode:
|
|
2261
|
+
runner: chunkXXF4U7WL_cjs.supportsClaudeRunner(modelId) ? f.runner : "vercel-ai-sdk",
|
|
2262
|
+
permission_mode: chunkXXF4U7WL_cjs.supportsClaudeRunner(modelId) ? f.permission_mode : "bypassPermissions"
|
|
2335
2263
|
}))
|
|
2336
2264
|
}
|
|
2337
2265
|
) }),
|
|
2338
2266
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-3", children: [
|
|
2339
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Runner", children:
|
|
2267
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Runner", children: chunkXXF4U7WL_cjs.supportsClaudeRunner(form.model) ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2340
2268
|
Select,
|
|
2341
2269
|
{
|
|
2342
2270
|
value: form.runner || "claude-agent-sdk",
|
|
@@ -2347,12 +2275,12 @@ function AddAgentDialog({ onCreated }) {
|
|
|
2347
2275
|
]
|
|
2348
2276
|
}
|
|
2349
2277
|
) : /* @__PURE__ */ jsxRuntime.jsx(Select, { value: "vercel-ai-sdk", disabled: true, children: /* @__PURE__ */ jsxRuntime.jsx("option", { value: "vercel-ai-sdk", children: "Vercel AI SDK" }) }) }),
|
|
2350
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Permission Mode", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2278
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Permission Mode", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2351
2279
|
Select,
|
|
2352
2280
|
{
|
|
2353
2281
|
value: form.permission_mode,
|
|
2354
2282
|
onChange: (e) => setForm((f) => ({ ...f, permission_mode: e.target.value })),
|
|
2355
|
-
disabled: !
|
|
2283
|
+
disabled: !chunkXXF4U7WL_cjs.supportsClaudeRunner(form.model) || form.runner === "vercel-ai-sdk",
|
|
2356
2284
|
children: [
|
|
2357
2285
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "default", children: "default" }),
|
|
2358
2286
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "acceptEdits", children: "acceptEdits" }),
|
|
@@ -2363,8 +2291,8 @@ function AddAgentDialog({ onCreated }) {
|
|
|
2363
2291
|
) })
|
|
2364
2292
|
] }),
|
|
2365
2293
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-3", children: [
|
|
2366
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Max Turns", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2367
|
-
|
|
2294
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Max Turns", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2295
|
+
chunkXXF4U7WL_cjs.Input,
|
|
2368
2296
|
{
|
|
2369
2297
|
type: "number",
|
|
2370
2298
|
min: "1",
|
|
@@ -2374,10 +2302,10 @@ function AddAgentDialog({ onCreated }) {
|
|
|
2374
2302
|
required: true
|
|
2375
2303
|
}
|
|
2376
2304
|
) }),
|
|
2377
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Max Budget", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
2305
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Max Budget", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
2378
2306
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-3 top-1/2 -translate-y-1/2 text-sm text-muted-foreground", children: "$" }),
|
|
2379
2307
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2380
|
-
|
|
2308
|
+
chunkXXF4U7WL_cjs.Input,
|
|
2381
2309
|
{
|
|
2382
2310
|
type: "number",
|
|
2383
2311
|
step: "0.01",
|
|
@@ -2390,9 +2318,9 @@ function AddAgentDialog({ onCreated }) {
|
|
|
2390
2318
|
}
|
|
2391
2319
|
)
|
|
2392
2320
|
] }) }),
|
|
2393
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Max Runtime", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
2321
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Max Runtime", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
2394
2322
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2395
|
-
|
|
2323
|
+
chunkXXF4U7WL_cjs.Input,
|
|
2396
2324
|
{
|
|
2397
2325
|
type: "number",
|
|
2398
2326
|
min: "1",
|
|
@@ -2408,21 +2336,21 @@ function AddAgentDialog({ onCreated }) {
|
|
|
2408
2336
|
] }),
|
|
2409
2337
|
/* @__PURE__ */ jsxRuntime.jsx(FormError, { error })
|
|
2410
2338
|
] }),
|
|
2411
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
|
|
2412
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2339
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogFooter, { children: [
|
|
2340
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { type: "button", variant: "outline", size: "sm", onClick: () => {
|
|
2413
2341
|
setOpen(false);
|
|
2414
2342
|
resetForm();
|
|
2415
2343
|
}, children: "Cancel" }),
|
|
2416
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2344
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { type: "submit", size: "sm", disabled: saving, children: saving ? "Creating..." : "Create Agent" })
|
|
2417
2345
|
] })
|
|
2418
2346
|
] }) }) })
|
|
2419
2347
|
] });
|
|
2420
2348
|
}
|
|
2421
2349
|
function DeleteAgentButton({ agentId, agentName, onDeleted }) {
|
|
2422
|
-
const client =
|
|
2423
|
-
const [open, setOpen] =
|
|
2424
|
-
const [deleting, setDeleting] =
|
|
2425
|
-
const [error, setError] =
|
|
2350
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
2351
|
+
const [open, setOpen] = React.useState(false);
|
|
2352
|
+
const [deleting, setDeleting] = React.useState(false);
|
|
2353
|
+
const [error, setError] = React.useState("");
|
|
2426
2354
|
async function handleDelete() {
|
|
2427
2355
|
setDeleting(true);
|
|
2428
2356
|
setError("");
|
|
@@ -2438,7 +2366,7 @@ function DeleteAgentButton({ agentId, agentName, onDeleted }) {
|
|
|
2438
2366
|
}
|
|
2439
2367
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2440
2368
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2441
|
-
|
|
2369
|
+
chunkXXF4U7WL_cjs.Button,
|
|
2442
2370
|
{
|
|
2443
2371
|
size: "sm",
|
|
2444
2372
|
variant: "ghost",
|
|
@@ -2468,20 +2396,20 @@ function DeleteAgentButton({ agentId, agentName, onDeleted }) {
|
|
|
2468
2396
|
] });
|
|
2469
2397
|
}
|
|
2470
2398
|
function AgentListPage() {
|
|
2471
|
-
const { LinkComponent, basePath } =
|
|
2399
|
+
const { LinkComponent, basePath } = chunkXXF4U7WL_cjs.useNavigation();
|
|
2472
2400
|
const { mutate } = swr.useSWRConfig();
|
|
2473
|
-
const { data, error, isLoading } =
|
|
2401
|
+
const { data, error, isLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
2474
2402
|
"agents",
|
|
2475
2403
|
(client) => client.agents.list()
|
|
2476
2404
|
);
|
|
2477
2405
|
const agents = data?.data ?? [];
|
|
2478
|
-
const invalidate =
|
|
2406
|
+
const invalidate = React.useCallback(() => {
|
|
2479
2407
|
mutate("agents");
|
|
2480
2408
|
}, [mutate]);
|
|
2481
2409
|
if (isLoading) {
|
|
2482
2410
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
2483
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2484
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2411
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-9 w-32" }),
|
|
2412
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-12 w-full" }, i)) })
|
|
2485
2413
|
] });
|
|
2486
2414
|
}
|
|
2487
2415
|
if (error) {
|
|
@@ -2506,11 +2434,11 @@ function AgentListPage() {
|
|
|
2506
2434
|
agents.map((a) => /* @__PURE__ */ jsxRuntime.jsxs(AdminTableRow, { children: [
|
|
2507
2435
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 font-medium", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
2508
2436
|
/* @__PURE__ */ jsxRuntime.jsx(LinkComponent, { href: `${basePath}/agents/${a.id}`, className: "text-primary hover:underline", children: a.name }),
|
|
2509
|
-
a.a2a_enabled && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2437
|
+
a.a2a_enabled && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { className: "text-[10px] px-1.5 py-0 bg-indigo-500/10 text-indigo-400 border-indigo-500/20", children: "A2A" })
|
|
2510
2438
|
] }) }),
|
|
2511
2439
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-muted-foreground text-xs max-w-xs truncate", title: a.description ?? void 0, children: a.description ?? "\u2014" }),
|
|
2512
2440
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 font-mono text-xs text-muted-foreground", children: a.model }),
|
|
2513
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3", children: a.composio_toolkits.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-1 flex-wrap", children: a.composio_toolkits.map((t) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2441
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3", children: a.composio_toolkits.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-1 flex-wrap", children: a.composio_toolkits.map((t) => /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "secondary", className: "text-xs", children: t }, t)) }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-xs", children: "\u2014" }) }),
|
|
2514
2442
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-right", children: (a.skills ?? []).length }),
|
|
2515
2443
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-right", children: (a.plugins ?? []).length }),
|
|
2516
2444
|
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-3 text-right", children: /* @__PURE__ */ jsxRuntime.jsx(DeleteAgentButton, { agentId: a.id, agentName: a.name, onDeleted: invalidate }) })
|
|
@@ -2521,20 +2449,18 @@ function AgentListPage() {
|
|
|
2521
2449
|
] });
|
|
2522
2450
|
}
|
|
2523
2451
|
function AgentEditForm({ agent, onSaved }) {
|
|
2524
|
-
const client =
|
|
2525
|
-
const [name, setName] =
|
|
2526
|
-
const [description, setDescription] =
|
|
2527
|
-
const [model, setModel] =
|
|
2528
|
-
const [runner, setRunner] =
|
|
2529
|
-
const [permissionMode, setPermissionMode] =
|
|
2530
|
-
const [maxTurns, setMaxTurns] =
|
|
2531
|
-
const [maxBudget, setMaxBudget] =
|
|
2532
|
-
const [maxRuntime, setMaxRuntime] =
|
|
2533
|
-
const [
|
|
2534
|
-
const
|
|
2535
|
-
const [
|
|
2536
|
-
const isDirty = name !== agent.name || description !== (agent.description ?? "") || model !== agent.model || runner !== (agent.runner ?? "") || permissionMode !== agent.permission_mode || maxTurns !== agent.max_turns.toString() || maxBudget !== agent.max_budget_usd.toString() || maxRuntime !== Math.floor(agent.max_runtime_seconds / 60).toString() || soulMd !== (agent.soul_md ?? "") || identityMd !== (agent.identity_md ?? "");
|
|
2537
|
-
const [error, setError] = React3.useState("");
|
|
2452
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
2453
|
+
const [name, setName] = React.useState(agent.name);
|
|
2454
|
+
const [description, setDescription] = React.useState(agent.description ?? "");
|
|
2455
|
+
const [model, setModel] = React.useState(agent.model);
|
|
2456
|
+
const [runner, setRunner] = React.useState(agent.runner ?? "");
|
|
2457
|
+
const [permissionMode, setPermissionMode] = React.useState(agent.permission_mode);
|
|
2458
|
+
const [maxTurns, setMaxTurns] = React.useState(agent.max_turns.toString());
|
|
2459
|
+
const [maxBudget, setMaxBudget] = React.useState(agent.max_budget_usd.toString());
|
|
2460
|
+
const [maxRuntime, setMaxRuntime] = React.useState(Math.floor(agent.max_runtime_seconds / 60).toString());
|
|
2461
|
+
const [saving, setSaving] = React.useState(false);
|
|
2462
|
+
const isDirty = name !== agent.name || description !== (agent.description ?? "") || model !== agent.model || runner !== (agent.runner ?? "") || permissionMode !== agent.permission_mode || maxTurns !== agent.max_turns.toString() || maxBudget !== agent.max_budget_usd.toString() || maxRuntime !== Math.floor(agent.max_runtime_seconds / 60).toString();
|
|
2463
|
+
const [error, setError] = React.useState("");
|
|
2538
2464
|
async function handleSave() {
|
|
2539
2465
|
setSaving(true);
|
|
2540
2466
|
setError("");
|
|
@@ -2547,9 +2473,7 @@ function AgentEditForm({ agent, onSaved }) {
|
|
|
2547
2473
|
permission_mode: permissionMode,
|
|
2548
2474
|
max_turns: parseInt(maxTurns) || agent.max_turns,
|
|
2549
2475
|
max_budget_usd: parseFloat(maxBudget) || agent.max_budget_usd,
|
|
2550
|
-
max_runtime_seconds: (parseInt(maxRuntime) || Math.floor(agent.max_runtime_seconds / 60)) * 60
|
|
2551
|
-
soul_md: soulMd || null,
|
|
2552
|
-
identity_md: identityMd || null
|
|
2476
|
+
max_runtime_seconds: (parseInt(maxRuntime) || Math.floor(agent.max_runtime_seconds / 60)) * 60
|
|
2553
2477
|
});
|
|
2554
2478
|
onSaved?.();
|
|
2555
2479
|
} catch (err) {
|
|
@@ -2561,13 +2485,13 @@ function AgentEditForm({ agent, onSaved }) {
|
|
|
2561
2485
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-muted-foreground/25 p-5", children: [
|
|
2562
2486
|
/* @__PURE__ */ jsxRuntime.jsxs(SectionHeader, { title: "Details", children: [
|
|
2563
2487
|
error && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-destructive mr-2", children: error }),
|
|
2564
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2488
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { onClick: handleSave, disabled: saving || !isDirty, size: "sm", children: saving ? "Saving..." : "Save Changes" })
|
|
2565
2489
|
] }),
|
|
2566
2490
|
/* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
2567
2491
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-12 gap-4", children: [
|
|
2568
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Name", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2569
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-4", children: /* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Description", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2570
|
-
|
|
2492
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Name", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { value: name, onChange: (e) => setName(e.target.value), disabled: saving }) }) }),
|
|
2493
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-4", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Description", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2494
|
+
chunkXXF4U7WL_cjs.Input,
|
|
2571
2495
|
{
|
|
2572
2496
|
value: description,
|
|
2573
2497
|
onChange: (e) => setDescription(e.target.value),
|
|
@@ -2575,94 +2499,58 @@ function AgentEditForm({ agent, onSaved }) {
|
|
|
2575
2499
|
disabled: saving
|
|
2576
2500
|
}
|
|
2577
2501
|
) }) }),
|
|
2578
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-3", children: /* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Model", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2502
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-3", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Model", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2579
2503
|
ModelSelector,
|
|
2580
2504
|
{
|
|
2581
2505
|
value: model,
|
|
2582
2506
|
disabled: saving,
|
|
2583
2507
|
onChange: (modelId) => {
|
|
2584
2508
|
setModel(modelId);
|
|
2585
|
-
if (!
|
|
2509
|
+
if (!chunkXXF4U7WL_cjs.supportsClaudeRunner(modelId)) {
|
|
2586
2510
|
setRunner("vercel-ai-sdk");
|
|
2587
2511
|
setPermissionMode("bypassPermissions");
|
|
2588
2512
|
}
|
|
2589
2513
|
}
|
|
2590
2514
|
}
|
|
2591
2515
|
) }) }),
|
|
2592
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-3", children: /* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Runner", children:
|
|
2516
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-3", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Runner", children: chunkXXF4U7WL_cjs.supportsClaudeRunner(model) ? /* @__PURE__ */ jsxRuntime.jsxs(Select, { value: runner || "claude-agent-sdk", onChange: (e) => setRunner(e.target.value === "claude-agent-sdk" ? "" : e.target.value), disabled: saving, children: [
|
|
2593
2517
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "claude-agent-sdk", children: "Claude SDK" }),
|
|
2594
2518
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "vercel-ai-sdk", children: "AI SDK" })
|
|
2595
2519
|
] }) : /* @__PURE__ */ jsxRuntime.jsx(Select, { value: "vercel-ai-sdk", disabled: true, children: /* @__PURE__ */ jsxRuntime.jsx("option", { value: "vercel-ai-sdk", children: "AI SDK" }) }) }) })
|
|
2596
2520
|
] }),
|
|
2597
2521
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-12 gap-4", children: [
|
|
2598
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Max Turns", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
2599
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Max Budget", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
2522
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Max Turns", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { type: "number", min: "1", max: "1000", value: maxTurns, onChange: (e) => setMaxTurns(e.target.value), disabled: saving }) }) }),
|
|
2523
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Max Budget", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
2600
2524
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-3 top-1/2 -translate-y-1/2 text-sm text-muted-foreground", children: "$" }),
|
|
2601
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2525
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { type: "number", step: "0.01", min: "0.01", max: "100", value: maxBudget, onChange: (e) => setMaxBudget(e.target.value), className: "pl-6", disabled: saving })
|
|
2602
2526
|
] }) }) }),
|
|
2603
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Max Runtime", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
2604
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2527
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Max Runtime", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
2528
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { type: "number", min: "1", max: "60", value: maxRuntime, onChange: (e) => setMaxRuntime(e.target.value), className: "pr-10", disabled: saving }),
|
|
2605
2529
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute right-3 top-1/2 -translate-y-1/2 text-sm text-muted-foreground", children: "min" })
|
|
2606
2530
|
] }) }) }),
|
|
2607
|
-
|
|
2531
|
+
chunkXXF4U7WL_cjs.supportsClaudeRunner(model) && (runner === "" || runner === "claude-agent-sdk") && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-3", children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Permission Mode", children: /* @__PURE__ */ jsxRuntime.jsxs(Select, { value: permissionMode, onChange: (e) => setPermissionMode(e.target.value), disabled: saving, children: [
|
|
2608
2532
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "default", children: "default" }),
|
|
2609
2533
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "acceptEdits", children: "acceptEdits" }),
|
|
2610
2534
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "bypassPermissions", children: "bypassPermissions" }),
|
|
2611
2535
|
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "plan", children: "plan" })
|
|
2612
2536
|
] }) }) })
|
|
2613
|
-
] }),
|
|
2614
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
2615
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(FormField, { label: "SOUL.md", children: [
|
|
2616
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2617
|
-
Textarea,
|
|
2618
|
-
{
|
|
2619
|
-
value: soulMd,
|
|
2620
|
-
onChange: (e) => setSoulMd(e.target.value),
|
|
2621
|
-
placeholder: "## Voice & Tone\nDirect, concise, technical.\n\n## Values\nClarity over completeness.\n\n## Stance\nProactive problem-solver.\n\n## Boundaries\n- Never modify production data directly\n\n## Essence\nA focused engineering assistant.",
|
|
2622
|
-
rows: 10,
|
|
2623
|
-
className: "font-mono text-sm",
|
|
2624
|
-
disabled: saving
|
|
2625
|
-
}
|
|
2626
|
-
),
|
|
2627
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground mt-1 block", children: [
|
|
2628
|
-
soulMd.split(/\s+/).filter(Boolean).length,
|
|
2629
|
-
" words"
|
|
2630
|
-
] })
|
|
2631
|
-
] }) }),
|
|
2632
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(FormField, { label: "IDENTITY.md", children: [
|
|
2633
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2634
|
-
Textarea,
|
|
2635
|
-
{
|
|
2636
|
-
value: identityMd,
|
|
2637
|
-
onChange: (e) => setIdentityMd(e.target.value),
|
|
2638
|
-
placeholder: "- **Communication Verbosity:** concise\n- **Communication Tone:** direct\n- **Decision Autonomy:** high\n- **Risk Tolerance:** moderate\n- **Collaboration Mode:** autonomous\n\n## Escalation Preferences\n- Budget over $50 -> escalate\n- Breaking changes -> escalate",
|
|
2639
|
-
rows: 10,
|
|
2640
|
-
className: "font-mono text-sm",
|
|
2641
|
-
disabled: saving
|
|
2642
|
-
}
|
|
2643
|
-
),
|
|
2644
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground mt-1 block", children: [
|
|
2645
|
-
identityMd.split(/\s+/).filter(Boolean).length,
|
|
2646
|
-
" words"
|
|
2647
|
-
] })
|
|
2648
|
-
] }) })
|
|
2649
2537
|
] })
|
|
2650
2538
|
] }) })
|
|
2651
2539
|
] });
|
|
2652
2540
|
}
|
|
2653
2541
|
function ToolkitMultiselect({ value, onChange }) {
|
|
2654
|
-
const client =
|
|
2655
|
-
const [open, setOpen] =
|
|
2656
|
-
const [search, setSearch] =
|
|
2657
|
-
const [toolkits, setToolkits] =
|
|
2658
|
-
const [loading, setLoading] =
|
|
2659
|
-
const containerRef =
|
|
2660
|
-
const searchRef =
|
|
2661
|
-
|
|
2542
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
2543
|
+
const [open, setOpen] = React.useState(false);
|
|
2544
|
+
const [search, setSearch] = React.useState("");
|
|
2545
|
+
const [toolkits, setToolkits] = React.useState([]);
|
|
2546
|
+
const [loading, setLoading] = React.useState(true);
|
|
2547
|
+
const containerRef = React.useRef(null);
|
|
2548
|
+
const searchRef = React.useRef(null);
|
|
2549
|
+
React.useEffect(() => {
|
|
2662
2550
|
client.composio.toolkits().then((data) => setToolkits(data)).catch(() => {
|
|
2663
2551
|
}).finally(() => setLoading(false));
|
|
2664
2552
|
}, [client]);
|
|
2665
|
-
|
|
2553
|
+
React.useEffect(() => {
|
|
2666
2554
|
function handleClick(e) {
|
|
2667
2555
|
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
2668
2556
|
setOpen(false);
|
|
@@ -2672,7 +2560,7 @@ function ToolkitMultiselect({ value, onChange }) {
|
|
|
2672
2560
|
document.addEventListener("mousedown", handleClick);
|
|
2673
2561
|
return () => document.removeEventListener("mousedown", handleClick);
|
|
2674
2562
|
}, []);
|
|
2675
|
-
|
|
2563
|
+
React.useEffect(() => {
|
|
2676
2564
|
searchRef.current?.focus();
|
|
2677
2565
|
}, []);
|
|
2678
2566
|
const filtered = toolkits.filter((t) => {
|
|
@@ -2777,13 +2665,13 @@ function ToolsModal({
|
|
|
2777
2665
|
onOpenChange,
|
|
2778
2666
|
onSave
|
|
2779
2667
|
}) {
|
|
2780
|
-
const client =
|
|
2781
|
-
const [tools, setTools] =
|
|
2782
|
-
const [loading, setLoading] =
|
|
2783
|
-
const [search, setSearch] =
|
|
2784
|
-
const [selected, setSelected] =
|
|
2785
|
-
const [saving, setSaving] =
|
|
2786
|
-
const fetchTools =
|
|
2668
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
2669
|
+
const [tools, setTools] = React.useState([]);
|
|
2670
|
+
const [loading, setLoading] = React.useState(false);
|
|
2671
|
+
const [search, setSearch] = React.useState("");
|
|
2672
|
+
const [selected, setSelected] = React.useState(/* @__PURE__ */ new Set());
|
|
2673
|
+
const [saving, setSaving] = React.useState(false);
|
|
2674
|
+
const fetchTools = React.useCallback(async () => {
|
|
2787
2675
|
setLoading(true);
|
|
2788
2676
|
try {
|
|
2789
2677
|
const data = await client.composio.tools(toolkit);
|
|
@@ -2792,7 +2680,7 @@ function ToolsModal({
|
|
|
2792
2680
|
setLoading(false);
|
|
2793
2681
|
}
|
|
2794
2682
|
}, [toolkit, client]);
|
|
2795
|
-
|
|
2683
|
+
React.useEffect(() => {
|
|
2796
2684
|
if (open) {
|
|
2797
2685
|
fetchTools();
|
|
2798
2686
|
setSearch("");
|
|
@@ -2835,20 +2723,20 @@ function ToolsModal({
|
|
|
2835
2723
|
setSaving(false);
|
|
2836
2724
|
}
|
|
2837
2725
|
}
|
|
2838
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "max-w-lg", children: [
|
|
2839
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
|
|
2840
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogTitle, { className: "capitalize flex items-center gap-2", children: [
|
|
2726
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogContent, { className: "max-w-lg", children: [
|
|
2727
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogHeader, { children: [
|
|
2728
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogTitle, { className: "capitalize flex items-center gap-2", children: [
|
|
2841
2729
|
toolkitLogo && /* @__PURE__ */ jsxRuntime.jsx("img", { src: toolkitLogo, alt: "", className: "w-5 h-5 rounded-sm object-contain flex-shrink-0" }),
|
|
2842
2730
|
toolkit,
|
|
2843
2731
|
" Tools"
|
|
2844
2732
|
] }),
|
|
2845
|
-
!loading && /* @__PURE__ */ jsxRuntime.jsxs(DialogDescription, { children: [
|
|
2733
|
+
!loading && /* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogDescription, { children: [
|
|
2846
2734
|
tools.length,
|
|
2847
2735
|
" tools available"
|
|
2848
2736
|
] })
|
|
2849
2737
|
] }),
|
|
2850
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogBody, { className: "space-y-3", children: [
|
|
2851
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2738
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogBody, { className: "space-y-3", children: [
|
|
2739
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { placeholder: "Search tools...", value: search, onChange: (e) => setSearch(e.target.value), className: "h-8 text-sm" }),
|
|
2852
2740
|
loading ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground py-4 text-center", children: "Loading tools..." }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2853
2741
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-xs text-muted-foreground", children: [
|
|
2854
2742
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: selected.size === 0 ? "All tools (no filter)" : `${selected.size} / ${tools.length} selected` }),
|
|
@@ -2866,9 +2754,9 @@ function ToolsModal({
|
|
|
2866
2754
|
] })
|
|
2867
2755
|
] })
|
|
2868
2756
|
] }),
|
|
2869
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
|
|
2870
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2871
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2757
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogFooter, { children: [
|
|
2758
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", variant: "outline", onClick: () => onOpenChange(false), children: "Cancel" }),
|
|
2759
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", onClick: handleSave, disabled: saving || loading, children: saving ? "Saving..." : "Save" })
|
|
2872
2760
|
] })
|
|
2873
2761
|
] }) });
|
|
2874
2762
|
}
|
|
@@ -2882,14 +2770,14 @@ function McpToolsModal({
|
|
|
2882
2770
|
onOpenChange,
|
|
2883
2771
|
onSave
|
|
2884
2772
|
}) {
|
|
2885
|
-
const client =
|
|
2886
|
-
const [tools, setTools] =
|
|
2887
|
-
const [loading, setLoading] =
|
|
2888
|
-
const [search, setSearch] =
|
|
2889
|
-
const [selected, setSelected] =
|
|
2890
|
-
const [saving, setSaving] =
|
|
2891
|
-
const [error, setError] =
|
|
2892
|
-
const fetchTools =
|
|
2773
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
2774
|
+
const [tools, setTools] = React.useState([]);
|
|
2775
|
+
const [loading, setLoading] = React.useState(false);
|
|
2776
|
+
const [search, setSearch] = React.useState("");
|
|
2777
|
+
const [selected, setSelected] = React.useState(/* @__PURE__ */ new Set());
|
|
2778
|
+
const [saving, setSaving] = React.useState(false);
|
|
2779
|
+
const [error, setError] = React.useState("");
|
|
2780
|
+
const fetchTools = React.useCallback(async () => {
|
|
2893
2781
|
setLoading(true);
|
|
2894
2782
|
setError("");
|
|
2895
2783
|
try {
|
|
@@ -2901,7 +2789,7 @@ function McpToolsModal({
|
|
|
2901
2789
|
setLoading(false);
|
|
2902
2790
|
}
|
|
2903
2791
|
}, [agentId, mcpServerId, client]);
|
|
2904
|
-
|
|
2792
|
+
React.useEffect(() => {
|
|
2905
2793
|
if (open) {
|
|
2906
2794
|
fetchTools();
|
|
2907
2795
|
setSearch("");
|
|
@@ -2942,20 +2830,20 @@ function McpToolsModal({
|
|
|
2942
2830
|
setSaving(false);
|
|
2943
2831
|
}
|
|
2944
2832
|
}
|
|
2945
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "max-w-lg", children: [
|
|
2946
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
|
|
2947
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogTitle, { className: "flex items-center gap-2", children: [
|
|
2833
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogContent, { className: "max-w-lg", children: [
|
|
2834
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogHeader, { children: [
|
|
2835
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogTitle, { className: "flex items-center gap-2", children: [
|
|
2948
2836
|
serverLogo && /* @__PURE__ */ jsxRuntime.jsx("img", { src: serverLogo, alt: "", className: "w-5 h-5 rounded-sm object-contain flex-shrink-0" }),
|
|
2949
2837
|
serverName,
|
|
2950
2838
|
" Tools"
|
|
2951
2839
|
] }),
|
|
2952
|
-
!loading && !error && /* @__PURE__ */ jsxRuntime.jsxs(DialogDescription, { children: [
|
|
2840
|
+
!loading && !error && /* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogDescription, { children: [
|
|
2953
2841
|
tools.length,
|
|
2954
2842
|
" tools available"
|
|
2955
2843
|
] })
|
|
2956
2844
|
] }),
|
|
2957
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogBody, { className: "space-y-3", children: [
|
|
2958
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2845
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogBody, { className: "space-y-3", children: [
|
|
2846
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Input, { placeholder: "Search tools...", value: search, onChange: (e) => setSearch(e.target.value), className: "h-8 text-sm" }),
|
|
2959
2847
|
loading ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground py-4 text-center", children: "Loading tools..." }) : error ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive py-4 text-center", children: error }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
2960
2848
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-xs text-muted-foreground", children: [
|
|
2961
2849
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: selected.size === 0 ? "All tools (no filter)" : `${selected.size} / ${tools.length} selected` }),
|
|
@@ -2973,38 +2861,38 @@ function McpToolsModal({
|
|
|
2973
2861
|
] })
|
|
2974
2862
|
] })
|
|
2975
2863
|
] }),
|
|
2976
|
-
/* @__PURE__ */ jsxRuntime.jsxs(DialogFooter, { children: [
|
|
2977
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2978
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2864
|
+
/* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogFooter, { children: [
|
|
2865
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", variant: "outline", onClick: () => onOpenChange(false), children: "Cancel" }),
|
|
2866
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", onClick: handleSave, disabled: saving || loading, children: saving ? "Saving..." : "Save" })
|
|
2979
2867
|
] })
|
|
2980
2868
|
] }) });
|
|
2981
2869
|
}
|
|
2982
2870
|
function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAllowedTools: initialAllowedTools, onChanged }) {
|
|
2983
|
-
const client =
|
|
2984
|
-
const [localToolkits, setLocalToolkits] =
|
|
2985
|
-
const [connectors, setConnectors] =
|
|
2986
|
-
const [loading, setLoading] =
|
|
2987
|
-
const [showAdd, setShowAdd] =
|
|
2988
|
-
const [pendingToolkits, setPendingToolkits] =
|
|
2989
|
-
const [applyingToolkits, setApplyingToolkits] =
|
|
2990
|
-
const [confirmDelete, setConfirmDelete] =
|
|
2991
|
-
const [deleting, setDeleting] =
|
|
2992
|
-
const [apiKeys, setApiKeys] =
|
|
2993
|
-
const [saving, setSaving] =
|
|
2994
|
-
const [errors, setErrors] =
|
|
2995
|
-
const [allowedTools, setAllowedTools] =
|
|
2996
|
-
const [toolCounts, setToolCounts] =
|
|
2997
|
-
const [toolsModalToolkit, setToolsModalToolkit] =
|
|
2998
|
-
const mcpOauthHandlerRef =
|
|
2999
|
-
const composioOauthHandlerRef =
|
|
3000
|
-
const [mcpConnections, setMcpConnections] =
|
|
3001
|
-
const [mcpServers, setMcpServers] =
|
|
3002
|
-
const [mcpLoading, setMcpLoading] =
|
|
3003
|
-
const [mcpConnecting, setMcpConnecting] =
|
|
3004
|
-
const [confirmMcpDisconnect, setConfirmMcpDisconnect] =
|
|
3005
|
-
const [mcpDisconnecting, setMcpDisconnecting] =
|
|
3006
|
-
const [mcpToolsModal, setMcpToolsModal] =
|
|
3007
|
-
const loadComposio =
|
|
2871
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
2872
|
+
const [localToolkits, setLocalToolkits] = React.useState(initialToolkits);
|
|
2873
|
+
const [connectors, setConnectors] = React.useState([]);
|
|
2874
|
+
const [loading, setLoading] = React.useState(true);
|
|
2875
|
+
const [showAdd, setShowAdd] = React.useState(false);
|
|
2876
|
+
const [pendingToolkits, setPendingToolkits] = React.useState(initialToolkits);
|
|
2877
|
+
const [applyingToolkits, setApplyingToolkits] = React.useState(false);
|
|
2878
|
+
const [confirmDelete, setConfirmDelete] = React.useState(null);
|
|
2879
|
+
const [deleting, setDeleting] = React.useState(false);
|
|
2880
|
+
const [apiKeys, setApiKeys] = React.useState({});
|
|
2881
|
+
const [saving, setSaving] = React.useState({});
|
|
2882
|
+
const [errors, setErrors] = React.useState({});
|
|
2883
|
+
const [allowedTools, setAllowedTools] = React.useState(initialAllowedTools);
|
|
2884
|
+
const [toolCounts, setToolCounts] = React.useState({});
|
|
2885
|
+
const [toolsModalToolkit, setToolsModalToolkit] = React.useState(null);
|
|
2886
|
+
const mcpOauthHandlerRef = React.useRef(null);
|
|
2887
|
+
const composioOauthHandlerRef = React.useRef(null);
|
|
2888
|
+
const [mcpConnections, setMcpConnections] = React.useState([]);
|
|
2889
|
+
const [mcpServers, setMcpServers] = React.useState([]);
|
|
2890
|
+
const [mcpLoading, setMcpLoading] = React.useState(true);
|
|
2891
|
+
const [mcpConnecting, setMcpConnecting] = React.useState(null);
|
|
2892
|
+
const [confirmMcpDisconnect, setConfirmMcpDisconnect] = React.useState(null);
|
|
2893
|
+
const [mcpDisconnecting, setMcpDisconnecting] = React.useState(false);
|
|
2894
|
+
const [mcpToolsModal, setMcpToolsModal] = React.useState(null);
|
|
2895
|
+
const loadComposio = React.useCallback(async () => {
|
|
3008
2896
|
setLoading(true);
|
|
3009
2897
|
try {
|
|
3010
2898
|
const data = await client.connectors.list(agentId);
|
|
@@ -3013,7 +2901,7 @@ function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAl
|
|
|
3013
2901
|
setLoading(false);
|
|
3014
2902
|
}
|
|
3015
2903
|
}, [agentId, client]);
|
|
3016
|
-
const loadMcp =
|
|
2904
|
+
const loadMcp = React.useCallback(async () => {
|
|
3017
2905
|
setMcpLoading(true);
|
|
3018
2906
|
try {
|
|
3019
2907
|
const data = await client.customConnectors.list(agentId);
|
|
@@ -3023,13 +2911,13 @@ function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAl
|
|
|
3023
2911
|
}
|
|
3024
2912
|
}, [agentId, client]);
|
|
3025
2913
|
const toolkitsKey = localToolkits.join(",");
|
|
3026
|
-
|
|
2914
|
+
React.useEffect(() => {
|
|
3027
2915
|
loadComposio();
|
|
3028
2916
|
}, [loadComposio, toolkitsKey]);
|
|
3029
|
-
|
|
2917
|
+
React.useEffect(() => {
|
|
3030
2918
|
loadMcp();
|
|
3031
2919
|
}, [loadMcp]);
|
|
3032
|
-
|
|
2920
|
+
React.useEffect(() => {
|
|
3033
2921
|
return () => {
|
|
3034
2922
|
if (mcpOauthHandlerRef.current) {
|
|
3035
2923
|
window.removeEventListener("message", mcpOauthHandlerRef.current);
|
|
@@ -3041,7 +2929,7 @@ function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAl
|
|
|
3041
2929
|
}
|
|
3042
2930
|
};
|
|
3043
2931
|
}, []);
|
|
3044
|
-
|
|
2932
|
+
React.useEffect(() => {
|
|
3045
2933
|
if (localToolkits.length === 0) return;
|
|
3046
2934
|
let cancelled = false;
|
|
3047
2935
|
for (const slug of localToolkits) {
|
|
@@ -3227,7 +3115,7 @@ function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAl
|
|
|
3227
3115
|
),
|
|
3228
3116
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-muted-foreground/25 p-5", children: [
|
|
3229
3117
|
/* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { title: "Connectors", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3230
|
-
|
|
3118
|
+
chunkXXF4U7WL_cjs.Button,
|
|
3231
3119
|
{
|
|
3232
3120
|
size: "sm",
|
|
3233
3121
|
variant: "outline",
|
|
@@ -3246,11 +3134,11 @@ function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAl
|
|
|
3246
3134
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 min-w-0", children: [
|
|
3247
3135
|
s.logo_url && /* @__PURE__ */ jsxRuntime.jsx("img", { src: s.logo_url, alt: "", className: "w-5 h-5 rounded-sm object-contain flex-shrink-0" }),
|
|
3248
3136
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium truncate", children: s.name }),
|
|
3249
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3137
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "outline", className: "text-xs flex-shrink-0 ml-auto", children: s.slug })
|
|
3250
3138
|
] }),
|
|
3251
3139
|
s.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground truncate", children: s.description }),
|
|
3252
3140
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3253
|
-
|
|
3141
|
+
chunkXXF4U7WL_cjs.Button,
|
|
3254
3142
|
{
|
|
3255
3143
|
size: "sm",
|
|
3256
3144
|
variant: "outline",
|
|
@@ -3262,8 +3150,8 @@ function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAl
|
|
|
3262
3150
|
)
|
|
3263
3151
|
] }, s.id)) }),
|
|
3264
3152
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-2", children: [
|
|
3265
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3266
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3153
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", variant: "ghost", onClick: () => setShowAdd(false), children: "Cancel" }),
|
|
3154
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", onClick: handleApplyAdd, disabled: applyingToolkits, children: applyingToolkits ? "Saving..." : "Apply" })
|
|
3267
3155
|
] })
|
|
3268
3156
|
] }),
|
|
3269
3157
|
isAllLoading ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "Loading..." }) : isEmpty ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "No connectors added. Click Add to configure connectors." }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-3", children: [
|
|
@@ -3271,7 +3159,7 @@ function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAl
|
|
|
3271
3159
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3272
3160
|
c.logo && /* @__PURE__ */ jsxRuntime.jsx("img", { src: c.logo, alt: "", className: "w-5 h-5 rounded-sm object-contain flex-shrink-0" }),
|
|
3273
3161
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium truncate flex-1", children: c.name }),
|
|
3274
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3162
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: schemeBadgeVariant(c.authScheme ?? c.auth_scheme), className: "text-xs flex-shrink-0", children: c.authScheme ?? c.auth_scheme }),
|
|
3275
3163
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3276
3164
|
"button",
|
|
3277
3165
|
{
|
|
@@ -3303,7 +3191,7 @@ function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAl
|
|
|
3303
3191
|
(c.authScheme ?? c.auth_scheme) === "API_KEY" && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 mt-auto", children: [
|
|
3304
3192
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3305
3193
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3306
|
-
|
|
3194
|
+
chunkXXF4U7WL_cjs.Input,
|
|
3307
3195
|
{
|
|
3308
3196
|
type: "password",
|
|
3309
3197
|
placeholder: c.connected || c.connectionStatus === "ACTIVE" ? "Update API key\u2026" : "Enter API key\u2026",
|
|
@@ -3313,7 +3201,7 @@ function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAl
|
|
|
3313
3201
|
}
|
|
3314
3202
|
),
|
|
3315
3203
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3316
|
-
|
|
3204
|
+
chunkXXF4U7WL_cjs.Button,
|
|
3317
3205
|
{
|
|
3318
3206
|
size: "sm",
|
|
3319
3207
|
variant: "outline",
|
|
@@ -3326,14 +3214,14 @@ function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAl
|
|
|
3326
3214
|
] }),
|
|
3327
3215
|
/* @__PURE__ */ jsxRuntime.jsx(FormError, { error: errors[c.slug] })
|
|
3328
3216
|
] }),
|
|
3329
|
-
((c.authScheme ?? c.auth_scheme) === "OAUTH2" || (c.authScheme ?? c.auth_scheme) === "OAUTH1") && c.connectionStatus !== "ACTIVE" && !c.connected && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3330
|
-
((c.authScheme ?? c.auth_scheme) === "OAUTH2" || (c.authScheme ?? c.auth_scheme) === "OAUTH1") && (c.connectionStatus === "ACTIVE" || c.connected) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3217
|
+
((c.authScheme ?? c.auth_scheme) === "OAUTH2" || (c.authScheme ?? c.auth_scheme) === "OAUTH1") && c.connectionStatus !== "ACTIVE" && !c.connected && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", variant: "outline", className: "h-7 text-xs w-full mt-auto", onClick: () => handleComposioOauth(c.slug), children: "Connect" }),
|
|
3218
|
+
((c.authScheme ?? c.auth_scheme) === "OAUTH2" || (c.authScheme ?? c.auth_scheme) === "OAUTH1") && (c.connectionStatus === "ACTIVE" || c.connected) && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", variant: "ghost", className: "h-7 text-xs text-muted-foreground w-full mt-auto", onClick: () => handleComposioOauth(c.slug), children: "Reconnect" })
|
|
3331
3219
|
] }, `composio-${c.slug}`)),
|
|
3332
3220
|
mcpConnections.map((c) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-border p-3 flex flex-col gap-2", children: [
|
|
3333
3221
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3334
3222
|
c.server_logo_url && /* @__PURE__ */ jsxRuntime.jsx("img", { src: c.server_logo_url, alt: "", className: "w-5 h-5 rounded-sm object-contain flex-shrink-0" }),
|
|
3335
3223
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium truncate flex-1", children: c.server_name }),
|
|
3336
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3224
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "outline", className: "text-xs flex-shrink-0", children: c.server_slug }),
|
|
3337
3225
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3338
3226
|
"button",
|
|
3339
3227
|
{
|
|
@@ -3356,7 +3244,7 @@ function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAl
|
|
|
3356
3244
|
}
|
|
3357
3245
|
),
|
|
3358
3246
|
(c.status === "expired" || c.status === "failed") && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3359
|
-
|
|
3247
|
+
chunkXXF4U7WL_cjs.Button,
|
|
3360
3248
|
{
|
|
3361
3249
|
size: "sm",
|
|
3362
3250
|
variant: "ghost",
|
|
@@ -3404,7 +3292,7 @@ function AgentConnectorsManager({ agentId, toolkits: initialToolkits, composioAl
|
|
|
3404
3292
|
)
|
|
3405
3293
|
] });
|
|
3406
3294
|
}
|
|
3407
|
-
var CodeEditor =
|
|
3295
|
+
var CodeEditor = React.lazy(() => import('./code-editor-ZYP54YUT.cjs'));
|
|
3408
3296
|
function buildTree(files) {
|
|
3409
3297
|
const rootFiles = [];
|
|
3410
3298
|
const dirMap = /* @__PURE__ */ new Map();
|
|
@@ -3413,7 +3301,7 @@ function buildTree(files) {
|
|
|
3413
3301
|
if (existing) return existing;
|
|
3414
3302
|
const parts = dirPath.split("/");
|
|
3415
3303
|
const node = {
|
|
3416
|
-
name: parts[parts.length - 1],
|
|
3304
|
+
name: parts[parts.length - 1] ?? dirPath,
|
|
3417
3305
|
fullPath: dirPath,
|
|
3418
3306
|
children: [],
|
|
3419
3307
|
files: []
|
|
@@ -3463,7 +3351,7 @@ function collectAllDirPaths(nodes) {
|
|
|
3463
3351
|
nodes.forEach(walk);
|
|
3464
3352
|
return paths;
|
|
3465
3353
|
}
|
|
3466
|
-
function
|
|
3354
|
+
function FileTreeEditor2({
|
|
3467
3355
|
initialFiles,
|
|
3468
3356
|
onSave,
|
|
3469
3357
|
onChange,
|
|
@@ -3475,49 +3363,49 @@ function FileTreeEditor({
|
|
|
3475
3363
|
newFileTemplate = { filename: "SKILL.md", content: "---\nname: New Skill\ndescription: Describe when this skill should be triggered\n---\n\n# Instructions\n\nDescribe what this skill does...\n" },
|
|
3476
3364
|
savedVersion
|
|
3477
3365
|
}) {
|
|
3478
|
-
const [files, setFiles] =
|
|
3479
|
-
const [selectedPath, setSelectedPath] =
|
|
3366
|
+
const [files, setFiles] = React.useState(initialFiles);
|
|
3367
|
+
const [selectedPath, setSelectedPath] = React.useState(
|
|
3480
3368
|
initialFiles.length > 0 ? initialFiles[0].path : null
|
|
3481
3369
|
);
|
|
3482
|
-
const [saving, setSaving] =
|
|
3483
|
-
const [expanded, setExpanded] =
|
|
3370
|
+
const [saving, setSaving] = React.useState(false);
|
|
3371
|
+
const [expanded, setExpanded] = React.useState(() => {
|
|
3484
3372
|
const { rootDirs } = buildTree(initialFiles);
|
|
3485
3373
|
return collectAllDirPaths(rootDirs);
|
|
3486
3374
|
});
|
|
3487
|
-
const [showAddFolder, setShowAddFolder] =
|
|
3488
|
-
const [newFolderName, setNewFolderName] =
|
|
3489
|
-
const [addingFileInDir, setAddingFileInDir] =
|
|
3490
|
-
const [newFileName, setNewFileName] =
|
|
3491
|
-
const [savedSnapshot, setSavedSnapshot] =
|
|
3492
|
-
|
|
3375
|
+
const [showAddFolder, setShowAddFolder] = React.useState(false);
|
|
3376
|
+
const [newFolderName, setNewFolderName] = React.useState("");
|
|
3377
|
+
const [addingFileInDir, setAddingFileInDir] = React.useState(null);
|
|
3378
|
+
const [newFileName, setNewFileName] = React.useState("");
|
|
3379
|
+
const [savedSnapshot, setSavedSnapshot] = React.useState(() => JSON.stringify(initialFiles));
|
|
3380
|
+
React.useEffect(() => {
|
|
3493
3381
|
const snap = JSON.stringify(initialFiles);
|
|
3494
3382
|
setSavedSnapshot(snap);
|
|
3495
3383
|
setFiles(initialFiles);
|
|
3496
3384
|
const { rootDirs } = buildTree(initialFiles);
|
|
3497
3385
|
setExpanded(collectAllDirPaths(rootDirs));
|
|
3498
3386
|
}, [initialFiles]);
|
|
3499
|
-
|
|
3387
|
+
React.useEffect(() => {
|
|
3500
3388
|
if (savedVersion !== void 0 && savedVersion > 0) {
|
|
3501
3389
|
setSavedSnapshot(JSON.stringify(files));
|
|
3502
3390
|
}
|
|
3503
3391
|
}, [savedVersion]);
|
|
3504
|
-
const onChangeRef =
|
|
3392
|
+
const onChangeRef = React.useRef(onChange);
|
|
3505
3393
|
onChangeRef.current = onChange;
|
|
3506
|
-
|
|
3394
|
+
React.useEffect(() => {
|
|
3507
3395
|
if (onChangeRef.current && JSON.stringify(files) !== savedSnapshot) {
|
|
3508
3396
|
onChangeRef.current(files);
|
|
3509
3397
|
}
|
|
3510
3398
|
}, [files, savedSnapshot]);
|
|
3511
|
-
const isDirty =
|
|
3399
|
+
const isDirty = React.useMemo(
|
|
3512
3400
|
() => JSON.stringify(files) !== savedSnapshot,
|
|
3513
3401
|
[files, savedSnapshot]
|
|
3514
3402
|
);
|
|
3515
|
-
const tree =
|
|
3516
|
-
const activeFile =
|
|
3403
|
+
const tree = React.useMemo(() => buildTree(files), [files]);
|
|
3404
|
+
const activeFile = React.useMemo(
|
|
3517
3405
|
() => selectedPath ? files.find((f) => f.path === selectedPath) ?? null : null,
|
|
3518
3406
|
[files, selectedPath]
|
|
3519
3407
|
);
|
|
3520
|
-
const handleEditorChange =
|
|
3408
|
+
const handleEditorChange = React.useCallback((value) => {
|
|
3521
3409
|
if (readOnly || !selectedPath) return;
|
|
3522
3410
|
setFiles((prev) => prev.map((f) => f.path === selectedPath ? { ...f, content: value } : f));
|
|
3523
3411
|
}, [readOnly, selectedPath]);
|
|
@@ -3632,7 +3520,7 @@ function FileTreeEditor({
|
|
|
3632
3520
|
}),
|
|
3633
3521
|
!readOnly && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { paddingLeft: `${(depth + 1) * 16 + 8}px` }, className: "py-1 pr-2", children: addingFileInDir === node.fullPath ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1", children: [
|
|
3634
3522
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3635
|
-
|
|
3523
|
+
chunkXXF4U7WL_cjs.Input,
|
|
3636
3524
|
{
|
|
3637
3525
|
value: newFileName,
|
|
3638
3526
|
onChange: (e) => setNewFileName(e.target.value),
|
|
@@ -3642,7 +3530,7 @@ function FileTreeEditor({
|
|
|
3642
3530
|
autoFocus: true
|
|
3643
3531
|
}
|
|
3644
3532
|
),
|
|
3645
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3533
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { onClick: () => addFileInDir(node.fullPath), size: "sm", className: "h-6 text-xs px-2", children: "+" })
|
|
3646
3534
|
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
3647
3535
|
"button",
|
|
3648
3536
|
{
|
|
@@ -3661,10 +3549,10 @@ function FileTreeEditor({
|
|
|
3661
3549
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between mb-3", children: [
|
|
3662
3550
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
3663
3551
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-semibold", children: title }),
|
|
3664
|
-
isDirty && !readOnly && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3665
|
-
readOnly && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3552
|
+
isDirty && !readOnly && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "destructive", className: "text-xs", children: "Unsaved changes" }),
|
|
3553
|
+
readOnly && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "secondary", className: "text-xs", children: "Read-only" })
|
|
3666
3554
|
] }),
|
|
3667
|
-
!readOnly && !hideSave && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3555
|
+
!readOnly && !hideSave && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { onClick: handleSave, disabled: saving || !isDirty, size: "sm", children: saving ? "Saving..." : saveLabel })
|
|
3668
3556
|
] }),
|
|
3669
3557
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-4 min-h-[500px]", children: [
|
|
3670
3558
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-64 shrink-0 border border-border rounded-md overflow-hidden", children: [
|
|
@@ -3684,7 +3572,7 @@ function FileTreeEditor({
|
|
|
3684
3572
|
] }),
|
|
3685
3573
|
showAddFolder && !readOnly && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-2 border-b border-border flex gap-1", children: [
|
|
3686
3574
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3687
|
-
|
|
3575
|
+
chunkXXF4U7WL_cjs.Input,
|
|
3688
3576
|
{
|
|
3689
3577
|
value: newFolderName,
|
|
3690
3578
|
onChange: (e) => setNewFolderName(e.target.value),
|
|
@@ -3694,7 +3582,7 @@ function FileTreeEditor({
|
|
|
3694
3582
|
autoFocus: true
|
|
3695
3583
|
}
|
|
3696
3584
|
),
|
|
3697
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3585
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { onClick: addFolder, size: "sm", className: "h-7 text-xs px-2", children: "Add" })
|
|
3698
3586
|
] }),
|
|
3699
3587
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm overflow-y-auto", children: [
|
|
3700
3588
|
tree.rootFiles.map((file) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -3726,7 +3614,7 @@ function FileTreeEditor({
|
|
|
3726
3614
|
] }),
|
|
3727
3615
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 border border-border rounded-md overflow-hidden", children: activeFile ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "h-full flex flex-col", children: [
|
|
3728
3616
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3 py-1.5 bg-muted/50 border-b border-border text-xs text-muted-foreground", children: activeFile.path }),
|
|
3729
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3617
|
+
/* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 animate-pulse bg-muted/50" }), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3730
3618
|
CodeEditor,
|
|
3731
3619
|
{
|
|
3732
3620
|
value: activeFile.content,
|
|
@@ -3742,8 +3630,8 @@ function FileTreeEditor({
|
|
|
3742
3630
|
] });
|
|
3743
3631
|
}
|
|
3744
3632
|
function AgentSkillManager({ agentId, initialSkills, onSaved }) {
|
|
3745
|
-
const client =
|
|
3746
|
-
const initialFiles =
|
|
3633
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
3634
|
+
const initialFiles = React.useMemo(
|
|
3747
3635
|
() => initialSkills.flatMap(
|
|
3748
3636
|
(s) => s.files.map((f) => ({
|
|
3749
3637
|
path: s.folder === "(root)" ? f.path : `${s.folder}/${f.path}`,
|
|
@@ -3752,7 +3640,7 @@ function AgentSkillManager({ agentId, initialSkills, onSaved }) {
|
|
|
3752
3640
|
),
|
|
3753
3641
|
[initialSkills]
|
|
3754
3642
|
);
|
|
3755
|
-
const handleSave =
|
|
3643
|
+
const handleSave = React.useCallback(async (files) => {
|
|
3756
3644
|
const folderMap = /* @__PURE__ */ new Map();
|
|
3757
3645
|
for (const file of files) {
|
|
3758
3646
|
const slashIdx = file.path.lastIndexOf("/");
|
|
@@ -3773,7 +3661,7 @@ function AgentSkillManager({ agentId, initialSkills, onSaved }) {
|
|
|
3773
3661
|
onSaved?.();
|
|
3774
3662
|
}, [agentId, client, onSaved]);
|
|
3775
3663
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3776
|
-
|
|
3664
|
+
FileTreeEditor2,
|
|
3777
3665
|
{
|
|
3778
3666
|
initialFiles,
|
|
3779
3667
|
onSave: handleSave,
|
|
@@ -3788,25 +3676,25 @@ function AgentSkillManager({ agentId, initialSkills, onSaved }) {
|
|
|
3788
3676
|
);
|
|
3789
3677
|
}
|
|
3790
3678
|
function AgentPluginManager({ agentId, initialPlugins, onSaved }) {
|
|
3791
|
-
const client =
|
|
3792
|
-
const [plugins, setPlugins] =
|
|
3793
|
-
const [saving, setSaving] =
|
|
3794
|
-
const [dialogOpen, setDialogOpen] =
|
|
3795
|
-
const [marketplaces, setMarketplaces] =
|
|
3796
|
-
const [selectedMarketplace, setSelectedMarketplace] =
|
|
3797
|
-
const [availablePlugins, setAvailablePlugins] =
|
|
3798
|
-
const [loadingPlugins, setLoadingPlugins] =
|
|
3799
|
-
const [marketplaceNames, setMarketplaceNames] =
|
|
3800
|
-
const savedSnapshot =
|
|
3801
|
-
|
|
3679
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
3680
|
+
const [plugins, setPlugins] = React.useState(initialPlugins);
|
|
3681
|
+
const [saving, setSaving] = React.useState(false);
|
|
3682
|
+
const [dialogOpen, setDialogOpen] = React.useState(false);
|
|
3683
|
+
const [marketplaces, setMarketplaces] = React.useState([]);
|
|
3684
|
+
const [selectedMarketplace, setSelectedMarketplace] = React.useState(null);
|
|
3685
|
+
const [availablePlugins, setAvailablePlugins] = React.useState([]);
|
|
3686
|
+
const [loadingPlugins, setLoadingPlugins] = React.useState(false);
|
|
3687
|
+
const [marketplaceNames, setMarketplaceNames] = React.useState({});
|
|
3688
|
+
const savedSnapshot = React.useRef(JSON.stringify(initialPlugins));
|
|
3689
|
+
React.useEffect(() => {
|
|
3802
3690
|
savedSnapshot.current = JSON.stringify(initialPlugins);
|
|
3803
3691
|
setPlugins(initialPlugins);
|
|
3804
3692
|
}, [initialPlugins]);
|
|
3805
|
-
const isDirty =
|
|
3693
|
+
const isDirty = React.useMemo(
|
|
3806
3694
|
() => JSON.stringify(plugins) !== savedSnapshot.current,
|
|
3807
3695
|
[plugins]
|
|
3808
3696
|
);
|
|
3809
|
-
|
|
3697
|
+
React.useEffect(() => {
|
|
3810
3698
|
client.pluginMarketplaces.list().then((data) => {
|
|
3811
3699
|
setMarketplaces(data);
|
|
3812
3700
|
const names = {};
|
|
@@ -3815,7 +3703,7 @@ function AgentPluginManager({ agentId, initialPlugins, onSaved }) {
|
|
|
3815
3703
|
}).catch(() => {
|
|
3816
3704
|
});
|
|
3817
3705
|
}, [client]);
|
|
3818
|
-
const loadPluginsForMarketplace =
|
|
3706
|
+
const loadPluginsForMarketplace = React.useCallback(async (marketplaceId) => {
|
|
3819
3707
|
setSelectedMarketplace(marketplaceId);
|
|
3820
3708
|
setLoadingPlugins(true);
|
|
3821
3709
|
setAvailablePlugins([]);
|
|
@@ -3861,10 +3749,10 @@ function AgentPluginManager({ agentId, initialPlugins, onSaved }) {
|
|
|
3861
3749
|
}
|
|
3862
3750
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border border-muted-foreground/25 p-5", children: [
|
|
3863
3751
|
/* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { title: "Plugins", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
3864
|
-
isDirty && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3752
|
+
isDirty && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "destructive", className: "text-xs", children: "Unsaved changes" }),
|
|
3865
3753
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
|
|
3866
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3867
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3754
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { variant: "outline", size: "sm", onClick: () => setDialogOpen(true), children: "Add Plugins" }),
|
|
3755
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { onClick: handleSave, disabled: saving || !isDirty, size: "sm", children: saving ? "Saving..." : "Save Plugins" })
|
|
3868
3756
|
] })
|
|
3869
3757
|
] }) }),
|
|
3870
3758
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
@@ -3881,7 +3769,7 @@ function AgentPluginManager({ agentId, initialPlugins, onSaved }) {
|
|
|
3881
3769
|
] })
|
|
3882
3770
|
] }),
|
|
3883
3771
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3884
|
-
|
|
3772
|
+
chunkXXF4U7WL_cjs.Button,
|
|
3885
3773
|
{
|
|
3886
3774
|
variant: "ghost",
|
|
3887
3775
|
size: "sm",
|
|
@@ -3894,11 +3782,11 @@ function AgentPluginManager({ agentId, initialPlugins, onSaved }) {
|
|
|
3894
3782
|
},
|
|
3895
3783
|
`${p.marketplace_id}:${p.plugin_name}`
|
|
3896
3784
|
)) }),
|
|
3897
|
-
/* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: dialogOpen, onOpenChange: setDialogOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "max-w-lg max-h-[80vh] flex flex-col", children: [
|
|
3898
|
-
/* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: "Add Plugins" }) }),
|
|
3899
|
-
/* @__PURE__ */ jsxRuntime.jsx(DialogBody, { className: "flex-1 overflow-hidden flex flex-col gap-3", children: marketplaces.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "No plugin marketplaces registered. Add one from the Plugin Marketplaces page first." }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
3785
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Dialog, { open: dialogOpen, onOpenChange: setDialogOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(chunkXXF4U7WL_cjs.DialogContent, { className: "max-w-lg max-h-[80vh] flex flex-col", children: [
|
|
3786
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogTitle, { children: "Add Plugins" }) }),
|
|
3787
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogBody, { className: "flex-1 overflow-hidden flex flex-col gap-3", children: marketplaces.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: "No plugin marketplaces registered. Add one from the Plugin Marketplaces page first." }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
3900
3788
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-2 flex-wrap", children: marketplaces.map((m) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
3901
|
-
|
|
3789
|
+
chunkXXF4U7WL_cjs.Button,
|
|
3902
3790
|
{
|
|
3903
3791
|
size: "sm",
|
|
3904
3792
|
variant: selectedMarketplace === m.id ? "default" : "outline",
|
|
@@ -3925,9 +3813,9 @@ function AgentPluginManager({ agentId, initialPlugins, onSaved }) {
|
|
|
3925
3813
|
] }),
|
|
3926
3814
|
ap.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground truncate", children: ap.description }),
|
|
3927
3815
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1 mt-1", children: [
|
|
3928
|
-
ap.hasAgents && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3929
|
-
ap.hasSkills && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3930
|
-
ap.hasMcpJson && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3816
|
+
ap.hasAgents && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "secondary", className: "text-[10px] px-1 py-0", children: "Agents" }),
|
|
3817
|
+
ap.hasSkills && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "secondary", className: "text-[10px] px-1 py-0", children: "Skills" }),
|
|
3818
|
+
ap.hasMcpJson && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Badge, { variant: "secondary", className: "text-[10px] px-1 py-0", children: "MCP" })
|
|
3931
3819
|
] })
|
|
3932
3820
|
] }),
|
|
3933
3821
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `w-4 h-4 rounded border flex items-center justify-center shrink-0 ${enabled ? "bg-primary border-primary text-primary-foreground" : "border-muted-foreground"}`, children: enabled && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs", children: "\u2713" }) })
|
|
@@ -3937,20 +3825,20 @@ function AgentPluginManager({ agentId, initialPlugins, onSaved }) {
|
|
|
3937
3825
|
);
|
|
3938
3826
|
}) })
|
|
3939
3827
|
] }) }),
|
|
3940
|
-
/* @__PURE__ */ jsxRuntime.jsx(DialogFooter, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
3828
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.DialogFooter, { children: /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { size: "sm", onClick: () => setDialogOpen(false), children: "Done" }) })
|
|
3941
3829
|
] }) })
|
|
3942
3830
|
] })
|
|
3943
3831
|
] });
|
|
3944
3832
|
}
|
|
3945
3833
|
function AgentRuns({ agentId }) {
|
|
3946
|
-
const { LinkComponent, basePath } =
|
|
3947
|
-
const { data, error, isLoading } =
|
|
3834
|
+
const { LinkComponent, basePath } = chunkXXF4U7WL_cjs.useNavigation();
|
|
3835
|
+
const { data, error, isLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
3948
3836
|
`agent-runs-${agentId}`,
|
|
3949
3837
|
(client) => client.runs.list({ agent_id: agentId, limit: 50 })
|
|
3950
3838
|
);
|
|
3951
3839
|
const runs = data?.data ?? [];
|
|
3952
3840
|
if (isLoading) {
|
|
3953
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
3841
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-10 w-full" }, i)) });
|
|
3954
3842
|
}
|
|
3955
3843
|
if (error) {
|
|
3956
3844
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-destructive text-sm py-4 text-center", children: [
|
|
@@ -4002,16 +3890,16 @@ function AgentA2aInfo({
|
|
|
4002
3890
|
initialTags,
|
|
4003
3891
|
onChanged
|
|
4004
3892
|
}) {
|
|
4005
|
-
const client =
|
|
4006
|
-
const [enabled, setEnabled] =
|
|
4007
|
-
const [toggling, setToggling] =
|
|
4008
|
-
const [detailsOpen, setDetailsOpen] =
|
|
4009
|
-
const [cardPreview, setCardPreview] =
|
|
4010
|
-
const [loading, setLoading] =
|
|
4011
|
-
const [tags, setTags] =
|
|
4012
|
-
const [tagInput, setTagInput] =
|
|
4013
|
-
const [savingTags, setSavingTags] =
|
|
4014
|
-
const inputRef =
|
|
3893
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
3894
|
+
const [enabled, setEnabled] = React.useState(initialEnabled);
|
|
3895
|
+
const [toggling, setToggling] = React.useState(false);
|
|
3896
|
+
const [detailsOpen, setDetailsOpen] = React.useState(false);
|
|
3897
|
+
const [cardPreview, setCardPreview] = React.useState(null);
|
|
3898
|
+
const [loading, setLoading] = React.useState(false);
|
|
3899
|
+
const [tags, setTags] = React.useState(initialTags);
|
|
3900
|
+
const [tagInput, setTagInput] = React.useState("");
|
|
3901
|
+
const [savingTags, setSavingTags] = React.useState(false);
|
|
3902
|
+
const inputRef = React.useRef(null);
|
|
4015
3903
|
const endpointUrl = `${baseUrl}/api/a2a/${tenantSlug}/${agentSlug}`;
|
|
4016
3904
|
const jsonRpcUrl = `${baseUrl}/api/a2a/${tenantSlug}/${agentSlug}/jsonrpc`;
|
|
4017
3905
|
const agentCardUrl = `${baseUrl}/api/a2a/${tenantSlug}/${agentSlug}/.well-known/agent-card.json`;
|
|
@@ -4171,7 +4059,7 @@ function AgentA2aInfo({
|
|
|
4171
4059
|
] })
|
|
4172
4060
|
] }),
|
|
4173
4061
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
4174
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4062
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { variant: "outline", size: "sm", onClick: fetchAgentCard, disabled: loading, children: loading ? "Loading..." : cardPreview ? "Hide Agent Card" : "Agent Card" }),
|
|
4175
4063
|
cardPreview && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-3 relative", children: [
|
|
4176
4064
|
/* @__PURE__ */ jsxRuntime.jsx("pre", { className: "rounded bg-muted p-4 text-xs font-mono text-foreground overflow-x-auto max-h-96", children: cardPreview }),
|
|
4177
4065
|
/* @__PURE__ */ jsxRuntime.jsx(CopyButton, { text: cardPreview, className: "absolute top-2 right-2" })
|
|
@@ -4181,22 +4069,23 @@ function AgentA2aInfo({
|
|
|
4181
4069
|
] })
|
|
4182
4070
|
] });
|
|
4183
4071
|
}
|
|
4072
|
+
var AgentIdentityTab = React.lazy(() => import('./agent-identity-tab-F4MU2HP2.cjs').then((m) => ({ default: m.AgentIdentityTab })));
|
|
4184
4073
|
function AgentDetailPage({ agentId, a2aBaseUrl, tenantSlug }) {
|
|
4185
|
-
const { LinkComponent, basePath } =
|
|
4074
|
+
const { LinkComponent, basePath } = chunkXXF4U7WL_cjs.useNavigation();
|
|
4186
4075
|
const { mutate } = swr.useSWRConfig();
|
|
4187
4076
|
const cacheKey = `agent-${agentId}`;
|
|
4188
|
-
const { data: agent, error, isLoading } =
|
|
4077
|
+
const { data: agent, error, isLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
4189
4078
|
cacheKey,
|
|
4190
4079
|
(client) => client.agents.get(agentId)
|
|
4191
4080
|
);
|
|
4192
|
-
const invalidate =
|
|
4081
|
+
const invalidate = React.useCallback(() => {
|
|
4193
4082
|
mutate(cacheKey);
|
|
4194
4083
|
}, [mutate, cacheKey]);
|
|
4195
4084
|
if (isLoading) {
|
|
4196
4085
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
4197
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4198
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-6 gap-4", children: [1, 2, 3, 4, 5, 6].map((i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
4199
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4086
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-9 w-40" }),
|
|
4087
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-6 gap-4", children: [1, 2, 3, 4, 5, 6].map((i) => /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-20" }, i)) }),
|
|
4088
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-64 w-full" })
|
|
4200
4089
|
] });
|
|
4201
4090
|
}
|
|
4202
4091
|
if (error) {
|
|
@@ -4210,7 +4099,7 @@ function AgentDetailPage({ agentId, a2aBaseUrl, tenantSlug }) {
|
|
|
4210
4099
|
LinkComponent,
|
|
4211
4100
|
{
|
|
4212
4101
|
href: `${basePath}/agents/${agentId}/playground`,
|
|
4213
|
-
className:
|
|
4102
|
+
className: chunkXXF4U7WL_cjs.buttonVariants({ variant: "outline", size: "sm" }),
|
|
4214
4103
|
children: "Open Playground"
|
|
4215
4104
|
}
|
|
4216
4105
|
) }),
|
|
@@ -4250,6 +4139,10 @@ function AgentDetailPage({ agentId, a2aBaseUrl, tenantSlug }) {
|
|
|
4250
4139
|
)
|
|
4251
4140
|
] })
|
|
4252
4141
|
},
|
|
4142
|
+
{
|
|
4143
|
+
label: "Identity",
|
|
4144
|
+
content: /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-64 w-full" }), children: /* @__PURE__ */ jsxRuntime.jsx(AgentIdentityTab, { agent, FileTreeEditor: chunkVZ43ATC5_cjs.FileTreeEditor, onSaved: invalidate }) })
|
|
4145
|
+
},
|
|
4253
4146
|
{
|
|
4254
4147
|
label: "Connectors",
|
|
4255
4148
|
content: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -4333,19 +4226,19 @@ function ScheduleCard({
|
|
|
4333
4226
|
schedule,
|
|
4334
4227
|
timezone
|
|
4335
4228
|
}) {
|
|
4336
|
-
const [frequency, setFrequency] =
|
|
4337
|
-
const [time, setTime] =
|
|
4338
|
-
const [dayOfWeek, setDayOfWeek] =
|
|
4339
|
-
const [prompt, setPrompt] =
|
|
4340
|
-
const [enabled, setEnabled] =
|
|
4341
|
-
const [name, setName] =
|
|
4229
|
+
const [frequency, setFrequency] = React.useState(schedule.frequency);
|
|
4230
|
+
const [time, setTime] = React.useState(formatTimeForInput(schedule.time));
|
|
4231
|
+
const [dayOfWeek, setDayOfWeek] = React.useState(schedule.day_of_week ?? 1);
|
|
4232
|
+
const [prompt, setPrompt] = React.useState(schedule.prompt ?? "");
|
|
4233
|
+
const [enabled, setEnabled] = React.useState(schedule.enabled);
|
|
4234
|
+
const [name, setName] = React.useState(schedule.name ?? "");
|
|
4342
4235
|
const showTimePicker = ["daily", "weekdays", "weekly"].includes(frequency);
|
|
4343
4236
|
const showDayPicker = frequency === "weekly";
|
|
4344
4237
|
const canEnable = frequency !== "manual";
|
|
4345
4238
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded border border-muted-foreground/15 p-4 space-y-3", children: [
|
|
4346
4239
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-3", children: [
|
|
4347
4240
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4348
|
-
|
|
4241
|
+
chunkXXF4U7WL_cjs.Input,
|
|
4349
4242
|
{
|
|
4350
4243
|
value: name,
|
|
4351
4244
|
onChange: (e) => setName(e.target.value),
|
|
@@ -4374,7 +4267,7 @@ function ScheduleCard({
|
|
|
4374
4267
|
] }) })
|
|
4375
4268
|
] }),
|
|
4376
4269
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
|
|
4377
|
-
/* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Frequency", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4270
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Frequency", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4378
4271
|
Select,
|
|
4379
4272
|
{
|
|
4380
4273
|
value: frequency,
|
|
@@ -4387,15 +4280,15 @@ function ScheduleCard({
|
|
|
4387
4280
|
children: FREQUENCIES.map((f) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: f.value, children: f.label }, f.value))
|
|
4388
4281
|
}
|
|
4389
4282
|
) }),
|
|
4390
|
-
showTimePicker && /* @__PURE__ */ jsxRuntime.jsx(FormField, { label: `Time (${timezone})`, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4391
|
-
|
|
4283
|
+
showTimePicker && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: `Time (${timezone})`, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4284
|
+
chunkXXF4U7WL_cjs.Input,
|
|
4392
4285
|
{
|
|
4393
4286
|
type: "time",
|
|
4394
4287
|
value: time,
|
|
4395
4288
|
onChange: (e) => setTime(e.target.value)
|
|
4396
4289
|
}
|
|
4397
4290
|
) }),
|
|
4398
|
-
showDayPicker && /* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Day of Week", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4291
|
+
showDayPicker && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Day of Week", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4399
4292
|
Select,
|
|
4400
4293
|
{
|
|
4401
4294
|
value: dayOfWeek.toString(),
|
|
@@ -4404,7 +4297,7 @@ function ScheduleCard({
|
|
|
4404
4297
|
}
|
|
4405
4298
|
) })
|
|
4406
4299
|
] }),
|
|
4407
|
-
frequency !== "manual" && /* @__PURE__ */ jsxRuntime.jsx(FormField, { label: "Prompt", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4300
|
+
frequency !== "manual" && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.FormField, { label: "Prompt", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4408
4301
|
Textarea,
|
|
4409
4302
|
{
|
|
4410
4303
|
value: prompt,
|
|
@@ -4441,7 +4334,7 @@ function MarkdownContent({ children }) {
|
|
|
4441
4334
|
) });
|
|
4442
4335
|
}
|
|
4443
4336
|
function CollapsibleJson({ data, maxHeight = "12rem" }) {
|
|
4444
|
-
const [expanded, setExpanded] =
|
|
4337
|
+
const [expanded, setExpanded] = React.useState(false);
|
|
4445
4338
|
const json = typeof data === "string" ? data : JSON.stringify(data, null, 2);
|
|
4446
4339
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
4447
4340
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -4589,36 +4482,36 @@ function renderEvent(event, idx) {
|
|
|
4589
4482
|
}
|
|
4590
4483
|
var TERMINAL_STATUSES = /* @__PURE__ */ new Set(["completed", "failed", "cancelled", "timed_out"]);
|
|
4591
4484
|
function PlaygroundPage({ agentId }) {
|
|
4592
|
-
const client =
|
|
4593
|
-
const { LinkComponent, basePath } =
|
|
4594
|
-
const { data: agent, error: agentError, isLoading } =
|
|
4485
|
+
const client = chunkXXF4U7WL_cjs.useAgentPlaneClient();
|
|
4486
|
+
const { LinkComponent, basePath } = chunkXXF4U7WL_cjs.useNavigation();
|
|
4487
|
+
const { data: agent, error: agentError, isLoading } = chunkVZ43ATC5_cjs.useApi(
|
|
4595
4488
|
`agent-${agentId}`,
|
|
4596
4489
|
(c) => c.agents.get(agentId)
|
|
4597
4490
|
);
|
|
4598
|
-
const [prompt, setPrompt] =
|
|
4599
|
-
const [events, setEvents] =
|
|
4600
|
-
const [streamingText, setStreamingText] =
|
|
4601
|
-
const [running, setRunning] =
|
|
4602
|
-
const [polling, setPolling] =
|
|
4603
|
-
const [error, setError] =
|
|
4604
|
-
const [sessionId, setSessionId] =
|
|
4605
|
-
const sessionIdRef =
|
|
4606
|
-
const abortRef =
|
|
4607
|
-
const runIdRef =
|
|
4608
|
-
const streamRef =
|
|
4609
|
-
const scrollRef =
|
|
4610
|
-
const textareaRef =
|
|
4611
|
-
|
|
4491
|
+
const [prompt, setPrompt] = React.useState("");
|
|
4492
|
+
const [events, setEvents] = React.useState([]);
|
|
4493
|
+
const [streamingText, setStreamingText] = React.useState("");
|
|
4494
|
+
const [running, setRunning] = React.useState(false);
|
|
4495
|
+
const [polling, setPolling] = React.useState(false);
|
|
4496
|
+
const [error, setError] = React.useState(null);
|
|
4497
|
+
const [sessionId, setSessionId] = React.useState(null);
|
|
4498
|
+
const sessionIdRef = React.useRef(null);
|
|
4499
|
+
const abortRef = React.useRef(null);
|
|
4500
|
+
const runIdRef = React.useRef(null);
|
|
4501
|
+
const streamRef = React.useRef(null);
|
|
4502
|
+
const scrollRef = React.useRef(null);
|
|
4503
|
+
const textareaRef = React.useRef(null);
|
|
4504
|
+
React.useEffect(() => {
|
|
4612
4505
|
const el = scrollRef.current;
|
|
4613
4506
|
if (el) el.scrollTop = el.scrollHeight;
|
|
4614
4507
|
}, [events, streamingText]);
|
|
4615
|
-
|
|
4508
|
+
React.useEffect(() => {
|
|
4616
4509
|
return () => {
|
|
4617
4510
|
abortRef.current?.abort();
|
|
4618
4511
|
streamRef.current?.abort();
|
|
4619
4512
|
};
|
|
4620
4513
|
}, []);
|
|
4621
|
-
const pollForFinalResult =
|
|
4514
|
+
const pollForFinalResult = React.useCallback(async (runId) => {
|
|
4622
4515
|
setPolling(true);
|
|
4623
4516
|
let delay = 3e3;
|
|
4624
4517
|
const maxDelay = 1e4;
|
|
@@ -4674,7 +4567,7 @@ function PlaygroundPage({ agentId }) {
|
|
|
4674
4567
|
streamRef.current = null;
|
|
4675
4568
|
}
|
|
4676
4569
|
}, [client]);
|
|
4677
|
-
const consumeStream =
|
|
4570
|
+
const consumeStream = React.useCallback(async (stream) => {
|
|
4678
4571
|
streamRef.current = stream;
|
|
4679
4572
|
let handedOffToPoll = false;
|
|
4680
4573
|
try {
|
|
@@ -4712,7 +4605,7 @@ function PlaygroundPage({ agentId }) {
|
|
|
4712
4605
|
}
|
|
4713
4606
|
}
|
|
4714
4607
|
}, [pollForFinalResult]);
|
|
4715
|
-
const handleSend =
|
|
4608
|
+
const handleSend = React.useCallback(async () => {
|
|
4716
4609
|
if (!prompt.trim() || running) return;
|
|
4717
4610
|
const messageText = prompt.trim();
|
|
4718
4611
|
setPrompt("");
|
|
@@ -4783,13 +4676,13 @@ function PlaygroundPage({ agentId }) {
|
|
|
4783
4676
|
if (isLoading) {
|
|
4784
4677
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-[calc(100vh-6rem)]", children: [
|
|
4785
4678
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 mb-4", children: [
|
|
4786
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4787
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4679
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-8 w-24" }),
|
|
4680
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-4 w-40" })
|
|
4788
4681
|
] }),
|
|
4789
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4682
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "flex-1 rounded-lg" }),
|
|
4790
4683
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 space-y-2", children: [
|
|
4791
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4792
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4684
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-24 w-full rounded-lg" }),
|
|
4685
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkVZ43ATC5_cjs.Skeleton, { className: "h-8 w-20" })
|
|
4793
4686
|
] })
|
|
4794
4687
|
] });
|
|
4795
4688
|
}
|
|
@@ -4820,7 +4713,7 @@ function PlaygroundPage({ agentId }) {
|
|
|
4820
4713
|
]
|
|
4821
4714
|
}
|
|
4822
4715
|
),
|
|
4823
|
-
(sessionId || events.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4716
|
+
(sessionId || events.length > 0) && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { onClick: handleNewChat, variant: "outline", size: "sm", disabled: running, children: "New Chat" }),
|
|
4824
4717
|
sessionId && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground font-mono", children: [
|
|
4825
4718
|
"Session: ",
|
|
4826
4719
|
sessionId.slice(0, 12),
|
|
@@ -4858,81 +4751,113 @@ function PlaygroundPage({ agentId }) {
|
|
|
4858
4751
|
}
|
|
4859
4752
|
),
|
|
4860
4753
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
4861
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4862
|
-
running && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4754
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { onClick: handleSend, disabled: running || !prompt.trim(), size: "sm", children: running ? "Running\u2026" : sessionId ? "Send" : "Run" }),
|
|
4755
|
+
running && /* @__PURE__ */ jsxRuntime.jsx(chunkXXF4U7WL_cjs.Button, { onClick: handleStop, variant: "outline", size: "sm", children: "Stop" }),
|
|
4863
4756
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground ml-1", children: "\u2318+Enter to send" })
|
|
4864
4757
|
] })
|
|
4865
4758
|
] })
|
|
4866
4759
|
] });
|
|
4867
4760
|
}
|
|
4868
4761
|
|
|
4762
|
+
Object.defineProperty(exports, "Card", {
|
|
4763
|
+
enumerable: true,
|
|
4764
|
+
get: function () { return chunkVZ43ATC5_cjs.Card; }
|
|
4765
|
+
});
|
|
4766
|
+
Object.defineProperty(exports, "CardContent", {
|
|
4767
|
+
enumerable: true,
|
|
4768
|
+
get: function () { return chunkVZ43ATC5_cjs.CardContent; }
|
|
4769
|
+
});
|
|
4770
|
+
Object.defineProperty(exports, "CardDescription", {
|
|
4771
|
+
enumerable: true,
|
|
4772
|
+
get: function () { return chunkVZ43ATC5_cjs.CardDescription; }
|
|
4773
|
+
});
|
|
4774
|
+
Object.defineProperty(exports, "CardHeader", {
|
|
4775
|
+
enumerable: true,
|
|
4776
|
+
get: function () { return chunkVZ43ATC5_cjs.CardHeader; }
|
|
4777
|
+
});
|
|
4778
|
+
Object.defineProperty(exports, "CardTitle", {
|
|
4779
|
+
enumerable: true,
|
|
4780
|
+
get: function () { return chunkVZ43ATC5_cjs.CardTitle; }
|
|
4781
|
+
});
|
|
4782
|
+
Object.defineProperty(exports, "Skeleton", {
|
|
4783
|
+
enumerable: true,
|
|
4784
|
+
get: function () { return chunkVZ43ATC5_cjs.Skeleton; }
|
|
4785
|
+
});
|
|
4786
|
+
Object.defineProperty(exports, "useApi", {
|
|
4787
|
+
enumerable: true,
|
|
4788
|
+
get: function () { return chunkVZ43ATC5_cjs.useApi; }
|
|
4789
|
+
});
|
|
4869
4790
|
Object.defineProperty(exports, "AgentPlaneProvider", {
|
|
4870
4791
|
enumerable: true,
|
|
4871
|
-
get: function () { return
|
|
4792
|
+
get: function () { return chunkXXF4U7WL_cjs.AgentPlaneProvider; }
|
|
4872
4793
|
});
|
|
4873
4794
|
Object.defineProperty(exports, "Badge", {
|
|
4874
4795
|
enumerable: true,
|
|
4875
|
-
get: function () { return
|
|
4796
|
+
get: function () { return chunkXXF4U7WL_cjs.Badge; }
|
|
4876
4797
|
});
|
|
4877
4798
|
Object.defineProperty(exports, "Button", {
|
|
4878
4799
|
enumerable: true,
|
|
4879
|
-
get: function () { return
|
|
4800
|
+
get: function () { return chunkXXF4U7WL_cjs.Button; }
|
|
4880
4801
|
});
|
|
4881
|
-
Object.defineProperty(exports, "
|
|
4802
|
+
Object.defineProperty(exports, "Dialog", {
|
|
4882
4803
|
enumerable: true,
|
|
4883
|
-
get: function () { return
|
|
4804
|
+
get: function () { return chunkXXF4U7WL_cjs.Dialog; }
|
|
4884
4805
|
});
|
|
4885
|
-
Object.defineProperty(exports, "
|
|
4806
|
+
Object.defineProperty(exports, "DialogBody", {
|
|
4886
4807
|
enumerable: true,
|
|
4887
|
-
get: function () { return
|
|
4808
|
+
get: function () { return chunkXXF4U7WL_cjs.DialogBody; }
|
|
4888
4809
|
});
|
|
4889
|
-
Object.defineProperty(exports, "
|
|
4810
|
+
Object.defineProperty(exports, "DialogContent", {
|
|
4890
4811
|
enumerable: true,
|
|
4891
|
-
get: function () { return
|
|
4812
|
+
get: function () { return chunkXXF4U7WL_cjs.DialogContent; }
|
|
4892
4813
|
});
|
|
4893
|
-
Object.defineProperty(exports, "
|
|
4814
|
+
Object.defineProperty(exports, "DialogDescription", {
|
|
4894
4815
|
enumerable: true,
|
|
4895
|
-
get: function () { return
|
|
4816
|
+
get: function () { return chunkXXF4U7WL_cjs.DialogDescription; }
|
|
4896
4817
|
});
|
|
4897
|
-
Object.defineProperty(exports, "
|
|
4818
|
+
Object.defineProperty(exports, "DialogFooter", {
|
|
4898
4819
|
enumerable: true,
|
|
4899
|
-
get: function () { return
|
|
4820
|
+
get: function () { return chunkXXF4U7WL_cjs.DialogFooter; }
|
|
4900
4821
|
});
|
|
4901
|
-
Object.defineProperty(exports, "
|
|
4822
|
+
Object.defineProperty(exports, "DialogHeader", {
|
|
4902
4823
|
enumerable: true,
|
|
4903
|
-
get: function () { return
|
|
4824
|
+
get: function () { return chunkXXF4U7WL_cjs.DialogHeader; }
|
|
4904
4825
|
});
|
|
4905
|
-
Object.defineProperty(exports, "
|
|
4826
|
+
Object.defineProperty(exports, "DialogTitle", {
|
|
4827
|
+
enumerable: true,
|
|
4828
|
+
get: function () { return chunkXXF4U7WL_cjs.DialogTitle; }
|
|
4829
|
+
});
|
|
4830
|
+
Object.defineProperty(exports, "FormField", {
|
|
4831
|
+
enumerable: true,
|
|
4832
|
+
get: function () { return chunkXXF4U7WL_cjs.FormField; }
|
|
4833
|
+
});
|
|
4834
|
+
Object.defineProperty(exports, "Input", {
|
|
4906
4835
|
enumerable: true,
|
|
4907
|
-
get: function () { return
|
|
4836
|
+
get: function () { return chunkXXF4U7WL_cjs.Input; }
|
|
4908
4837
|
});
|
|
4909
4838
|
Object.defineProperty(exports, "badgeVariants", {
|
|
4910
4839
|
enumerable: true,
|
|
4911
|
-
get: function () { return
|
|
4840
|
+
get: function () { return chunkXXF4U7WL_cjs.badgeVariants; }
|
|
4912
4841
|
});
|
|
4913
4842
|
Object.defineProperty(exports, "buttonVariants", {
|
|
4914
4843
|
enumerable: true,
|
|
4915
|
-
get: function () { return
|
|
4844
|
+
get: function () { return chunkXXF4U7WL_cjs.buttonVariants; }
|
|
4916
4845
|
});
|
|
4917
4846
|
Object.defineProperty(exports, "cn", {
|
|
4918
4847
|
enumerable: true,
|
|
4919
|
-
get: function () { return
|
|
4848
|
+
get: function () { return chunkXXF4U7WL_cjs.cn; }
|
|
4920
4849
|
});
|
|
4921
4850
|
Object.defineProperty(exports, "useAgentPlaneClient", {
|
|
4922
4851
|
enumerable: true,
|
|
4923
|
-
get: function () { return
|
|
4924
|
-
});
|
|
4925
|
-
Object.defineProperty(exports, "useApi", {
|
|
4926
|
-
enumerable: true,
|
|
4927
|
-
get: function () { return chunk4XBBDUSZ_cjs.useApi; }
|
|
4852
|
+
get: function () { return chunkXXF4U7WL_cjs.useAgentPlaneClient; }
|
|
4928
4853
|
});
|
|
4929
4854
|
Object.defineProperty(exports, "useAuthError", {
|
|
4930
4855
|
enumerable: true,
|
|
4931
|
-
get: function () { return
|
|
4856
|
+
get: function () { return chunkXXF4U7WL_cjs.useAuthError; }
|
|
4932
4857
|
});
|
|
4933
4858
|
Object.defineProperty(exports, "useNavigation", {
|
|
4934
4859
|
enumerable: true,
|
|
4935
|
-
get: function () { return
|
|
4860
|
+
get: function () { return chunkXXF4U7WL_cjs.useNavigation; }
|
|
4936
4861
|
});
|
|
4937
4862
|
exports.AdminTable = AdminTable;
|
|
4938
4863
|
exports.AdminTableHead = AdminTableHead;
|
|
@@ -4950,16 +4875,8 @@ exports.ConfirmDialog = ConfirmDialog;
|
|
|
4950
4875
|
exports.CopyButton = CopyButton;
|
|
4951
4876
|
exports.DashboardPage = DashboardPage;
|
|
4952
4877
|
exports.DetailPageHeader = DetailPageHeader;
|
|
4953
|
-
exports.Dialog = Dialog;
|
|
4954
|
-
exports.DialogBody = DialogBody;
|
|
4955
|
-
exports.DialogContent = DialogContent;
|
|
4956
|
-
exports.DialogDescription = DialogDescription;
|
|
4957
|
-
exports.DialogFooter = DialogFooter;
|
|
4958
|
-
exports.DialogHeader = DialogHeader;
|
|
4959
|
-
exports.DialogTitle = DialogTitle;
|
|
4960
4878
|
exports.EmptyRow = EmptyRow;
|
|
4961
4879
|
exports.FormError = FormError;
|
|
4962
|
-
exports.FormField = FormField;
|
|
4963
4880
|
exports.LocalDate = LocalDate;
|
|
4964
4881
|
exports.McpServerListPage = McpServerListPage;
|
|
4965
4882
|
exports.MetricCard = MetricCard;
|