@truefoundry/trueforge-ui 0.3.0 → 0.4.0-rc.0
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 +27 -0
- package/NOTICE +1 -1
- package/README.md +26 -89
- package/dist/{AgentCodeSnippets-EK7KMIY2.js → AgentCodeSnippets-BPC6TD7K.js} +7 -7
- package/dist/AgentMetricChart-T6DZZ37Y.js +15 -0
- package/dist/{AgentOverview-5UPMYHT2.js → AgentOverview-BFU7EO4Y.js} +7 -7
- package/dist/{AgentSessionEventTimeline-V6NPCYMW.js → AgentSessionEventTimeline-ATVBTYDF.js} +7 -7
- package/dist/{AgentSessionEventTimelineChart-YQWZBQCG.js → AgentSessionEventTimelineChart-H577STKW.js} +7 -7
- package/dist/{AgentSessions-WNYVVB6Q.js → AgentSessions-GDLBXFIK.js} +8 -8
- package/dist/{ConnectorSettings-O4I24244.js → ConnectorSettings-FYNF6J3F.js} +7 -7
- package/dist/{DockLayout-JMBZVMGB.js → DockLayout-SGUOMZ5E.js} +10 -10
- package/dist/{DrawerLayout-E6G3IF6R.js → DrawerLayout-MJJYQDCW.js} +11 -11
- package/dist/{ModelSettings-ZVXMXIU4.js → ModelSettings-6EW7U2MP.js} +9 -9
- package/dist/ModelSettings-6EW7U2MP.js.map +1 -0
- package/dist/OpenUiFenceBlock-BZPFNXWZ.js +9 -0
- package/dist/{SandboxSettings-H6BA2DJQ.js → SandboxSettings-HQVBGHXZ.js} +7 -7
- package/dist/SchedulesPage-ZO3PJY4J.js +15 -0
- package/dist/{SettingsBuilder-VA3VGWZC.js → SettingsBuilder-FODMI7HG.js} +20 -11
- package/dist/SettingsBuilder-FODMI7HG.js.map +1 -0
- package/dist/{ShellRouteSync-ZT4PBE6T.js → ShellRouteSync-4I5BP2VY.js} +4 -4
- package/dist/{SidebarLayout-ICXEN7ZL.js → SidebarLayout-ZLWG2YGO.js} +12 -12
- package/dist/{SkillSettings-F5JGGFXR.js → SkillSettings-AFSAOU6O.js} +7 -7
- package/dist/{TrueForgeUIWithRouter-MKJ7IEWG.js → TrueForgeUIWithRouter-RQX5XWGI.js} +9 -9
- package/dist/WebSearchSettings-BW4CWGRR.js +322 -0
- package/dist/WebSearchSettings-BW4CWGRR.js.map +1 -0
- package/dist/{WidgetLayout-J7ZRW3V3.js → WidgetLayout-WIPKUIL4.js} +10 -10
- package/dist/chunk-6UACSIIY.js +587 -0
- package/dist/chunk-6UACSIIY.js.map +1 -0
- package/dist/{chunk-U7WONUMR.js → chunk-7S7A3PNP.js} +6 -4
- package/dist/chunk-7S7A3PNP.js.map +1 -0
- package/dist/{chunk-VTOW2UIX.js → chunk-GHXA46A2.js} +78 -43
- package/dist/chunk-GHXA46A2.js.map +1 -0
- package/dist/{chunk-7AAO4UDQ.js → chunk-HCGDDQ4G.js} +5 -5
- package/dist/chunk-HCGDDQ4G.js.map +1 -0
- package/dist/{chunk-SCIEO6CF.js → chunk-HDMBSLDC.js} +2 -2
- package/dist/{chunk-KZK2PQ4A.js → chunk-MLMR26WQ.js} +244 -152
- package/dist/chunk-MLMR26WQ.js.map +1 -0
- package/dist/{chunk-BREN6OSX.js → chunk-Q22RHDYS.js} +42 -61
- package/dist/chunk-Q22RHDYS.js.map +1 -0
- package/dist/{chunk-WFIA627Q.js → chunk-QKFMAQ7O.js} +2 -2
- package/dist/{chunk-7VWUB5OV.js → chunk-TFQWCBFQ.js} +12 -12
- package/dist/chunk-TFQWCBFQ.js.map +1 -0
- package/dist/{chunk-JEAULQNF.js → chunk-TJGGIEF6.js} +3 -3
- package/dist/{chunk-KDCVFHPZ.js → chunk-TX6PB3DY.js} +3 -3
- package/dist/{chunk-MEW7WZ7Q.js → chunk-VBZXCX7Y.js} +253 -99
- package/dist/chunk-VBZXCX7Y.js.map +1 -0
- package/dist/{chunk-QI4HGU5E.js → chunk-Y47LJKXD.js} +13 -19
- package/dist/{chunk-QI4HGU5E.js.map → chunk-Y47LJKXD.js.map} +1 -1
- package/dist/{chunk-MB7Z5FPI.js → chunk-YN5ZBBQM.js} +9 -9
- package/dist/{chunk-UN7WPTTK.js → chunk-ZYJ2SBF7.js} +2 -2
- package/dist/createTrueForgeServer-DiSooQdh.d.ts +42 -0
- package/dist/index.d.ts +45 -39
- package/dist/index.js +43 -43
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +57 -894
- package/dist/plugins/trueforge-agent-server-adapter/index.js +110 -7
- package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +8 -7
- package/dist/AgentMetricChart-UZCYOC4M.js +0 -15
- package/dist/ModelSettings-ZVXMXIU4.js.map +0 -1
- package/dist/OpenUiFenceBlock-F3YVDKAG.js +0 -9
- package/dist/SchedulesPage-FS2QZ5KB.js +0 -15
- package/dist/SettingsBuilder-VA3VGWZC.js.map +0 -1
- package/dist/chunk-7AAO4UDQ.js.map +0 -1
- package/dist/chunk-7VWUB5OV.js.map +0 -1
- package/dist/chunk-BREN6OSX.js.map +0 -1
- package/dist/chunk-KZK2PQ4A.js.map +0 -1
- package/dist/chunk-MEW7WZ7Q.js.map +0 -1
- package/dist/chunk-NXK4XW4U.js +0 -587
- package/dist/chunk-NXK4XW4U.js.map +0 -1
- package/dist/chunk-U7WONUMR.js.map +0 -1
- package/dist/chunk-VTOW2UIX.js.map +0 -1
- package/dist/createTrueFoundryServer-B_FYhSdn.d.ts +0 -42
- /package/dist/{AgentCodeSnippets-EK7KMIY2.js.map → AgentCodeSnippets-BPC6TD7K.js.map} +0 -0
- /package/dist/{AgentMetricChart-UZCYOC4M.js.map → AgentMetricChart-T6DZZ37Y.js.map} +0 -0
- /package/dist/{AgentOverview-5UPMYHT2.js.map → AgentOverview-BFU7EO4Y.js.map} +0 -0
- /package/dist/{AgentSessionEventTimeline-V6NPCYMW.js.map → AgentSessionEventTimeline-ATVBTYDF.js.map} +0 -0
- /package/dist/{AgentSessionEventTimelineChart-YQWZBQCG.js.map → AgentSessionEventTimelineChart-H577STKW.js.map} +0 -0
- /package/dist/{AgentSessions-WNYVVB6Q.js.map → AgentSessions-GDLBXFIK.js.map} +0 -0
- /package/dist/{ConnectorSettings-O4I24244.js.map → ConnectorSettings-FYNF6J3F.js.map} +0 -0
- /package/dist/{DockLayout-JMBZVMGB.js.map → DockLayout-SGUOMZ5E.js.map} +0 -0
- /package/dist/{DrawerLayout-E6G3IF6R.js.map → DrawerLayout-MJJYQDCW.js.map} +0 -0
- /package/dist/{OpenUiFenceBlock-F3YVDKAG.js.map → OpenUiFenceBlock-BZPFNXWZ.js.map} +0 -0
- /package/dist/{SandboxSettings-H6BA2DJQ.js.map → SandboxSettings-HQVBGHXZ.js.map} +0 -0
- /package/dist/{SchedulesPage-FS2QZ5KB.js.map → SchedulesPage-ZO3PJY4J.js.map} +0 -0
- /package/dist/{ShellRouteSync-ZT4PBE6T.js.map → ShellRouteSync-4I5BP2VY.js.map} +0 -0
- /package/dist/{SidebarLayout-ICXEN7ZL.js.map → SidebarLayout-ZLWG2YGO.js.map} +0 -0
- /package/dist/{SkillSettings-F5JGGFXR.js.map → SkillSettings-AFSAOU6O.js.map} +0 -0
- /package/dist/{TrueForgeUIWithRouter-MKJ7IEWG.js.map → TrueForgeUIWithRouter-RQX5XWGI.js.map} +0 -0
- /package/dist/{WidgetLayout-J7ZRW3V3.js.map → WidgetLayout-WIPKUIL4.js.map} +0 -0
- /package/dist/{chunk-SCIEO6CF.js.map → chunk-HDMBSLDC.js.map} +0 -0
- /package/dist/{chunk-WFIA627Q.js.map → chunk-QKFMAQ7O.js.map} +0 -0
- /package/dist/{chunk-JEAULQNF.js.map → chunk-TJGGIEF6.js.map} +0 -0
- /package/dist/{chunk-KDCVFHPZ.js.map → chunk-TX6PB3DY.js.map} +0 -0
- /package/dist/{chunk-MB7Z5FPI.js.map → chunk-YN5ZBBQM.js.map} +0 -0
- /package/dist/{chunk-UN7WPTTK.js.map → chunk-ZYJ2SBF7.js.map} +0 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
Button,
|
|
4
|
+
CenteredModal,
|
|
5
|
+
auiInputClass,
|
|
6
|
+
useToasterOptional
|
|
7
|
+
} from "./chunk-MLMR26WQ.js";
|
|
8
|
+
import {
|
|
9
|
+
Icon
|
|
10
|
+
} from "./chunk-TX6PB3DY.js";
|
|
11
|
+
import "./chunk-ZYJ2SBF7.js";
|
|
12
|
+
import {
|
|
13
|
+
getErrorMessage,
|
|
14
|
+
useCatalogServer
|
|
15
|
+
} from "./chunk-7S7A3PNP.js";
|
|
16
|
+
import "./chunk-M6MHLVSO.js";
|
|
17
|
+
import "./chunk-QKFMAQ7O.js";
|
|
18
|
+
import "./chunk-6UACSIIY.js";
|
|
19
|
+
|
|
20
|
+
// src/containers/SettingsBuilder/WebSearchSettings.tsx
|
|
21
|
+
import { useCallback, useEffect as useEffect2, useMemo, useState as useState2 } from "react";
|
|
22
|
+
|
|
23
|
+
// src/containers/SettingsBuilder/ConfigureWebSearchForm.tsx
|
|
24
|
+
import { useEffect, useState } from "react";
|
|
25
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
26
|
+
var inputClassName = auiInputClass("h-11 shadow-sm");
|
|
27
|
+
var ConfigureWebSearchForm = ({
|
|
28
|
+
open,
|
|
29
|
+
onOpenChange,
|
|
30
|
+
onSave,
|
|
31
|
+
title,
|
|
32
|
+
description,
|
|
33
|
+
requireApiKey = true,
|
|
34
|
+
busy = false,
|
|
35
|
+
error
|
|
36
|
+
}) => {
|
|
37
|
+
const [apiKey, setApiKey] = useState("");
|
|
38
|
+
const resetForm = () => {
|
|
39
|
+
setApiKey("");
|
|
40
|
+
};
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
if (!open) return;
|
|
43
|
+
setApiKey("");
|
|
44
|
+
}, [open]);
|
|
45
|
+
const handleOpenChange = (nextOpen) => {
|
|
46
|
+
if (!nextOpen) resetForm();
|
|
47
|
+
onOpenChange(nextOpen);
|
|
48
|
+
};
|
|
49
|
+
const trimmedKey = apiKey.trim();
|
|
50
|
+
const isValid = !requireApiKey || !!trimmedKey;
|
|
51
|
+
const handleSubmit = async (event) => {
|
|
52
|
+
event.preventDefault();
|
|
53
|
+
if (!isValid || busy) return;
|
|
54
|
+
try {
|
|
55
|
+
await onSave({ apiKey: trimmedKey });
|
|
56
|
+
resetForm();
|
|
57
|
+
onOpenChange(false);
|
|
58
|
+
} catch {
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
return /* @__PURE__ */ jsx(
|
|
62
|
+
CenteredModal,
|
|
63
|
+
{
|
|
64
|
+
open,
|
|
65
|
+
onOpenChange: handleOpenChange,
|
|
66
|
+
title,
|
|
67
|
+
description,
|
|
68
|
+
contentSized: true,
|
|
69
|
+
headerIcon: /* @__PURE__ */ jsx(
|
|
70
|
+
"span",
|
|
71
|
+
{
|
|
72
|
+
className: "flex size-11 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary",
|
|
73
|
+
"aria-hidden": true,
|
|
74
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "search", className: "size-6" })
|
|
75
|
+
}
|
|
76
|
+
),
|
|
77
|
+
children: /* @__PURE__ */ jsxs("form", { className: "flex flex-col overflow-y-auto p-5 md:p-6", onSubmit: handleSubmit, children: [
|
|
78
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-4", children: /* @__PURE__ */ jsxs("div", { children: [
|
|
79
|
+
/* @__PURE__ */ jsxs("label", { htmlFor: "web-search-api-key", className: "mb-1.5 block text-sm font-medium text-text-primary", children: [
|
|
80
|
+
"API key",
|
|
81
|
+
!requireApiKey ? /* @__PURE__ */ jsx("span", { className: "font-normal text-text-secondary", children: " (optional)" }) : null
|
|
82
|
+
] }),
|
|
83
|
+
/* @__PURE__ */ jsx(
|
|
84
|
+
"input",
|
|
85
|
+
{
|
|
86
|
+
id: "web-search-api-key",
|
|
87
|
+
type: "password",
|
|
88
|
+
required: requireApiKey,
|
|
89
|
+
value: apiKey,
|
|
90
|
+
onChange: (event) => {
|
|
91
|
+
setApiKey(event.target.value);
|
|
92
|
+
},
|
|
93
|
+
placeholder: requireApiKey ? "Parallel API key" : "Leave blank to keep existing",
|
|
94
|
+
autoFocus: true,
|
|
95
|
+
className: inputClassName
|
|
96
|
+
}
|
|
97
|
+
)
|
|
98
|
+
] }) }),
|
|
99
|
+
/* @__PURE__ */ jsxs("div", { className: "mt-6 space-y-3", children: [
|
|
100
|
+
error ? /* @__PURE__ */ jsx("p", { className: "text-failure-bg text-sm", children: error }) : null,
|
|
101
|
+
/* @__PURE__ */ jsx(Button.Primary, { type: "submit", size: "large", disabled: !isValid || busy, className: "w-full shrink-0", children: "Save" })
|
|
102
|
+
] })
|
|
103
|
+
] })
|
|
104
|
+
}
|
|
105
|
+
);
|
|
106
|
+
};
|
|
107
|
+
var ConfigureWebSearchForm_default = ConfigureWebSearchForm;
|
|
108
|
+
|
|
109
|
+
// src/containers/SettingsBuilder/WebSearchSettings.tsx
|
|
110
|
+
import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
111
|
+
var WebSearchSettings = () => {
|
|
112
|
+
const { webSearchCatalog } = useCatalogServer();
|
|
113
|
+
const toaster = useToasterOptional();
|
|
114
|
+
const [providers, setProviders] = useState2([]);
|
|
115
|
+
const [catalog, setCatalog] = useState2([]);
|
|
116
|
+
const [loading, setLoading] = useState2(true);
|
|
117
|
+
const [error, setError] = useState2(null);
|
|
118
|
+
const [formError, setFormError] = useState2(null);
|
|
119
|
+
const [busy, setBusy] = useState2(false);
|
|
120
|
+
const [createEntry, setCreateEntry] = useState2(null);
|
|
121
|
+
const [updateProvider, setUpdateProvider] = useState2(null);
|
|
122
|
+
const refresh = useCallback(
|
|
123
|
+
async ({ quiet = false } = {}) => {
|
|
124
|
+
if (!webSearchCatalog) return;
|
|
125
|
+
if (!quiet) setLoading(true);
|
|
126
|
+
setError(null);
|
|
127
|
+
try {
|
|
128
|
+
const [listed, available] = await Promise.all([
|
|
129
|
+
webSearchCatalog.listWebSearchProviders(),
|
|
130
|
+
webSearchCatalog.getWebSearchProviderCatalog()
|
|
131
|
+
]);
|
|
132
|
+
setProviders(listed);
|
|
133
|
+
setCatalog(available);
|
|
134
|
+
} catch (err) {
|
|
135
|
+
setError(getErrorMessage(err, "Failed to load web search providers"));
|
|
136
|
+
} finally {
|
|
137
|
+
if (!quiet) setLoading(false);
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
[webSearchCatalog]
|
|
141
|
+
);
|
|
142
|
+
useEffect2(() => {
|
|
143
|
+
void refresh();
|
|
144
|
+
}, [refresh]);
|
|
145
|
+
const hasConfiguredProvider = providers.length > 0;
|
|
146
|
+
const availableEntries = useMemo(() => {
|
|
147
|
+
if (hasConfiguredProvider) return [];
|
|
148
|
+
const connectedCatalogIds = new Set(providers.map((provider) => provider.catalogId));
|
|
149
|
+
return catalog.filter((entry) => !connectedCatalogIds.has(entry.id));
|
|
150
|
+
}, [catalog, providers, hasConfiguredProvider]);
|
|
151
|
+
if (!webSearchCatalog) {
|
|
152
|
+
return /* @__PURE__ */ jsx2("p", { className: "text-sm text-text-secondary", children: "Web search provider catalog is not available." });
|
|
153
|
+
}
|
|
154
|
+
const runMutation = async (fn, setMutationError = setError) => {
|
|
155
|
+
setBusy(true);
|
|
156
|
+
setError(null);
|
|
157
|
+
try {
|
|
158
|
+
await fn();
|
|
159
|
+
await refresh({ quiet: true });
|
|
160
|
+
} catch (err) {
|
|
161
|
+
setMutationError(getErrorMessage(err, "Request failed"));
|
|
162
|
+
throw err;
|
|
163
|
+
} finally {
|
|
164
|
+
setBusy(false);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
const handleCreate = async (draft) => {
|
|
168
|
+
if (!createEntry) return;
|
|
169
|
+
setFormError(null);
|
|
170
|
+
await runMutation(async () => {
|
|
171
|
+
await webSearchCatalog.createWebSearchProvider({
|
|
172
|
+
catalogId: createEntry.id,
|
|
173
|
+
name: createEntry.name,
|
|
174
|
+
type: createEntry.type,
|
|
175
|
+
apiKey: draft.apiKey
|
|
176
|
+
});
|
|
177
|
+
}, setFormError);
|
|
178
|
+
setCreateEntry(null);
|
|
179
|
+
setTimeout(() => {
|
|
180
|
+
toaster?.showSuccess({ title: `${createEntry.name} configured` });
|
|
181
|
+
}, 0);
|
|
182
|
+
};
|
|
183
|
+
const handleUpdate = async (draft) => {
|
|
184
|
+
if (!updateProvider) return;
|
|
185
|
+
setFormError(null);
|
|
186
|
+
await runMutation(async () => {
|
|
187
|
+
await webSearchCatalog.updateWebSearchProvider({
|
|
188
|
+
id: updateProvider.id,
|
|
189
|
+
...draft.apiKey ? { apiKey: draft.apiKey } : {}
|
|
190
|
+
});
|
|
191
|
+
}, setFormError);
|
|
192
|
+
setUpdateProvider(null);
|
|
193
|
+
setTimeout(() => {
|
|
194
|
+
toaster?.showSuccess({ title: `${updateProvider.name} updated` });
|
|
195
|
+
}, 0);
|
|
196
|
+
};
|
|
197
|
+
const formOpen = createEntry != null || updateProvider != null;
|
|
198
|
+
const isUpdate = updateProvider != null;
|
|
199
|
+
const formTitle = updateProvider ? `Update ${updateProvider.name}` : createEntry ? `Configure ${createEntry.name}` : "Configure web search provider";
|
|
200
|
+
return /* @__PURE__ */ jsxs2(Fragment, { children: [
|
|
201
|
+
/* @__PURE__ */ jsx2("h3", { className: "text-xl font-semibold tracking-tight text-text-primary", children: "Web search" }),
|
|
202
|
+
/* @__PURE__ */ jsx2("p", { className: "mt-1 text-sm text-text-secondary", children: "Configure a provider so agents can search the web. Only one can be active at a time." }),
|
|
203
|
+
error ? /* @__PURE__ */ jsx2("p", { className: "mt-3 rounded-md border border-failure-bg/30 bg-failure-bg/10 px-3 py-2 text-sm text-failure-bg", children: error }) : null,
|
|
204
|
+
/* @__PURE__ */ jsx2("div", { className: "mt-4 flex-1 overflow-y-auto", children: loading ? /* @__PURE__ */ jsx2("p", { className: "text-sm text-text-secondary", children: "Loading web search providers\u2026" }) : /* @__PURE__ */ jsxs2("div", { className: "space-y-6", children: [
|
|
205
|
+
providers.length > 0 ? /* @__PURE__ */ jsxs2("section", { children: [
|
|
206
|
+
/* @__PURE__ */ jsxs2("h4", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary", children: [
|
|
207
|
+
"Configured \xB7 ",
|
|
208
|
+
providers.length
|
|
209
|
+
] }),
|
|
210
|
+
/* @__PURE__ */ jsx2("div", { className: "overflow-hidden rounded-xl border border-border bg-card-bg", children: providers.map((provider) => /* @__PURE__ */ jsxs2(
|
|
211
|
+
"article",
|
|
212
|
+
{
|
|
213
|
+
className: "flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center",
|
|
214
|
+
children: [
|
|
215
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
|
|
216
|
+
/* @__PURE__ */ jsx2(
|
|
217
|
+
"span",
|
|
218
|
+
{
|
|
219
|
+
className: "flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary",
|
|
220
|
+
"aria-hidden": true,
|
|
221
|
+
children: /* @__PURE__ */ jsx2(Icon, { name: "search", className: "size-4.5" })
|
|
222
|
+
}
|
|
223
|
+
),
|
|
224
|
+
/* @__PURE__ */ jsxs2("div", { className: "min-w-0", children: [
|
|
225
|
+
/* @__PURE__ */ jsx2("h5", { className: "truncate text-sm font-medium text-text-primary", children: provider.name }),
|
|
226
|
+
/* @__PURE__ */ jsx2("p", { className: "truncate text-xs text-text-secondary", children: "Parallel web search" })
|
|
227
|
+
] })
|
|
228
|
+
] }),
|
|
229
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex flex-wrap items-center gap-2.5 sm:justify-end", children: [
|
|
230
|
+
/* @__PURE__ */ jsxs2("span", { className: "inline-flex items-center gap-1.5 text-sm font-medium text-success-bg", children: [
|
|
231
|
+
/* @__PURE__ */ jsx2("span", { className: "size-2 rounded-full bg-success-bg", "aria-hidden": true }),
|
|
232
|
+
"Connected"
|
|
233
|
+
] }),
|
|
234
|
+
/* @__PURE__ */ jsx2(
|
|
235
|
+
Button.Secondary,
|
|
236
|
+
{
|
|
237
|
+
size: "small",
|
|
238
|
+
type: "button",
|
|
239
|
+
disabled: busy,
|
|
240
|
+
onClick: () => {
|
|
241
|
+
setFormError(null);
|
|
242
|
+
setCreateEntry(null);
|
|
243
|
+
setUpdateProvider(provider);
|
|
244
|
+
},
|
|
245
|
+
children: "Update"
|
|
246
|
+
}
|
|
247
|
+
)
|
|
248
|
+
] })
|
|
249
|
+
]
|
|
250
|
+
},
|
|
251
|
+
provider.id
|
|
252
|
+
)) })
|
|
253
|
+
] }) : null,
|
|
254
|
+
!hasConfiguredProvider ? /* @__PURE__ */ jsxs2("section", { children: [
|
|
255
|
+
/* @__PURE__ */ jsxs2("h4", { className: "mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary", children: [
|
|
256
|
+
"Available \xB7 ",
|
|
257
|
+
availableEntries.length
|
|
258
|
+
] }),
|
|
259
|
+
availableEntries.length === 0 ? /* @__PURE__ */ jsx2("p", { className: "text-sm text-text-secondary", children: catalog.length > 0 ? "All catalog providers are configured." : "No web search providers in the catalog." }) : /* @__PURE__ */ jsx2("div", { className: "overflow-hidden rounded-xl border border-border bg-card-bg", children: availableEntries.map((entry) => /* @__PURE__ */ jsxs2(
|
|
260
|
+
"article",
|
|
261
|
+
{
|
|
262
|
+
className: "flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center",
|
|
263
|
+
children: [
|
|
264
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
|
|
265
|
+
/* @__PURE__ */ jsx2(
|
|
266
|
+
"span",
|
|
267
|
+
{
|
|
268
|
+
className: "flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary",
|
|
269
|
+
"aria-hidden": true,
|
|
270
|
+
children: /* @__PURE__ */ jsx2(Icon, { name: "search", className: "size-4.5" })
|
|
271
|
+
}
|
|
272
|
+
),
|
|
273
|
+
/* @__PURE__ */ jsxs2("div", { className: "min-w-0", children: [
|
|
274
|
+
/* @__PURE__ */ jsx2("h5", { className: "truncate text-sm font-medium text-text-primary", children: entry.name }),
|
|
275
|
+
/* @__PURE__ */ jsx2("p", { className: "truncate text-xs text-text-secondary", children: "Parallel web search" })
|
|
276
|
+
] })
|
|
277
|
+
] }),
|
|
278
|
+
/* @__PURE__ */ jsx2(
|
|
279
|
+
Button.Secondary,
|
|
280
|
+
{
|
|
281
|
+
type: "button",
|
|
282
|
+
disabled: busy,
|
|
283
|
+
onClick: () => {
|
|
284
|
+
setFormError(null);
|
|
285
|
+
setUpdateProvider(null);
|
|
286
|
+
setCreateEntry(entry);
|
|
287
|
+
},
|
|
288
|
+
children: "Configure"
|
|
289
|
+
}
|
|
290
|
+
)
|
|
291
|
+
]
|
|
292
|
+
},
|
|
293
|
+
entry.id
|
|
294
|
+
)) })
|
|
295
|
+
] }) : null
|
|
296
|
+
] }) }),
|
|
297
|
+
/* @__PURE__ */ jsx2(
|
|
298
|
+
ConfigureWebSearchForm_default,
|
|
299
|
+
{
|
|
300
|
+
open: formOpen,
|
|
301
|
+
onOpenChange: (open) => {
|
|
302
|
+
if (!open) {
|
|
303
|
+
setFormError(null);
|
|
304
|
+
setCreateEntry(null);
|
|
305
|
+
setUpdateProvider(null);
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
onSave: isUpdate ? handleUpdate : handleCreate,
|
|
309
|
+
title: formTitle,
|
|
310
|
+
description: isUpdate ? "Update this web search provider. Leave API key blank to keep the existing key." : "Configure this web search provider. API key is never stored in the catalog.",
|
|
311
|
+
requireApiKey: !isUpdate,
|
|
312
|
+
busy,
|
|
313
|
+
error: formError
|
|
314
|
+
}
|
|
315
|
+
)
|
|
316
|
+
] });
|
|
317
|
+
};
|
|
318
|
+
var WebSearchSettings_default = WebSearchSettings;
|
|
319
|
+
export {
|
|
320
|
+
WebSearchSettings_default as default
|
|
321
|
+
};
|
|
322
|
+
//# sourceMappingURL=WebSearchSettings-BW4CWGRR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/containers/SettingsBuilder/WebSearchSettings.tsx","../src/containers/SettingsBuilder/ConfigureWebSearchForm.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../../atoms/primitives/Button.js';\nimport { Icon } from '../../icons/Icon.js';\nimport { useCatalogServer } from '../../server/ServerContext.js';\nimport type { WebSearchProviderBase, WebSearchProviderCatalogEntry } from '../../server/types.js';\nimport { getErrorMessage } from '../../utils/getErrorMessage.js';\nimport { useToasterOptional } from '../ToasterContainer.js';\nimport ConfigureWebSearchForm, { type WebSearchConfigDraft } from './ConfigureWebSearchForm.js';\n\nconst WebSearchSettings = () => {\n const { webSearchCatalog } = useCatalogServer();\n const toaster = useToasterOptional();\n\n const [providers, setProviders] = useState<WebSearchProviderBase[]>([]);\n const [catalog, setCatalog] = useState<WebSearchProviderCatalogEntry[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [formError, setFormError] = useState<string | null>(null);\n const [busy, setBusy] = useState(false);\n\n const [createEntry, setCreateEntry] = useState<WebSearchProviderCatalogEntry | null>(null);\n const [updateProvider, setUpdateProvider] = useState<WebSearchProviderBase | null>(null);\n\n const refresh = useCallback(\n async ({ quiet = false }: { quiet?: boolean } = {}) => {\n if (!webSearchCatalog) return;\n if (!quiet) setLoading(true);\n setError(null);\n try {\n const [listed, available] = await Promise.all([\n webSearchCatalog.listWebSearchProviders(),\n webSearchCatalog.getWebSearchProviderCatalog(),\n ]);\n setProviders(listed);\n setCatalog(available);\n } catch (err) {\n setError(getErrorMessage(err, 'Failed to load web search providers'));\n } finally {\n if (!quiet) setLoading(false);\n }\n },\n [webSearchCatalog],\n );\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n // Tenant/UI-wide: only one web-search provider may be configured at a time.\n const hasConfiguredProvider = providers.length > 0;\n const availableEntries = useMemo(() => {\n if (hasConfiguredProvider) return [];\n const connectedCatalogIds = new Set(providers.map(provider => provider.catalogId));\n return catalog.filter(entry => !connectedCatalogIds.has(entry.id));\n }, [catalog, providers, hasConfiguredProvider]);\n\n if (!webSearchCatalog) {\n return <p className=\"text-sm text-text-secondary\">Web search provider catalog is not available.</p>;\n }\n\n const runMutation = async (fn: () => Promise<void>, setMutationError = setError) => {\n setBusy(true);\n setError(null);\n try {\n await fn();\n await refresh({ quiet: true });\n } catch (err) {\n setMutationError(getErrorMessage(err, 'Request failed'));\n throw err;\n } finally {\n setBusy(false);\n }\n };\n\n const handleCreate = async (draft: WebSearchConfigDraft) => {\n if (!createEntry) return;\n setFormError(null);\n await runMutation(async () => {\n await webSearchCatalog.createWebSearchProvider({\n catalogId: createEntry.id,\n name: createEntry.name,\n type: createEntry.type,\n apiKey: draft.apiKey,\n });\n }, setFormError);\n setCreateEntry(null);\n setTimeout(() => {\n toaster?.showSuccess({ title: `${createEntry.name} configured` });\n }, 0);\n };\n\n const handleUpdate = async (draft: WebSearchConfigDraft) => {\n if (!updateProvider) return;\n setFormError(null);\n await runMutation(async () => {\n await webSearchCatalog.updateWebSearchProvider({\n id: updateProvider.id,\n ...(draft.apiKey ? { apiKey: draft.apiKey } : {}),\n });\n }, setFormError);\n setUpdateProvider(null);\n setTimeout(() => {\n toaster?.showSuccess({ title: `${updateProvider.name} updated` });\n }, 0);\n };\n\n const formOpen = createEntry != null || updateProvider != null;\n const isUpdate = updateProvider != null;\n const formTitle = updateProvider\n ? `Update ${updateProvider.name}`\n : createEntry\n ? `Configure ${createEntry.name}`\n : 'Configure web search provider';\n\n return (\n <>\n <h3 className=\"text-xl font-semibold tracking-tight text-text-primary\">Web search</h3>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Configure a provider so agents can search the web. Only one can be active at a time.\n </p>\n\n {error ? (\n <p className=\"mt-3 rounded-md border border-failure-bg/30 bg-failure-bg/10 px-3 py-2 text-sm text-failure-bg\">\n {error}\n </p>\n ) : null}\n\n <div className=\"mt-4 flex-1 overflow-y-auto\">\n {loading ? (\n <p className=\"text-sm text-text-secondary\">Loading web search providers…</p>\n ) : (\n <div className=\"space-y-6\">\n {providers.length > 0 ? (\n <section>\n <h4 className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary\">\n Configured · {providers.length}\n </h4>\n <div className=\"overflow-hidden rounded-xl border border-border bg-card-bg\">\n {providers.map(provider => (\n <article\n key={provider.id}\n className=\"flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center\"\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n <span\n className=\"flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary\"\n aria-hidden\n >\n <Icon name=\"search\" className=\"size-4.5\" />\n </span>\n <div className=\"min-w-0\">\n <h5 className=\"truncate text-sm font-medium text-text-primary\">{provider.name}</h5>\n <p className=\"truncate text-xs text-text-secondary\">Parallel web search</p>\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2.5 sm:justify-end\">\n <span className=\"inline-flex items-center gap-1.5 text-sm font-medium text-success-bg\">\n <span className=\"size-2 rounded-full bg-success-bg\" aria-hidden />\n Connected\n </span>\n <Button.Secondary\n size=\"small\"\n type=\"button\"\n disabled={busy}\n onClick={() => {\n setFormError(null);\n setCreateEntry(null);\n setUpdateProvider(provider);\n }}\n >\n Update\n </Button.Secondary>\n </div>\n </article>\n ))}\n </div>\n </section>\n ) : null}\n\n {!hasConfiguredProvider ? (\n <section>\n <h4 className=\"mb-2 text-xs font-semibold uppercase tracking-wide text-text-secondary\">\n Available · {availableEntries.length}\n </h4>\n {availableEntries.length === 0 ? (\n <p className=\"text-sm text-text-secondary\">\n {catalog.length > 0\n ? 'All catalog providers are configured.'\n : 'No web search providers in the catalog.'}\n </p>\n ) : (\n <div className=\"overflow-hidden rounded-xl border border-border bg-card-bg\">\n {availableEntries.map(entry => (\n <article\n key={entry.id}\n className=\"flex flex-col gap-3 border-b border-border p-3 last:border-b-0 sm:flex-row sm:items-center\"\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n <span\n className=\"flex size-9 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary\"\n aria-hidden\n >\n <Icon name=\"search\" className=\"size-4.5\" />\n </span>\n <div className=\"min-w-0\">\n <h5 className=\"truncate text-sm font-medium text-text-primary\">{entry.name}</h5>\n <p className=\"truncate text-xs text-text-secondary\">Parallel web search</p>\n </div>\n </div>\n\n <Button.Secondary\n type=\"button\"\n disabled={busy}\n onClick={() => {\n setFormError(null);\n setUpdateProvider(null);\n setCreateEntry(entry);\n }}\n >\n Configure\n </Button.Secondary>\n </article>\n ))}\n </div>\n )}\n </section>\n ) : null}\n </div>\n )}\n </div>\n\n <ConfigureWebSearchForm\n open={formOpen}\n onOpenChange={open => {\n if (!open) {\n setFormError(null);\n setCreateEntry(null);\n setUpdateProvider(null);\n }\n }}\n onSave={isUpdate ? handleUpdate : handleCreate}\n title={formTitle}\n description={\n isUpdate\n ? 'Update this web search provider. Leave API key blank to keep the existing key.'\n : 'Configure this web search provider. API key is never stored in the catalog.'\n }\n requireApiKey={!isUpdate}\n busy={busy}\n error={formError}\n />\n </>\n );\n};\n\nexport default WebSearchSettings;\n","'use client';\n\nimport { useEffect, useState, type FormEvent } from 'react';\n\nimport { auiInputClass } from '../../atoms/lib/inputClasses.js';\nimport { Button } from '../../atoms/primitives/Button.js';\nimport { CenteredModal } from '../../atoms/primitives/CenteredModal.js';\nimport { Icon } from '../../icons/Icon.js';\n\nexport type WebSearchConfigDraft = {\n apiKey: string;\n};\n\ntype ConfigureWebSearchFormProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSave: (draft: WebSearchConfigDraft) => void | Promise<void>;\n title: string;\n description?: string;\n /** When false (updates), empty apiKey means keep the existing key. */\n requireApiKey?: boolean;\n busy?: boolean;\n error?: string | null;\n};\n\nconst inputClassName = auiInputClass('h-11 shadow-sm');\n\nconst ConfigureWebSearchForm = ({\n open,\n onOpenChange,\n onSave,\n title,\n description,\n requireApiKey = true,\n busy = false,\n error,\n}: ConfigureWebSearchFormProps) => {\n const [apiKey, setApiKey] = useState('');\n\n const resetForm = () => {\n setApiKey('');\n };\n\n useEffect(() => {\n if (!open) return;\n setApiKey('');\n }, [open]);\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen) resetForm();\n onOpenChange(nextOpen);\n };\n\n const trimmedKey = apiKey.trim();\n const isValid = !requireApiKey || !!trimmedKey;\n\n const handleSubmit = async (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!isValid || busy) return;\n\n try {\n await onSave({ apiKey: trimmedKey });\n resetForm();\n onOpenChange(false);\n } catch {\n // Parent surfaces error; keep form open.\n }\n };\n\n return (\n <CenteredModal\n open={open}\n onOpenChange={handleOpenChange}\n title={title}\n description={description}\n contentSized\n headerIcon={\n <span\n className=\"flex size-11 shrink-0 items-center justify-center rounded-lg border border-border bg-secondary-bg text-text-primary\"\n aria-hidden\n >\n <Icon name=\"search\" className=\"size-6\" />\n </span>\n }\n >\n <form className=\"flex flex-col overflow-y-auto p-5 md:p-6\" onSubmit={handleSubmit}>\n <div className=\"space-y-4\">\n <div>\n <label htmlFor=\"web-search-api-key\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n API key\n {!requireApiKey ? <span className=\"font-normal text-text-secondary\"> (optional)</span> : null}\n </label>\n <input\n id=\"web-search-api-key\"\n type=\"password\"\n required={requireApiKey}\n value={apiKey}\n onChange={event => {\n setApiKey(event.target.value);\n }}\n placeholder={requireApiKey ? 'Parallel API key' : 'Leave blank to keep existing'}\n autoFocus\n className={inputClassName}\n />\n </div>\n </div>\n\n <div className=\"mt-6 space-y-3\">\n {error ? <p className=\"text-failure-bg text-sm\">{error}</p> : null}\n <Button.Primary type=\"submit\" size=\"large\" disabled={!isValid || busy} className=\"w-full shrink-0\">\n Save\n </Button.Primary>\n </div>\n </form>\n </CenteredModal>\n );\n};\n\nexport default ConfigureWebSearchForm;\n"],"mappings":"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","names":["useEffect","useState","jsx","jsxs","useState","useEffect"]}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
StackChatPanel
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-YN5ZBBQM.js";
|
|
5
|
+
import "./chunk-TFQWCBFQ.js";
|
|
6
|
+
import "./chunk-GHXA46A2.js";
|
|
7
7
|
import {
|
|
8
8
|
useWidgetVisibility
|
|
9
9
|
} from "./chunk-DJUFS2BW.js";
|
|
10
10
|
import "./chunk-BSIPI3KV.js";
|
|
11
11
|
import {
|
|
12
12
|
useSlot
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-UN7WPTTK.js";
|
|
13
|
+
} from "./chunk-MLMR26WQ.js";
|
|
15
14
|
import {
|
|
16
15
|
CompactLayoutProvider,
|
|
17
16
|
Icon,
|
|
18
17
|
auiButtonClass
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-TX6PB3DY.js";
|
|
19
|
+
import "./chunk-ZYJ2SBF7.js";
|
|
20
|
+
import "./chunk-7S7A3PNP.js";
|
|
21
21
|
import "./chunk-M6MHLVSO.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-QKFMAQ7O.js";
|
|
23
23
|
import {
|
|
24
24
|
cn
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-6UACSIIY.js";
|
|
26
26
|
|
|
27
27
|
// src/layouts/WidgetLayout.tsx
|
|
28
28
|
import { useEffect, useRef } from "react";
|
|
@@ -104,4 +104,4 @@ function WidgetLayout({ className }) {
|
|
|
104
104
|
export {
|
|
105
105
|
WidgetLayout
|
|
106
106
|
};
|
|
107
|
-
//# sourceMappingURL=WidgetLayout-
|
|
107
|
+
//# sourceMappingURL=WidgetLayout-WIPKUIL4.js.map
|