@truefoundry/trueforge-ui 0.1.0 → 0.2.1

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 (61) hide show
  1. package/CHANGELOG.md +34 -15
  2. package/README.md +38 -38
  3. package/dist/{ConnectorSettings-H37ZFC6Z.js → ConnectorSettings-XEO5ZQO5.js} +8 -6
  4. package/dist/{ConnectorSettings-H37ZFC6Z.js.map → ConnectorSettings-XEO5ZQO5.js.map} +1 -1
  5. package/dist/{DockLayout-KEMFRWIR.js → DockLayout-F2KYSY4U.js} +10 -8
  6. package/dist/{DockLayout-KEMFRWIR.js.map → DockLayout-F2KYSY4U.js.map} +1 -1
  7. package/dist/{DrawerLayout-ZVWCKEIS.js → DrawerLayout-FJ7XC2FU.js} +12 -9
  8. package/dist/{DrawerLayout-ZVWCKEIS.js.map → DrawerLayout-FJ7XC2FU.js.map} +1 -1
  9. package/dist/{ModelSettings-QJMYHCMD.js → ModelSettings-2QB7LE22.js} +8 -6
  10. package/dist/{ModelSettings-QJMYHCMD.js.map → ModelSettings-2QB7LE22.js.map} +1 -1
  11. package/dist/OpenUiFenceBlock-3EFPY4JW.js +9 -0
  12. package/dist/{SandboxSettings-BUBMLW7Q.js → SandboxSettings-QDDIPRBP.js} +8 -6
  13. package/dist/{SandboxSettings-BUBMLW7Q.js.map → SandboxSettings-QDDIPRBP.js.map} +1 -1
  14. package/dist/{SettingsBuilder-26XSGIHK.js → SettingsBuilder-4NF3Y7UZ.js} +10 -8
  15. package/dist/{SettingsBuilder-26XSGIHK.js.map → SettingsBuilder-4NF3Y7UZ.js.map} +1 -1
  16. package/dist/ShellRouteSync-T4WLY57Q.js +172 -0
  17. package/dist/ShellRouteSync-T4WLY57Q.js.map +1 -0
  18. package/dist/{SidebarLayout-F3XFXW7B.js → SidebarLayout-KX6RSJTP.js} +12 -9
  19. package/dist/{SidebarLayout-F3XFXW7B.js.map → SidebarLayout-KX6RSJTP.js.map} +1 -1
  20. package/dist/{SkillSettings-IRMGDFRG.js → SkillSettings-5EETEEDI.js} +8 -6
  21. package/dist/{SkillSettings-IRMGDFRG.js.map → SkillSettings-5EETEEDI.js.map} +1 -1
  22. package/dist/TrueForgeUIWithRouter-IAQQTD5V.js +30 -0
  23. package/dist/TrueForgeUIWithRouter-IAQQTD5V.js.map +1 -0
  24. package/dist/{WidgetLayout-SZMABKIR.js → WidgetLayout-S6EK62TZ.js} +10 -8
  25. package/dist/{WidgetLayout-SZMABKIR.js.map → WidgetLayout-S6EK62TZ.js.map} +1 -1
  26. package/dist/chunk-72LC2M3R.js +567 -0
  27. package/dist/chunk-72LC2M3R.js.map +1 -0
  28. package/dist/chunk-EKVN6QSO.js +493 -0
  29. package/dist/chunk-EKVN6QSO.js.map +1 -0
  30. package/dist/chunk-FXCYLEFB.js +64 -0
  31. package/dist/chunk-FXCYLEFB.js.map +1 -0
  32. package/dist/chunk-IFLE7OMM.js +527 -0
  33. package/dist/chunk-IFLE7OMM.js.map +1 -0
  34. package/dist/{chunk-HT5HKQXE.js → chunk-JRRCAKEP.js} +2 -2
  35. package/dist/{chunk-7EEOWDLE.js → chunk-PTYEOSHT.js} +10 -8
  36. package/dist/{chunk-7EEOWDLE.js.map → chunk-PTYEOSHT.js.map} +1 -1
  37. package/dist/{chunk-H7DR64W3.js → chunk-UACLSDNL.js} +39 -94
  38. package/dist/chunk-UACLSDNL.js.map +1 -0
  39. package/dist/{chunk-QGNLP2EE.js → chunk-UU7C5DQ3.js} +18 -8
  40. package/dist/chunk-UU7C5DQ3.js.map +1 -0
  41. package/dist/chunk-WQULF5AT.js +460 -0
  42. package/dist/chunk-WQULF5AT.js.map +1 -0
  43. package/dist/{chunk-LRQHHZDX.js → chunk-X6U2Q7X5.js} +7 -5
  44. package/dist/{chunk-LRQHHZDX.js.map → chunk-X6U2Q7X5.js.map} +1 -1
  45. package/dist/chunk-YIWUG6MC.js +101 -0
  46. package/dist/chunk-YIWUG6MC.js.map +1 -0
  47. package/dist/index.d.ts +57 -9
  48. package/dist/index.js +41 -428
  49. package/dist/index.js.map +1 -1
  50. package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
  51. package/dist/styles.css +1 -1
  52. package/package.json +9 -6
  53. package/dist/OpenUiFenceBlock-XFBUGPKQ.js +0 -9
  54. package/dist/chunk-DTF7ZMUJ.js +0 -567
  55. package/dist/chunk-DTF7ZMUJ.js.map +0 -1
  56. package/dist/chunk-H7DR64W3.js.map +0 -1
  57. package/dist/chunk-QGNLP2EE.js.map +0 -1
  58. package/dist/chunk-XAZ5HJXV.js +0 -862
  59. package/dist/chunk-XAZ5HJXV.js.map +0 -1
  60. /package/dist/{OpenUiFenceBlock-XFBUGPKQ.js.map → OpenUiFenceBlock-3EFPY4JW.js.map} +0 -0
  61. /package/dist/{chunk-HT5HKQXE.js.map → chunk-JRRCAKEP.js.map} +0 -0
