@truefoundry/trueforge-ui 0.3.0-rc.0 → 0.3.0-rc.2
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 +68 -0
- package/README.md +21 -6
- package/dist/AgentCodeSnippets-637HQUXD.js +74 -0
- package/dist/AgentCodeSnippets-637HQUXD.js.map +1 -0
- package/dist/AgentMetricChart-4FYECRIN.js +15 -0
- package/dist/AgentOverview-3FJ5EE6N.js +167 -0
- package/dist/AgentOverview-3FJ5EE6N.js.map +1 -0
- package/dist/AgentSessionEventTimeline-VELWUYPR.js +88 -0
- package/dist/AgentSessionEventTimeline-VELWUYPR.js.map +1 -0
- package/dist/AgentSessionEventTimelineChart-CUKETHWM.js +591 -0
- package/dist/AgentSessionEventTimelineChart-CUKETHWM.js.map +1 -0
- package/dist/AgentSessions-T7MOGOTZ.js +275 -0
- package/dist/AgentSessions-T7MOGOTZ.js.map +1 -0
- package/dist/{ConnectorSettings-FXQ5B7TN.js → ConnectorSettings-ESZ2RSRG.js} +19 -21
- package/dist/ConnectorSettings-ESZ2RSRG.js.map +1 -0
- package/dist/{DockLayout-LBNQJZNF.js → DockLayout-NLFNU6F2.js} +11 -10
- package/dist/{DockLayout-LBNQJZNF.js.map → DockLayout-NLFNU6F2.js.map} +1 -1
- package/dist/DrawerLayout-PR3SMKA6.js +184 -0
- package/dist/DrawerLayout-PR3SMKA6.js.map +1 -0
- package/dist/{ModelSettings-4L4LOQJA.js → ModelSettings-LYW64IRR.js} +20 -24
- package/dist/ModelSettings-LYW64IRR.js.map +1 -0
- package/dist/OpenUiFenceBlock-JEPNPJ7U.js +9 -0
- package/dist/OpenUiFenceBlock-JEPNPJ7U.js.map +1 -0
- package/dist/{SandboxSettings-Z4ZG6ZX4.js → SandboxSettings-DF64LHYI.js} +16 -18
- package/dist/SandboxSettings-DF64LHYI.js.map +1 -0
- package/dist/SchedulesPage-WQU4H25F.js +15 -0
- package/dist/SchedulesPage-WQU4H25F.js.map +1 -0
- package/dist/{SettingsBuilder-WF7ZWKQW.js → SettingsBuilder-LSXK2VN4.js} +26 -22
- package/dist/SettingsBuilder-LSXK2VN4.js.map +1 -0
- package/dist/ShellRouteSync-B22IAV2W.js +255 -0
- package/dist/ShellRouteSync-B22IAV2W.js.map +1 -0
- package/dist/SidebarLayout-XW6LXB7R.js +309 -0
- package/dist/SidebarLayout-XW6LXB7R.js.map +1 -0
- package/dist/{SkillSettings-3EPPC3IT.js → SkillSettings-64VXUO6J.js} +14 -15
- package/dist/SkillSettings-64VXUO6J.js.map +1 -0
- package/dist/{TrueForgeUIWithRouter-NZ4FGPE4.js → TrueForgeUIWithRouter-3TSLV22Q.js} +14 -10
- package/dist/{TrueForgeUIWithRouter-NZ4FGPE4.js.map → TrueForgeUIWithRouter-3TSLV22Q.js.map} +1 -1
- package/dist/{WidgetLayout-3QZ357FL.js → WidgetLayout-Q5P7PYSJ.js} +17 -13
- package/dist/WidgetLayout-Q5P7PYSJ.js.map +1 -0
- package/dist/chunk-5I2COQNL.js +119 -0
- package/dist/chunk-5I2COQNL.js.map +1 -0
- package/dist/chunk-BWHOZFIV.js +587 -0
- package/dist/chunk-BWHOZFIV.js.map +1 -0
- package/dist/chunk-DJUFS2BW.js +27 -0
- package/dist/chunk-DJUFS2BW.js.map +1 -0
- package/dist/chunk-FQK2XVVE.js +880 -0
- package/dist/chunk-FQK2XVVE.js.map +1 -0
- package/dist/chunk-G2TUAD65.js +555 -0
- package/dist/chunk-G2TUAD65.js.map +1 -0
- package/dist/chunk-GXYAOAK5.js +1357 -0
- package/dist/chunk-GXYAOAK5.js.map +1 -0
- package/dist/{chunk-FJ5RSSMA.js → chunk-H6WTY5PM.js} +196 -32
- package/dist/chunk-H6WTY5PM.js.map +1 -0
- package/dist/chunk-I3AL54MA.js +180 -0
- package/dist/chunk-I3AL54MA.js.map +1 -0
- package/dist/{chunk-WREC7D54.js → chunk-LGRHHFHN.js} +120 -32
- package/dist/chunk-LGRHHFHN.js.map +1 -0
- package/dist/chunk-NHHSZB5N.js +74 -0
- package/dist/chunk-NHHSZB5N.js.map +1 -0
- package/dist/{chunk-CFLVPV5M.js → chunk-QC42MLAK.js} +7 -2
- package/dist/chunk-QC42MLAK.js.map +1 -0
- package/dist/chunk-RDXBMTP5.js +32 -0
- package/dist/chunk-RDXBMTP5.js.map +1 -0
- package/dist/chunk-SFZNIO6U.js +18 -0
- package/dist/chunk-SFZNIO6U.js.map +1 -0
- package/dist/chunk-SQGT43Z3.js +200 -0
- package/dist/chunk-SQGT43Z3.js.map +1 -0
- package/dist/{chunk-B52K63AW.js → chunk-VJ7BZGAF.js} +2 -2
- package/dist/chunk-VUMGMGKZ.js +252 -0
- package/dist/chunk-VUMGMGKZ.js.map +1 -0
- package/dist/chunk-Y6S4OVVQ.js +16 -0
- package/dist/chunk-Y6S4OVVQ.js.map +1 -0
- package/dist/chunk-YQO2NMJ3.js +13341 -0
- package/dist/chunk-YQO2NMJ3.js.map +1 -0
- package/dist/{createTrueFoundryServer-B72bU-J7.d.ts → createTrueFoundryServer-CmZnBh_l.d.ts} +15 -4
- package/dist/index.d.ts +1024 -24
- package/dist/index.js +691 -67
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +552 -8
- package/dist/plugins/trueforge-agent-server-adapter/index.js +504 -188
- package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +9 -8
- package/dist/ConnectorSettings-FXQ5B7TN.js.map +0 -1
- package/dist/DrawerLayout-Q6UK4VMI.js +0 -159
- package/dist/DrawerLayout-Q6UK4VMI.js.map +0 -1
- package/dist/ModelSettings-4L4LOQJA.js.map +0 -1
- package/dist/OpenUiFenceBlock-6UIIAVBX.js +0 -9
- package/dist/SandboxSettings-Z4ZG6ZX4.js.map +0 -1
- package/dist/SettingsBuilder-WF7ZWKQW.js.map +0 -1
- package/dist/ShellRouteSync-T4WLY57Q.js +0 -172
- package/dist/ShellRouteSync-T4WLY57Q.js.map +0 -1
- package/dist/SidebarLayout-3WZ3CVON.js +0 -256
- package/dist/SidebarLayout-3WZ3CVON.js.map +0 -1
- package/dist/SkillSettings-3EPPC3IT.js.map +0 -1
- package/dist/WidgetLayout-3QZ357FL.js.map +0 -1
- package/dist/chunk-36KOSC2J.js +0 -567
- package/dist/chunk-36KOSC2J.js.map +0 -1
- package/dist/chunk-3S6KHO7H.js +0 -2121
- package/dist/chunk-3S6KHO7H.js.map +0 -1
- package/dist/chunk-7L63OK3O.js +0 -91
- package/dist/chunk-7L63OK3O.js.map +0 -1
- package/dist/chunk-CFLVPV5M.js.map +0 -1
- package/dist/chunk-FJ5RSSMA.js.map +0 -1
- package/dist/chunk-OSV3HI5M.js +0 -6891
- package/dist/chunk-OSV3HI5M.js.map +0 -1
- package/dist/chunk-WQULF5AT.js +0 -460
- package/dist/chunk-WQULF5AT.js.map +0 -1
- package/dist/chunk-WREC7D54.js.map +0 -1
- package/dist/chunk-YIWUG6MC.js +0 -101
- package/dist/chunk-YIWUG6MC.js.map +0 -1
- package/dist/chunk-ZXOADNF3.js +0 -75
- package/dist/chunk-ZXOADNF3.js.map +0 -1
- /package/dist/{OpenUiFenceBlock-6UIIAVBX.js.map → AgentMetricChart-4FYECRIN.js.map} +0 -0
- /package/dist/{chunk-B52K63AW.js.map → chunk-VJ7BZGAF.js.map} +0 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Tooltip,
|
|
3
|
+
useAgentConfigInstructions,
|
|
4
|
+
useNamedAgentHeaderState,
|
|
5
|
+
useSlot,
|
|
6
|
+
withInitialUserMessages
|
|
7
|
+
} from "./chunk-YQO2NMJ3.js";
|
|
8
|
+
import {
|
|
9
|
+
Icon,
|
|
10
|
+
auiButtonClass,
|
|
11
|
+
pageHeaderTitleClassName,
|
|
12
|
+
sidebarRailButtonClassName,
|
|
13
|
+
useDraftCatalog
|
|
14
|
+
} from "./chunk-H6WTY5PM.js";
|
|
15
|
+
import {
|
|
16
|
+
isSettingsChromeEnabled,
|
|
17
|
+
shellIsCreateAgent,
|
|
18
|
+
useOptionalCatalogServer,
|
|
19
|
+
useOptionalServer,
|
|
20
|
+
useOptionalShellMode,
|
|
21
|
+
useServerCapabilities,
|
|
22
|
+
useShellMode
|
|
23
|
+
} from "./chunk-FQK2XVVE.js";
|
|
24
|
+
import {
|
|
25
|
+
useAuiState
|
|
26
|
+
} from "./chunk-M6MHLVSO.js";
|
|
27
|
+
import {
|
|
28
|
+
cn,
|
|
29
|
+
useTheme
|
|
30
|
+
} from "./chunk-BWHOZFIV.js";
|
|
31
|
+
|
|
32
|
+
// src/atoms/NamedAgentHeaderLabel.tsx
|
|
33
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
34
|
+
function NamedAgentHeaderLabel({ className }) {
|
|
35
|
+
const state = useNamedAgentHeaderState();
|
|
36
|
+
const threadTitle = useAuiState((s) => s.threadListItem.title);
|
|
37
|
+
if (state === null) return null;
|
|
38
|
+
const syncedTitle = threadTitle?.trim() ?? "";
|
|
39
|
+
const displayName = state.allowThreadTitle && syncedTitle.length > 0 ? syncedTitle : state.name;
|
|
40
|
+
return /* @__PURE__ */ jsxs("h1", { className: cn("flex min-w-0 items-center gap-1.5", pageHeaderTitleClassName, className), children: [
|
|
41
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", title: displayName, children: displayName }),
|
|
42
|
+
state.isEditing ? /* @__PURE__ */ jsx(Tooltip, { content: "Try changes here, then choose Update agent to save.", side: "bottom", children: /* @__PURE__ */ jsxs("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", children: [
|
|
43
|
+
/* @__PURE__ */ jsx(Icon, { name: "pencil", className: "size-3" }),
|
|
44
|
+
"Editing"
|
|
45
|
+
] }) }) : null
|
|
46
|
+
] });
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// src/atoms/ShellActions.tsx
|
|
50
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
51
|
+
function ShellActions({ className, labeled = false }) {
|
|
52
|
+
const shell = useOptionalShellMode();
|
|
53
|
+
const catalog = useOptionalCatalogServer();
|
|
54
|
+
const capabilities = useServerCapabilities();
|
|
55
|
+
const { mode, setTheme } = useTheme();
|
|
56
|
+
const ActionSlot = useSlot("ShellActionsActionSlot");
|
|
57
|
+
const isDark = mode === "dark";
|
|
58
|
+
const themeLabel = isDark ? "Light" : "Dark";
|
|
59
|
+
const settingsChromeEnabled = isSettingsChromeEnabled({ catalog, capabilities });
|
|
60
|
+
const hoverClass = "hover:bg-secondary-button-hover hover:text-ghost-button-text";
|
|
61
|
+
return /* @__PURE__ */ jsxs2(
|
|
62
|
+
"div",
|
|
63
|
+
{
|
|
64
|
+
className: cn(
|
|
65
|
+
"flex shrink-0 items-center gap-1",
|
|
66
|
+
labeled ? "w-full flex-col items-center gap-1 text-sidebar-text" : "text-text-primary",
|
|
67
|
+
className
|
|
68
|
+
),
|
|
69
|
+
children: [
|
|
70
|
+
/* @__PURE__ */ jsxs2(
|
|
71
|
+
"button",
|
|
72
|
+
{
|
|
73
|
+
type: "button",
|
|
74
|
+
"aria-label": isDark ? "Switch to light theme" : "Switch to dark theme",
|
|
75
|
+
title: isDark ? "Light theme" : "Dark theme",
|
|
76
|
+
className: auiButtonClass({
|
|
77
|
+
variant: "ghost",
|
|
78
|
+
size: labeled ? void 0 : "icon",
|
|
79
|
+
className: cn(hoverClass, labeled && sidebarRailButtonClassName)
|
|
80
|
+
}),
|
|
81
|
+
onClick: () => setTheme(isDark ? "light" : "dark"),
|
|
82
|
+
children: [
|
|
83
|
+
/* @__PURE__ */ jsx2(Icon, { name: isDark ? "sun" : "moon", size: labeled ? 14 : void 0 }),
|
|
84
|
+
labeled ? /* @__PURE__ */ jsx2("span", { className: "text-center", children: themeLabel }) : null
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
),
|
|
88
|
+
shell != null && settingsChromeEnabled ? /* @__PURE__ */ jsxs2(
|
|
89
|
+
"button",
|
|
90
|
+
{
|
|
91
|
+
type: "button",
|
|
92
|
+
"aria-label": "Settings",
|
|
93
|
+
title: "Settings",
|
|
94
|
+
"aria-expanded": shell.settingsOpen,
|
|
95
|
+
"aria-current": shell.settingsOpen ? "page" : void 0,
|
|
96
|
+
className: auiButtonClass({
|
|
97
|
+
variant: "ghost",
|
|
98
|
+
size: labeled ? void 0 : "icon",
|
|
99
|
+
className: cn(
|
|
100
|
+
hoverClass,
|
|
101
|
+
labeled && sidebarRailButtonClassName,
|
|
102
|
+
shell.settingsOpen && "bg-primary-button-bg font-medium text-primary-button-text hover:bg-primary-button-hover hover:text-primary-button-text"
|
|
103
|
+
)
|
|
104
|
+
}),
|
|
105
|
+
onClick: () => shell.setSettingsOpen(true),
|
|
106
|
+
children: [
|
|
107
|
+
/* @__PURE__ */ jsx2(Icon, { name: "settings", size: labeled ? 14 : void 0 }),
|
|
108
|
+
labeled ? /* @__PURE__ */ jsx2("span", { className: "text-center", children: "Settings" }) : null
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
) : null,
|
|
112
|
+
/* @__PURE__ */ jsx2(ActionSlot, {})
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// src/containers/AgentConfigDrawerContainer.tsx
|
|
119
|
+
import {
|
|
120
|
+
useTrueFoundryAgentSpec,
|
|
121
|
+
useTrueFoundryFlushAgentSpec,
|
|
122
|
+
useTrueFoundryUpdateAgentSpec
|
|
123
|
+
} from "@truefoundry/assistant-ui-runtime";
|
|
124
|
+
import { useCallback, useEffect, useState } from "react";
|
|
125
|
+
import { Fragment, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
126
|
+
function AgentConfigDrawerContainer({ showClose = false }) {
|
|
127
|
+
const { agentSpec } = useTrueFoundryAgentSpec();
|
|
128
|
+
const updateAgentSpec = useTrueFoundryUpdateAgentSpec();
|
|
129
|
+
const flushAgentSpec = useTrueFoundryFlushAgentSpec();
|
|
130
|
+
const shell = useShellMode();
|
|
131
|
+
const server = useOptionalServer();
|
|
132
|
+
const capabilities = useServerCapabilities();
|
|
133
|
+
const catalog = useDraftCatalog();
|
|
134
|
+
const AgentConfigPanel = useSlot("AgentConfigPanel");
|
|
135
|
+
const AgentConfigEditors = useSlot("AgentConfigEditors");
|
|
136
|
+
const [editor, setEditor] = useState(null);
|
|
137
|
+
const isBuilder = shellIsCreateAgent(shell.mode);
|
|
138
|
+
const { draft: instructionDraft, flush: flushInstructions } = useAgentConfigInstructions();
|
|
139
|
+
const closeDrawer = useCallback(() => {
|
|
140
|
+
flushInstructions();
|
|
141
|
+
void flushAgentSpec();
|
|
142
|
+
shell.setAgentConfigOpen(false);
|
|
143
|
+
}, [flushAgentSpec, flushInstructions, shell]);
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
if (isBuilder) catalog.ensureLoaded();
|
|
146
|
+
}, [catalog, isBuilder]);
|
|
147
|
+
useEffect(() => {
|
|
148
|
+
if (!showClose || !shell.agentConfigOpen) return;
|
|
149
|
+
const onKeyDown = (event) => {
|
|
150
|
+
if (event.key === "Escape" && editor === null && document.querySelector("dialog[open]") === null) {
|
|
151
|
+
closeDrawer();
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
window.addEventListener("keydown", onKeyDown);
|
|
155
|
+
return () => window.removeEventListener("keydown", onKeyDown);
|
|
156
|
+
}, [closeDrawer, editor, shell.agentConfigOpen, showClose]);
|
|
157
|
+
useEffect(
|
|
158
|
+
() => () => {
|
|
159
|
+
flushInstructions();
|
|
160
|
+
try {
|
|
161
|
+
void flushAgentSpec();
|
|
162
|
+
} catch {
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
[flushAgentSpec, flushInstructions]
|
|
166
|
+
);
|
|
167
|
+
const commitSpec = useCallback(
|
|
168
|
+
({ next, instructions }) => {
|
|
169
|
+
if (next.skills && next.skills.length > 0 && capabilities?.sandbox.enabled === true) {
|
|
170
|
+
updateAgentSpec?.({
|
|
171
|
+
...next,
|
|
172
|
+
instructions: instructions || void 0,
|
|
173
|
+
config: {
|
|
174
|
+
...next.config,
|
|
175
|
+
sandbox: { ...next.config?.sandbox, enabled: true }
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
updateAgentSpec?.({ ...next, instructions: instructions || void 0 });
|
|
181
|
+
},
|
|
182
|
+
[capabilities?.sandbox.enabled, updateAgentSpec]
|
|
183
|
+
);
|
|
184
|
+
const updateSpec = useCallback(
|
|
185
|
+
(next) => {
|
|
186
|
+
commitSpec({ next, instructions: instructionDraft });
|
|
187
|
+
},
|
|
188
|
+
[commitSpec, instructionDraft]
|
|
189
|
+
);
|
|
190
|
+
const saveInstructions = useCallback(
|
|
191
|
+
(draft) => {
|
|
192
|
+
if (agentSpec === null) return;
|
|
193
|
+
commitSpec({
|
|
194
|
+
next: withInitialUserMessages({ spec: agentSpec, messages: draft.messages }),
|
|
195
|
+
instructions: draft.instructions
|
|
196
|
+
});
|
|
197
|
+
},
|
|
198
|
+
[agentSpec, commitSpec]
|
|
199
|
+
);
|
|
200
|
+
const loadMcpTools = useCallback(
|
|
201
|
+
async (connectorId) => {
|
|
202
|
+
if (server?.getMcpTools === void 0) return [];
|
|
203
|
+
return server.getMcpTools({ connectorId });
|
|
204
|
+
},
|
|
205
|
+
[server]
|
|
206
|
+
);
|
|
207
|
+
if (!isBuilder || agentSpec === null || showClose && !shell.agentConfigOpen) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
const model = catalog.models.find((item) => item.name === agentSpec.model.name);
|
|
211
|
+
return /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
212
|
+
/* @__PURE__ */ jsx3(
|
|
213
|
+
AgentConfigPanel,
|
|
214
|
+
{
|
|
215
|
+
spec: agentSpec,
|
|
216
|
+
model,
|
|
217
|
+
skillsAvailable: capabilities?.skill.enabled === true,
|
|
218
|
+
instructions: instructionDraft,
|
|
219
|
+
onOpenEditor: setEditor,
|
|
220
|
+
onChange: updateSpec,
|
|
221
|
+
onClose: showClose ? closeDrawer : void 0
|
|
222
|
+
}
|
|
223
|
+
),
|
|
224
|
+
/* @__PURE__ */ jsx3(
|
|
225
|
+
AgentConfigEditors,
|
|
226
|
+
{
|
|
227
|
+
editor,
|
|
228
|
+
spec: agentSpec,
|
|
229
|
+
models: catalog.models,
|
|
230
|
+
connectors: catalog.connectors,
|
|
231
|
+
skills: catalog.skills,
|
|
232
|
+
loading: catalog.loading,
|
|
233
|
+
error: catalog.error,
|
|
234
|
+
skillsDisabled: capabilities?.skill.enabled !== true,
|
|
235
|
+
sandboxAvailable: capabilities?.sandbox.enabled === true,
|
|
236
|
+
instructions: instructionDraft,
|
|
237
|
+
onInstructionsSave: saveInstructions,
|
|
238
|
+
loadMcpTools,
|
|
239
|
+
onRefreshConnectors: catalog.refreshConnectors,
|
|
240
|
+
onChange: updateSpec,
|
|
241
|
+
onClose: () => setEditor(null)
|
|
242
|
+
}
|
|
243
|
+
)
|
|
244
|
+
] });
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export {
|
|
248
|
+
NamedAgentHeaderLabel,
|
|
249
|
+
ShellActions,
|
|
250
|
+
AgentConfigDrawerContainer
|
|
251
|
+
};
|
|
252
|
+
//# sourceMappingURL=chunk-VUMGMGKZ.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 <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 { useOptionalServer, useServerCapabilities } from '../server/ServerContext.js';\nimport { shellIsCreateAgent, useShellMode } from '../server/ShellModeContext.js';\nimport type { AgentSpec, 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 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 (!showClose || !shell.agentConfigOpen) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && editor === null && document.querySelector('dialog[open]') === null) {\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 (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 [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\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 skillsAvailable={capabilities?.skill.enabled === true}\n instructions={instructionDraft}\n onOpenEditor={setEditor}\n onChange={updateSpec}\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 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"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// src/routing/ResolvedRoutesContext.tsx
|
|
2
|
+
import { createContext, useContext } from "react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
var ResolvedRoutesContext = createContext(null);
|
|
5
|
+
function ResolvedRoutesProvider({ routes, children }) {
|
|
6
|
+
return /* @__PURE__ */ jsx(ResolvedRoutesContext.Provider, { value: routes, children });
|
|
7
|
+
}
|
|
8
|
+
function useOptionalResolvedRoutes() {
|
|
9
|
+
return useContext(ResolvedRoutesContext);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
ResolvedRoutesProvider,
|
|
14
|
+
useOptionalResolvedRoutes
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=chunk-Y6S4OVVQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/routing/ResolvedRoutesContext.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, type ReactNode } from 'react';\n\nimport type { ResolvedRoutes } from './types.js';\n\nconst ResolvedRoutesContext = createContext<ResolvedRoutes | null>(null);\n\n/** Present only when the shell is mounted under `withRouter`. */\nexport function ResolvedRoutesProvider({ routes, children }: { routes: ResolvedRoutes; children: ReactNode }) {\n return <ResolvedRoutesContext.Provider value={routes}>{children}</ResolvedRoutesContext.Provider>;\n}\n\nexport function useOptionalResolvedRoutes(): ResolvedRoutes | null {\n return useContext(ResolvedRoutesContext);\n}\n"],"mappings":";AAEA,SAAS,eAAe,kBAAkC;AAQjD;AAJT,IAAM,wBAAwB,cAAqC,IAAI;AAGhE,SAAS,uBAAuB,EAAE,QAAQ,SAAS,GAAoD;AAC5G,SAAO,oBAAC,sBAAsB,UAAtB,EAA+B,OAAO,QAAS,UAAS;AAClE;AAEO,SAAS,4BAAmD;AACjE,SAAO,WAAW,qBAAqB;AACzC;","names":[]}
|