@truefoundry/trueforge-ui 0.3.0-rc.0 → 0.3.0-rc.10

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.
Files changed (115) hide show
  1. package/CHANGELOG.md +191 -0
  2. package/README.md +35 -12
  3. package/dist/AgentCodeSnippets-RJBB4DDE.js +89 -0
  4. package/dist/AgentCodeSnippets-RJBB4DDE.js.map +1 -0
  5. package/dist/AgentMetricChart-UPGSJ2WP.js +15 -0
  6. package/dist/AgentOverview-U5WIQXZN.js +169 -0
  7. package/dist/AgentOverview-U5WIQXZN.js.map +1 -0
  8. package/dist/AgentSessionEventTimeline-GRGIQTRE.js +88 -0
  9. package/dist/AgentSessionEventTimeline-GRGIQTRE.js.map +1 -0
  10. package/dist/AgentSessionEventTimelineChart-GNF4VOUT.js +591 -0
  11. package/dist/AgentSessionEventTimelineChart-GNF4VOUT.js.map +1 -0
  12. package/dist/AgentSessions-5OTF2BUW.js +323 -0
  13. package/dist/AgentSessions-5OTF2BUW.js.map +1 -0
  14. package/dist/{ConnectorSettings-FXQ5B7TN.js → ConnectorSettings-HDKGLDCY.js} +163 -125
  15. package/dist/ConnectorSettings-HDKGLDCY.js.map +1 -0
  16. package/dist/{DockLayout-LBNQJZNF.js → DockLayout-D2FPQCAL.js} +11 -10
  17. package/dist/{DockLayout-LBNQJZNF.js.map → DockLayout-D2FPQCAL.js.map} +1 -1
  18. package/dist/DrawerLayout-HUV7RAWL.js +186 -0
  19. package/dist/DrawerLayout-HUV7RAWL.js.map +1 -0
  20. package/dist/{ModelSettings-4L4LOQJA.js → ModelSettings-VNQ7HPKH.js} +23 -27
  21. package/dist/ModelSettings-VNQ7HPKH.js.map +1 -0
  22. package/dist/OpenUiFenceBlock-KPZFLUSC.js +9 -0
  23. package/dist/OpenUiFenceBlock-KPZFLUSC.js.map +1 -0
  24. package/dist/{SandboxSettings-Z4ZG6ZX4.js → SandboxSettings-ZLXGMFBF.js} +18 -20
  25. package/dist/SandboxSettings-ZLXGMFBF.js.map +1 -0
  26. package/dist/SchedulesPage-QKYI2Z3A.js +15 -0
  27. package/dist/SchedulesPage-QKYI2Z3A.js.map +1 -0
  28. package/dist/{SettingsBuilder-WF7ZWKQW.js → SettingsBuilder-RVVYXOJW.js} +27 -23
  29. package/dist/SettingsBuilder-RVVYXOJW.js.map +1 -0
  30. package/dist/ShellRouteSync-SJXFKUAJ.js +390 -0
  31. package/dist/ShellRouteSync-SJXFKUAJ.js.map +1 -0
  32. package/dist/SidebarLayout-KYA76FQ7.js +330 -0
  33. package/dist/SidebarLayout-KYA76FQ7.js.map +1 -0
  34. package/dist/{SkillSettings-3EPPC3IT.js → SkillSettings-7OHT7FPI.js} +25 -21
  35. package/dist/SkillSettings-7OHT7FPI.js.map +1 -0
  36. package/dist/{TrueForgeUIWithRouter-NZ4FGPE4.js → TrueForgeUIWithRouter-LKG4XLW6.js} +14 -10
  37. package/dist/{TrueForgeUIWithRouter-NZ4FGPE4.js.map → TrueForgeUIWithRouter-LKG4XLW6.js.map} +1 -1
  38. package/dist/{WidgetLayout-3QZ357FL.js → WidgetLayout-W2RGGOQ3.js} +17 -13
  39. package/dist/WidgetLayout-W2RGGOQ3.js.map +1 -0
  40. package/dist/chunk-2GIZY3JJ.js +1062 -0
  41. package/dist/chunk-2GIZY3JJ.js.map +1 -0
  42. package/dist/chunk-2QTH6JHX.js +217 -0
  43. package/dist/chunk-2QTH6JHX.js.map +1 -0
  44. package/dist/{chunk-FJ5RSSMA.js → chunk-3ZW74FHC.js} +118 -164
  45. package/dist/chunk-3ZW74FHC.js.map +1 -0
  46. package/dist/chunk-67ZO7Z2W.js +184 -0
  47. package/dist/chunk-67ZO7Z2W.js.map +1 -0
  48. package/dist/{chunk-CFLVPV5M.js → chunk-7AAO4UDQ.js} +8 -2
  49. package/dist/chunk-7AAO4UDQ.js.map +1 -0
  50. package/dist/{chunk-B52K63AW.js → chunk-CG75X77Q.js} +2 -2
  51. package/dist/chunk-DJUFS2BW.js +27 -0
  52. package/dist/chunk-DJUFS2BW.js.map +1 -0
  53. package/dist/chunk-DPPOEFBD.js +517 -0
  54. package/dist/chunk-DPPOEFBD.js.map +1 -0
  55. package/dist/chunk-EPAL2HD5.js +1629 -0
  56. package/dist/chunk-EPAL2HD5.js.map +1 -0
  57. package/dist/chunk-GG23N2GW.js +15018 -0
  58. package/dist/chunk-GG23N2GW.js.map +1 -0
  59. package/dist/chunk-JCL3Q7RW.js +587 -0
  60. package/dist/chunk-JCL3Q7RW.js.map +1 -0
  61. package/dist/chunk-JKEBMGLH.js +682 -0
  62. package/dist/chunk-JKEBMGLH.js.map +1 -0
  63. package/dist/chunk-KSGNKS2D.js +296 -0
  64. package/dist/chunk-KSGNKS2D.js.map +1 -0
  65. package/dist/{chunk-WREC7D54.js → chunk-PCI6VMB5.js} +268 -48
  66. package/dist/chunk-PCI6VMB5.js.map +1 -0
  67. package/dist/chunk-PQ7VWBQQ.js +121 -0
  68. package/dist/chunk-PQ7VWBQQ.js.map +1 -0
  69. package/dist/chunk-RDXBMTP5.js +32 -0
  70. package/dist/chunk-RDXBMTP5.js.map +1 -0
  71. package/dist/chunk-T6QQV5LK.js +238 -0
  72. package/dist/chunk-T6QQV5LK.js.map +1 -0
  73. package/dist/chunk-Y6S4OVVQ.js +16 -0
  74. package/dist/chunk-Y6S4OVVQ.js.map +1 -0
  75. package/dist/{createTrueFoundryServer-B72bU-J7.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +18 -4
  76. package/dist/index.d.ts +1287 -46
  77. package/dist/index.js +266 -63
  78. package/dist/index.js.map +1 -1
  79. package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +590 -11
  80. package/dist/plugins/trueforge-agent-server-adapter/index.js +607 -204
  81. package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
  82. package/dist/styles.css +1 -1
  83. package/package.json +10 -8
  84. package/dist/ConnectorSettings-FXQ5B7TN.js.map +0 -1
  85. package/dist/DrawerLayout-Q6UK4VMI.js +0 -159
  86. package/dist/DrawerLayout-Q6UK4VMI.js.map +0 -1
  87. package/dist/ModelSettings-4L4LOQJA.js.map +0 -1
  88. package/dist/OpenUiFenceBlock-6UIIAVBX.js +0 -9
  89. package/dist/SandboxSettings-Z4ZG6ZX4.js.map +0 -1
  90. package/dist/SettingsBuilder-WF7ZWKQW.js.map +0 -1
  91. package/dist/ShellRouteSync-T4WLY57Q.js +0 -172
  92. package/dist/ShellRouteSync-T4WLY57Q.js.map +0 -1
  93. package/dist/SidebarLayout-3WZ3CVON.js +0 -256
  94. package/dist/SidebarLayout-3WZ3CVON.js.map +0 -1
  95. package/dist/SkillSettings-3EPPC3IT.js.map +0 -1
  96. package/dist/WidgetLayout-3QZ357FL.js.map +0 -1
  97. package/dist/chunk-36KOSC2J.js +0 -567
  98. package/dist/chunk-36KOSC2J.js.map +0 -1
  99. package/dist/chunk-3S6KHO7H.js +0 -2121
  100. package/dist/chunk-3S6KHO7H.js.map +0 -1
  101. package/dist/chunk-7L63OK3O.js +0 -91
  102. package/dist/chunk-7L63OK3O.js.map +0 -1
  103. package/dist/chunk-CFLVPV5M.js.map +0 -1
  104. package/dist/chunk-FJ5RSSMA.js.map +0 -1
  105. package/dist/chunk-OSV3HI5M.js +0 -6891
  106. package/dist/chunk-OSV3HI5M.js.map +0 -1
  107. package/dist/chunk-WQULF5AT.js +0 -460
  108. package/dist/chunk-WQULF5AT.js.map +0 -1
  109. package/dist/chunk-WREC7D54.js.map +0 -1
  110. package/dist/chunk-YIWUG6MC.js +0 -101
  111. package/dist/chunk-YIWUG6MC.js.map +0 -1
  112. package/dist/chunk-ZXOADNF3.js +0 -75
  113. package/dist/chunk-ZXOADNF3.js.map +0 -1
  114. /package/dist/{OpenUiFenceBlock-6UIIAVBX.js.map → AgentMetricChart-UPGSJ2WP.js.map} +0 -0
  115. /package/dist/{chunk-B52K63AW.js.map → chunk-CG75X77Q.js.map} +0 -0
@@ -7,39 +7,45 @@ import {
7
7
  auiInputClass,
8
8
  useMCPAuth,
9
9
  useToasterOptional
10
- } from "./chunk-OSV3HI5M.js";
10
+ } from "./chunk-GG23N2GW.js";
11
+ import "./chunk-T6QQV5LK.js";
11
12
  import {
12
- Icon,
13
- getErrorMessage
14
- } from "./chunk-FJ5RSSMA.js";
13
+ Icon
14
+ } from "./chunk-3ZW74FHC.js";
15
15
  import {
16
+ getErrorMessage,
16
17
  useCatalogServer
17
- } from "./chunk-WQULF5AT.js";
18
- import "./chunk-B52K63AW.js";
18
+ } from "./chunk-2GIZY3JJ.js";
19
+ import "./chunk-M6MHLVSO.js";
20
+ import "./chunk-CG75X77Q.js";
19
21
  import {
20
22
  cn
21
- } from "./chunk-36KOSC2J.js";
23
+ } from "./chunk-JCL3Q7RW.js";
22
24
 