@@ -0,0 +1,101 @@
1
+ // src/routing/paths.ts
2
+ var DEFAULTS = {
3
+ root: "/",
4
+ settings: "/settings",
5
+ agent: "/agents/:agentName",
6
+ session: "/sessions/:sessionId"
7
+ };
8
+ function normalizePath(path) {
9
+ const trimmed = path.trim();
10
+ const withLead = trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
11
+ return withLead.length > 1 && withLead.endsWith("/") ? withLead.slice(0, -1) : withLead;
12
+ }
13
+ function resolveOptional(value, fallback) {
14
+ if (value === false) return null;
15
+ return normalizePath(value ?? fallback);
16
+ }
17
+ function resolveRoutesConfig(routes) {
18
+ const paths = routes?.paths;
19
+ return {
20
+ basename: routes?.basename ?? "",
21
+ root: normalizePath(paths?.root ?? DEFAULTS.root),
22
+ settings: resolveOptional(paths?.settings, DEFAULTS.settings),
23
+ agent: resolveOptional(paths?.agent, DEFAULTS.agent),
24
+ session: resolveOptional(paths?.session, DEFAULTS.session)
25
+ };
26
+ }
27
+ function splitSegments(path) {
28
+ return path.split("/").filter((segment) => segment.length > 0);
29
+ }
30
+ function fillTemplate(template, value) {
31
+ return "/" + splitSegments(template).map((segment) => segment.startsWith(":") ? encodeURIComponent(value) : segment).join("/");
32
+ }
33
+ function buildPath(place, routes) {
34
+ switch (place.type) {
35
+ case "root":
36
+ return routes.root;
37
+ case "settings":
38
+ return routes.settings;
39
+ case "agent":
40
+ return routes.agent == null ? null : fillTemplate(routes.agent, place.agentName);
41
+ case "session":
42
+ return routes.session == null ? null : fillTemplate(routes.session, place.sessionId);
43
+ }
44
+ }
45
+ function decodeSegment(segment) {
46
+ try {
47
+ return decodeURIComponent(segment);
48
+ } catch {
49
+ return null;
50
+ }
51
+ }
52
+ function matchTemplate(template, segments) {
53
+ const templateSegments = splitSegments(template);
54
+ if (templateSegments.length !== segments.length) return null;
55
+ let param = null;
56
+ for (const [i, tpl] of templateSegments.entries()) {
57
+ const seg = segments[i];
58
+ if (seg === void 0) return null;
59
+ if (tpl.startsWith(":")) {
60
+ const decoded = decodeSegment(seg);
61
+ if (decoded == null) return null;
62
+ param = decoded;
63
+ } else if (tpl !== seg) {
64
+ return null;
65
+ }
66
+ }
67
+ return param;
68
+ }
69
+ function matchPath(pathname, routes) {
70
+ const normalized = normalizePath(pathname);
71
+ const segments = splitSegments(normalized);
72
+ if (routes.settings != null && normalized === routes.settings) {
73
+ return { type: "settings" };
74
+ }
75
+ if (routes.agent != null) {
76
+ const agentName = matchTemplate(routes.agent, segments);
77
+ if (agentName != null) return { type: "agent", agentName };
78
+ }
79
+ if (routes.session != null) {
80
+ const sessionId = matchTemplate(routes.session, segments);
81
+ if (sessionId != null) return { type: "session", sessionId };
82
+ }
83
+ if (normalized === routes.root) {
84
+ return { type: "root" };
85
+ }
86
+ return null;
87
+ }
88
+ function placesEqual(a, b) {
89
+ if (a.type !== b.type) return false;
90
+ if (a.type === "agent" && b.type === "agent") return a.agentName === b.agentName;
91
+ if (a.type === "session" && b.type === "session") return a.sessionId === b.sessionId;
92
+ return true;
93
+ }
94
+
95
+ export {
96
+ resolveRoutesConfig,
97
+ buildPath,
98
+ matchPath,
99
+ placesEqual
100
+ };
101
+ //# sourceMappingURL=chunk-YIWUG6MC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/routing/paths.ts"],"sourcesContent":["import type { ResolvedRoutes, RoutePlace, RoutesConfig } from './types.js';\n\nconst DEFAULTS = {\n root: '/',\n settings: '/settings',\n agent: '/agents/:agentName',\n session: '/sessions/:sessionId',\n} as const;\n\nfunction normalizePath(path: string): string {\n const trimmed = path.trim();\n const withLead = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n // Drop a trailing slash except for the root itself.\n return withLead.length > 1 && withLead.endsWith('/') ? withLead.slice(0, -1) : withLead;\n}\n\nfunction resolveOptional(value: string | false | undefined, fallback: string): string | null {\n if (value === false) return null;\n return normalizePath(value ?? fallback);\n}\n\nexport function resolveRoutesConfig(routes?: RoutesConfig): ResolvedRoutes {\n const paths = routes?.paths;\n return {\n basename: routes?.basename ?? '',\n root: normalizePath(paths?.root ?? DEFAULTS.root),\n settings: resolveOptional(paths?.settings, DEFAULTS.settings),\n agent: resolveOptional(paths?.agent, DEFAULTS.agent),\n session: resolveOptional(paths?.session, DEFAULTS.session),\n };\n}\n\nfunction splitSegments(path: string): string[] {\n return path.split('/').filter(segment => segment.length > 0);\n}\n\n/** Fill a single-param template (`/agents/:agentName`) with an encoded value. */\nfunction fillTemplate(template: string, value: string): string {\n return (\n '/' +\n splitSegments(template)\n .map(segment => (segment.startsWith(':') ? encodeURIComponent(value) : segment))\n .join('/')\n );\n}\n\n/** Build the URL path for a place, or `null` when that place has no configured route. */\nexport function buildPath(place: RoutePlace, routes: ResolvedRoutes): string | null {\n switch (place.type) {\n case 'root':\n return routes.root;\n case 'settings':\n return routes.settings;\n case 'agent':\n return routes.agent == null ? null : fillTemplate(routes.agent, place.agentName);\n case 'session':\n return routes.session == null ? null : fillTemplate(routes.session, place.sessionId);\n }\n}\n\n/** Percent-decode a segment; `null` when the URL carries a malformed escape. */\nfunction decodeSegment(segment: string): string | null {\n try {\n return decodeURIComponent(segment);\n } catch {\n return null;\n }\n}\n\n/** Match a single-param template against concrete segments; returns the decoded param or null. */\nfunction matchTemplate(template: string, segments: string[]): string | null {\n const templateSegments = splitSegments(template);\n if (templateSegments.length !== segments.length) return null;\n let param: string | null = null;\n for (const [i, tpl] of templateSegments.entries()) {\n const seg = segments[i];\n if (seg === undefined) return null;\n if (tpl.startsWith(':')) {\n // A malformed escape is an unusable id, so the path simply does not match.\n const decoded = decodeSegment(seg);\n if (decoded == null) return null;\n param = decoded;\n } else if (tpl !== seg) {\n return null;\n }\n }\n return param;\n}\n\n/** Parse a (basename-relative) pathname into a place, or `null` when unrecognized. */\nexport function matchPath(pathname: string, routes: ResolvedRoutes): RoutePlace | null {\n const normalized = normalizePath(pathname);\n const segments = splitSegments(normalized);\n\n if (routes.settings != null && normalized === routes.settings) {\n return { type: 'settings' };\n }\n if (routes.agent != null) {\n const agentName = matchTemplate(routes.agent, segments);\n if (agentName != null) return { type: 'agent', agentName };\n }\n if (routes.session != null) {\n const sessionId = matchTemplate(routes.session, segments);\n if (sessionId != null) return { type: 'session', sessionId };\n }\n if (normalized === routes.root) {\n return { type: 'root' };\n }\n return null;\n}\n\nexport function placesEqual(a: RoutePlace, b: RoutePlace): boolean {\n if (a.type !== b.type) return false;\n if (a.type === 'agent' && b.type === 'agent') return a.agentName === b.agentName;\n if (a.type === 'session' && b.type === 'session') return a.sessionId === b.sessionId;\n return true;\n}\n"],"mappings":"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","names":[]}
package/dist/index.d.ts CHANGED
@@ -1358,6 +1358,8 @@ type ShellModeContextValue = {
1358
1358
  }) => void;
