@truefoundry/trueforge-ui 0.3.0-rc.1 → 0.3.0-rc.11

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 (112) hide show
  1. package/CHANGELOG.md +156 -0
  2. package/README.md +23 -8
  3. package/dist/{AgentCodeSnippets-NZOFJE57.js → AgentCodeSnippets-CHDVZHHK.js} +38 -23
  4. package/dist/AgentCodeSnippets-CHDVZHHK.js.map +1 -0
  5. package/dist/AgentMetricChart-6RGWFMJE.js +15 -0
  6. package/dist/AgentOverview-3LJZ6MO7.js +311 -0
  7. package/dist/AgentOverview-3LJZ6MO7.js.map +1 -0
  8. package/dist/{AgentSessionEventTimeline-26Z6IB3B.js → AgentSessionEventTimeline-5GOJKT7D.js} +19 -10
  9. package/dist/AgentSessionEventTimeline-5GOJKT7D.js.map +1 -0
  10. package/dist/{AgentSessionEventTimelineChart-CGCU7WBK.js → AgentSessionEventTimelineChart-UYG3JQMP.js} +144 -57
  11. package/dist/AgentSessionEventTimelineChart-UYG3JQMP.js.map +1 -0
  12. package/dist/{AgentSessions-3MPDZASK.js → AgentSessions-KUABCQ4W.js} +140 -27
  13. package/dist/AgentSessions-KUABCQ4W.js.map +1 -0
  14. package/dist/{ConnectorSettings-MXFRWWR6.js → ConnectorSettings-PED5C2P7.js} +162 -126
  15. package/dist/ConnectorSettings-PED5C2P7.js.map +1 -0
  16. package/dist/{DockLayout-LM4AFMFY.js → DockLayout-ACM7BVIH.js} +10 -10
  17. package/dist/{DrawerLayout-JR3O6RRB.js → DrawerLayout-SGBYRKHI.js} +14 -12
  18. package/dist/DrawerLayout-SGBYRKHI.js.map +1 -0
  19. package/dist/{ModelSettings-G7IFNC2Y.js → ModelSettings-GJTVFXFY.js} +22 -28
  20. package/dist/ModelSettings-GJTVFXFY.js.map +1 -0
  21. package/dist/OpenUiFenceBlock-MJTC2VJ5.js +9 -0
  22. package/dist/{SandboxSettings-NXAANMAX.js → SandboxSettings-VETQ7UPE.js} +17 -21
  23. package/dist/SandboxSettings-VETQ7UPE.js.map +1 -0
  24. package/dist/SchedulesPage-LHJ3U2VM.js +15 -0
  25. package/dist/{SettingsBuilder-L34IQ56S.js → SettingsBuilder-5ZCU66FF.js} +9 -9
  26. package/dist/{SettingsBuilder-L34IQ56S.js.map → SettingsBuilder-5ZCU66FF.js.map} +1 -1
  27. package/dist/{ShellRouteSync-CEBETGEJ.js → ShellRouteSync-SJXFKUAJ.js} +171 -26
  28. package/dist/ShellRouteSync-SJXFKUAJ.js.map +1 -0
  29. package/dist/{SidebarLayout-A2HJPPHS.js → SidebarLayout-TR5CAB6Q.js} +80 -58
  30. package/dist/SidebarLayout-TR5CAB6Q.js.map +1 -0
  31. package/dist/{SkillSettings-FGGMSUNO.js → SkillSettings-TRTY2YH3.js} +24 -22
  32. package/dist/SkillSettings-TRTY2YH3.js.map +1 -0
  33. package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js → TrueForgeUIWithRouter-GZUSRZIR.js} +9 -9
  34. package/dist/{WidgetLayout-6QM45OQQ.js → WidgetLayout-2TM6I4LJ.js} +10 -10
  35. package/dist/{chunk-U7KURWW3.js → chunk-2GIZY3JJ.js} +276 -54
  36. package/dist/chunk-2GIZY3JJ.js.map +1 -0
  37. package/dist/{chunk-ZKNUMH2M.js → chunk-2MUK3SMR.js} +13 -11
  38. package/dist/chunk-2MUK3SMR.js.map +1 -0
  39. package/dist/{chunk-WVE3F724.js → chunk-2QTH6JHX.js} +21 -4
  40. package/dist/chunk-2QTH6JHX.js.map +1 -0
  41. package/dist/{chunk-XAU7QFG3.js → chunk-5N5V7YLO.js} +72 -256
  42. package/dist/chunk-5N5V7YLO.js.map +1 -0
  43. package/dist/{chunk-CYHJDKFB.js → chunk-75YEQUUD.js} +189 -52
  44. package/dist/chunk-75YEQUUD.js.map +1 -0
  45. package/dist/{chunk-QC42MLAK.js → chunk-7AAO4UDQ.js} +4 -3
  46. package/dist/chunk-7AAO4UDQ.js.map +1 -0
  47. package/dist/{chunk-M62XY4NC.js → chunk-BXG6XN2S.js} +235 -108
  48. package/dist/chunk-BXG6XN2S.js.map +1 -0
  49. package/dist/chunk-GKXDRULM.js +587 -0
  50. package/dist/chunk-GKXDRULM.js.map +1 -0
  51. package/dist/{chunk-ZTMKFZQ3.js → chunk-OH357IHR.js} +5572 -3367
  52. package/dist/chunk-OH357IHR.js.map +1 -0
  53. package/dist/{chunk-DMMZSZTN.js → chunk-P6MZDITS.js} +60 -16
  54. package/dist/chunk-P6MZDITS.js.map +1 -0
  55. package/dist/{chunk-MPNSO7E6.js → chunk-SLMFEG7X.js} +2 -2
  56. package/dist/chunk-T6QQV5LK.js +238 -0
  57. package/dist/chunk-T6QQV5LK.js.map +1 -0
  58. package/dist/{chunk-6O6FWUDW.js → chunk-UWLL327M.js} +641 -388
  59. package/dist/chunk-UWLL327M.js.map +1 -0
  60. package/dist/{chunk-FJW36PD7.js → chunk-VAOCM3QQ.js} +28 -24
  61. package/dist/chunk-VAOCM3QQ.js.map +1 -0
  62. package/dist/chunk-Y7O6CMC7.js +517 -0
  63. package/dist/chunk-Y7O6CMC7.js.map +1 -0
  64. package/dist/{createTrueFoundryServer-CmZnBh_l.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +8 -5
  65. package/dist/index.d.ts +377 -108
  66. package/dist/index.js +69 -488
  67. package/dist/index.js.map +1 -1
  68. package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +49 -14
  69. package/dist/plugins/trueforge-agent-server-adapter/index.js +161 -60
  70. package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
  71. package/dist/styles.css +1 -1
  72. package/package.json +5 -4
  73. package/dist/AgentCodeSnippets-NZOFJE57.js.map +0 -1
  74. package/dist/AgentMetricChart-JPU3MFQ2.js +0 -15
  75. package/dist/AgentOverview-EEBHJC32.js +0 -167
  76. package/dist/AgentOverview-EEBHJC32.js.map +0 -1
  77. package/dist/AgentSessionEventTimeline-26Z6IB3B.js.map +0 -1
  78. package/dist/AgentSessionEventTimelineChart-CGCU7WBK.js.map +0 -1
  79. package/dist/AgentSessions-3MPDZASK.js.map +0 -1
  80. package/dist/ConnectorSettings-MXFRWWR6.js.map +0 -1
  81. package/dist/DrawerLayout-JR3O6RRB.js.map +0 -1
  82. package/dist/ModelSettings-G7IFNC2Y.js.map +0 -1
  83. package/dist/OpenUiFenceBlock-2TV5TQ6P.js +0 -9
  84. package/dist/SandboxSettings-NXAANMAX.js.map +0 -1
  85. package/dist/SchedulesPage-KKLUDO6B.js +0 -15
  86. package/dist/ShellRouteSync-CEBETGEJ.js.map +0 -1
  87. package/dist/SidebarLayout-A2HJPPHS.js.map +0 -1
  88. package/dist/SkillSettings-FGGMSUNO.js.map +0 -1
  89. package/dist/chunk-2XPPBEYF.js +0 -74
  90. package/dist/chunk-2XPPBEYF.js.map +0 -1
  91. package/dist/chunk-6O6FWUDW.js.map +0 -1
  92. package/dist/chunk-7Z2C2K7F.js +0 -578
  93. package/dist/chunk-7Z2C2K7F.js.map +0 -1
  94. package/dist/chunk-CYHJDKFB.js.map +0 -1
  95. package/dist/chunk-DMMZSZTN.js.map +0 -1
  96. package/dist/chunk-FJW36PD7.js.map +0 -1
  97. package/dist/chunk-M62XY4NC.js.map +0 -1
  98. package/dist/chunk-QC42MLAK.js.map +0 -1
  99. package/dist/chunk-SFZNIO6U.js +0 -18
  100. package/dist/chunk-SFZNIO6U.js.map +0 -1
  101. package/dist/chunk-U7KURWW3.js.map +0 -1
  102. package/dist/chunk-WVE3F724.js.map +0 -1
  103. package/dist/chunk-XAU7QFG3.js.map +0 -1
  104. package/dist/chunk-ZKNUMH2M.js.map +0 -1
  105. package/dist/chunk-ZTMKFZQ3.js.map +0 -1
  106. /package/dist/{AgentMetricChart-JPU3MFQ2.js.map → AgentMetricChart-6RGWFMJE.js.map} +0 -0
  107. /package/dist/{DockLayout-LM4AFMFY.js.map → DockLayout-ACM7BVIH.js.map} +0 -0
  108. /package/dist/{OpenUiFenceBlock-2TV5TQ6P.js.map → OpenUiFenceBlock-MJTC2VJ5.js.map} +0 -0
  109. /package/dist/{SchedulesPage-KKLUDO6B.js.map → SchedulesPage-LHJ3U2VM.js.map} +0 -0
  110. /package/dist/{TrueForgeUIWithRouter-MZVJWJMB.js.map → TrueForgeUIWithRouter-GZUSRZIR.js.map} +0 -0
  111. /package/dist/{WidgetLayout-6QM45OQQ.js.map → WidgetLayout-2TM6I4LJ.js.map} +0 -0
  112. /package/dist/{chunk-MPNSO7E6.js.map → chunk-SLMFEG7X.js.map} +0 -0
package/dist/index.js CHANGED
@@ -1,5 +1,9 @@
1
1
  "use client";
2
2
  import {
3
+ ThreadListContainer
4
+ } from "./chunk-Y7O6CMC7.js";
5
+ import {
6
+ ApprovalNavContainer,
3
7
  AskUserContainer,
4
8
  ComposerContainer,
5
9
  CustomActionContainer,
@@ -10,13 +14,14 @@ import {
10
14
  ThreadContainer,
11
15
  UserEditComposerContainer,
12
16
  threadHasPendingMcpAuth,
17
+ useApprovalNav,
13
18
  useComposerPauseView
14
- } from "./chunk-M62XY4NC.js";
19
+ } from "./chunk-BXG6XN2S.js";
15
20
  import {
16
21
  ServerInitLoader,
17
22
  TrueForgeUIShell,
18
23
  TrueFoundryChatProvider
19
- } from "./chunk-CYHJDKFB.js";
24
+ } from "./chunk-75YEQUUD.js";
20
25
  import "./chunk-DJUFS2BW.js";