23
25
  // src/containers/SettingsBuilder/ConnectorSettings.tsx
24
- import { useCallback, useEffect as useEffect2, useMemo, useState as useState3 } from "react";
26
+ import { useCallback, useEffect as useEffect3, useMemo, useState as useState3 } from "react";
25
27
 
26
28
  // src/containers/SettingsBuilder/AddMcpServerForm.tsx
27
- import { useState } from "react";
29
+ import { useEffect, useState } from "react";
28
30
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
29
31
  var AUTH_OPTIONS = [
30
- { value: "dcr", label: "OAuth" },
31
32
  { value: "none", label: "None" },
32
- { value: "header", label: "API Key" }
33
+ { value: "header", label: "API Key" },
34
+ { value: "dcr", label: "OAuth" }
33
35
  ];
34
36
  var inputClassName = auiInputClass("h-11 shadow-sm");
35
37
  var RequiredMark = () => /* @__PURE__ */ jsx("span", { className: "ml-0.5 text-failure-bg", "aria-hidden": true, children: "*" });
36
- var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
38
+ var AddMcpServerForm = ({ open, onOpenChange, onSubmit, connector, busy = false, error }) => {
37
39
  const [name, setName] = useState("");
38
40
  const [url, setUrl] = useState("");
39
41
  const [description, setDescription] = useState("");
40
42
  const [authType, setAuthType] = useState("dcr");
41
43
  const [apiKey, setApiKey] = useState("");
42
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
+ );
43
49
  const resetForm = () => {
44
50
  setName("");
45
51
  setUrl("");
@@ -48,11 +54,21 @@ var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
48
54
  setApiKey("");
49
55
  setHeaderName("");
50
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]);
51
66
  const handleOpenChange = (nextOpen) => {
52
67
  if (!nextOpen) resetForm();
53
68
  onOpenChange(nextOpen);
54
69
  };