1359
1359
  /** Reset current chat; no-op when idle. */
1360
1360
  clearChat: () => void;
1361
+ /** Return pure Agents Library to its idle landing; no-op in other modes. */
1362
+ openLibraryHome: () => void;
1361
1363
  /** Remount key for the chat runtime when binding changes. */
1362
1364
  runtimeKey: string;
1363
1365
  /**
@@ -1390,10 +1392,45 @@ declare function useOptionalShellMode(): ShellModeContextValue | null;
1390
1392
  declare function shellIsMutable(mode: ShellMode): boolean;
1391
1393
 
1392
1394
  /**
1393
- * Built-in backends init inside `<TrueforgeUI />`.
1395
+ * A navigable place in the chat shell. The router mirrors these to the URL;
1396
+ * shell state stays the source of truth.
1397
+ */
1398
+ type RoutePlace = {
1399
+ type: 'root';
1400
+ } | {
1401
+ type: 'agent';
1402
+ agentName: string;
1403
+ } | {
1404
+ type: 'session';
1405
+ sessionId: string;
1406
+ } | {
1407
+ type: 'settings';
1408
+ };
1409
+ /**
1410
+ * Host-facing route path customization. Only honored when `withRouter`.
1411
+ * The shell owns the pathname only; query string and hash are left untouched.
1412
+ */
1413
+ type RoutesConfig = {
1414
+ /** Passed to the router; not used for our own match/build (router strips it). */
1415
+ basename?: string;
1416
+ /** `agent` and `session` templates MUST keep their `:param` segment to stay addressable. */
1417
+ paths?: {
1418
+ /** New-chat / landing. Default `'/'`. */
1419
+ root?: string;
1420
+ /** Settings overlay. `false` keeps settings overlay-only (no URL). Default `'/settings'`. */
1421
+ settings?: string | false;
1422
+ /** Immutable "Try" agent. `false` disables. Default `'/agents/:agentName'`. */
1423
+ agent?: string | false;
1424
+ /** Session deep link. `false` disables. Default `'/sessions/:sessionId'`. */
1425
+ session?: string | false;
1426
+ };
1427
+ };
1428
+
1429
+ /**
1430
+ * Built-in backends init inside `<TrueForgeUI />`.
1394
1431
  * Optional `catalog` is attached onto the resolved `AgentUIServer`.
1395
1432
  */
