@truefoundry/trueforge-ui 0.3.0-rc.2 → 0.3.0-rc.3
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 +50 -0
- package/README.md +17 -9
- package/dist/{AgentCodeSnippets-637HQUXD.js → AgentCodeSnippets-N546FNNS.js} +38 -23
- package/dist/AgentCodeSnippets-N546FNNS.js.map +1 -0
- package/dist/AgentMetricChart-YWJYVYYA.js +15 -0
- package/dist/{AgentOverview-3FJ5EE6N.js → AgentOverview-VF74XC7I.js} +7 -7
- package/dist/{AgentSessionEventTimeline-VELWUYPR.js → AgentSessionEventTimeline-RFR6LQMY.js} +8 -8
- package/dist/{AgentSessionEventTimeline-VELWUYPR.js.map → AgentSessionEventTimeline-RFR6LQMY.js.map} +1 -1
- package/dist/{AgentSessionEventTimelineChart-CUKETHWM.js → AgentSessionEventTimelineChart-27CQF6FX.js} +12 -12
- package/dist/AgentSessionEventTimelineChart-27CQF6FX.js.map +1 -0
- package/dist/{AgentSessions-T7MOGOTZ.js → AgentSessions-4IVX2SGD.js} +36 -12
- package/dist/AgentSessions-4IVX2SGD.js.map +1 -0
- package/dist/{ConnectorSettings-ESZ2RSRG.js → ConnectorSettings-R5VEP7BO.js} +156 -116
- package/dist/ConnectorSettings-R5VEP7BO.js.map +1 -0
- package/dist/{DockLayout-NLFNU6F2.js → DockLayout-F44RWGEY.js} +10 -10
- package/dist/{DrawerLayout-PR3SMKA6.js → DrawerLayout-SQ323AVM.js} +13 -11
- package/dist/DrawerLayout-SQ323AVM.js.map +1 -0
- package/dist/{ModelSettings-LYW64IRR.js → ModelSettings-6QLS63HM.js} +10 -10
- package/dist/{ModelSettings-LYW64IRR.js.map → ModelSettings-6QLS63HM.js.map} +1 -1
- package/dist/OpenUiFenceBlock-4ROX3G4X.js +9 -0
- package/dist/{SandboxSettings-DF64LHYI.js → SandboxSettings-OLKDXIQS.js} +9 -9
- package/dist/SchedulesPage-TMOTK6DR.js +15 -0
- package/dist/{SettingsBuilder-LSXK2VN4.js → SettingsBuilder-GISAH2WU.js} +8 -8
- package/dist/{ShellRouteSync-B22IAV2W.js → ShellRouteSync-EN33DUQ7.js} +157 -22
- package/dist/ShellRouteSync-EN33DUQ7.js.map +1 -0
- package/dist/{SidebarLayout-XW6LXB7R.js → SidebarLayout-35K4AKTC.js} +74 -53
- package/dist/SidebarLayout-35K4AKTC.js.map +1 -0
- package/dist/{SkillSettings-64VXUO6J.js → SkillSettings-JSX2BTII.js} +18 -13
- package/dist/SkillSettings-JSX2BTII.js.map +1 -0
- package/dist/{TrueForgeUIWithRouter-3TSLV22Q.js → TrueForgeUIWithRouter-6VCR7ES3.js} +9 -9
- package/dist/{WidgetLayout-Q5P7PYSJ.js → WidgetLayout-RKBSN2FZ.js} +10 -10
- package/dist/{chunk-YQO2NMJ3.js → chunk-2O5EJ6QS.js} +4096 -2825
- package/dist/chunk-2O5EJ6QS.js.map +1 -0
- package/dist/chunk-6WCIL3H2.js +517 -0
- package/dist/chunk-6WCIL3H2.js.map +1 -0
- package/dist/{chunk-SQGT43Z3.js → chunk-73FQVITT.js} +21 -4
- package/dist/chunk-73FQVITT.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-LGRHHFHN.js → chunk-F5QVQIBH.js} +166 -45
- package/dist/chunk-F5QVQIBH.js.map +1 -0
- package/dist/{chunk-I3AL54MA.js → chunk-GIPFF6FZ.js} +28 -24
- package/dist/chunk-GIPFF6FZ.js.map +1 -0
- package/dist/{chunk-GXYAOAK5.js → chunk-GSJAYYLR.js} +219 -162
- package/dist/chunk-GSJAYYLR.js.map +1 -0
- package/dist/{chunk-VJ7BZGAF.js → chunk-J5BPHEDT.js} +2 -2
- package/dist/chunk-KR7WYHVF.js +195 -0
- package/dist/chunk-KR7WYHVF.js.map +1 -0
- package/dist/{chunk-VUMGMGKZ.js → chunk-LUG7E6BL.js} +52 -8
- package/dist/chunk-LUG7E6BL.js.map +1 -0
- package/dist/chunk-LXJMINS6.js +587 -0
- package/dist/chunk-LXJMINS6.js.map +1 -0
- package/dist/{chunk-FQK2XVVE.js → chunk-PT4EENB3.js} +224 -72
- package/dist/chunk-PT4EENB3.js.map +1 -0
- package/dist/{chunk-H6WTY5PM.js → chunk-Q6TCT7ZJ.js} +17 -227
- package/dist/chunk-Q6TCT7ZJ.js.map +1 -0
- package/dist/{chunk-5I2COQNL.js → chunk-XLFOXQKZ.js} +13 -11
- package/dist/chunk-XLFOXQKZ.js.map +1 -0
- package/dist/{chunk-G2TUAD65.js → chunk-XY6LZQES.js} +235 -108
- package/dist/chunk-XY6LZQES.js.map +1 -0
- package/dist/{createTrueFoundryServer-CmZnBh_l.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +8 -5
- package/dist/index.d.ts +291 -89
- package/dist/index.js +63 -488
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +36 -13
- package/dist/plugins/trueforge-agent-server-adapter/index.js +69 -35
- 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-YWJYVYYA.js.map} +0 -0
- /package/dist/{AgentOverview-3FJ5EE6N.js.map → AgentOverview-VF74XC7I.js.map} +0 -0
- /package/dist/{DockLayout-NLFNU6F2.js.map → DockLayout-F44RWGEY.js.map} +0 -0
- /package/dist/{OpenUiFenceBlock-JEPNPJ7U.js.map → OpenUiFenceBlock-4ROX3G4X.js.map} +0 -0
- /package/dist/{SandboxSettings-DF64LHYI.js.map → SandboxSettings-OLKDXIQS.js.map} +0 -0
- /package/dist/{SchedulesPage-WQU4H25F.js.map → SchedulesPage-TMOTK6DR.js.map} +0 -0
- /package/dist/{SettingsBuilder-LSXK2VN4.js.map → SettingsBuilder-GISAH2WU.js.map} +0 -0
- /package/dist/{TrueForgeUIWithRouter-3TSLV22Q.js.map → TrueForgeUIWithRouter-6VCR7ES3.js.map} +0 -0
- /package/dist/{WidgetLayout-Q5P7PYSJ.js.map → WidgetLayout-RKBSN2FZ.js.map} +0 -0
- /package/dist/{chunk-VJ7BZGAF.js.map → chunk-J5BPHEDT.js.map} +0 -0
|
@@ -2,16 +2,17 @@ import {
|
|
|
2
2
|
Tooltip,
|
|
3
3
|
useAgentConfigInstructions,
|
|
4
4
|
useNamedAgentHeaderState,
|
|
5
|
+
useResourcePermissions,
|
|
5
6
|
useSlot,
|
|
6
7
|
withInitialUserMessages
|
|
7
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-2O5EJ6QS.js";
|
|
8
9
|
import {
|
|
9
10
|
Icon,
|
|
10
11
|
auiButtonClass,
|
|
11
12
|
pageHeaderTitleClassName,
|
|
12
13
|
sidebarRailButtonClassName,
|
|
13
14
|
useDraftCatalog
|
|
14
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-Q6TCT7ZJ.js";
|
|
15
16
|
import {
|
|
16
17
|
isSettingsChromeEnabled,
|
|
17
18
|
shellIsCreateAgent,
|
|
@@ -20,14 +21,14 @@ import {
|
|
|
20
21
|
useOptionalShellMode,
|
|
21
22
|
useServerCapabilities,
|
|
22
23
|
useShellMode
|
|
23
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-PT4EENB3.js";
|
|
24
25
|
import {
|
|
25
26
|
useAuiState
|
|
26
27
|
} from "./chunk-M6MHLVSO.js";
|
|
27
28
|
import {
|
|
28
29
|
cn,
|
|
29
30
|
useTheme
|
|
30
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-LXJMINS6.js";
|
|
31
32
|
|
|
32
33
|
// src/atoms/NamedAgentHeaderLabel.tsx
|
|
33
34
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -67,6 +68,25 @@ function ShellActions({ className, labeled = false }) {
|
|
|
67
68
|
className
|
|
68
69
|
),
|
|
69
70
|
children: [
|
|
71
|
+
/* @__PURE__ */ jsxs2(
|
|
72
|
+
"a",
|
|
73
|
+
{
|
|
74
|
+
href: "https://trueforge.dev",
|
|
75
|
+
target: "_blank",
|
|
76
|
+
rel: "noopener noreferrer",
|
|
77
|
+
"aria-label": "Documentation",
|
|
78
|
+
title: "Documentation",
|
|
79
|
+
className: auiButtonClass({
|
|
80
|
+
variant: "ghost",
|
|
81
|
+
size: labeled ? void 0 : "icon",
|
|
82
|
+
className: cn(hoverClass, labeled && sidebarRailButtonClassName)
|
|
83
|
+
}),
|
|
84
|
+
children: [
|
|
85
|
+
/* @__PURE__ */ jsx2(Icon, { name: "book-open", size: labeled ? 14 : void 0 }),
|
|
86
|
+
labeled ? /* @__PURE__ */ jsx2("span", { className: "text-center", children: "Docs" }) : null
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
),
|
|
70
90
|
/* @__PURE__ */ jsxs2(
|
|
71
91
|
"button",
|
|
72
92
|
{
|
|
@@ -128,6 +148,12 @@ function AgentConfigDrawerContainer({ showClose = false }) {
|
|
|
128
148
|
const updateAgentSpec = useTrueFoundryUpdateAgentSpec();
|
|
129
149
|
const flushAgentSpec = useTrueFoundryFlushAgentSpec();
|
|
130
150
|
const shell = useShellMode();
|
|
151
|
+
const agentId = shell.mode.status === "active" ? shell.mode.agentId : void 0;
|
|
152
|
+
const { allows } = useResourcePermissions({
|
|
153
|
+
resourceType: "agent",
|
|
154
|
+
resourceIds: agentId == null ? [] : [agentId]
|
|
155
|
+
});
|
|
156
|
+
const canManageAgent = allows(agentId, "MANAGE");
|
|
131
157
|
const server = useOptionalServer();
|
|
132
158
|
const capabilities = useServerCapabilities();
|
|
133
159
|
const catalog = useDraftCatalog();
|
|
@@ -144,10 +170,13 @@ function AgentConfigDrawerContainer({ showClose = false }) {
|
|
|
144
170
|
useEffect(() => {
|
|
145
171
|
if (isBuilder) catalog.ensureLoaded();
|
|
146
172
|
}, [catalog, isBuilder]);
|
|
173
|
+
useEffect(() => {
|
|
174
|
+
if (!canManageAgent) setEditor(null);
|
|
175
|
+
}, [canManageAgent]);
|
|
147
176
|
useEffect(() => {
|
|
148
177
|
if (!showClose || !shell.agentConfigOpen) return;
|
|
149
178
|
const onKeyDown = (event) => {
|
|
150
|
-
if (event.key === "Escape" && editor === null && document.querySelector("dialog[open]") === null) {
|
|
179
|
+
if (!event.defaultPrevented && event.key === "Escape" && editor === null && document.querySelector("dialog[open]") === null) {
|
|
151
180
|
closeDrawer();
|
|
152
181
|
}
|
|
153
182
|
};
|
|
@@ -166,6 +195,7 @@ function AgentConfigDrawerContainer({ showClose = false }) {
|
|
|
166
195
|
);
|
|
167
196
|
const commitSpec = useCallback(
|
|
168
197
|
({ next, instructions }) => {
|
|
198
|
+
if (!canManageAgent) return;
|
|
169
199
|
if (next.skills && next.skills.length > 0 && capabilities?.sandbox.enabled === true) {
|
|
170
200
|
updateAgentSpec?.({
|
|
171
201
|
...next,
|
|
@@ -179,7 +209,7 @@ function AgentConfigDrawerContainer({ showClose = false }) {
|
|
|
179
209
|
}
|
|
180
210
|
updateAgentSpec?.({ ...next, instructions: instructions || void 0 });
|
|
181
211
|
},
|
|
182
|
-
[capabilities?.sandbox.enabled, updateAgentSpec]
|
|
212
|
+
[canManageAgent, capabilities?.sandbox.enabled, updateAgentSpec]
|
|
183
213
|
);
|
|
184
214
|
const updateSpec = useCallback(
|
|
185
215
|
(next) => {
|
|
@@ -204,6 +234,12 @@ function AgentConfigDrawerContainer({ showClose = false }) {
|
|
|
204
234
|
},
|
|
205
235
|
[server]
|
|
206
236
|
);
|
|
237
|
+
const loadMcpConnector = useCallback(
|
|
238
|
+
async (connectorId) => {
|
|
239
|
+
return server?.getMcpConnector?.({ connectorId });
|
|
240
|
+
},
|
|
241
|
+
[server]
|
|
242
|
+
);
|
|
207
243
|
if (!isBuilder || agentSpec === null || showClose && !shell.agentConfigOpen) {
|
|
208
244
|
return null;
|
|
209
245
|
}
|
|
@@ -214,10 +250,17 @@ function AgentConfigDrawerContainer({ showClose = false }) {
|
|
|
214
250
|
{
|
|
215
251
|
spec: agentSpec,
|
|
216
252
|
model,
|
|
253
|
+
models: catalog.models,
|
|
254
|
+
modelsLoading: catalog.loading,
|
|
255
|
+
modelsError: catalog.error,
|
|
256
|
+
skills: catalog.skills,
|
|
217
257
|
skillsAvailable: capabilities?.skill.enabled === true,
|
|
218
258
|
instructions: instructionDraft,
|
|
219
|
-
onOpenEditor:
|
|
259
|
+
onOpenEditor: (nextEditor) => {
|
|
260
|
+
if (canManageAgent) setEditor(nextEditor);
|
|
261
|
+
},
|
|
220
262
|
onChange: updateSpec,
|
|
263
|
+
disabled: !canManageAgent,
|
|
221
264
|
onClose: showClose ? closeDrawer : void 0
|
|
222
265
|
}
|
|
223
266
|
),
|
|
@@ -235,6 +278,7 @@ function AgentConfigDrawerContainer({ showClose = false }) {
|
|
|
235
278
|
sandboxAvailable: capabilities?.sandbox.enabled === true,
|
|
236
279
|
instructions: instructionDraft,
|
|
237
280
|
onInstructionsSave: saveInstructions,
|
|
281
|
+
...server?.getMcpConnector === void 0 ? {} : { loadMcpConnector },
|
|
238
282
|
loadMcpTools,
|
|
239
283
|
onRefreshConnectors: catalog.refreshConnectors,
|
|
240
284
|
onChange: updateSpec,
|
|
@@ -249,4 +293,4 @@ export {
|
|
|
249
293
|
ShellActions,
|
|
250
294
|
AgentConfigDrawerContainer
|
|
251
295
|
};
|
|
252
|
-
//# sourceMappingURL=chunk-
|
|
296
|
+
//# sourceMappingURL=chunk-LUG7E6BL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/atoms/NamedAgentHeaderLabel.tsx","../src/atoms/ShellActions.tsx","../src/containers/AgentConfigDrawerContainer.tsx"],"sourcesContent":["'use client';\n\nimport { useAuiState } from '../assistant-ui.js';\nimport { useNamedAgentHeaderState } from '../hooks/useChatChromeActionsVisible.js';\nimport { Icon } from '../icons/Icon.js';\nimport { cn } from './lib/cn.js';\nimport { pageHeaderTitleClassName } from './PageHeader.js';\nimport { Tooltip } from './primitives/Tooltip.js';\n\n/** Dynamic chat title for named agents and New Chat / New Agent drafts. */\nexport function NamedAgentHeaderLabel({ className }: { className?: string }) {\n const state = useNamedAgentHeaderState();\n const threadTitle = useAuiState(s => s.threadListItem.title);\n if (state === null) return null;\n\n const syncedTitle = threadTitle?.trim() ?? '';\n const displayName = state.allowThreadTitle && syncedTitle.length > 0 ? syncedTitle : state.name;\n\n return (\n <h1 className={cn('flex min-w-0 items-center gap-1.5', pageHeaderTitleClassName, className)}>\n <span className=\"truncate\" title={displayName}>\n {displayName}\n </span>\n {state.isEditing ? (\n <Tooltip content=\"Try changes here, then choose Update agent to save.\" side=\"bottom\">\n <span className=\"border-warning-bg/40 bg-warning-bg/10 text-warning-bg inline-flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium\">\n <Icon name=\"pencil\" className=\"size-3\" />\n Editing\n </span>\n </Tooltip>\n ) : null}\n </h1>\n );\n}\n","'use client';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalCatalogServer, useServerCapabilities } from '../server/ServerContext.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport { isSettingsChromeEnabled } from '../server/serverChrome.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { useTheme } from '../theme/ThemeProvider.js';\nimport { auiButtonClass, sidebarRailButtonClassName } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\n\nexport function ShellActions({ className, labeled = false }: { className?: string; labeled?: boolean }) {\n const shell = useOptionalShellMode();\n const catalog = useOptionalCatalogServer();\n const capabilities = useServerCapabilities();\n const { mode, setTheme } = useTheme();\n const ActionSlot = useSlot('ShellActionsActionSlot');\n const isDark = mode === 'dark';\n const themeLabel = isDark ? 'Light' : 'Dark';\n const settingsChromeEnabled = isSettingsChromeEnabled({ catalog, capabilities });\n\n const hoverClass = 'hover:bg-secondary-button-hover hover:text-ghost-button-text';\n\n return (\n <div\n className={cn(\n 'flex shrink-0 items-center gap-1',\n labeled ? 'w-full flex-col items-center gap-1 text-sidebar-text' : 'text-text-primary',\n className,\n )}\n >\n <a\n href=\"https://trueforge.dev\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label=\"Documentation\"\n title=\"Documentation\"\n className={auiButtonClass({\n variant: 'ghost',\n size: labeled ? undefined : 'icon',\n className: cn(hoverClass, labeled && sidebarRailButtonClassName),\n })}\n >\n <Icon name=\"book-open\" size={labeled ? 14 : undefined} />\n {labeled ? <span className=\"text-center\">Docs</span> : null}\n </a>\n <button\n type=\"button\"\n aria-label={isDark ? 'Switch to light theme' : 'Switch to dark theme'}\n title={isDark ? 'Light theme' : 'Dark theme'}\n className={auiButtonClass({\n variant: 'ghost',\n size: labeled ? undefined : 'icon',\n className: cn(hoverClass, labeled && sidebarRailButtonClassName),\n })}\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n >\n <Icon name={isDark ? 'sun' : 'moon'} size={labeled ? 14 : undefined} />\n {labeled ? <span className=\"text-center\">{themeLabel}</span> : null}\n </button>\n {shell != null && settingsChromeEnabled ? (\n <button\n type=\"button\"\n aria-label=\"Settings\"\n title=\"Settings\"\n aria-expanded={shell.settingsOpen}\n aria-current={shell.settingsOpen ? 'page' : undefined}\n className={auiButtonClass({\n variant: 'ghost',\n size: labeled ? undefined : 'icon',\n className: cn(\n hoverClass,\n labeled && sidebarRailButtonClassName,\n shell.settingsOpen &&\n 'bg-primary-button-bg font-medium text-primary-button-text hover:bg-primary-button-hover hover:text-primary-button-text',\n ),\n })}\n onClick={() => shell.setSettingsOpen(true)}\n >\n <Icon name=\"settings\" size={labeled ? 14 : undefined} />\n {labeled ? <span className=\"text-center\">Settings</span> : null}\n </button>\n ) : null}\n <ActionSlot />\n </div>\n );\n}\n","'use client';\n\nimport {\n useTrueFoundryAgentSpec,\n useTrueFoundryFlushAgentSpec,\n useTrueFoundryUpdateAgentSpec,\n} from '@truefoundry/assistant-ui-runtime';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport type { AgentConfigEditor } from '../atoms/draft/AgentConfigEditors.js';\nimport { useAgentConfigInstructions } from '../atoms/draft/AgentConfigInstructionsContext.js';\nimport type { AgentInstructionsDraft } from '../atoms/draft/AgentInstructionsDrawer.js';\nimport { useDraftCatalog } from '../atoms/draft/DraftCatalogProvider.js';\nimport { withInitialUserMessages } from '../atoms/draft/agentConfigMessages.js';\nimport { useResourcePermissions } from '../hooks/useResourcePermissions.js';\nimport { useOptionalServer, useServerCapabilities } from '../server/ServerContext.js';\nimport { shellIsCreateAgent, useShellMode } from '../server/ShellModeContext.js';\nimport type { AgentSpec, ConnectorState, McpToolSelection } from '../server/types.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\n\nexport function AgentConfigDrawerContainer({ showClose = false }: { showClose?: boolean }) {\n const { agentSpec } = useTrueFoundryAgentSpec();\n const updateAgentSpec = useTrueFoundryUpdateAgentSpec();\n const flushAgentSpec = useTrueFoundryFlushAgentSpec();\n const shell = useShellMode();\n const agentId = shell.mode.status === 'active' ? shell.mode.agentId : undefined;\n const { allows } = useResourcePermissions({\n resourceType: 'agent',\n resourceIds: agentId == null ? [] : [agentId],\n });\n const canManageAgent = allows(agentId, 'MANAGE');\n const server = useOptionalServer();\n const capabilities = useServerCapabilities();\n const catalog = useDraftCatalog();\n const AgentConfigPanel = useSlot('AgentConfigPanel');\n const AgentConfigEditors = useSlot('AgentConfigEditors');\n const [editor, setEditor] = useState<AgentConfigEditor | null>(null);\n const isBuilder = shellIsCreateAgent(shell.mode);\n const { draft: instructionDraft, flush: flushInstructions } = useAgentConfigInstructions();\n const closeDrawer = useCallback(() => {\n flushInstructions();\n void flushAgentSpec();\n shell.setAgentConfigOpen(false);\n }, [flushAgentSpec, flushInstructions, shell]);\n\n useEffect(() => {\n if (isBuilder) catalog.ensureLoaded();\n }, [catalog, isBuilder]);\n\n useEffect(() => {\n if (!canManageAgent) setEditor(null);\n }, [canManageAgent]);\n\n useEffect(() => {\n if (!showClose || !shell.agentConfigOpen) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (\n !event.defaultPrevented &&\n event.key === 'Escape' &&\n editor === null &&\n document.querySelector('dialog[open]') === null\n ) {\n closeDrawer();\n }\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [closeDrawer, editor, shell.agentConfigOpen, showClose]);\n\n // Flush pending edits on unmount. ChatProvider remount (runtimeKey) tears the\n // runtime down first — flush then throws; ignore so the new draft can mount.\n useEffect(\n () => () => {\n flushInstructions();\n try {\n void flushAgentSpec();\n } catch {\n // Runtime already gone.\n }\n },\n [flushAgentSpec, flushInstructions],\n );\n\n const commitSpec = useCallback(\n ({ next, instructions }: { next: AgentSpec; instructions: string }) => {\n if (!canManageAgent) return;\n if (next.skills && next.skills.length > 0 && capabilities?.sandbox.enabled === true) {\n updateAgentSpec?.({\n ...next,\n instructions: instructions || undefined,\n config: {\n ...next.config,\n sandbox: { ...next.config?.sandbox, enabled: true },\n },\n });\n return;\n }\n updateAgentSpec?.({ ...next, instructions: instructions || undefined });\n },\n [canManageAgent, capabilities?.sandbox.enabled, updateAgentSpec],\n );\n\n const updateSpec = useCallback(\n (next: AgentSpec) => {\n commitSpec({ next, instructions: instructionDraft });\n },\n [commitSpec, instructionDraft],\n );\n\n const saveInstructions = useCallback(\n (draft: AgentInstructionsDraft) => {\n if (agentSpec === null) return;\n commitSpec({\n next: withInitialUserMessages({ spec: agentSpec, messages: draft.messages }),\n instructions: draft.instructions,\n });\n },\n [agentSpec, commitSpec],\n );\n\n const loadMcpTools = useCallback(\n async (connectorId: string): Promise<McpToolSelection[]> => {\n if (server?.getMcpTools === undefined) return [];\n return server.getMcpTools({ connectorId });\n },\n [server],\n );\n const loadMcpConnector = useCallback(\n async (connectorId: string): Promise<ConnectorState | undefined> => {\n return server?.getMcpConnector?.({ connectorId });\n },\n [server],\n );\n\n if (!isBuilder || agentSpec === null || (showClose && !shell.agentConfigOpen)) {\n return null;\n }\n\n const model = catalog.models.find(item => item.name === agentSpec.model.name);\n\n return (\n <>\n <AgentConfigPanel\n spec={agentSpec}\n model={model}\n models={catalog.models}\n modelsLoading={catalog.loading}\n modelsError={catalog.error}\n skills={catalog.skills}\n skillsAvailable={capabilities?.skill.enabled === true}\n instructions={instructionDraft}\n onOpenEditor={nextEditor => {\n if (canManageAgent) setEditor(nextEditor);\n }}\n onChange={updateSpec}\n disabled={!canManageAgent}\n onClose={showClose ? closeDrawer : undefined}\n />\n <AgentConfigEditors\n editor={editor}\n spec={agentSpec}\n models={catalog.models}\n connectors={catalog.connectors}\n skills={catalog.skills}\n loading={catalog.loading}\n error={catalog.error}\n skillsDisabled={capabilities?.skill.enabled !== true}\n sandboxAvailable={capabilities?.sandbox.enabled === true}\n instructions={instructionDraft}\n onInstructionsSave={saveInstructions}\n {...(server?.getMcpConnector === undefined ? {} : { loadMcpConnector })}\n loadMcpTools={loadMcpTools}\n onRefreshConnectors={catalog.refreshConnectors}\n onChange={updateSpec}\n onClose={() => setEditor(null)}\n />\n </>\n );\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs"]}
|