55
- const isValid = !!name.trim() && !!description.trim() && !!url.trim() && (authType !== "header" || !!apiKey.trim());
70
+ const hasApiKey = !!apiKey.trim() || connector?.auth.type === "header";
71
+ const isValid = !!name.trim() && !!description.trim() && !!url.trim() && (authType !== "header" || hasApiKey);
56
72
  const handleSubmit = async (event) => {
57
73
  event.preventDefault();
58
74
  if (!isValid || busy) return;
@@ -62,7 +78,7 @@ var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
62
78
  ...headerName.trim() ? { headerName: headerName.trim() } : {}
63
79
  } : { type: authType };
64
80
  try {
65
- await onAdd({
81
+ await onSubmit({
66
82
  name: name.trim(),
67
83
  url: url.trim(),
68
84
  description: description.trim(),
@@ -78,8 +94,8 @@ var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
78
94
  {
79
95
  open,
80
96
  onOpenChange: handleOpenChange,
81
- title: "Add MCP server",
82
- 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.",
83
99
  contentSized: true,
84
100
  headerIcon: /* @__PURE__ */ jsx(
85
101
  "span",
@@ -103,12 +119,14 @@ var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
103
119
  type: "text",
104
120
  required: true,
105
121
  value: name,
122
+ readOnly: isEditing,
123
+ "aria-disabled": isEditing,
106
124
  onChange: (event) => {
107
125
  setName(event.target.value);
108
126
  },
109
127
  placeholder: "analytics-postgres-mcp",
110
- autoFocus: true,
111
- className: inputClassName
128
+ autoFocus: !isEditing,
129
+ className: nameInputClassName
112
130
  }
113
131
  )
114
132
  ] }),
@@ -189,14 +207,14 @@ var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
189
207
  /* @__PURE__ */ jsxs("div", { children: [
190
208
  /* @__PURE__ */ jsxs("label", { htmlFor: "mcp-server-api-key", className: "mb-1.5 block text-sm font-medium text-text-primary", children: [
191
209
  "API key",
192
- /* @__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, {})
193
211
  ] }),
194
212
  /* @__PURE__ */ jsx(
195
213
  "input",
196
214
  {
197
215
  id: "mcp-server-api-key",
198
216
  type: "password",
199
- required: true,
217
+ required: connector?.auth.type !== "header",
200
218
  value: apiKey,
201
219
  onChange: (event) => {
202
220
  setApiKey(event.target.value);
@@ -229,7 +247,7 @@ var AddMcpServerForm = ({ open, onOpenChange, onAdd, busy = false, error }) => {
229
247
  ] }),
230
248
  /* @__PURE__ */ jsxs("div", { className: "mt-6 space-y-3", children: [
231
249
  error ? /* @__PURE__ */ jsx("p", { className: "text-failure-bg text-sm", children: error }) : null,
232
- /* @__PURE__ */ jsx(Button, { type: "submit", size: "lg", 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" })
233
251
  ] })
234
252
  ] })
235
253
  }
@@ -245,7 +263,7 @@ var AUTH_TYPE_LABELS = {
245
263
  };
246
264
 
247
265
  // src/containers/SettingsBuilder/ConnectorDetails.tsx
248
- import { useEffect, useLayoutEffect, useRef, useState as useState2 } from "react";
266
+ import { useEffect as useEffect2, useLayoutEffect, useRef, useState as useState2 } from "react";
249
267
  import { Fragment as Fragment2, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
250
268
  function ExpandableDescription({ text }) {
251
269
  const contentRef = useRef(null);
@@ -319,6 +337,7 @@ var ConnectorDetails = ({
319
337
  connector,
320
338
  onBack,
321
339
  onConnectorRefreshed,
340
+ onEdit,
322
341
  onDisconnect,
323
342
  busy = false
324
343
  }) => {
@@ -328,7 +347,7 @@ var ConnectorDetails = ({
328
347
  const [toolsLoading, setToolsLoading] = useState2(true);
329
348
  const [toolsError, setToolsError] = useState2(null);
330
349
  const [refreshingAfterAuth, setRefreshingAfterAuth] = useState2(false);
331
- useEffect(() => {
350
+ useEffect2(() => {
332
351
  let cancelled = false;
333
352
  setTools([]);
334
353
  setToolsError(null);
@@ -383,13 +402,14 @@ var ConnectorDetails = ({
383
402
  }
384
403
  ),
385
404
  /* @__PURE__ */ jsxs2("div", { className: "min-w-0 flex-1", children: [
386
- /* @__PURE__ */ jsx2("h4", { className: "text-lg font-semibold text-text-primary", children: connector.name }),
387
- /* @__PURE__ */ jsxs2("div", { className: "mt-0.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-sm", children: [
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 }),
388
408
  /* @__PURE__ */ jsxs2(
389
409
  "span",
390
410
  {
391
411
  className: cn(
392
- "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",
393
413
  connector.authenticated ? "text-success-bg" : "text-text-primary"
394
414
  ),
395
415
  children: [
@@ -405,29 +425,30 @@ var ConnectorDetails = ({
405
425
  connector.authenticated ? "Connected" : "Not authenticated"
406
426
  ]
407
427
  }
408
- ),
409
- /* @__PURE__ */ jsxs2("span", { className: "text-text-secondary", children: [
410
- "\xB7 ",
411
- connector.description
412
- ] })
428
+ )
413
429
  ] }),
414
- /* @__PURE__ */ jsx2("span", { className: "mt-2 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 })
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 }) })
415
431
  ] }),
416
- connector.auth.type === "dcr" && !connector.authenticated ? /* @__PURE__ */ jsx2(
417
- Button,
418
- {
419
- variant: "outline",
420
- size: "sm",
421
- type: "button",
422
- disabled: busy || connecting,
423
- onClick: () => {
424
- void handleAuthorize(connector.id, (isSuccess) => {
425
- if (isSuccess) void refreshAfterAuthentication();
426
- });
427
- },
428
- children: connecting ? "Connecting\u2026" : "Connect"
429
- }
430
- ) : connector.auth.type === "dcr" && !connector.requiresAuth ? /* @__PURE__ */ jsx2(Button, { variant: "outline", size: "sm", type: "button", disabled: busy, onClick: onDisconnect, children: "Disconnect" }) : null
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
+ ] })
431
452
  ] }),
432
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: [
433
454
  toolsError,
@@ -473,6 +494,7 @@ var ConnectorSettings = () => {
473
494
  const [busy, setBusy] = useState3(false);
474
495
  const [catalog, setCatalog] = useState3([]);
475
496
  const [addMcpServerFormOpen, setAddMcpServerFormOpen] = useState3(false);
497
+ const [editingConnector, setEditingConnector] = useState3(null);
476
498
  const [connectorAwaitingKey, setConnectorAwaitingKey] = useState3(null);
477
499
  const [selectedConnector, setSelectedConnector] = useState3(null);
478
500
  const [apiKey, setApiKey] = useState3("");
@@ -513,7 +535,7 @@ var ConnectorSettings = () => {
513
535
  setLoading(false);
514
536
  }
515
537
  }, [connectorCatalog]);
516
- useEffect2(() => {
538
+ useEffect3(() => {
517
539
  void refresh();
518
540
  }, [refresh]);
519
541
  const normalizedQuery = query.trim().toLowerCase();
@@ -595,35 +617,27 @@ var ConnectorSettings = () => {
595
617
  apiKey: apiKey.trim(),
596
618
  ...entry.auth.type === "header" && entry.auth.headerName ? { headerName: entry.auth.headerName } : {}
597
619
  };
598
- const existing = connectors.ordered.find(({ connector }) => connector.id === entry.id);
599
- const existingConnector = existing?.isConfigured ? existing.connector : void 0;
600
- if (existingConnector) {
601
- await connectorCatalog.updateConnector({
602
- id: existingConnector.id,
603
- name: existingConnector.name,
604
- description: existingConnector.description,
605
- url: existingConnector.url,
606
- auth
607
- });
608
- } else {
609
- await createFromCatalog(entry, auth);
610
- }
620
+ await createFromCatalog(entry, auth);
611
621
  closeApiKeyModal();
612
622
  setTimeout(() => {
613
623
  toaster?.showSuccess({
614
- title: `${entry.name} ${existingConnector ? "updated" : "connected"}`
624
+ title: `${entry.name} connected`
615
625
  });
616
626
  }, 100);
617
627
  }, setFormError).catch(() => {
618
628
  });
619
629
  };
620
- const handleAddMcpServer = async (draft) => {
630
+ const handleMcpServerSubmit = async (draft) => {
621
631
  setFormError(null);
622
632
  await runMutation(async () => {
623
- await connectorCatalog.createConnector({ ...draft });
633
+ if (editingConnector) {
634
+ await connectorCatalog.updateConnector({ id: editingConnector.id, ...draft });
635
+ } else {
636
+ await connectorCatalog.createConnector({ ...draft });
637
+ }
624
638
  }, setFormError);
625
639
  setTimeout(() => {
626
- toaster?.showSuccess({ title: `${draft.name} added` });
640
+ toaster?.showSuccess({ title: `${draft.name} ${editingConnector ? "updated" : "added"}` });
627
641
  }, 0);
628
642
  };
629
643
  const handleDisconnect = (connector) => {
@@ -658,7 +672,30 @@ var ConnectorSettings = () => {
658
672
  }
659
673
  ),
660
674
  /* @__PURE__ */ jsxs3("div", { className: "min-w-0 flex-1", children: [
661
- /* @__PURE__ */ jsx3("h5", { className: "truncate text-sm font-medium text-text-primary", children: connector.name }),
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
+ ] }),
662
699
  /* @__PURE__ */ jsx3("p", { className: "mt-0.5 line-clamp-2 text-sm text-text-secondary sm:truncate", children: connector.description })
663
700
  ] })
664
701
  ] });
@@ -674,45 +711,24 @@ var ConnectorSettings = () => {
674
711
  children: [
675
712
  /* @__PURE__ */ jsx3("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: content }),
676
713
  /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2", children: [
677
- /* @__PURE__ */ jsx3("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsxs3(
678
- "span",
714
+ /* @__PURE__ */ jsxs3(
715
+ Button.Secondary,
679
716
  {
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
- connector.auth.type === "header" ? /* @__PURE__ */ jsxs3(
699
- Button,
700
- {
701
- variant: "secondary",
702
- size: "sm",
717
+ size: "small",
703
718
  type: "button",
704
719
  disabled: busy,
705
720
  onClick: (event) => {
706
721
  event.stopPropagation();
707
- setApiKey("");
708
- setConnectorAwaitingKey(connector);
722
+ setFormError(null);
723
+ setEditingConnector(connector);
724
+ setAddMcpServerFormOpen(true);
709
725
  },
710
726
  children: [
711
- /* @__PURE__ */ jsx3(Icon, { name: "wrench", className: "size-3" }),
712
- "Replace Key"
727
+ /* @__PURE__ */ jsx3(Icon, { name: "pencil", className: "size-3" }),
728
+ "Edit"
713
729
  ]
714
730
  }
715
- ) : null,
731
+ ),
716
732
  /* @__PURE__ */ jsx3(Icon, { name: "chevron-right", className: "size-4" })
717
733
  ] })
718
734
  ]
@@ -744,10 +760,9 @@ var ConnectorSettings = () => {
744
760
  /* @__PURE__ */ jsxs3("div", { className: "flex shrink-0 items-center gap-2", children: [
745
761
  /* @__PURE__ */ jsx3("span", { className: "hidden text-xs text-text-secondary sm:inline", children: AUTH_TYPE_LABELS[entry.auth.type] ?? AUTH_TYPE_LABELS.none }),
746
762
  /* @__PURE__ */ jsx3(
747
- Button,
763
+ Button.Secondary,
748
764
  {
749
- variant: "secondary",
750
- size: "sm",
765
+ size: "small",
751
766
  type: "button",
752
767
  disabled: busy,
753
768
  onClick: () => {
@@ -762,26 +777,45 @@ var ConnectorSettings = () => {
762
777
  entry.id
763
778
  );
764
779
  };
765
- const isReplacingKey = useMemo(() => {
766
- return connectorAwaitingKey !== null && connectors.ordered.some(
767
- (item) => item.isConfigured && item.connector.id === connectorAwaitingKey.id
768
- );
769
- }, [connectorAwaitingKey, connectors.ordered]);
770
780
  if (selectedConnector) {
771
- return /* @__PURE__ */ jsx3(
772
- ConnectorDetails_default,
773
- {
774
- connector: selectedConnector,
775
- busy,
776
- onBack: () => {
777
- setSelectedConnector(null);
778
- },
779
- onConnectorRefreshed: handleConnectorRefreshed,
780
- onDisconnect: () => {
781
- handleDisconnect(selectedConnector);
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
+ }
782
799
  }
783
- }
784
- );
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
+ ] });
785
819
  }
786
820
  const hasMatches = matchingConnected.length > 0 || availableConnectors.length > 0;
787
821
  return /* @__PURE__ */ jsxs3(Fragment3, { children: [
@@ -792,12 +826,12 @@ var ConnectorSettings = () => {
792
826
  /* @__PURE__ */ jsxs3("div", { className: "flex gap-2", children: [
793
827
  /* @__PURE__ */ jsx3("div", { className: "flex-1", children: /* @__PURE__ */ jsx3(SearchInput_default, { query, setQuery, placeholder: "Search connectors" }) }),
794
828
  /* @__PURE__ */ jsxs3(
795
- Button,
829
+ Button.Secondary,
796
830
  {
797
- variant: "secondary",
798
831
  type: "button",
799
832
  onClick: () => {
800
833
  setFormError(null);
834
+ setEditingConnector(null);
801
835
  setAddMcpServerFormOpen(true);
802
836
  },
803
837
  children: [
@@ -846,7 +880,7 @@ var ConnectorSettings = () => {
846
880
  onOpenChange: (open) => {
847
881
  if (!open) closeApiKeyModal();
848
882
  },
849
- title: `${isReplacingKey ? "Replace key for" : "Connect"} ${connectorAwaitingKey?.name ?? "connector"}`,
883
+ title: `Connect ${connectorAwaitingKey?.name ?? "connector"}`,
850
884
  description: connectorAwaitingKey?.url,
851
885
  contentSized: true,
852
886
  className: "md:max-w-xl",
@@ -894,8 +928,8 @@ var ConnectorSettings = () => {
894
928
  formError ? /* @__PURE__ */ jsx3("p", { className: "text-failure-bg text-sm", children: formError }) : null
895
929
  ] }),
896
930
  /* @__PURE__ */ jsxs3("footer", { className: "flex justify-end gap-2 border-t border-border px-5 py-4", children: [
897
- /* @__PURE__ */ jsx3(Button, { variant: "ghost", type: "button", onClick: closeApiKeyModal, disabled: busy, children: "Cancel" }),
898
- /* @__PURE__ */ jsx3(Button, { type: "submit", disabled: !apiKey.trim() || busy, children: isReplacingKey ? "Replace Key" : "Connect" })
931
+ /* @__PURE__ */ jsx3(Button.Ghost, { type: "button", onClick: closeApiKeyModal, disabled: busy, children: "Cancel" }),
932
+ /* @__PURE__ */ jsx3(Button.Primary, { type: "submit", disabled: !apiKey.trim() || busy, children: "Connect" })
899
933
  ] })
900
934
  ] })
901
935
  }
@@ -906,9 +940,13 @@ var ConnectorSettings = () => {
906
940
  open: addMcpServerFormOpen,
907
941
  onOpenChange: (open) => {
908
942
  setAddMcpServerFormOpen(open);
909
- if (!open) setFormError(null);
943
+ if (!open) {
944
+ setEditingConnector(null);
945
+ setFormError(null);
946
+ }
910
947
  },
911
- onAdd: handleAddMcpServer,
948
+ onSubmit: handleMcpServerSubmit,
949
+ connector: editingConnector ?? void 0,
912
950
  busy,
913
951
  error: formError
914
952
  }
@@ -920,4 +958,4 @@ var ConnectorSettings_default = ConnectorSettings;
920
958
  export {
921
959
  ConnectorSettings_default as default
922
960
  };
923
- //# sourceMappingURL=ConnectorSettings-FXQ5B7TN.js.map
961
+ //# sourceMappingURL=ConnectorSettings-HDKGLDCY.js.map