1396
- type TrueforgeBuiltInServerConfig = {
1433
+ type TrueForgeBuiltInServerConfig = {
1397
1434
  type: 'truefoundry';
1398
1435
  apiKey: string;
1399
1436
  controlPlaneURL: string;
@@ -1410,16 +1447,15 @@ type TrueforgeBuiltInServerConfig = {
1410
1447
  catalog?: CatalogServer;
1411
1448
  };
1412
1449
  /**
1413
- * `server` prop for `<TrueforgeUI />`: a built-in config, or a ready
1450
+ * `server` prop for `<TrueForgeUI />`: a built-in config, or a ready
1414
1451
  * {@link AgentUIServer} passed directly (no `{ type: "custom" }` wrapper).
1415
1452
  */
1416
- type TrueforgeServerConfig = TrueforgeBuiltInServerConfig | AgentUIServer;
1453
+ type TrueForgeServerConfig = TrueForgeBuiltInServerConfig | AgentUIServer;
1417
1454
 
1418
1455
  type ChatLayout = 'sidebar' | 'drawer' | 'dock' | 'widget';
1419
-
1420
1456
  type RuntimeAdapters$1 = NonNullable<UseTrueFoundryAgentRuntimeOptions['adapters']>;
1421
- type TrueforgeUIProps = {
1422
- server: TrueforgeServerConfig;
1457
+ type TrueForgeUIProps = {
1458
+ server: TrueForgeServerConfig;
1423
1459
  /** Built-in layout string or a custom layout component. Defaults to `"sidebar"`. */
1424
1460
  layout?: LayoutProp;
1425
1461
  overrides?: SlotOverrides;
@@ -1435,12 +1471,21 @@ type TrueforgeUIProps = {
1435
1471
  agentConfig?: AgentConfig;
1436
1472
  /** Open settings on first paint only (host boot with no models configured). */
1437
1473
  initialSettingsOpen?: boolean;
1474
+ /**
1475
+ * Sync shell navigation to the browser URL via react-router (opt-in).
1476
+ * Requires `react-router-dom` in the host. Leave off for dock/widget embeds
1477
+ * and hosts that own their own router. Defaults to `false`.
1478
+ */
1479
+ withRouter?: boolean;
1480
+ /** URL path customization; only honored when `withRouter`. */
1481
+ routes?: RoutesConfig;
1438
1482
  };
1483
+
1439
1484
  /**
1440
1485
  * Quick-start assistant UI: slots + runtime + a built-in or custom layout.
1441
1486
  * Pass a built-in `server` config, a ready `AgentUIServer`, and optional `agentConfig`.
1442
1487
  */
1443
- declare function TrueforgeUI(props: TrueforgeUIProps): react.JSX.Element;
1488
+ declare function TrueForgeUI(props: TrueForgeUIProps): react.JSX.Element;
1444
1489
 
1445
1490
  type RuntimeAdapters = NonNullable<UseTrueFoundryAgentRuntimeOptions['adapters']>;
1446
1491
  type TrueFoundryChatProviderProps = {
@@ -1552,6 +1597,9 @@ declare function computeAgentStepsSplit(parts: readonly AgentStepPart[], isRunni
1552
1597
  * User-facing error text. Prefers HTTP body `{ error: { message } }` when
1553
1598
  * present (e.g. TrueForgeError), then `error.message` / `error.error.message`,
1554
1599
  * then `fallback`, then a string form of the value.
1600
+ *
1601
+ * Escape sequences (`\n`, `\t`, `\r`, `\uXXXX`, …) are decoded for display when
1602
+ * still present as literal text.
1555
1603
  */
1556
1604
  declare function getErrorMessage(error: unknown, fallback?: string): string;
1557
1605
 
@@ -1574,4 +1622,4 @@ declare function DraftCatalogProvider({ children }: {
1574
1622
  }): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | react.ReactPortal | react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react.JSX.Element | null | undefined;
1575
1623
  declare function useDraftCatalog(): DraftCatalogValue;
1576
1624
 
1577
- export { type AgentConfig, type AgentStepPart, AgentStepsCard, type AgentStepsCardProps, AgentStepsContainer, type AgentStepsContainerProps, type AgentStepsSplitResult, AgentsLibrary, AgentsLibraryButton, type AgentsLibraryButtonProps, type AgentsLibraryProps, type AskUserAnswerDraft, type AnsweredQuestion as AskUserAnsweredQuestion, AskUserContainer, type AskUserPromptProps, type Question as AskUserQuestion, type AskUserPromptProps as AskUserQuestionCardProps, AssistantMessageBubble, type AssistantMessageBubbleProps, AssistantMessageContainer, AssistantTextContainer, type PublicAtomSlots as AtomSlots, AttachmentCard, type AttachmentCardProps, type AttachmentCardSize, AttachmentPickerButton, type AttachmentPickerButtonProps, AttachmentPreviewDialog, type AttachmentPreviewDialogProps, Avatar, AvatarFallback, type AvatarFallbackProps, AvatarImage, type AvatarImageProps, type AvatarProps, BottomSheet, type BottomSheetProps, type BrandConfig, BrandLogo, type BrandLogoConfig, type ButtonProps, type ButtonSize, type ButtonVariant, CenteredModal, type CenteredModalProps, ChatFileDownload, type ChatFileDownloadFile, type ChatFileDownloadProps, type ChatLayout, ClearChatButton, CodeEditor, type CodeEditorProps, ComposerAttachmentPickerContainer, ComposerAttachmentsContainer, ComposerBusyProvider, type ComposerBusyState, ComposerContainer, type ComposerContainerProps, ComposerLeftSection, type ComposerLeftSectionProps, type ComposerPauseView, ComposerRightSection, type ComposerRightSectionProps, ComposerSendButton, type ComposerSendButtonProps, ComposerShell, type ComposerShellProps, type ContentClassNames, DEFAULT_AGENT_CONFIG, DraftCatalogProvider, DraftComposerLeftSection, DraftComposerRightSection, DraftCompositeSelector, type DraftCompositeSelectorProps, DraftModelSelector, type DraftModelSelectorProps, HistoryLoader, HistoryLoaderContainer, type HistoryLoaderProps, Icon, type IconButtonProps, type IconMap, type IconProps, type LayoutProp, MCP_AUTH_POPUP_CHANNEL, Markdown, type MarkdownProps, type McpAuthCallback, type McpAuthPromptProps as McpAuthCardProps, McpAuthContainer, type McpAuthPopupMessage, type McpAuthPromptProps, type McpServer as McpAuthServer, MessageActionBar, type MessageActionBarProps, MessageAttachmentsContainer, MessageErrorBanner, type MessageErrorBannerProps, MessageGroup, type MessageGroupProps, MessageIndicator, type MessageIndicatorProps, MessageListSkeleton, type MessageListSkeletonProps, MessageTimestamp, type MessageTimestampProps, MonacoEditorCore, type MonacoEditorCoreProps, OpenUiFenceBlock, type OpenUiFenceBlockProps, PRESETS, PostMcpOauthScreen, type ReasoningCardProps, ReasoningContainer, ResumeUnavailable, ResumeUnavailableContainer, type ResumeUnavailableProps, SandboxArtifactDownload, type SandboxArtifactDownloadProps, SandboxToolCallCard, type SandboxToolCallCardProps, SaveAgentButton, ScrollToBottomButton, type ScrollToBottomButtonProps, SelectAgentEmptyState, type SelectLibraryAgentRequest, type SemanticTokens, ServerProvider, ShellActionsActionSlot, type ShellMode, ShellModeProvider, type SlotOverrides, SlotsProvider, SubAgentCard, type SubAgentCardProps, Switch, type SwitchProps, type SwitchSize, SyntaxHighlighter, type SyntaxHighlighterProps, type ThemeConfig, type IconProps$1 as ThemeIconProps, type ThemeMode, type ThemePreset, ThemeProvider, Thread, ThreadComposerAreaShell, type ThreadComposerAreaShellProps, ThreadContainer, type ThreadContainerProps, type ThreadGroupPart, ThreadListContainer, type ThreadListContainerProps, ThreadListEmptyState, type ThreadListEmptyStateProps, ThreadListNewButton, type ThreadListNewButtonProps, ThreadListRow, type ThreadListRowProps, ThreadListRowSkeleton, type ThreadListRowSkeletonProps, ThreadListShell, type ThreadListShellProps, type ThreadPauseState, ThreadRootShell, type ThreadRootShellProps, ThreadViewportShell, type ThreadViewportShellProps, Toast, type ToastProps, ToastStack, type ToastStackProps, ToasterProvider, ToolApprovalBar, type ToolApprovalBarProps, ToolApprovalContainer, type ToolApprovalOption, ToolCallCard, type ToolCallCardProps, ToolCallContainer, ToolCallContentBlock, ToolCallContentBlockContainer, type ToolCallContentBlockProps, type ToolCallStatus, ToolGroupCard, type ToolGroupCardProps, ToolGroupContainer, TrueFoundryChatProvider, type TrueFoundryChatProviderProps, type TrueforgeBuiltInServerConfig, type TrueforgeServerConfig, TrueforgeUI, type TrueforgeUIProps, USER_MESSAGE_ATTACHMENT_PREVIEW_REM, type UseMCPAuthOptions, UserEditComposerContainer, UserMessageActionBar, type UserMessageActionBarProps, UserMessageBubble, type UserMessageBubbleProps, UserMessageContainer, UserMessageEdit, type UserMessageEditProps, WelcomeScreen, type WelcomeScreenProps, computeAgentStepsSplit, defaultSlots, getErrorMessage, libraryAgentId, preloadMarkdownOpenUI, resolvePresetTokens, shellIsMutable, threadHasPendingMcpAuth, useBrand, useBrandName, useCatalogServer, useComposerBusyState, useComposerPauseView, useContentClassNames, useDraftCatalog, useMCPAuth, useOptionalCatalogServer, useOptionalContentClassNames, useOptionalServer, useOptionalShellMode, useServer, useServerCapabilities, useShellMode, useSlot, useTheme, useThemeIcons, useThemeMode, useToaster, useToasterOptional };
1625
+ export { type AgentConfig, type AgentStepPart, AgentStepsCard, type AgentStepsCardProps, AgentStepsContainer, type AgentStepsContainerProps, type AgentStepsSplitResult, AgentsLibrary, AgentsLibraryButton, type AgentsLibraryButtonProps, type AgentsLibraryProps, type AskUserAnswerDraft, type AnsweredQuestion as AskUserAnsweredQuestion, AskUserContainer, type AskUserPromptProps, type Question as AskUserQuestion, type AskUserPromptProps as AskUserQuestionCardProps, AssistantMessageBubble, type AssistantMessageBubbleProps, AssistantMessageContainer, AssistantTextContainer, type PublicAtomSlots as AtomSlots, AttachmentCard, type AttachmentCardProps, type AttachmentCardSize, AttachmentPickerButton, type AttachmentPickerButtonProps, AttachmentPreviewDialog, type AttachmentPreviewDialogProps, Avatar, AvatarFallback, type AvatarFallbackProps, AvatarImage, type AvatarImageProps, type AvatarProps, BottomSheet, type BottomSheetProps, type BrandConfig, BrandLogo, type BrandLogoConfig, type ButtonProps, type ButtonSize, type ButtonVariant, CenteredModal, type CenteredModalProps, ChatFileDownload, type ChatFileDownloadFile, type ChatFileDownloadProps, type ChatLayout, ClearChatButton, CodeEditor, type CodeEditorProps, ComposerAttachmentPickerContainer, ComposerAttachmentsContainer, ComposerBusyProvider, type ComposerBusyState, ComposerContainer, type ComposerContainerProps, ComposerLeftSection, type ComposerLeftSectionProps, type ComposerPauseView, ComposerRightSection, type ComposerRightSectionProps, ComposerSendButton, type ComposerSendButtonProps, ComposerShell, type ComposerShellProps, type ContentClassNames, DEFAULT_AGENT_CONFIG, DraftCatalogProvider, DraftComposerLeftSection, DraftComposerRightSection, DraftCompositeSelector, type DraftCompositeSelectorProps, DraftModelSelector, type DraftModelSelectorProps, HistoryLoader, HistoryLoaderContainer, type HistoryLoaderProps, Icon, type IconButtonProps, type IconMap, type IconProps, type LayoutProp, MCP_AUTH_POPUP_CHANNEL, Markdown, type MarkdownProps, type McpAuthCallback, type McpAuthPromptProps as McpAuthCardProps, McpAuthContainer, type McpAuthPopupMessage, type McpAuthPromptProps, type McpServer as McpAuthServer, MessageActionBar, type MessageActionBarProps, MessageAttachmentsContainer, MessageErrorBanner, type MessageErrorBannerProps, MessageGroup, type MessageGroupProps, MessageIndicator, type MessageIndicatorProps, MessageListSkeleton, type MessageListSkeletonProps, MessageTimestamp, type MessageTimestampProps, MonacoEditorCore, type MonacoEditorCoreProps, OpenUiFenceBlock, type OpenUiFenceBlockProps, PRESETS, PostMcpOauthScreen, type ReasoningCardProps, ReasoningContainer, ResumeUnavailable, ResumeUnavailableContainer, type ResumeUnavailableProps, type RoutePlace, type RoutesConfig, SandboxArtifactDownload, type SandboxArtifactDownloadProps, SandboxToolCallCard, type SandboxToolCallCardProps, SaveAgentButton, ScrollToBottomButton, type ScrollToBottomButtonProps, SelectAgentEmptyState, type SelectLibraryAgentRequest, type SemanticTokens, ServerProvider, ShellActionsActionSlot, type ShellMode, ShellModeProvider, type SlotOverrides, SlotsProvider, SubAgentCard, type SubAgentCardProps, Switch, type SwitchProps, type SwitchSize, SyntaxHighlighter, type SyntaxHighlighterProps, type ThemeConfig, type IconProps$1 as ThemeIconProps, type ThemeMode, type ThemePreset, ThemeProvider, Thread, ThreadComposerAreaShell, type ThreadComposerAreaShellProps, ThreadContainer, type ThreadContainerProps, type ThreadGroupPart, ThreadListContainer, type ThreadListContainerProps, ThreadListEmptyState, type ThreadListEmptyStateProps, ThreadListNewButton, type ThreadListNewButtonProps, ThreadListRow, type ThreadListRowProps, ThreadListRowSkeleton, type ThreadListRowSkeletonProps, ThreadListShell, type ThreadListShellProps, type ThreadPauseState, ThreadRootShell, type ThreadRootShellProps, ThreadViewportShell, type ThreadViewportShellProps, Toast, type ToastProps, ToastStack, type ToastStackProps, ToasterProvider, ToolApprovalBar, type ToolApprovalBarProps, ToolApprovalContainer, type ToolApprovalOption, ToolCallCard, type ToolCallCardProps, ToolCallContainer, ToolCallContentBlock, ToolCallContentBlockContainer, type ToolCallContentBlockProps, type ToolCallStatus, ToolGroupCard, type ToolGroupCardProps, ToolGroupContainer, type TrueForgeBuiltInServerConfig, type TrueForgeServerConfig, TrueForgeUI, type TrueForgeUIProps, TrueFoundryChatProvider, type TrueFoundryChatProviderProps, USER_MESSAGE_ATTACHMENT_PREVIEW_REM, type UseMCPAuthOptions, UserEditComposerContainer, UserMessageActionBar, type UserMessageActionBarProps, UserMessageBubble, type UserMessageBubbleProps, UserMessageContainer, UserMessageEdit, type UserMessageEditProps, WelcomeScreen, type WelcomeScreenProps, computeAgentStepsSplit, defaultSlots, getErrorMessage, libraryAgentId, preloadMarkdownOpenUI, resolvePresetTokens, shellIsMutable, threadHasPendingMcpAuth, useBrand, useBrandName, useCatalogServer, useComposerBusyState, useComposerPauseView, useContentClassNames, useDraftCatalog, useMCPAuth, useOptionalCatalogServer, useOptionalContentClassNames, useOptionalServer, useOptionalShellMode, useServer, useServerCapabilities, useShellMode, useSlot, useTheme, useThemeIcons, useThemeMode, useToaster, useToasterOptional };