21
26
  import {
22
27
  ComposerBusyProvider,
@@ -26,19 +31,10 @@ import {
26
31
  } from "./chunk-BSIPI3KV.js";
27
32
  import {
28
33
  AgentMetricChart
29
- } from "./chunk-ZKNUMH2M.js";
30
- import {
31
- ScheduleFormDrawer,
32
- ScheduleFormFields,
33
- ScheduleLastRunsCell,
34
- ScheduleRunChip,
35
- ScheduleStatusBadge,
36
- SchedulesPage,
37
- TestScheduleScreen
38
- } from "./chunk-6O6FWUDW.js";
34
+ } from "./chunk-2MUK3SMR.js";
39
35
  import {
40
36
  createTrueFoundryServer
41
- } from "./chunk-QC42MLAK.js";
37
+ } from "./chunk-7AAO4UDQ.js";
42
38
  import "./chunk-Y6S4OVVQ.js";
43
39
  import {
44
40
  IS_CREATE_AGENT_METADATA_KEY,
@@ -46,11 +42,21 @@ import {
46
42
  readSessionIsCreateAgent,
47
43
  sessionIsCreateAgent
48
44
  } from "./chunk-RDXBMTP5.js";
45
+ import {
46
+ ScheduleFormDrawer,
47
+ ScheduleFormFields,
48
+ ScheduleLastRunsCell,
49
+ ScheduleRunChip,
50
+ ScheduleStatusBadge,
51
+ SchedulesPage,
52
+ TestScheduleScreen
53
+ } from "./chunk-UWLL327M.js";
49
54
  import {
50
55
  AgentCodeBlock,
51
56
  AgentConfigEditors,
52
57
  AgentConfigPanel,
53
58
  AgentConfigSection,
59
+ AgentCustomParametersEditor,
54
60
  AgentDetailsHeader,
55
61
  AgentDetailsPage,
56
62
  AgentDetailsTabs,
@@ -58,6 +64,7 @@ import {
58
64
  AgentInstructionsDrawer,
59
65
  AgentMcpEditorContent,
60
66
  AgentMetricCard,
67
+ AgentMetricStatistics,
61
68
  AgentMetricsContainer,
62
69
  AgentMetricsTimeRangeFilter,
63
70
  AgentMetricsView,
@@ -67,8 +74,8 @@ import {
67
74
  AgentOverviewCard,
68
75
  AgentResourceConfigModal,
69
76
  AgentResourceEditorContent,
77
+ AgentRuntimeConfigDrawer,
70
78
  AgentRuntimeConfigFields,
71
- AgentRuntimeConfigModal,
72
79
  AgentRuntimeEditorContent,
73
80
  AgentSessionsFilters,
74
81
  AgentSkillsEditorContent,
@@ -76,6 +83,7 @@ import {
76
83
  AgentStepsContainer,
77
84
  AgentsLibrary,
78
85
  AgentsLibraryButton,
86
+ ApprovalNavBanner,
79
87
  AssistantMessageBubble,
80
88
  AssistantMessageContainer,
81
89
  AssistantTextContainer,
@@ -87,6 +95,7 @@ import {
87
95
  AvatarImage,
88
96
  BottomSheet,
89
97
  BrandLogo,
98
+ Button,
90
99
  CenteredModal,
91
100
  ChatFileDownload,
92
101
  ClearChatButton,
@@ -100,11 +109,11 @@ import {
100
109
  DEFAULT_TABLE_PAGE_SIZE,
101
110
  DraftAgentConfigTrigger,
102
111
  DraftCapabilitiesPanel,
112
+ DraftComposerActionsMenu,
103
113
  DraftComposerLeftSection,
104
114
  DraftComposerRightSection,
105
115
  DraftCompositeSelector,
106
116
  DraftModelSelector,
107
- DropdownMenuItem,
108
117
  HistoryLoader,
109
118
  MCP_AUTH_POPUP_CHANNEL,
110
119
  Markdown,
@@ -116,17 +125,17 @@ import {
116
125
  MessageListSkeleton,
117
126
  MessageTimestamp,
118
127
  MonacoEditorCore,
128
+ PermissionGuard,
119
129
  PopoverSelect,
120
130
  ReasoningContainer,
131
+ ResponsiveDropdownMenu,
121
132
  ResumeUnavailable,
122
133
  SandboxArtifactDownload,
123
134
  SandboxToolCallCard,
124
135
  SaveAgentButton,
125
136
  SaveAgentForm,
126
- SaveAgentFormFields,
127
137
  SchedulesButton,
128
138
  ScrollToBottomButton,
129
- SearchInput_default,
130
139
  SelectAgentEmptyState,
131
140
  SessionsBrowserButton,
132
141
  SessionsPage,
@@ -164,43 +173,39 @@ import {
164
173
  ToolCallContentBlockContainer,
165
174
  ToolGroupCard,
166
175
  USER_MESSAGE_ATTACHMENT_PREVIEW_REM,
176
+ UserAvatar,
167
177
  UserMessageActionBar,
168
178
  UserMessageBubble,
169
179
  UserMessageContainer,
170
180
  UserMessageEdit,
171
181
  WelcomeScreen,
172
- canReuseMutableShell,
173
182
  computeAgentStepsSplit,
174
183
  defaultSlots,
184
+ findSubAgentAncestorsForApproval,
175
185
  preloadMarkdownOpenUI,
176
- readThreadAgentName,
177
186
  resolveBrandChrome,
178
- themePortalRoot,
179
- threadListIndicesByRecency,
180
- threadListItemIsMutable,
181
187
  useBrandName,
182
- useIsMobile,
188
+ useCanCreateAgent,
183
189
  useMCPAuth,
184
- useSearchAgentsList,
190
+ useOptionalCurrentUser,
191
+ useResourcePermissions,
185
192
  useSlot,
186
193
  useThemeMode,
187
194
  useToaster,
188
195
  useToasterOptional
189
- } from "./chunk-ZTMKFZQ3.js";
190
- import "./chunk-2XPPBEYF.js";
196
+ } from "./chunk-OH357IHR.js";
197
+ import "./chunk-T6QQV5LK.js";
191
198
  import {
192
199
  DraftCatalogProvider,
193
200
  Icon,
194
- auiButtonClass,
195
- getErrorMessage,
196
201
  registerIcons,
197
- useCompactLayout,
198
202
  useDraftCatalog
199
- } from "./chunk-XAU7QFG3.js";
203
+ } from "./chunk-5N5V7YLO.js";
200
204
  import {
201
205
  DEFAULT_AGENT_CONFIG,
202
206
  ServerProvider,
203
207
  ShellModeProvider,
208
+ getErrorMessage,
204
209
  libraryAgentId,
205
210
  shellIsCreateAgent,
206
211
  shellIsMutable,
@@ -210,6 +215,7 @@ import {
210
215
  useOptionalAgentMetricsServer,
211
216
  useOptionalAgentSessionsServer,
212
217
  useOptionalCatalogServer,
218
+ useOptionalPermissionsServer,
213
219
  useOptionalScheduleServer,
214
220
  useOptionalServer,
215
221
  useOptionalShellMode,
@@ -217,25 +223,24 @@ import {
217
223
  useServer,
218
224
  useServerCapabilities,
219
225
  useShellMode
220
- } from "./chunk-U7KURWW3.js";
226
+ } from "./chunk-2GIZY3JJ.js";
221
227
  import {
222
228
  useAui,
223
229
  useAuiState
224
230
  } from "./chunk-M6MHLVSO.js";
225
231
  import {
226
232
  OpenUiFenceBlock
227
- } from "./chunk-MPNSO7E6.js";
233
+ } from "./chunk-SLMFEG7X.js";
228
234
  import {
229
235
  PRESETS,
230
236
  ThemeProvider,
231
- cn,
232
237
  resolvePresetTokens,
233
238
  useBrand,
234
239
  useContentClassNames,
235
240
  useOptionalContentClassNames,
236
241
  useTheme,
237
242
  useThemeIcons
238
- } from "./chunk-7Z2C2K7F.js";
243
+ } from "./chunk-GKXDRULM.js";
239
244
 
240
245
  // src/icons/agent-2.svg
241
246
  import * as React from "react";
@@ -399,454 +404,14 @@ var PostMcpOauthScreen = () => {
399
404
  };
400
405
  var PostMcpOauthScreen_default = PostMcpOauthScreen;
401
406
 
402
- // src/containers/ThreadListContainer.tsx
403
- import {
404
- ThreadListItemByIndexProvider,
405
- ThreadListItemMorePrimitive,
406
- ThreadListItemPrimitive,
407
- ThreadListPrimitive,
408
- useAui as useAui2,
409
- useAuiState as useAuiState2
410
- } from "@assistant-ui/react";
411
- import { useCallback, useEffect as useEffect3, useMemo, useRef as useRef2, useState as useState3 } from "react";
412
-
413
- // src/atoms/AgentHistoryFilterButton.tsx
414
- import { useEffect as useEffect2, useId, useLayoutEffect, useRef, useState as useState2 } from "react";
415
- import { createPortal } from "react-dom";
416
- import { Fragment, jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
417
- function AgentHistoryFilterButton() {
418
- const shell = useOptionalShellMode();
419
- const server = useOptionalServer();
420
- const isMobile = useIsMobile();
421
- const compact = useCompactLayout();
422
- const useSheet = isMobile || compact;
423
- const [open, setOpen] = useState2(false);
424
- const [query, setQuery] = useState2("");
425
- const [menuPos, setMenuPos] = useState2(null);
426
- const buttonRef = useRef(null);
427
- const menuRef = useRef(null);
428
- const menuId = useId();
429
- const enabled = shell?.isLibraryEnabled === true && server != null;
430
- const selected = shell?.historyAgentFilter ?? null;
431
- useEffect2(() => {
432
- if (!open) setQuery("");
433
- }, [open]);
434
- const { agents, isInitialLoading, isSearching, loadingMore, hasMore, listRef, sentinelRef } = useSearchAgentsList({
435
- enabled: open && enabled,
436
- query
437
- });
438
- useLayoutEffect(() => {
439
- if (!open || useSheet) {
440
- setMenuPos(null);
441
- return;
442
- }
443
- const update = () => {
444
- const rect = buttonRef.current?.getBoundingClientRect();
445
- if (!rect) return;
446
- setMenuPos({ top: rect.top, left: rect.right + 4 });
447
- };
448
- update();
449
- window.addEventListener("resize", update);
450
- window.addEventListener("scroll", update, true);
451
- return () => {
452
- window.removeEventListener("resize", update);
453
- window.removeEventListener("scroll", update, true);
454
- };
455
- }, [open, useSheet]);
456
- useEffect2(() => {
457
- if (!open || useSheet) return;
458
- const handler = (e) => {
459
- const target = e.target;
460
- if (buttonRef.current?.contains(target) || menuRef.current?.contains(target)) return;
461
- setOpen(false);
462
- };
463
- document.addEventListener("mousedown", handler);
464
- return () => document.removeEventListener("mousedown", handler);
465
- }, [open, useSheet]);
466
- if (!enabled) return null;
467
- const pick = (agentId) => {
468
- shell?.setHistoryAgentFilter(agentId);
469
- setOpen(false);
470
- };
471
- const filterBody = /* @__PURE__ */ jsxs7(Fragment, { children: [
472
- /* @__PURE__ */ jsxs7("div", { className: "p-1", onMouseDown: (e) => e.stopPropagation(), children: [
473
- /* @__PURE__ */ jsx11(SearchInput_default, { query, setQuery, placeholder: "Search agents" }),
474
- isSearching ? /* @__PURE__ */ jsx11("p", { className: "text-text-secondary px-1 pt-1 text-[11px]", role: "status", children: "Searching\u2026" }) : null
475
- ] }),
476
- /* @__PURE__ */ jsxs7(
477
- "div",
478
- {
479
- ref: listRef,
480
- className: cn("mt-1 overflow-y-auto", useSheet ? "min-h-0 flex-1 px-1 pb-2" : "min-h-48 max-h-64"),
481
- children: [
482
- query.trim() === "" ? /* @__PURE__ */ jsxs7(
483
- DropdownMenuItem,
484
- {
485
- className: cn(
486
- "justify-between",
487
- selected == null && "bg-dropdown-selected-item-bg text-dropdown-selected-item-text"
488
- ),
489
- onClick: () => pick(null),
490
- children: [
491
- "All chats",
492
- selected == null ? /* @__PURE__ */ jsx11(Icon, { name: "check", className: "size-3.5 shrink-0" }) : null
493
- ]
494
- }
495
- ) : null,
496
- isInitialLoading ? /* @__PURE__ */ jsx11("p", { className: "px-2 py-3 text-center text-xs text-text-secondary", children: "Loading\u2026" }) : agents.length === 0 ? /* @__PURE__ */ jsx11("p", { className: "text-text-secondary px-2 py-6 text-center text-xs", role: "status", children: query.trim() ? `No agents match "${query.trim()}".` : "No agents yet." }) : /* @__PURE__ */ jsxs7(Fragment, { children: [
497
- agents.map((agent) => {
498
- const id = libraryAgentId(agent);
499
- const active = selected === id;
500
- return /* @__PURE__ */ jsxs7(
501
- DropdownMenuItem,
502
- {
503
- className: cn(
504
- "justify-between gap-2 text-left",
505
- active && "bg-dropdown-selected-item-bg text-dropdown-selected-item-text"
506
- ),
507
- onClick: () => pick(id),
508
- children: [
509
- /* @__PURE__ */ jsx11("span", { className: "min-w-0 truncate", children: agent.name }),
510
- active ? /* @__PURE__ */ jsx11(Icon, { name: "check", className: "size-3.5 shrink-0" }) : null
511
- ]
512
- },
513
- id
514
- );
515
- }),
516
- hasMore ? /* @__PURE__ */ jsx11("div", { ref: sentinelRef, className: "flex h-6 shrink-0 items-center justify-center", "aria-hidden": true, children: loadingMore ? /* @__PURE__ */ jsx11("span", { className: "text-text-secondary text-[11px]", role: "status", children: "Loading more\u2026" }) : null }) : null
517
- ] })
518
- ]
519
- }
520
- )
521
- ] });
522
- return /* @__PURE__ */ jsxs7("div", { className: "relative shrink-0", children: [
523
- /* @__PURE__ */ jsxs7(
524
- "button",
525
- {
526
- ref: buttonRef,
527
- type: "button",
528
- "aria-label": selected != null ? `Filter chat history by agent (${selected})` : "Filter chat history by agent",
529
- "aria-haspopup": useSheet ? "dialog" : "menu",
530
- "aria-expanded": open,
531
- "aria-controls": open ? menuId : void 0,
532
- title: "Filter by agent",
533
- className: auiButtonClass({
534
- variant: "ghost",
535
- size: "icon",
536
- className: cn(
537
- "relative size-7 shrink-0 text-text-secondary hover:bg-ghost-button-hover hover:text-ghost-button-text",
538
- selected != null && "text-text-primary"
539
- )
540
- }),
541
- onClick: () => setOpen((v) => !v),
542
- children: [
543
- /* @__PURE__ */ jsx11(Icon, { name: "funnel", className: "size-3.5" }),
544
- selected != null ? /* @__PURE__ */ jsx11(
545
- "span",
546
- {
547
- className: "bg-primary-button-bg absolute top-1 right-1 size-1.5 rounded-full",
548
- "aria-hidden": true,
549
- "data-testid": "history-filter-active-dot"
550
- }
551
- ) : null
552
- ]
553
- }
554
- ),
555
- useSheet && open ? /* @__PURE__ */ jsx11(BottomSheet, { open: true, onOpenChange: setOpen, id: menuId, "aria-label": "Filter agents", children: /* @__PURE__ */ jsx11("div", { className: "flex min-h-0 flex-1 flex-col p-2", role: "menu", children: filterBody }) }) : null,
556
- !useSheet && open && menuPos != null ? createPortal(
557
- /* @__PURE__ */ jsx11(
558
- "div",
559
- {
560
- ref: menuRef,
561
- id: menuId,
562
- role: "menu",
563
- "aria-label": "Filter agents",
564
- style: { top: menuPos.top, left: menuPos.left },
565
- className: "font-sans-flex fixed z-50 w-56 rounded-md border border-border bg-card-bg p-1 text-text-primary shadow-md",
566
- children: filterBody
567
- }
568
- ),
569
- themePortalRoot(buttonRef.current)
570
- ) : null
571
- ] });
572
- }
573
-
574
- // src/containers/ThreadListContainer.tsx
575
- import { Fragment as Fragment2, jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
576
- var deleteItemClass = "flex w-full cursor-pointer select-none items-center gap-2 rounded-md px-2 py-1.5 text-sm font-medium text-failure-bg outline-none transition-colors hover:bg-failure-bg/12 hover:text-failure-bg focus:bg-failure-bg/12 focus:text-failure-bg data-[highlighted]:bg-failure-bg/12 data-[highlighted]:text-failure-bg";
577
- function ThreadListItemDeleteMenu() {
578
- const compact = useCompactLayout();
579
- const isMobile = useIsMobile();
580
- const [sheetOpen, setSheetOpen] = useState3(false);
581
- const [portalContainer, setPortalContainer] = useState3();
582
- const useSheet = isMobile || compact;
583
- const setTriggerElement = useCallback((element) => {
584
- const themeRoot = element?.closest(".aui-theme-root");
585
- setPortalContainer(themeRoot instanceof HTMLElement ? themeRoot : void 0);
586
- }, []);
587
- const moreButtonClass = auiButtonClass({
588
- variant: "ghost",
589
- size: "icon",
590
- className: "size-7 shrink-0 text-text-secondary hover:bg-transparent hover:text-text-primary"
591
- });
592
- if (useSheet) {
593
- return /* @__PURE__ */ jsxs8(Fragment2, { children: [
594
- /* @__PURE__ */ jsx12(
595
- "button",
596
- {
597
- type: "button",
598
- "aria-label": "Session actions",
599
- title: "Session actions",
600
- "aria-haspopup": "dialog",
601
- "aria-expanded": sheetOpen,
602
- className: moreButtonClass,
603
- onClick: () => setSheetOpen(true),
604
- children: /* @__PURE__ */ jsx12(Icon, { name: "ellipsis", className: "size-3.5" })
605
- }
606
- ),
607
- sheetOpen ? /* @__PURE__ */ jsx12(BottomSheet, { open: true, onOpenChange: setSheetOpen, "aria-label": "Session actions", children: /* @__PURE__ */ jsx12("div", { className: "flex flex-col gap-1 p-2", role: "menu", children: /* @__PURE__ */ jsxs8(ThreadListItemPrimitive.Delete, { className: deleteItemClass, onClick: () => setSheetOpen(false), children: [
608
- /* @__PURE__ */ jsx12(Icon, { name: "trash", className: "size-3.5" }),
609
- "Delete"
610
- ] }) }) }) : null
611
- ] });
612
- }
613
- return /* @__PURE__ */ jsxs8(ThreadListItemMorePrimitive.Root, { sharedFocusGroup: true, children: [
614
- /* @__PURE__ */ jsx12(
615
- ThreadListItemMorePrimitive.Trigger,
616
- {
617
- ref: setTriggerElement,
618
- "aria-label": "Session actions",
619
- title: "Session actions",
620
- className: moreButtonClass,
621
- children: /* @__PURE__ */ jsx12(Icon, { name: "ellipsis", className: "size-3.5" })
622
- }
623
- ),
624
- /* @__PURE__ */ jsx12(
625
- ThreadListItemMorePrimitive.Content,
626
- {
627
- portalProps: { container: portalContainer },
628
- align: "end",
629
- sideOffset: 4,
630
- className: "font-sans-flex z-50 min-w-[8rem] rounded-md border border-border bg-card-bg p-1 text-text-primary shadow-md",
631
- children: /* @__PURE__ */ jsx12(ThreadListItemPrimitive.Delete, { asChild: true, children: /* @__PURE__ */ jsxs8(ThreadListItemMorePrimitive.Item, { className: deleteItemClass, children: [
632
- /* @__PURE__ */ jsx12(Icon, { name: "trash", className: "size-3.5" }),
633
- "Delete"
634
- ] }) })
635
- }
636
- )
637
- ] });
638
- }
639
- function ThreadListItemRow({
640
- onThreadOpen,
641
- canDeleteSession
642
- }) {
643
- const aui = useAui2();
644
- const shell = useOptionalShellMode();
645
- const ThreadListRow2 = useSlot("ThreadListRow");
646
- const id = useAuiState2((s) => s.threadListItem.id);
647
- const remoteId = useAuiState2((s) => s.threadListItem.remoteId);
648
- const title = useAuiState2((s) => s.threadListItem.title);
649
- const lastMessageAt = useAuiState2((s) => s.threadListItem.lastMessageAt);
650
- const custom = useAuiState2((s) => s.threadListItem.custom);
651
- const mainThreadId = useAuiState2((s) => s.threads.mainThreadId);
652
- const agentName = readThreadAgentName(custom);
653
- const showDelete = canDeleteSession && remoteId != null;
654
- const sidebarNavOpen = shell?.libraryOpen === true || shell?.sessionsOpen === true || shell?.schedulesOpen === true;
655
- return /* @__PURE__ */ jsx12(ThreadListItemPrimitive.Root, { className: "min-w-0", children: /* @__PURE__ */ jsx12(
656
- ThreadListRow2,
657
- {
658
- title: title ?? "New Chat",
659
- active: id === mainThreadId && !sidebarNavOpen,
660
- agentName,
661
- lastMessageAt,
662
- onSelect: () => {
663
- onThreadOpen?.();
664
- shell?.setSettingsOpen(false);
665
- shell?.setLibraryOpen(false);
666
- shell?.setSessionsOpen(false);
667
- shell?.setSchedulesOpen(false);
668
- const sessionMutable = threadListItemIsMutable(custom);
669
- const sameImmutable = !sessionMutable && shell?.mode.status === "active" && !shell.mode.isMutable && (agentName == null ? shell.mode.agentName == null && shell.mode.agentId == null : shell.mode.agentName === agentName || shell.mode.agentId === agentName);
670
- const sameMutable = canReuseMutableShell({
671
- sessionMutable,
672
- shellMutable: shell?.mode.status === "active" && shell.mode.isMutable,
673
- ...shell?.mode.status === "active" && shell.mode.isMutable ? { shellAgentName: shell.mode.agentName, shellAgentId: shell.mode.agentId } : {},
674
- remoteId,
675
- pendingSessionId: shell?.pendingSessionId
676
- });
677
- if ((sameImmutable || sameMutable) && remoteId != null) {
678
- void Promise.resolve(aui.threads().switchToThread(id)).catch(() => void 0);
679
- return;
680
- }
681
- if (remoteId != null) {
682
- shell?.openHistorySession({
683
- sessionId: remoteId,
684
- isMutable: sessionMutable,
685
- ...agentName != null ? { agentName } : {}
686
- });
687
- return;
688
- }
689
- void Promise.resolve(aui.threads().switchToThread(id)).catch(() => void 0);
690
- },
691
- actions: showDelete ? /* @__PURE__ */ jsx12(ThreadListItemDeleteMenu, {}) : void 0
692
- }
693
- ) });
694
- }
695
- function useThreadListIndicesByRecency() {
696
- const threadIds = useAuiState2((s) => s.threads.threadIds);
697
- const threadItems = useAuiState2((s) => s.threads.threadItems);
698
- return useMemo(() => threadListIndicesByRecency({ threadIds, threadItems }), [threadIds, threadItems]);
699
- }
700
- function ThreadListItemsByRecency({
701
- onThreadOpen,
702
- canDeleteSession
703
- }) {
704
- const indices = useThreadListIndicesByRecency();
705
- const threadIds = useAuiState2((s) => s.threads.threadIds);
706
- return /* @__PURE__ */ jsx12(Fragment2, { children: indices.map((index) => {
707
- const key = threadIds[index] ?? String(index);
708
- return /* @__PURE__ */ jsx12(ThreadListItemByIndexProvider, { index, archived: false, children: /* @__PURE__ */ jsx12(ThreadListItemRow, { onThreadOpen, canDeleteSession }) }, key);
709
- }) });
710
- }
711
- var THREAD_LIST_VIEWPORT_SLOT = "aui_thread-list-viewport";
712
- var LOAD_MORE_BOTTOM_PX = 80;
713
- function ChatHistorySection({ children, viewportRef }) {
714
- const [expanded, setExpanded] = useState3(true);
715
- const shell = useOptionalShellMode();
716
- const showFilter = shell?.isLibraryEnabled === true;
717
- return /* @__PURE__ */ jsxs8("div", { className: "flex min-h-0 flex-1 flex-col", children: [
718
- /* @__PURE__ */ jsxs8("div", { className: "flex shrink-0 items-center gap-1 px-1 py-1", children: [
719
- /* @__PURE__ */ jsxs8(
720
- "button",
721
- {
722
- type: "button",
723
- "aria-expanded": expanded,
724
- className: "flex min-w-0 flex-1 items-center gap-1 rounded-md px-1.5 py-1 text-left text-sm font-medium text-text-secondary hover:bg-ghost-button-hover hover:text-text-primary",
725
- onClick: () => setExpanded((v) => !v),
726
- children: [
727
- /* @__PURE__ */ jsx12("span", { className: "truncate", children: "Chat History" }),
728
- /* @__PURE__ */ jsx12(
729
- Icon,
730
- {
731
- name: "chevron-down",
732
- className: cn("size-3.5 shrink-0 transition-transform", !expanded && "-rotate-90")
733
- }
734
- )
735
- ]
736
- }
737
- ),
738
- showFilter ? /* @__PURE__ */ jsx12(AgentHistoryFilterButton, {}) : null
739
- ] }),
740
- expanded ? /* @__PURE__ */ jsx12(
741
- "div",
742
- {
743
- ref: viewportRef,
744
- "data-slot": THREAD_LIST_VIEWPORT_SLOT,
745
- className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto",
746
- children
747
- }
748
- ) : null
749
- ] });
750
- }
751
- function ThreadListContainer({ onThreadOpen } = {}) {
752
- const aui = useAui2();
753
- const server = useOptionalServer();
754
- const isLoading = useAuiState2((s) => s.threads.isLoading);
755
- const isLoadingMore = useAuiState2((s) => s.threads.isLoadingMore);
756
- const hasMore = useAuiState2((s) => s.threads.hasMore);
757
- const threadIds = useAuiState2((s) => s.threads.threadIds);
758
- const shell = useOptionalShellMode();
759
- const ThreadListShell2 = useSlot("ThreadListShell");
760
- const ThreadListNewButton2 = useSlot("ThreadListNewButton");
761
- const AgentsLibraryButton2 = useSlot("AgentsLibraryButton");
762
- const SessionsBrowserButton2 = useSlot("SessionsBrowserButton");
763
- const SchedulesButton2 = useSlot("SchedulesButton");
764
- const ThreadListRowSkeleton2 = useSlot("ThreadListRowSkeleton");
765
- const ThreadListEmptyState2 = useSlot("ThreadListEmptyState");
766
- const viewportRef = useRef2(null);
767
- const hasMoreRef = useRef2(hasMore);
768
- const auiRef = useRef2(aui);
769
- hasMoreRef.current = hasMore;
770
- auiRef.current = aui;
771
- const showNewChat = shell?.isNewChatEnabled !== false;
772
- const isIdle = shell?.mode.status === "idle";
773
- const canDeleteSession = typeof server?.deleteSession === "function";
774
- useEffect3(() => {
775
- if (isIdle || isLoading || isLoadingMore) return;
776
- const viewport = viewportRef.current;
777
- if (!viewport) return;
778
- let cancelled = false;
779
- const tryLoadMore = () => {
780
- if (cancelled || !hasMoreRef.current) return;
781
- if (viewport.clientHeight <= 0) return;
782
- const remaining = viewport.scrollHeight - viewport.scrollTop - viewport.clientHeight;
783
- if (viewport.scrollHeight > viewport.clientHeight && remaining > LOAD_MORE_BOTTOM_PX) return;
784
- void auiRef.current.threads().loadMore();
785
- };
786
- viewport.addEventListener("scroll", tryLoadMore, { passive: true });
787
- const resizeObserver = typeof ResizeObserver === "undefined" ? void 0 : new ResizeObserver(() => tryLoadMore());
788
- if (resizeObserver) {
789
- resizeObserver.observe(viewport);
790
- } else {
791
- window.addEventListener("resize", tryLoadMore);
792
- }
793
- tryLoadMore();
794
- return () => {
795
- cancelled = true;
796
- viewport.removeEventListener("scroll", tryLoadMore);
797
- resizeObserver?.disconnect();
798
- if (!resizeObserver) {
799
- window.removeEventListener("resize", tryLoadMore);
800
- }
801
- };
802
- }, [hasMore, isIdle, isLoading, isLoadingMore, threadIds.length]);
803
- const handleNewChat = () => {
804
- onThreadOpen?.();
805
- shell?.setLibraryOpen(false);
806
- shell?.setSessionsOpen(false);
807
- if (shell?.isComposerEnabled) {
808
- shell.openDraft();
809
- return;
810
- }
811
- shell?.setSettingsOpen(false);
812
- shell?.setSchedulesOpen(false);
813
- void Promise.resolve(aui.threads().switchToNewThread()).catch(() => void 0);
814
- };
815
- let listBody;
816
- if (isIdle) {
817
- listBody = /* @__PURE__ */ jsx12(ThreadListEmptyState2, {});
818
- } else if (isLoading) {
819
- listBody = /* @__PURE__ */ jsx12(ThreadListRowSkeleton2, {});
820
- } else if (threadIds.length === 0) {
821
- listBody = /* @__PURE__ */ jsx12(ThreadListEmptyState2, {});
822
- } else {
823
- listBody = /* @__PURE__ */ jsx12(ThreadListPrimitive.Root, { className: "flex min-h-0 flex-col gap-0.5", children: /* @__PURE__ */ jsx12(ThreadListItemsByRecency, { onThreadOpen, canDeleteSession }) });
824
- }
825
- return /* @__PURE__ */ jsx12(
826
- ThreadListShell2,
827
- {
828
- header: /* @__PURE__ */ jsxs8("div", { className: "flex flex-col gap-1", children: [
829
- showNewChat ? /* @__PURE__ */ jsx12(ThreadListNewButton2, { onClick: handleNewChat }) : null,
830
- /* @__PURE__ */ jsx12(AgentsLibraryButton2, {}),
831
- /* @__PURE__ */ jsx12(SessionsBrowserButton2, {}),
832
- /* @__PURE__ */ jsx12(SchedulesButton2, {})
833
- ] }),
834
- children: /* @__PURE__ */ jsxs8(ChatHistorySection, { viewportRef, children: [
835
- listBody,
836
- !isIdle && hasMore ? /* @__PURE__ */ jsx12("div", { className: "h-4 shrink-0", "aria-hidden": true }) : null
837
- ] })
838
- }
839
- );
840
- }
841
-
842
407
  // src/containers/ToolGroupContainer.tsx
843
- import { useAuiState as useAuiState3 } from "@assistant-ui/react";
844
- import { useState as useState4 } from "react";
845
- import { jsx as jsx13 } from "react/jsx-runtime";
408
+ import { useAuiState as useAuiState2 } from "@assistant-ui/react";
409
+ import { useState as useState2 } from "react";
410
+ import { jsx as jsx11 } from "react/jsx-runtime";
846
411
  function ToolGroupContainer({ children, group }) {
847
412
  const ToolGroupCard2 = useSlot("ToolGroupCard");
848
413
  const toolCallCount = group.indices.length;
849
- const active = useAuiState3((s) => {
414
+ const active = useAuiState2((s) => {
850
415
  if (s.message.status?.type !== "running") return false;
851
416
  const lastIndex = s.message.parts.length - 1;
852
417
  if (lastIndex < 0) return false;
@@ -854,13 +419,13 @@ function ToolGroupContainer({ children, group }) {
854
419
  const lastGroupIndex = group.indices[group.indices.length - 1];
855
420
  return lastGroupIndex !== void 0 && lastIndex >= group.indices[0] && lastIndex <= lastGroupIndex;
856
421
  });
857
- const [expanded, setExpanded] = useState4(true);
858
- const [prevActive, setPrevActive] = useState4(active);
422
+ const [expanded, setExpanded] = useState2(true);
423
+ const [prevActive, setPrevActive] = useState2(active);
859
424
  if (active !== prevActive) {
860
425
  setPrevActive(active);
861
426
  if (active) setExpanded(true);
862
427
  }
863
- return /* @__PURE__ */ jsx13(
428
+ return /* @__PURE__ */ jsx11(
864
429
  ToolGroupCard2,
865
430
  {
866
431
  toolCallCount,
@@ -874,20 +439,20 @@ function ToolGroupContainer({ children, group }) {
874
439
 
875
440
  // src/containers/TrueForgeUI.tsx
876
441
  import { lazy, Suspense } from "react";
877
- import { jsx as jsx14 } from "react/jsx-runtime";
442
+ import { jsx as jsx12 } from "react/jsx-runtime";
878
443
  var TrueForgeUIWithRouter = lazy(
879
- () => import("./TrueForgeUIWithRouter-MZVJWJMB.js").then((m) => ({ default: m.TrueForgeUIWithRouter }))
444
+ () => import("./TrueForgeUIWithRouter-GZUSRZIR.js").then((m) => ({ default: m.TrueForgeUIWithRouter }))
880
445
  );
881
446
  function TrueForgeUI(props) {
882
447
  const isMcpAuthScreen = typeof window !== "undefined" && new URLSearchParams(window.location.search).get("screenType") === "mcp-auth";
883
448
  if (isMcpAuthScreen) {
884
- return /* @__PURE__ */ jsx14(SlotsProvider, { overrides: props.overrides, theme: props.theme, children: /* @__PURE__ */ jsx14(PostMcpOauthScreen_default, {}) });
449
+ return /* @__PURE__ */ jsx12(SlotsProvider, { overrides: props.overrides, theme: props.theme, children: /* @__PURE__ */ jsx12(PostMcpOauthScreen_default, {}) });
885
450
  }
886
451
  const { withRouter, ...rest } = props;
887
452
  if (withRouter) {
888
- return /* @__PURE__ */ jsx14(Suspense, { fallback: /* @__PURE__ */ jsx14(ServerInitLoader, { className: props.className }), children: /* @__PURE__ */ jsx14(TrueForgeUIWithRouter, { ...rest }) });
453
+ return /* @__PURE__ */ jsx12(Suspense, { fallback: /* @__PURE__ */ jsx12(ServerInitLoader, { className: props.className }), children: /* @__PURE__ */ jsx12(TrueForgeUIWithRouter, { ...rest }) });
889
454
  }
890
- return /* @__PURE__ */ jsx14(TrueForgeUIShell, { ...rest });
455
+ return /* @__PURE__ */ jsx12(TrueForgeUIShell, { ...rest });
891
456
  }
892
457
 
893
458
  // src/index.ts
@@ -896,6 +461,7 @@ import {
896
461
  trueFoundryAttachmentAdapter,
897
462
  useTrueFoundryAgentRuntime,
898
463
  useTrueFoundryAgentSpec,
464
+ useTrueFoundryApprovals,
899
465
  useTrueFoundryCancel,
900
466
  useTrueFoundryDownloadSandboxFile,
901
467
  useTrueFoundryHistoryPagination,
@@ -910,6 +476,7 @@ export {
910
476
  AgentConfigEditors,
911
477
  AgentConfigPanel,
912
478
  AgentConfigSection,
479
+ AgentCustomParametersEditor,
913
480
  AgentDetailsHeader,
914
481
  AgentDetailsPage,
915
482
  AgentDetailsTabs,
@@ -918,6 +485,7 @@ export {
918
485
  AgentMcpEditorContent,
919
486
  AgentMetricCard,
920
487
  AgentMetricChart,
488
+ AgentMetricStatistics,
921
489
  AgentMetricsContainer,
922
490
  AgentMetricsTimeRangeFilter,
923
491
  AgentMetricsView,
@@ -927,8 +495,8 @@ export {
927
495
  AgentOverviewCard,
928
496
  AgentResourceConfigModal,
929
497
  AgentResourceEditorContent,
498
+ AgentRuntimeConfigDrawer,
930
499
  AgentRuntimeConfigFields,
931
- AgentRuntimeConfigModal,
932
500
  AgentRuntimeEditorContent,
933
501
  AgentSessionsFilters,
934
502
  AgentSkillsEditorContent,
@@ -936,6 +504,8 @@ export {
936
504
  AgentStepsContainer,
937
505
  AgentsLibrary,
938
506
  AgentsLibraryButton,
507
+ ApprovalNavBanner,
508
+ ApprovalNavContainer,
939
509
  AskUserContainer,
940
510
  AssistantMessageBubble,
941
511
  AssistantMessageContainer,
@@ -948,6 +518,7 @@ export {
948
518
  AvatarImage,
949
519
  BottomSheet,
950
520
  BrandLogo,
521
+ Button,
951
522
  CenteredModal,
952
523
  ChatFileDownload,
953
524
  ClearChatButton,
@@ -967,6 +538,7 @@ export {
967
538
  DraftAgentConfigTrigger,
968
539
  DraftCapabilitiesPanel,
969
540
  DraftCatalogProvider,
541
+ DraftComposerActionsMenu,
970
542
  DraftComposerLeftSection,
971
543
  DraftComposerRightSection,
972
544
  DraftCompositeSelector,
@@ -988,16 +560,17 @@ export {
988
560
  MonacoEditorCore,
989
561
  OpenUiFenceBlock,
990
562
  PRESETS,
563
+ PermissionGuard,
991
564
  PopoverSelect,
992
565
  PostMcpOauthScreen_default as PostMcpOauthScreen,
993
566
  ReasoningContainer,
567
+ ResponsiveDropdownMenu,
994
568
  ResumeUnavailable,
995
569
  ResumeUnavailableContainer,
996
570
  SandboxArtifactDownload,
997
571
  SandboxToolCallCard,
998
572
  SaveAgentButton,
999
573
  SaveAgentForm,
1000
- SaveAgentFormFields,
1001
574
  ScheduleFormDrawer,
1002
575
  ScheduleFormFields,
1003
576
  ScheduleLastRunsCell,
@@ -1053,6 +626,7 @@ export {
1053
626
  TrueForgeUI,
1054
627
  TrueFoundryChatProvider,
1055
628
  USER_MESSAGE_ATTACHMENT_PREVIEW_REM,
629
+ UserAvatar,
1056
630
  UserEditComposerContainer,
1057
631
  UserMessageActionBar,
1058
632
  UserMessageBubble,
@@ -1062,6 +636,7 @@ export {
1062
636
  computeAgentStepsSplit,
1063
637
  createTrueFoundryServer,
1064
638
  defaultSlots,
639
+ findSubAgentAncestorsForApproval,
1065
640
  getErrorMessage,
1066
641
  isCreateAgentMetadataValue,
1067
642
  libraryAgentId,
@@ -1077,10 +652,12 @@ export {
1077
652
  trueFoundryAttachmentAdapter,
1078
653
  useAgentMetricsServer,
1079
654
  useAgentSessionsServer,
655
+ useApprovalNav,
1080
656
  useAui,
1081
657
  useAuiState,
1082
658
  useBrand,
1083
659
  useBrandName,
660
+ useCanCreateAgent,
1084
661
  useCatalogServer,
1085
662
  useComposerBusyState,
1086
663
  useComposerPauseView,
@@ -1091,10 +668,13 @@ export {
1091
668
  useOptionalAgentSessionsServer,
1092
669
  useOptionalCatalogServer,
1093
670
  useOptionalContentClassNames,
671
+ useOptionalCurrentUser,
1094
672
  useOptionalCustomActionRenderers,
673
+ useOptionalPermissionsServer,
1095
674
  useOptionalScheduleServer,
1096
675
  useOptionalServer,
1097
676
  useOptionalShellMode,
677
+ useResourcePermissions,
1098
678
  useScheduleServer,
1099
679
  useServer,
1100
680
  useServerCapabilities,
@@ -1107,6 +687,7 @@ export {
1107
687
  useToasterOptional,
1108
688
  useTrueFoundryAgentRuntime,
1109
689
  useTrueFoundryAgentSpec,
690
+ useTrueFoundryApprovals,
1110
691
  useTrueFoundryCancel,
1111
692
  useTrueFoundryDownloadSandboxFile,
1112
693
  useTrueFoundryHistoryPagination,