@truefoundry/trueforge-ui 0.3.0-rc.2 → 0.3.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/README.md +18 -10
- package/dist/{AgentCodeSnippets-637HQUXD.js → AgentCodeSnippets-U6KQWVBJ.js} +38 -23
- package/dist/AgentCodeSnippets-U6KQWVBJ.js.map +1 -0
- package/dist/AgentMetricChart-3D6FUFO6.js +15 -0
- package/dist/{AgentOverview-3FJ5EE6N.js → AgentOverview-RLJ6HZCN.js} +7 -7
- package/dist/{AgentSessionEventTimeline-VELWUYPR.js → AgentSessionEventTimeline-CDXRRUZQ.js} +8 -8
- package/dist/{AgentSessionEventTimeline-VELWUYPR.js.map → AgentSessionEventTimeline-CDXRRUZQ.js.map} +1 -1
- package/dist/{AgentSessionEventTimelineChart-CUKETHWM.js → AgentSessionEventTimelineChart-S2WX6ZEA.js} +12 -12
- package/dist/AgentSessionEventTimelineChart-S2WX6ZEA.js.map +1 -0
- package/dist/{AgentSessions-T7MOGOTZ.js → AgentSessions-UI3L7XY2.js} +72 -24
- package/dist/AgentSessions-UI3L7XY2.js.map +1 -0
- package/dist/{ConnectorSettings-ESZ2RSRG.js → ConnectorSettings-OIGAC2HU.js} +156 -116
- package/dist/ConnectorSettings-OIGAC2HU.js.map +1 -0
- package/dist/{DockLayout-NLFNU6F2.js → DockLayout-J5BRKMJZ.js} +10 -10
- package/dist/{DrawerLayout-PR3SMKA6.js → DrawerLayout-65YHGHIF.js} +13 -11
- package/dist/DrawerLayout-65YHGHIF.js.map +1 -0
- package/dist/{ModelSettings-LYW64IRR.js → ModelSettings-VP6WCMGT.js} +10 -10
- package/dist/{ModelSettings-LYW64IRR.js.map → ModelSettings-VP6WCMGT.js.map} +1 -1
- package/dist/OpenUiFenceBlock-UTDCTNTM.js +9 -0
- package/dist/{SandboxSettings-DF64LHYI.js → SandboxSettings-GTZT7LD6.js} +9 -9
- package/dist/SchedulesPage-ARWU7BZF.js +15 -0
- package/dist/{SettingsBuilder-LSXK2VN4.js → SettingsBuilder-A4BPYIFZ.js} +8 -8
- package/dist/{ShellRouteSync-B22IAV2W.js → ShellRouteSync-SSLGM35F.js} +157 -22
- package/dist/ShellRouteSync-SSLGM35F.js.map +1 -0
- package/dist/{SidebarLayout-XW6LXB7R.js → SidebarLayout-MFDOGAVJ.js} +74 -53
- package/dist/SidebarLayout-MFDOGAVJ.js.map +1 -0
- package/dist/{SkillSettings-64VXUO6J.js → SkillSettings-WQPUQ5TE.js} +18 -13
- package/dist/SkillSettings-WQPUQ5TE.js.map +1 -0
- package/dist/{TrueForgeUIWithRouter-3TSLV22Q.js → TrueForgeUIWithRouter-5CDICMCE.js} +9 -9
- package/dist/{WidgetLayout-Q5P7PYSJ.js → WidgetLayout-HE7E4UL5.js} +10 -10
- package/dist/{chunk-SQGT43Z3.js → chunk-2BDTG544.js} +21 -4
- package/dist/chunk-2BDTG544.js.map +1 -0
- package/dist/{chunk-YQO2NMJ3.js → chunk-2OKGEU6X.js} +4425 -2982
- package/dist/chunk-2OKGEU6X.js.map +1 -0
- package/dist/{chunk-FQK2XVVE.js → chunk-6CFZHEYH.js} +225 -72
- package/dist/chunk-6CFZHEYH.js.map +1 -0
- package/dist/{chunk-QC42MLAK.js → chunk-7AAO4UDQ.js} +4 -3
- package/dist/chunk-7AAO4UDQ.js.map +1 -0
- package/dist/chunk-E4GVP6PM.js +195 -0
- package/dist/chunk-E4GVP6PM.js.map +1 -0
- package/dist/{chunk-LGRHHFHN.js → chunk-F7ZAQIRE.js} +166 -45
- package/dist/chunk-F7ZAQIRE.js.map +1 -0
- package/dist/{chunk-VJ7BZGAF.js → chunk-GTTMLDCI.js} +2 -2
- package/dist/{chunk-5I2COQNL.js → chunk-IOPHQEUY.js} +13 -11
- package/dist/chunk-IOPHQEUY.js.map +1 -0
- package/dist/{chunk-G2TUAD65.js → chunk-KCYBMKQL.js} +235 -108
- package/dist/chunk-KCYBMKQL.js.map +1 -0
- package/dist/{chunk-H6WTY5PM.js → chunk-MAA7U4RF.js} +17 -227
- package/dist/chunk-MAA7U4RF.js.map +1 -0
- package/dist/{chunk-GXYAOAK5.js → chunk-MJULWIPI.js} +224 -162
- package/dist/chunk-MJULWIPI.js.map +1 -0
- package/dist/chunk-P7J2ABEP.js +587 -0
- package/dist/chunk-P7J2ABEP.js.map +1 -0
- package/dist/{chunk-VUMGMGKZ.js → chunk-TGKQRK3S.js} +52 -8
- package/dist/chunk-TGKQRK3S.js.map +1 -0
- package/dist/{chunk-I3AL54MA.js → chunk-VXKNS7FH.js} +28 -24
- package/dist/chunk-VXKNS7FH.js.map +1 -0
- package/dist/chunk-XO3FYN2W.js +517 -0
- package/dist/chunk-XO3FYN2W.js.map +1 -0
- package/dist/{createTrueFoundryServer-CmZnBh_l.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +8 -5
- package/dist/index.d.ts +300 -89
- package/dist/index.js +65 -488
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +44 -13
- package/dist/plugins/trueforge-agent-server-adapter/index.js +73 -37
- package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +3 -3
- package/dist/AgentCodeSnippets-637HQUXD.js.map +0 -1
- package/dist/AgentMetricChart-4FYECRIN.js +0 -15
- package/dist/AgentSessionEventTimelineChart-CUKETHWM.js.map +0 -1
- package/dist/AgentSessions-T7MOGOTZ.js.map +0 -1
- package/dist/ConnectorSettings-ESZ2RSRG.js.map +0 -1
- package/dist/DrawerLayout-PR3SMKA6.js.map +0 -1
- package/dist/OpenUiFenceBlock-JEPNPJ7U.js +0 -9
- package/dist/SchedulesPage-WQU4H25F.js +0 -15
- package/dist/ShellRouteSync-B22IAV2W.js.map +0 -1
- package/dist/SidebarLayout-XW6LXB7R.js.map +0 -1
- package/dist/SkillSettings-64VXUO6J.js.map +0 -1
- package/dist/chunk-5I2COQNL.js.map +0 -1
- package/dist/chunk-BWHOZFIV.js +0 -587
- package/dist/chunk-BWHOZFIV.js.map +0 -1
- package/dist/chunk-FQK2XVVE.js.map +0 -1
- package/dist/chunk-G2TUAD65.js.map +0 -1
- package/dist/chunk-GXYAOAK5.js.map +0 -1
- package/dist/chunk-H6WTY5PM.js.map +0 -1
- package/dist/chunk-I3AL54MA.js.map +0 -1
- package/dist/chunk-LGRHHFHN.js.map +0 -1
- package/dist/chunk-NHHSZB5N.js +0 -74
- package/dist/chunk-NHHSZB5N.js.map +0 -1
- package/dist/chunk-QC42MLAK.js.map +0 -1
- package/dist/chunk-SFZNIO6U.js +0 -18
- package/dist/chunk-SFZNIO6U.js.map +0 -1
- package/dist/chunk-SQGT43Z3.js.map +0 -1
- package/dist/chunk-VUMGMGKZ.js.map +0 -1
- package/dist/chunk-YQO2NMJ3.js.map +0 -1
- /package/dist/{AgentMetricChart-4FYECRIN.js.map → AgentMetricChart-3D6FUFO6.js.map} +0 -0
- /package/dist/{AgentOverview-3FJ5EE6N.js.map → AgentOverview-RLJ6HZCN.js.map} +0 -0
- /package/dist/{DockLayout-NLFNU6F2.js.map → DockLayout-J5BRKMJZ.js.map} +0 -0
- /package/dist/{OpenUiFenceBlock-JEPNPJ7U.js.map → OpenUiFenceBlock-UTDCTNTM.js.map} +0 -0
- /package/dist/{SandboxSettings-DF64LHYI.js.map → SandboxSettings-GTZT7LD6.js.map} +0 -0
- /package/dist/{SchedulesPage-WQU4H25F.js.map → SchedulesPage-ARWU7BZF.js.map} +0 -0
- /package/dist/{SettingsBuilder-LSXK2VN4.js.map → SettingsBuilder-A4BPYIFZ.js.map} +0 -0
- /package/dist/{TrueForgeUIWithRouter-3TSLV22Q.js.map → TrueForgeUIWithRouter-5CDICMCE.js.map} +0 -0
- /package/dist/{WidgetLayout-Q5P7PYSJ.js.map → WidgetLayout-HE7E4UL5.js.map} +0 -0
- /package/dist/{chunk-VJ7BZGAF.js.map → chunk-GTTMLDCI.js.map} +0 -0
|
@@ -7,41 +7,45 @@ import {
|
|
|
7
7
|
auiInputClass,
|
|
8
8
|
useMCPAuth,
|
|
9
9
|
useToasterOptional
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-2OKGEU6X.js";
|
|
11
|
+
import "./chunk-E4GVP6PM.js";
|
|
12
12
|
import {
|
|
13
|
-
Icon
|
|
14
|
-
|
|
15
|
-
} from "./chunk-H6WTY5PM.js";
|
|
13
|
+
Icon
|
|
14
|
+
} from "./chunk-MAA7U4RF.js";
|
|
16
15
|
import {
|
|
16
|
+
getErrorMessage,
|
|
17
17
|
useCatalogServer
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-6CFZHEYH.js";
|
|
19
19
|
import "./chunk-M6MHLVSO.js";
|
|
20
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-GTTMLDCI.js";
|
|
21
21
|
import {
|
|
22
22
|
cn
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-P7J2ABEP.js";
|
|
24
24
|
|
|
25
25
|
// src/containers/SettingsBuilder/ConnectorSettings.tsx
|
|
26
|
-
import { useCallback, useEffect as
|
|
26
|
+
import { useCallback, useEffect as useEffect3, useMemo, useState as useState3 } from "react";
|
|
27
27
|
|
|
28
28
|
// src/containers/SettingsBuilder/AddMcpServerForm.tsx
|
|
29
|
-
import { useState } from "react";
|
|
29
|
+
import { useEffect, useState } from "react";
|
|
30
30
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
31
31
|
var AUTH_OPTIONS = [
|
|
32
|
-
{ value: "dcr", label: "OAuth" },
|
|
33
32
|
{ value: "none", label: "None" },
|
|
34
|
-
{ value: "header", label: "API Key" }
|
|
33
|
+
{ value: "header", label: "API Key" },
|
|
34
|
+
{ value: "dcr", label: "OAuth" }
|
|
35
35
|
];
|
|
36
36
|
var inputClassName = auiInputClass("h-11 shadow-sm");
|
|
37
37
|
var RequiredMark = () => /* @__PURE__ */ jsx("span", { className: "ml-0.5 text-failure-bg", "aria-hidden": true, children: "*" });
|
|
38
|
-
var AddMcpServerForm = ({ open, onOpenChange,
|
|
38
|
+
var AddMcpServerForm = ({ open, onOpenChange, onSubmit, connector, busy = false, error }) => {
|
|
39
39
|
const [name, setName] = useState("");
|
|
40
40
|
const [url, setUrl] = useState("");
|
|
41
41
|
const [description, setDescription] = useState("");
|
|
42
42
|
const [authType, setAuthType] = useState("dcr");
|
|
43
43
|
const [apiKey, setApiKey] = useState("");
|
|
44
44
|
const [headerName, setHeaderName] = useState("");
|
|
45
|
+
const isEditing = connector !== void 0;
|
|
46
|
+
const nameInputClassName = auiInputClass(
|
|
47
|
+
`h-11 shadow-sm ${isEditing ? "cursor-not-allowed bg-secondary-bg/60 text-text-secondary opacity-40" : ""}`
|
|
48
|
+
);
|
|
45
49
|
const resetForm = () => {
|
|
46
50
|
setName("");
|
|
47
51
|
setUrl("");
|
|
@@ -50,11 +54,21 @@ var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
|
|
|
50
54
|
setApiKey("");
|
|
51
55
|
setHeaderName("");
|
|
52
56
|
};
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (!open) return;
|
|
59
|
+
setName(connector?.name ?? "");
|
|
60
|
+
setUrl(connector?.url ?? "");
|
|
61
|
+
setDescription(connector?.description ?? "");
|
|
62
|
+
setAuthType(connector?.auth.type ?? "dcr");
|
|
63
|
+
setApiKey("");
|
|
64
|
+
setHeaderName(connector?.auth.type === "header" ? connector.auth.headerName ?? "" : "");
|
|
65
|
+
}, [connector, open]);
|
|
53
66
|
const handleOpenChange = (nextOpen) => {
|
|
54
67
|
if (!nextOpen) resetForm();
|
|
55
68
|
onOpenChange(nextOpen);
|
|
56
69
|
};
|
|
57
|
-
const
|
|
70
|
+
const hasApiKey = !!apiKey.trim() || connector?.auth.type === "header";
|
|
71
|
+
const isValid = !!name.trim() && !!description.trim() && !!url.trim() && (authType !== "header" || hasApiKey);
|
|
58
72
|
const handleSubmit = async (event) => {
|
|
59
73
|
event.preventDefault();
|
|
60
74
|
if (!isValid || busy) return;
|
|
@@ -64,7 +78,7 @@ var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
|
|
|
64
78
|
...headerName.trim() ? { headerName: headerName.trim() } : {}
|
|
65
79
|
} : { type: authType };
|
|
66
80
|
try {
|
|
67
|
-
await
|
|
81
|
+
await onSubmit({
|
|
68
82
|
name: name.trim(),
|
|
69
83
|
url: url.trim(),
|
|
70
84
|
description: description.trim(),
|
|
@@ -80,8 +94,8 @@ var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
|
|
|
80
94
|
{
|
|
81
95
|
open,
|
|
82
96
|
onOpenChange: handleOpenChange,
|
|
83
|
-
title: "Add MCP server",
|
|
84
|
-
description: "Point at a remote MCP endpoint. It then behaves like any other connector.",
|
|
97
|
+
title: isEditing ? "Edit MCP server" : "Add MCP server",
|
|
98
|
+
description: isEditing ? "Update how this connector authenticates." : "Point at a remote MCP endpoint. It then behaves like any other connector.",
|
|
85
99
|
contentSized: true,
|
|
86
100
|
headerIcon: /* @__PURE__ */ jsx(
|
|
87
101
|
"span",
|
|
@@ -105,12 +119,14 @@ var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
|
|
|
105
119
|
type: "text",
|
|
106
120
|
required: true,
|
|
107
121
|
value: name,
|
|
122
|
+
readOnly: isEditing,
|
|
123
|
+
"aria-disabled": isEditing,
|
|
108
124
|
onChange: (event) => {
|
|
109
125
|
setName(event.target.value);
|
|
110
126
|
},
|
|
111
127
|
placeholder: "analytics-postgres-mcp",
|
|
112
|
-
autoFocus:
|
|
113
|
-
className:
|
|
128
|
+
autoFocus: !isEditing,
|
|
129
|
+
className: nameInputClassName
|
|
114
130
|
}
|
|
115
131
|
)
|
|
116
132
|
] }),
|
|
@@ -191,14 +207,14 @@ var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
|
|
|
191
207
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
192
208
|
/* @__PURE__ */ jsxs("label", { htmlFor: "mcp-server-api-key", className: "mb-1.5 block text-sm font-medium text-text-primary", children: [
|
|
193
209
|
"API key",
|
|
194
|
-
/* @__PURE__ */ jsx(RequiredMark, {})
|
|
210
|
+
connector?.auth.type === "header" ? /* @__PURE__ */ jsx("span", { className: "font-normal text-text-secondary", children: " (leave blank to keep current)" }) : /* @__PURE__ */ jsx(RequiredMark, {})
|
|
195
211
|
] }),
|
|
196
212
|
/* @__PURE__ */ jsx(
|
|
197
213
|
"input",
|
|
198
214
|
{
|
|
199
215
|
id: "mcp-server-api-key",
|
|
200
216
|
type: "password",
|
|
201
|
-
required:
|
|
217
|
+
required: connector?.auth.type !== "header",
|
|
202
218
|
value: apiKey,
|
|
203
219
|
onChange: (event) => {
|
|
204
220
|
setApiKey(event.target.value);
|
|
@@ -231,7 +247,7 @@ var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
|
|
|
231
247
|
] }),
|
|
232
248
|
/* @__PURE__ */ jsxs("div", { className: "mt-6 space-y-3", children: [
|
|
233
249
|
error ? /* @__PURE__ */ jsx("p", { className: "text-failure-bg text-sm", children: error }) : null,
|
|
234
|
-
/* @__PURE__ */ jsx(Button.Primary, { type: "submit", size: "large", disabled: !isValid || busy, className: "w-full shrink-0", children: "Add" })
|
|
250
|
+
/* @__PURE__ */ jsx(Button.Primary, { type: "submit", size: "large", disabled: !isValid || busy, className: "w-full shrink-0", children: isEditing ? "Save" : "Add" })
|
|
235
251
|
] })
|
|
236
252
|
] })
|
|
237
253
|
}
|
|
@@ -247,7 +263,7 @@ var AUTH_TYPE_LABELS = {
|
|
|
247
263
|
};
|
|
248
264
|
|
|
249
265
|
// src/containers/SettingsBuilder/ConnectorDetails.tsx
|
|
250
|
-
import { useEffect, useLayoutEffect, useRef, useState as useState2 } from "react";
|
|
266
|
+
import { useEffect as useEffect2, useLayoutEffect, useRef, useState as useState2 } from "react";
|
|
251
267
|
import { Fragment as Fragment2, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
252
268
|
function ExpandableDescription({ text }) {
|
|
253
269
|
const contentRef = useRef(null);
|
|
@@ -321,6 +337,7 @@ var ConnectorDetails = ({
|
|
|
321
337
|
connector,
|
|
322
338
|
onBack,
|
|
323
339
|
onConnectorRefreshed,
|
|
340
|
+
onEdit,
|
|
324
341
|
onDisconnect,
|
|
325
342
|
busy = false
|
|
326
343
|
}) => {
|
|
@@ -330,7 +347,7 @@ var ConnectorDetails = ({
|
|
|
330
347
|
const [toolsLoading, setToolsLoading] = useState2(true);
|
|
331
348
|
const [toolsError, setToolsError] = useState2(null);
|
|
332
349
|
const [refreshingAfterAuth, setRefreshingAfterAuth] = useState2(false);
|
|
333
|
-
|
|
350
|
+
useEffect2(() => {
|
|
334
351
|
let cancelled = false;
|
|
335
352
|
setTools([]);
|
|
336
353
|
setToolsError(null);
|
|
@@ -385,13 +402,14 @@ var ConnectorDetails = ({
|
|
|
385
402
|
}
|
|
386
403
|
),
|
|
387
404
|
/* @__PURE__ */ jsxs2("div", { className: "min-w-0 flex-1", children: [
|
|
388
|
-
/* @__PURE__ */
|
|
389
|
-
|
|
405
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2", children: [
|
|
406
|
+
/* @__PURE__ */ jsx2("h4", { className: "text-lg font-semibold text-text-primary", children: connector.name }),
|
|
407
|
+
/* @__PURE__ */ jsx2("span", { className: "inline-flex items-center rounded-full border border-border bg-secondary-bg/40 px-2 py-0.5 text-xs font-medium text-text-secondary", children: AUTH_TYPE_LABELS[connector.auth.type] ?? AUTH_TYPE_LABELS.none }),
|
|
390
408
|
/* @__PURE__ */ jsxs2(
|
|
391
409
|
"span",
|
|
392
410
|
{
|
|
393
411
|
className: cn(
|
|
394
|
-
"flex items-center gap-1.5 text-xs font-medium",
|
|
412
|
+
"flex items-center gap-1.5 rounded-full border border-border bg-secondary-bg/40 px-2 py-0.5 text-xs font-medium",
|
|
395
413
|
connector.authenticated ? "text-success-bg" : "text-text-primary"
|
|
396
414
|
),
|
|
397
415
|
children: [
|
|
@@ -407,28 +425,30 @@ var ConnectorDetails = ({
|
|
|
407
425
|
connector.authenticated ? "Connected" : "Not authenticated"
|
|
408
426
|
]
|
|
409
427
|
}
|
|
410
|
-
)
|
|
411
|
-
/* @__PURE__ */ jsxs2("span", { className: "text-text-secondary", children: [
|
|
412
|
-
"\xB7 ",
|
|
413
|
-
connector.description
|
|
414
|
-
] })
|
|
428
|
+
)
|
|
415
429
|
] }),
|
|
416
|
-
/* @__PURE__ */ jsx2("
|
|
430
|
+
/* @__PURE__ */ jsx2("div", { className: "flex flex-wrap items-center gap-x-2 gap-y-1 text-sm", children: /* @__PURE__ */ jsx2("span", { className: "text-text-secondary", children: connector.description }) })
|
|
417
431
|
] }),
|
|
418
|
-
|
|
419
|
-
Button.Secondary,
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2", children: [
|
|
433
|
+
/* @__PURE__ */ jsxs2(Button.Secondary, { size: "small", type: "button", disabled: busy, onClick: onEdit, children: [
|
|
434
|
+
/* @__PURE__ */ jsx2(Icon, { name: "pencil", className: "size-3" }),
|
|
435
|
+
"Edit"
|
|
436
|
+
] }),
|
|
437
|
+
connector.auth.type === "dcr" && !connector.authenticated ? /* @__PURE__ */ jsx2(
|
|
438
|
+
Button.Secondary,
|
|
439
|
+
{
|
|
440
|
+
size: "small",
|
|
441
|
+
type: "button",
|
|
442
|
+
disabled: busy || connecting,
|
|
443
|
+
onClick: () => {
|
|
444
|
+
void handleAuthorize(connector.id, (isSuccess) => {
|
|
445
|
+
if (isSuccess) void refreshAfterAuthentication();
|
|
446
|
+
});
|
|
447
|
+
},
|
|
448
|
+
children: connecting ? "Connecting\u2026" : "Connect"
|
|
449
|
+
}
|
|
450
|
+
) : connector.auth.type === "dcr" && !connector.requiresAuth ? /* @__PURE__ */ jsx2(Button.Secondary, { size: "small", type: "button", disabled: busy, onClick: onDisconnect, children: "Disconnect" }) : null
|
|
451
|
+
] })
|
|
432
452
|
] }),
|
|
433
453
|
/* @__PURE__ */ jsx2("section", { className: "mt-6", "aria-labelledby": "connector-tools-heading", children: toolsLoading ? /* @__PURE__ */ jsx2("div", { className: "rounded-xl border border-dashed border-border p-6 text-center text-sm text-text-secondary", children: "Loading tools\u2026" }) : toolsError ? /* @__PURE__ */ jsxs2("div", { className: "rounded-xl border border-failure-bg/30 bg-failure-bg/10 p-6 text-center text-sm text-failure-bg", children: [
|
|
434
454
|
toolsError,
|
|
@@ -474,6 +494,7 @@ var ConnectorSettings = () => {
|
|
|
474
494
|
const [busy, setBusy] = useState3(false);
|
|
475
495
|
const [catalog, setCatalog] = useState3([]);
|
|
476
496
|
const [addMcpServerFormOpen, setAddMcpServerFormOpen] = useState3(false);
|
|
497
|
+
const [editingConnector, setEditingConnector] = useState3(null);
|
|
477
498
|
const [connectorAwaitingKey, setConnectorAwaitingKey] = useState3(null);
|
|
478
499
|
const [selectedConnector, setSelectedConnector] = useState3(null);
|
|
479
500
|
const [apiKey, setApiKey] = useState3("");
|
|
@@ -514,7 +535,7 @@ var ConnectorSettings = () => {
|
|
|
514
535
|
setLoading(false);
|
|
515
536
|
}
|
|
516
537
|
}, [connectorCatalog]);
|
|
517
|
-
|
|
538
|
+
useEffect3(() => {
|
|
518
539
|
void refresh();
|
|
519
540
|
}, [refresh]);
|
|
520
541
|
const normalizedQuery = query.trim().toLowerCase();
|
|
@@ -596,35 +617,27 @@ var ConnectorSettings = () => {
|
|
|
596
617
|
apiKey: apiKey.trim(),
|
|
597
618
|
...entry.auth.type === "header" && entry.auth.headerName ? { headerName: entry.auth.headerName } : {}
|
|
598
619
|
};
|
|
599
|
-
|
|
600
|
-
const existingConnector = existing?.isConfigured ? existing.connector : void 0;
|
|
601
|
-
if (existingConnector) {
|
|
602
|
-
await connectorCatalog.updateConnector({
|
|
603
|
-
id: existingConnector.id,
|
|
604
|
-
name: existingConnector.name,
|
|
605
|
-
description: existingConnector.description,
|
|
606
|
-
url: existingConnector.url,
|
|
607
|
-
auth
|
|
608
|
-
});
|
|
609
|
-
} else {
|
|
610
|
-
await createFromCatalog(entry, auth);
|
|
611
|
-
}
|
|
620
|
+
await createFromCatalog(entry, auth);
|
|
612
621
|
closeApiKeyModal();
|
|
613
622
|
setTimeout(() => {
|
|
614
623
|
toaster?.showSuccess({
|
|
615
|
-
title: `${entry.name}
|
|
624
|
+
title: `${entry.name} connected`
|
|
616
625
|
});
|
|
617
626
|
}, 100);
|
|
618
627
|
}, setFormError).catch(() => {
|
|
619
628
|
});
|
|
620
629
|
};
|
|
621
|
-
const
|
|
630
|
+
const handleMcpServerSubmit = async (draft) => {
|
|
622
631
|
setFormError(null);
|
|
623
632
|
await runMutation(async () => {
|
|
624
|
-
|
|
633
|
+
if (editingConnector) {
|
|
634
|
+
await connectorCatalog.updateConnector({ id: editingConnector.id, ...draft });
|
|
635
|
+
} else {
|
|
636
|
+
await connectorCatalog.createConnector({ ...draft });
|
|
637
|
+
}
|
|
625
638
|
}, setFormError);
|
|
626
639
|
setTimeout(() => {
|
|
627
|
-
toaster?.showSuccess({ title: `${draft.name} added` });
|
|
640
|
+
toaster?.showSuccess({ title: `${draft.name} ${editingConnector ? "updated" : "added"}` });
|
|
628
641
|
}, 0);
|
|
629
642
|
};
|
|
630
643
|
const handleDisconnect = (connector) => {
|
|
@@ -659,7 +672,30 @@ var ConnectorSettings = () => {
|
|
|
659
672
|
}
|
|
660
673
|
),
|
|
661
674
|
/* @__PURE__ */ jsxs3("div", { className: "min-w-0 flex-1", children: [
|
|
662
|
-
/* @__PURE__ */
|
|
675
|
+
/* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2", children: [
|
|
676
|
+
/* @__PURE__ */ jsx3("h5", { className: "truncate text-sm font-medium text-text-primary", children: connector.name }),
|
|
677
|
+
/* @__PURE__ */ jsx3("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsxs3(
|
|
678
|
+
"span",
|
|
679
|
+
{
|
|
680
|
+
className: cn(
|
|
681
|
+
"flex items-center gap-1.5 rounded-full border border-border bg-secondary-bg/40 px-2 py-0.5 text-xs font-medium",
|
|
682
|
+
connector.authenticated ? "text-success-bg" : "text-text-primary"
|
|
683
|
+
),
|
|
684
|
+
children: [
|
|
685
|
+
/* @__PURE__ */ jsx3(
|
|
686
|
+
"span",
|
|
687
|
+
{
|
|
688
|
+
className: cn(
|
|
689
|
+
"h-1.5 w-1.5 rounded-full",
|
|
690
|
+
connector.authenticated ? "bg-success-bg" : "bg-primary-button-bg"
|
|
691
|
+
)
|
|
692
|
+
}
|
|
693
|
+
),
|
|
694
|
+
connector.authenticated ? "Connected" : "Added"
|
|
695
|
+
]
|
|
696
|
+
}
|
|
697
|
+
) })
|
|
698
|
+
] }),
|
|
663
699
|
/* @__PURE__ */ jsx3("p", { className: "mt-0.5 line-clamp-2 text-sm text-text-secondary sm:truncate", children: connector.description })
|
|
664
700
|
] })
|
|
665
701
|
] });
|
|
@@ -675,28 +711,7 @@ var ConnectorSettings = () => {
|
|
|
675
711
|
children: [
|
|
676
712
|
/* @__PURE__ */ jsx3("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: content }),
|
|
677
713
|
/* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2", children: [
|
|
678
|
-
/* @__PURE__ */
|
|
679
|
-
"span",
|
|
680
|
-
{
|
|
681
|
-
className: cn(
|
|
682
|
-
"flex items-center gap-1.5 rounded-full border border-border bg-secondary-bg/40 px-2 py-0.5 text-xs font-medium",
|
|
683
|
-
connector.authenticated ? "text-success-bg" : "text-text-primary"
|
|
684
|
-
),
|
|
685
|
-
children: [
|
|
686
|
-
/* @__PURE__ */ jsx3(
|
|
687
|
-
"span",
|
|
688
|
-
{
|
|
689
|
-
className: cn(
|
|
690
|
-
"h-1.5 w-1.5 rounded-full",
|
|
691
|
-
connector.authenticated ? "bg-success-bg" : "bg-primary-button-bg"
|
|
692
|
-
)
|
|
693
|
-
}
|
|
694
|
-
),
|
|
695
|
-
connector.authenticated ? "Connected" : "Added"
|
|
696
|
-
]
|
|
697
|
-
}
|
|
698
|
-
) }),
|
|
699
|
-
connector.auth.type === "header" ? /* @__PURE__ */ jsxs3(
|
|
714
|
+
/* @__PURE__ */ jsxs3(
|
|
700
715
|
Button.Secondary,
|
|
701
716
|
{
|
|
702
717
|
size: "small",
|
|
@@ -704,15 +719,16 @@ var ConnectorSettings = () => {
|
|
|
704
719
|
disabled: busy,
|
|
705
720
|
onClick: (event) => {
|
|
706
721
|
event.stopPropagation();
|
|
707
|
-
|
|
708
|
-
|
|
722
|
+
setFormError(null);
|
|
723
|
+
setEditingConnector(connector);
|
|
724
|
+
setAddMcpServerFormOpen(true);
|
|
709
725
|
},
|
|
710
726
|
children: [
|
|
711
|
-
/* @__PURE__ */ jsx3(Icon, { name: "
|
|
712
|
-
"
|
|
727
|
+
/* @__PURE__ */ jsx3(Icon, { name: "pencil", className: "size-3" }),
|
|
728
|
+
"Edit"
|
|
713
729
|
]
|
|
714
730
|
}
|
|
715
|
-
)
|
|
731
|
+
),
|
|
716
732
|
/* @__PURE__ */ jsx3(Icon, { name: "chevron-right", className: "size-4" })
|
|
717
733
|
] })
|
|
718
734
|
]
|
|
@@ -761,26 +777,45 @@ var ConnectorSettings = () => {
|
|
|
761
777
|
entry.id
|
|
762
778
|
);
|
|
763
779
|
};
|
|
764
|
-
const isReplacingKey = useMemo(() => {
|
|
765
|
-
return connectorAwaitingKey !== null && connectors.ordered.some(
|
|
766
|
-
(item) => item.isConfigured && item.connector.id === connectorAwaitingKey.id
|
|
767
|
-
);
|
|
768
|
-
}, [connectorAwaitingKey, connectors.ordered]);
|
|
769
780
|
if (selectedConnector) {
|
|
770
|
-
return /* @__PURE__ */
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
+
return /* @__PURE__ */ jsxs3(Fragment3, { children: [
|
|
782
|
+
/* @__PURE__ */ jsx3(
|
|
783
|
+
ConnectorDetails_default,
|
|
784
|
+
{
|
|
785
|
+
connector: selectedConnector,
|
|
786
|
+
busy,
|
|
787
|
+
onBack: () => {
|
|
788
|
+
setSelectedConnector(null);
|
|
789
|
+
},
|
|
790
|
+
onConnectorRefreshed: handleConnectorRefreshed,
|
|
791
|
+
onEdit: () => {
|
|
792
|
+
setFormError(null);
|
|
793
|
+
setEditingConnector(selectedConnector);
|
|
794
|
+
setAddMcpServerFormOpen(true);
|
|
795
|
+
},
|
|
796
|
+
onDisconnect: () => {
|
|
797
|
+
handleDisconnect(selectedConnector);
|
|
798
|
+
}
|
|
781
799
|
}
|
|
782
|
-
|
|
783
|
-
|
|
800
|
+
),
|
|
801
|
+
/* @__PURE__ */ jsx3(
|
|
802
|
+
AddMcpServerForm_default,
|
|
803
|
+
{
|
|
804
|
+
open: addMcpServerFormOpen,
|
|
805
|
+
onOpenChange: (open) => {
|
|
806
|
+
setAddMcpServerFormOpen(open);
|
|
807
|
+
if (!open) {
|
|
808
|
+
setEditingConnector(null);
|
|
809
|
+
setFormError(null);
|
|
810
|
+
}
|
|
811
|
+
},
|
|
812
|
+
onSubmit: handleMcpServerSubmit,
|
|
813
|
+
connector: editingConnector ?? void 0,
|
|
814
|
+
busy,
|
|
815
|
+
error: formError
|
|
816
|
+
}
|
|
817
|
+
)
|
|
818
|
+
] });
|
|
784
819
|
}
|
|
785
820
|
const hasMatches = matchingConnected.length > 0 || availableConnectors.length > 0;
|
|
786
821
|
return /* @__PURE__ */ jsxs3(Fragment3, { children: [
|
|
@@ -796,6 +831,7 @@ var ConnectorSettings = () => {
|
|
|
796
831
|
type: "button",
|
|
797
832
|
onClick: () => {
|
|
798
833
|
setFormError(null);
|
|
834
|
+
setEditingConnector(null);
|
|
799
835
|
setAddMcpServerFormOpen(true);
|
|
800
836
|
},
|
|
801
837
|
children: [
|
|
@@ -844,7 +880,7 @@ var ConnectorSettings = () => {
|
|
|
844
880
|
onOpenChange: (open) => {
|
|
845
881
|
if (!open) closeApiKeyModal();
|
|
846
882
|
},
|
|
847
|
-
title:
|
|
883
|
+
title: `Connect ${connectorAwaitingKey?.name ?? "connector"}`,
|
|
848
884
|
description: connectorAwaitingKey?.url,
|
|
849
885
|
contentSized: true,
|
|
850
886
|
className: "md:max-w-xl",
|
|
@@ -893,7 +929,7 @@ var ConnectorSettings = () => {
|
|
|
893
929
|
] }),
|
|
894
930
|
/* @__PURE__ */ jsxs3("footer", { className: "flex justify-end gap-2 border-t border-border px-5 py-4", children: [
|
|
895
931
|
/* @__PURE__ */ jsx3(Button.Ghost, { type: "button", onClick: closeApiKeyModal, disabled: busy, children: "Cancel" }),
|
|
896
|
-
/* @__PURE__ */ jsx3(Button.Primary, { type: "submit", disabled: !apiKey.trim() || busy, children:
|
|
932
|
+
/* @__PURE__ */ jsx3(Button.Primary, { type: "submit", disabled: !apiKey.trim() || busy, children: "Connect" })
|
|
897
933
|
] })
|
|
898
934
|
] })
|
|
899
935
|
}
|
|
@@ -904,9 +940,13 @@ var ConnectorSettings = () => {
|
|
|
904
940
|
open: addMcpServerFormOpen,
|
|
905
941
|
onOpenChange: (open) => {
|
|
906
942
|
setAddMcpServerFormOpen(open);
|
|
907
|
-
if (!open)
|
|
943
|
+
if (!open) {
|
|
944
|
+
setEditingConnector(null);
|
|
945
|
+
setFormError(null);
|
|
946
|
+
}
|
|
908
947
|
},
|
|
909
|
-
|
|
948
|
+
onSubmit: handleMcpServerSubmit,
|
|
949
|
+
connector: editingConnector ?? void 0,
|
|
910
950
|
busy,
|
|
911
951
|
error: formError
|
|
912
952
|
}
|
|
@@ -918,4 +958,4 @@ var ConnectorSettings_default = ConnectorSettings;
|
|
|
918
958
|
export {
|
|
919
959
|
ConnectorSettings_default as default
|
|
920
960
|
};
|
|
921
|
-
//# sourceMappingURL=ConnectorSettings-
|
|
961
|
+
//# sourceMappingURL=ConnectorSettings-OIGAC2HU.js.map
|