@truefoundry/trueforge-ui 0.1.0-rc.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/dist/{ConnectorSettings-ADACLWQI.js → ConnectorSettings-H37ZFC6Z.js} +35 -12
- package/dist/ConnectorSettings-H37ZFC6Z.js.map +1 -0
- package/dist/{DockLayout-BH5XX2AQ.js → DockLayout-KEMFRWIR.js} +8 -8
- package/dist/{DrawerLayout-O2XZQCG4.js → DrawerLayout-ZVWCKEIS.js} +8 -8
- package/dist/{ModelSettings-LKFJVUYQ.js → ModelSettings-QJMYHCMD.js} +5 -5
- package/dist/OpenUiFenceBlock-XFBUGPKQ.js +9 -0
- package/dist/{SandboxSettings-H5MDAE47.js → SandboxSettings-BUBMLW7Q.js} +159 -65
- package/dist/SandboxSettings-BUBMLW7Q.js.map +1 -0
- package/dist/{SettingsBuilder-3JOLC56Z.js → SettingsBuilder-26XSGIHK.js} +7 -7
- package/dist/{SidebarLayout-G6BGD7EY.js → SidebarLayout-F3XFXW7B.js} +8 -8
- package/dist/{SkillSettings-4VB42CVG.js → SkillSettings-IRMGDFRG.js} +5 -5
- package/dist/{WidgetLayout-ABSXZUSQ.js → WidgetLayout-SZMABKIR.js} +8 -8
- package/dist/{chunk-EFGSH3MO.js → chunk-7EEOWDLE.js} +7 -7
- package/dist/chunk-DTF7ZMUJ.js +567 -0
- package/dist/chunk-DTF7ZMUJ.js.map +1 -0
- package/dist/{chunk-3PTFNAQK.js → chunk-H7DR64W3.js} +46 -31
- package/dist/chunk-H7DR64W3.js.map +1 -0
- package/dist/{chunk-FDBJNXH2.js → chunk-HT5HKQXE.js} +2 -2
- package/dist/{chunk-VJTCFZNM.js → chunk-LRQHHZDX.js} +4 -4
- package/dist/{chunk-Z27F4LBZ.js → chunk-QGNLP2EE.js} +163 -71
- package/dist/chunk-QGNLP2EE.js.map +1 -0
- package/dist/{chunk-U5GBGEGN.js → chunk-XAZ5HJXV.js} +83 -9
- package/dist/chunk-XAZ5HJXV.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.js +112 -17
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +42 -28
- package/dist/plugins/trueforge-agent-server-adapter/index.js +27 -16
- package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +4 -4
- package/dist/ConnectorSettings-ADACLWQI.js.map +0 -1
- package/dist/OpenUiFenceBlock-A2CWCPOP.js +0 -9
- package/dist/SandboxSettings-H5MDAE47.js.map +0 -1
- package/dist/chunk-3PTFNAQK.js.map +0 -1
- package/dist/chunk-U5GBGEGN.js.map +0 -1
- package/dist/chunk-WMRZSULD.js +0 -567
- package/dist/chunk-WMRZSULD.js.map +0 -1
- package/dist/chunk-Z27F4LBZ.js.map +0 -1
- /package/dist/{DockLayout-BH5XX2AQ.js.map → DockLayout-KEMFRWIR.js.map} +0 -0
- /package/dist/{DrawerLayout-O2XZQCG4.js.map → DrawerLayout-ZVWCKEIS.js.map} +0 -0
- /package/dist/{ModelSettings-LKFJVUYQ.js.map → ModelSettings-QJMYHCMD.js.map} +0 -0
- /package/dist/{OpenUiFenceBlock-A2CWCPOP.js.map → OpenUiFenceBlock-XFBUGPKQ.js.map} +0 -0
- /package/dist/{SettingsBuilder-3JOLC56Z.js.map → SettingsBuilder-26XSGIHK.js.map} +0 -0
- /package/dist/{SidebarLayout-G6BGD7EY.js.map → SidebarLayout-F3XFXW7B.js.map} +0 -0
- /package/dist/{SkillSettings-4VB42CVG.js.map → SkillSettings-IRMGDFRG.js.map} +0 -0
- /package/dist/{WidgetLayout-ABSXZUSQ.js.map → WidgetLayout-SZMABKIR.js.map} +0 -0
- /package/dist/{chunk-EFGSH3MO.js.map → chunk-7EEOWDLE.js.map} +0 -0
- /package/dist/{chunk-FDBJNXH2.js.map → chunk-HT5HKQXE.js.map} +0 -0
- /package/dist/{chunk-VJTCFZNM.js.map → chunk-LRQHHZDX.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ThemeContext,
|
|
3
3
|
cn
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-DTF7ZMUJ.js";
|
|
5
5
|
|
|
6
6
|
// src/icons/Icon.tsx
|
|
7
7
|
import { createElement, isValidElement, useContext } from "react";
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
ArrowDown,
|
|
13
13
|
ArrowLeft,
|
|
14
14
|
ArrowUp,
|
|
15
|
+
BookOpen,
|
|
15
16
|
Bot,
|
|
16
17
|
Box,
|
|
17
18
|
Brain,
|
|
@@ -60,6 +61,7 @@ import {
|
|
|
60
61
|
Sun,
|
|
61
62
|
Terminal,
|
|
62
63
|
Trash2,
|
|
64
|
+
TriangleAlert,
|
|
63
65
|
Wrench,
|
|
64
66
|
X
|
|
65
67
|
} from "lucide-react";
|
|
@@ -114,6 +116,8 @@ var defaults = {
|
|
|
114
116
|
"box-archive": Archive,
|
|
115
117
|
"clock-rotate-left": History,
|
|
116
118
|
"circle-exclamation": CircleAlert,
|
|
119
|
+
info: Info,
|
|
120
|
+
"triangle-exclamation": TriangleAlert,
|
|
117
121
|
"chevron-down": ChevronDown,
|
|
118
122
|
"chevron-left": ChevronLeft,
|
|
119
123
|
"chevron-right": ChevronRight,
|
|
@@ -138,6 +142,7 @@ var defaults = {
|
|
|
138
142
|
"oauth-loading": Loader2,
|
|
139
143
|
"welcome-sparkle": Sparkle,
|
|
140
144
|
robot: Bot,
|
|
145
|
+
"book-open": BookOpen,
|
|
141
146
|
funnel: ListFilter,
|
|
142
147
|
plug: Plug,
|
|
143
148
|
"list-check": ListChecks,
|
|
@@ -156,8 +161,7 @@ var defaults = {
|
|
|
156
161
|
"expand-alt": Maximize2,
|
|
157
162
|
compress: Minimize2,
|
|
158
163
|
"external-link": ExternalLink,
|
|
159
|
-
github: Github
|
|
160
|
-
info: Info
|
|
164
|
+
github: Github
|
|
161
165
|
};
|
|
162
166
|
for (const [name, icon] of Object.entries(defaults)) {
|
|
163
167
|
registry.set(name, icon);
|
|
@@ -319,6 +323,61 @@ function useOptionalCatalogServer() {
|
|
|
319
323
|
|
|
320
324
|
// src/server/ShellModeContext.tsx
|
|
321
325
|
import { createContext as createContext2, useCallback as useCallback2, useContext as useContext3, useEffect as useEffect2, useMemo as useMemo2, useRef as useRef2, useState as useState2 } from "react";
|
|
326
|
+
|
|
327
|
+
// src/server/draftSpecPreferences.ts
|
|
328
|
+
var DRAFT_SPEC_PREFERENCES_STORAGE_KEY = "tfy-aui-draft-spec-preferences";
|
|
329
|
+
function isObject(value) {
|
|
330
|
+
return typeof value === "object" && value !== null;
|
|
331
|
+
}
|
|
332
|
+
function isMountList(value) {
|
|
333
|
+
return Array.isArray(value) && value.every(isObject);
|
|
334
|
+
}
|
|
335
|
+
function isAgentSpec(value) {
|
|
336
|
+
if (!isObject(value)) return false;
|
|
337
|
+
const model = Reflect.get(value, "model");
|
|
338
|
+
if (!isObject(model) || typeof Reflect.get(model, "name") !== "string") return false;
|
|
339
|
+
const params = Reflect.get(model, "params");
|
|
340
|
+
if (params !== void 0 && !isObject(params)) return false;
|
|
341
|
+
const skills = Reflect.get(value, "skills");
|
|
342
|
+
if (skills !== void 0 && !isMountList(skills)) return false;
|
|
343
|
+
const mcpServers = Reflect.get(value, "mcpServers");
|
|
344
|
+
if (mcpServers !== void 0 && !isMountList(mcpServers)) return false;
|
|
345
|
+
const config = Reflect.get(value, "config");
|
|
346
|
+
return config === void 0 || isObject(config);
|
|
347
|
+
}
|
|
348
|
+
function isStoredDraftSpecPreferences(value) {
|
|
349
|
+
return isObject(value) && Reflect.get(value, "version") === 1 && isAgentSpec(Reflect.get(value, "spec"));
|
|
350
|
+
}
|
|
351
|
+
function selectDraftSpecPreferences(spec) {
|
|
352
|
+
return {
|
|
353
|
+
model: spec.model,
|
|
354
|
+
...spec.skills !== void 0 ? { skills: spec.skills } : {},
|
|
355
|
+
...spec.mcpServers !== void 0 ? { mcpServers: spec.mcpServers } : {},
|
|
356
|
+
...spec.config !== void 0 ? { config: spec.config } : {}
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
function readDraftSpecPreferences() {
|
|
360
|
+
if (typeof window === "undefined") return null;
|
|
361
|
+
try {
|
|
362
|
+
const stored = JSON.parse(window.localStorage.getItem(DRAFT_SPEC_PREFERENCES_STORAGE_KEY) ?? "null");
|
|
363
|
+
return isStoredDraftSpecPreferences(stored) ? stored.spec : null;
|
|
364
|
+
} catch {
|
|
365
|
+
return null;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
function writeDraftSpecPreferences(spec) {
|
|
369
|
+
if (typeof window === "undefined") return;
|
|
370
|
+
try {
|
|
371
|
+
const stored = {
|
|
372
|
+
version: 1,
|
|
373
|
+
spec: selectDraftSpecPreferences(spec)
|
|
374
|
+
};
|
|
375
|
+
window.localStorage.setItem(DRAFT_SPEC_PREFERENCES_STORAGE_KEY, JSON.stringify(stored));
|
|
376
|
+
} catch {
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// src/server/ShellModeContext.tsx
|
|
322
381
|
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
323
382
|
var DEFAULT_AGENT_CONFIG = {
|
|
324
383
|
mode: "AgentLibraryWithComposer"
|
|
@@ -365,8 +424,9 @@ function ShellModeProvider({
|
|
|
365
424
|
}) {
|
|
366
425
|
const capabilities = useServerCapabilities();
|
|
367
426
|
const refreshCapabilities = useOptionalRefreshServerCapabilities();
|
|
368
|
-
const
|
|
369
|
-
|
|
427
|
+
const rememberedSpecRef = useRef2(readDraftSpecPreferences());
|
|
428
|
+
const mutableSeedRef = useRef2(rememberedSpecRef.current ?? mutableSeedFromConfig(agentConfig));
|
|
429
|
+
if (rememberedSpecRef.current == null && (agentConfig.mode === "AgentComposer" || agentConfig.mode === "AgentLibraryWithComposer") && agentConfig.defaultAgentSpec != null) {
|
|
370
430
|
mutableSeedRef.current = agentConfig.defaultAgentSpec;
|
|
371
431
|
}
|
|
372
432
|
const mutableSeed = mutableSeedRef.current;
|
|
@@ -482,6 +542,12 @@ function ShellModeProvider({
|
|
|
482
542
|
refreshCapabilities?.();
|
|
483
543
|
selectLibraryAgent({ isMutable: true, agentSpec: mutableSeedRef.current });
|
|
484
544
|
}, [isComposerEnabled, refreshCapabilities, selectLibraryAgent]);
|
|
545
|
+
const rememberDraftSpec = useCallback2((agentSpec) => {
|
|
546
|
+
const preferences = selectDraftSpecPreferences(agentSpec);
|
|
547
|
+
rememberedSpecRef.current = preferences;
|
|
548
|
+
mutableSeedRef.current = preferences;
|
|
549
|
+
writeDraftSpecPreferences(preferences);
|
|
550
|
+
}, []);
|
|
485
551
|
const openHistorySession = useCallback2(
|
|
486
552
|
({
|
|
487
553
|
sessionId,
|
|
@@ -556,6 +622,7 @@ function ShellModeProvider({
|
|
|
556
622
|
bindMutableAgent,
|
|
557
623
|
selectAgent,
|
|
558
624
|
openDraft,
|
|
625
|
+
rememberDraftSpec,
|
|
559
626
|
openHistorySession,
|
|
560
627
|
clearChat,
|
|
561
628
|
runtimeKey,
|
|
@@ -579,6 +646,7 @@ function ShellModeProvider({
|
|
|
579
646
|
bindMutableAgent,
|
|
580
647
|
selectAgent,
|
|
581
648
|
openDraft,
|
|
649
|
+
rememberDraftSpec,
|
|
582
650
|
openHistorySession,
|
|
583
651
|
clearChat,
|
|
584
652
|
runtimeKey,
|
|
@@ -686,6 +754,7 @@ function DraftCatalogStore({ server, children }) {
|
|
|
686
754
|
const [models, setModels] = useState3([]);
|
|
687
755
|
const [skills, setSkills] = useState3([]);
|
|
688
756
|
const [connectors, setConnectors] = useState3([]);
|
|
757
|
+
const [completedEpoch, setCompletedEpoch] = useState3(null);
|
|
689
758
|
const [loading, setLoading] = useState3(false);
|
|
690
759
|
const [error, setError] = useState3(null);
|
|
691
760
|
const ensureLoaded = useCallback3(() => {
|
|
@@ -732,15 +801,19 @@ function DraftCatalogStore({ server, children }) {
|
|
|
732
801
|
}
|
|
733
802
|
setError(errors[0] ?? null);
|
|
734
803
|
}).finally(() => {
|
|
735
|
-
if (!cancelled)
|
|
804
|
+
if (!cancelled) {
|
|
805
|
+
setCompletedEpoch(requestEpoch);
|
|
806
|
+
setLoading(false);
|
|
807
|
+
}
|
|
736
808
|
});
|
|
737
809
|
return () => {
|
|
738
810
|
cancelled = true;
|
|
739
811
|
};
|
|
740
812
|
}, [requestEpoch, server]);
|
|
813
|
+
const loaded = requestEpoch !== null && completedEpoch === requestEpoch;
|
|
741
814
|
const value = useMemo3(
|
|
742
|
-
() => ({ server, models, skills, connectors, loading, error, ensureLoaded, refresh, refreshConnectors }),
|
|
743
|
-
[server, models, skills, connectors, loading, error, ensureLoaded, refresh, refreshConnectors]
|
|
815
|
+
() => ({ server, models, skills, connectors, loaded, loading, error, ensureLoaded, refresh, refreshConnectors }),
|
|
816
|
+
[server, models, skills, connectors, loaded, loading, error, ensureLoaded, refresh, refreshConnectors]
|
|
744
817
|
);
|
|
745
818
|
return /* @__PURE__ */ jsx7(DraftCatalogContext.Provider, { value, children });
|
|
746
819
|
}
|
|
@@ -751,6 +824,7 @@ function useDraftCatalog() {
|
|
|
751
824
|
models: [],
|
|
752
825
|
skills: [],
|
|
753
826
|
connectors: [],
|
|
827
|
+
loaded: false,
|
|
754
828
|
loading: false,
|
|
755
829
|
error: null,
|
|
756
830
|
ensureLoaded: IDLE_ENSURE,
|
|
@@ -785,4 +859,4 @@ export {
|
|
|
785
859
|
DraftCatalogProvider,
|
|
786
860
|
useDraftCatalog
|
|
787
861
|
};
|
|
788
|
-
//# sourceMappingURL=chunk-
|
|
862
|
+
//# sourceMappingURL=chunk-XAZ5HJXV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/icons/Icon.tsx","../src/icons/IconRegistry.tsx","../src/atoms/primitives/Spinner.tsx","../src/atoms/lib/buttonClasses.ts","../src/server/ServerContext.tsx","../src/server/ShellModeContext.tsx","../src/server/draftSpecPreferences.ts","../src/utils/getErrorMessage.ts","../src/atoms/lib/CompactLayoutContext.tsx","../src/atoms/draft/DraftCatalogProvider.tsx"],"sourcesContent":["import { createElement, isValidElement, useContext, type CSSProperties, type ReactNode } from 'react';\n\nimport { cn } from '../atoms/lib/cn.js';\nimport { ThemeContext } from '../theme/ThemeProvider.js';\nimport type { IconComponent, IconEntry, IconProps as ThemeIconProps } from '../theme/types.js';\nimport { lookupIcon, resolveIconName } from './IconRegistry.js';\n\nexport type IconProps = ThemeIconProps & {\n name: string | readonly string[];\n};\n\ntype IconRenderProps = {\n className?: string;\n style?: CSSProperties;\n size?: string | number;\n width?: string | number;\n height?: string | number;\n role?: string;\n} & Pick<IconProps, 'aria-hidden' | 'aria-label' | 'data-testid'>;\n\nfunction isComponent(entry: IconEntry): entry is IconComponent {\n if (typeof entry === 'function') return true;\n // Lucide (and other) icons are forwardRef objects, not functions\n return (\n typeof entry === 'object' &&\n entry !== null &&\n !isValidElement(entry) &&\n !Array.isArray(entry) &&\n '$$typeof' in entry\n );\n}\n\nfunction renderEntry(entry: IconEntry, props: IconRenderProps): ReactNode {\n if (isComponent(entry)) {\n const { size, className, style, ...aria } = props;\n return createElement(entry, {\n className: cn('inline-block shrink-0', className),\n style,\n size,\n width: size,\n height: size,\n 'aria-hidden': aria['aria-label'] ? undefined : (aria['aria-hidden'] ?? true),\n 'aria-label': aria['aria-label'],\n ...(aria['data-testid'] === undefined ? {} : { 'data-testid': aria['data-testid'] }),\n role: aria['aria-label'] ? 'img' : undefined,\n });\n }\n return entry;\n}\n\nexport function Icon({ name, className, style, size = '1em', ...aria }: IconProps) {\n const themeIcons = useContext(ThemeContext)?.icons;\n const resolved = resolveIconName(name);\n const entry = lookupIcon(resolved, themeIcons);\n if (!entry) return null;\n return <>{renderEntry(entry, { className, style, size, ...aria })}</>;\n}\n\nexport function useIcon(name: string | readonly string[]): IconEntry | undefined {\n const themeIcons = useContext(ThemeContext)?.icons;\n return lookupIcon(resolveIconName(name), themeIcons);\n}\n","import {\n Archive,\n ArrowDown,\n ArrowLeft,\n ArrowUp,\n BookOpen,\n Bot,\n Box,\n Brain,\n Check,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n CircleAlert,\n CircleCheck,\n CircleX,\n Clock,\n Code2,\n Copy,\n Cpu,\n Download,\n Ellipsis,\n ExternalLink,\n File,\n Github,\n History,\n Info,\n Lightbulb,\n ListChecks,\n ListFilter,\n ListOrdered,\n Loader2,\n Lock,\n LogOut,\n Maximize2,\n Menu,\n Minimize2,\n Moon,\n PanelLeftClose,\n PanelLeftOpen,\n Paperclip,\n Pencil,\n Play,\n Plug,\n Plus,\n RotateCw,\n Save,\n Search,\n Settings,\n Sparkle,\n SquarePen,\n Sun,\n Terminal,\n Trash2,\n TriangleAlert,\n Wrench,\n X,\n} from 'lucide-react';\nimport type { SVGProps } from 'react';\n\nimport type { IconEntry, IconMap } from '../theme/types.js';\n\n/** Lucide `broom` (https://lucide.dev/icons/broom) — not in lucide-react 0.x. */\nfunction Broom({ size = 24, ...props }: SVGProps<SVGSVGElement> & { size?: string | number }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <path d=\"M13.5 10.5 22 2\" />\n <path d=\"M14.734 13.841a2 2 0 00-.314-2.42L12.58 9.58a2 2 0 00-2.421-.314l-7.657 4.461A1 1 0 002.3 15.3l6.403 6.403a1 1 0 001.571-.204z\" />\n <path d=\"m5 18 2-2\" />\n <path d=\"m7.699 10.7 5.602 5.601\" />\n </svg>\n );\n}\n\nconst registry = new Map<string, IconEntry>();\n\nexport function registerIcon(name: string, icon: IconEntry): void {\n registry.set(name, icon);\n}\n\nexport function registerIcons(icons: IconMap): void {\n for (const [name, icon] of Object.entries(icons)) {\n registry.set(name, icon);\n }\n}\n\nexport function getIcon(name: string): IconEntry | undefined {\n return registry.get(name);\n}\n\nexport function resolveIconName(icon: string | readonly string[]): string {\n if (typeof icon === 'string') return icon;\n // e.g. [\"far\", \"clone\"] → \"clone\"\n return icon[icon.length - 1] ?? '';\n}\n\nconst defaults: Record<string, IconEntry> = {\n paperclip: Paperclip,\n 'arrow-up': ArrowUp,\n 'arrow-down': ArrowDown,\n 'arrow-left': ArrowLeft,\n xmark: X,\n check: Check,\n pencil: Pencil,\n play: Play,\n 'square-pen': SquarePen,\n 'rotate-right': RotateCw,\n broom: Broom,\n ellipsis: Ellipsis,\n trash: Trash2,\n 'box-archive': Archive,\n 'clock-rotate-left': History,\n 'circle-exclamation': CircleAlert,\n info: Info,\n 'triangle-exclamation': TriangleAlert,\n 'chevron-down': ChevronDown,\n 'chevron-left': ChevronLeft,\n 'chevron-right': ChevronRight,\n loader: Loader2,\n file: File,\n clone: Copy,\n copy: Copy,\n bars: Menu,\n 'panel-left-close': PanelLeftClose,\n 'panel-left-open': PanelLeftOpen,\n plus: Plus,\n sun: Sun,\n moon: Moon,\n settings: Settings,\n 'log-out': LogOut,\n search: Search,\n clock: Clock,\n 'circle-check': CircleCheck,\n 'circle-xmark': CircleX,\n 'oauth-success': CircleCheck,\n 'oauth-error': CircleX,\n 'oauth-loading': Loader2,\n 'welcome-sparkle': Sparkle,\n robot: Bot,\n 'book-open': BookOpen,\n funnel: ListFilter,\n plug: Plug,\n 'list-check': ListChecks,\n lock: Lock,\n lightbulb: Lightbulb,\n wrench: Wrench,\n cpu: Cpu,\n cube: Box,\n 'list-ol': ListOrdered,\n download: Download,\n save: Save,\n brain: Brain,\n terminal: Terminal,\n code: Code2,\n expand: Maximize2,\n 'expand-alt': Maximize2,\n compress: Minimize2,\n 'external-link': ExternalLink,\n github: Github,\n};\n\nfor (const [name, icon] of Object.entries(defaults)) {\n registry.set(name, icon);\n}\n\n/** Merge host `theme.icons` over the registry for a single lookup (does not mutate). */\nexport function lookupIcon(name: string, themeIcons?: IconMap): IconEntry | undefined {\n if (themeIcons && name in themeIcons) {\n return themeIcons[name];\n }\n return registry.get(name);\n}\n","import React from 'react';\n\nimport { cn } from '../lib/cn.js';\n\nexport type SpinnerProps = React.SVGProps<SVGSVGElement> & {\n size?: number;\n};\n\nexport function Spinner({ size = 16, className, ...props }: SpinnerProps) {\n const r = (size / 2) * 0.75;\n const cx = size / 2;\n const circumference = 2 * Math.PI * r;\n\n return (\n <svg\n role=\"status\"\n aria-label=\"Loading\"\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n fill=\"none\"\n className={cn('animate-spin', className)}\n {...props}\n >\n <circle\n cx={cx}\n cy={cx}\n r={r}\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeDasharray={`${circumference * 0.75} ${circumference * 0.25}`}\n opacity={0.8}\n />\n </svg>\n );\n}\n","import { cn } from './cn.js';\n\nexport type AuiButtonVariant = 'default' | 'secondary' | 'ghost' | 'destructive' | 'outline';\nexport type AuiButtonSize = 'default' | 'sm' | 'lg' | 'icon';\n\nconst variantClasses: Record<AuiButtonVariant, string> = {\n default: 'bg-primary-button-bg text-primary-button-text shadow hover:bg-primary-button-hover',\n secondary:\n 'border border-input-border bg-secondary-button-bg text-secondary-button-text shadow-sm hover:bg-secondary-button-hover',\n ghost: 'bg-ghost-button-bg text-ghost-button-text hover:bg-ghost-button-hover',\n destructive: 'bg-failure-bg text-failure-text shadow-sm hover:bg-failure-bg/90',\n outline:\n 'border border-input-border bg-secondary-button-bg text-secondary-button-text shadow-sm hover:bg-secondary-button-hover',\n};\n\nconst sizeClasses: Record<AuiButtonSize, string> = {\n default: 'h-9 px-4 py-2 text-sm',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8 text-base',\n icon: 'h-8 w-8',\n};\n\nconst baseClasses =\n 'inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-focus-ring disabled:cursor-not-allowed disabled:opacity-50';\n\n/** Shared Button / native `<button>` className helper (SDK utilities are layered). */\nexport function auiButtonClass({\n variant = 'default',\n size = 'default',\n className,\n}: {\n variant?: AuiButtonVariant;\n size?: AuiButtonSize;\n className?: string;\n} = {}): string {\n return cn(baseClasses, variantClasses[variant], sizeClasses[size], className);\n}\n","'use client';\n\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport type { AgentBuilderCapabilitiesResponse, AgentUIServer, CatalogServer } from './types.js';\n\nconst ServerContext = createContext<AgentUIServer | null>(null);\nconst ServerCapabilitiesContext = createContext<{\n capabilities: AgentBuilderCapabilitiesResponse['data'] | null;\n refresh: () => void;\n} | null>(null);\n\nexport function ServerProvider({ server, children }: { server: AgentUIServer; children: ReactNode }) {\n const [capabilities, setCapabilities] = useState<AgentBuilderCapabilitiesResponse['data'] | null>(null);\n const cancelActiveRequestRef = useRef<(() => void) | null>(null);\n const refreshCapabilities = useCallback(() => {\n cancelActiveRequestRef.current?.();\n let cancelled = false;\n cancelActiveRequestRef.current = () => {\n cancelled = true;\n };\n void server\n .getCapabilities()\n .then(response => {\n if (!cancelled) setCapabilities(response.data);\n })\n .catch(() => {\n // Preserve the last known capabilities when a refresh fails.\n });\n }, [server]);\n\n useEffect(() => {\n setCapabilities(null);\n refreshCapabilities();\n return () => {\n cancelActiveRequestRef.current?.();\n };\n }, [refreshCapabilities]);\n\n const capabilitiesValue = useMemo(\n () => ({ capabilities, refresh: refreshCapabilities }),\n [capabilities, refreshCapabilities],\n );\n\n return (\n <ServerContext.Provider value={server}>\n <ServerCapabilitiesContext.Provider value={capabilitiesValue}>{children}</ServerCapabilitiesContext.Provider>\n </ServerContext.Provider>\n );\n}\n\nexport function useServer(): AgentUIServer {\n const server = useContext(ServerContext);\n if (server == null) {\n throw new Error('useServer must be used within a ServerProvider.');\n }\n return server;\n}\n\nexport function useOptionalServer(): AgentUIServer | null {\n return useContext(ServerContext);\n}\n\nexport function useServerCapabilities(): AgentBuilderCapabilitiesResponse['data'] | null {\n return useContext(ServerCapabilitiesContext)?.capabilities ?? null;\n}\n\nexport function useOptionalRefreshServerCapabilities(): (() => void) | null {\n return useContext(ServerCapabilitiesContext)?.refresh ?? null;\n}\n\nexport function useCatalogServer(): CatalogServer {\n const server = useServer();\n if (server.catalog == null) {\n throw new Error('useCatalogServer requires AgentUIServer.catalog. Pass catalog to createTrueFoundryServer.');\n }\n return server.catalog;\n}\n\nexport function useOptionalCatalogServer(): CatalogServer | null {\n return useOptionalServer()?.catalog ?? null;\n}\n","'use client';\n\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport {\n readDraftSpecPreferences,\n selectDraftSpecPreferences,\n writeDraftSpecPreferences,\n} from './draftSpecPreferences.js';\nimport { useOptionalRefreshServerCapabilities, useServerCapabilities } from './ServerContext.js';\nimport type { AgentLibraryEntry, AgentSpec } from './types.js';\n\n/** Host-facing shell configuration for agent / library / composer chrome. */\nexport type AgentConfig =\n | { mode: 'SingleAgent'; name: string }\n | { mode: 'AgentLibrary' }\n | { mode: 'AgentComposer'; defaultAgentSpec?: AgentSpec }\n | { mode: 'AgentLibraryWithComposer'; defaultAgentSpec?: AgentSpec };\n\nexport const DEFAULT_AGENT_CONFIG: AgentConfig = {\n mode: 'AgentLibraryWithComposer',\n};\n\n/**\n * Active chat binding. Mutability (`isMutable`) decides composer / Save / updateSession —\n * not a parallel draft|named shell type.\n */\nexport type ShellMode =\n | { status: 'idle' }\n | {\n status: 'active';\n isMutable: boolean;\n /** Identity for immutable bind + history filter. */\n agentId?: string;\n /** Display / welcome label (often same as agentId). */\n agentName?: string;\n /** Seed for mutable (draft) runtime. */\n agentSpec?: AgentSpec;\n locked: boolean;\n };\n\n/** Library / New Chat create intent. */\nexport type SelectLibraryAgentRequest = {\n isMutable: boolean;\n agentId?: string;\n agentName?: string;\n agentSpec?: AgentSpec;\n};\n\nexport type SettingsSection = 'models' | 'connectors' | 'skills' | 'sandbox';\n\ntype ShellModeContextValue = {\n mode: ShellMode;\n /** Host agentConfig mode (capabilities source). */\n agentConfigMode: AgentConfig['mode'];\n /** Agents Library chrome. */\n isLibraryEnabled: boolean;\n /** Mutable composer / Save Agent chrome (host capability). */\n isComposerEnabled: boolean;\n /** Sidebar / list New Chat control. */\n isNewChatEnabled: boolean;\n settingsOpen: boolean;\n settingsSection: SettingsSection;\n setSettingsOpen: (open: boolean, section?: SettingsSection) => void;\n /**\n * Bind from the Agents Library (Try = immutable, Edit = mutable + agentSpec).\n * Prefer this over `selectAgent` / `openDraft` when both fields are available.\n */\n selectLibraryAgent: (req: SelectLibraryAgentRequest) => void;\n /**\n * Attach identity + agentSpec to the *current* mutable chat without remounting.\n * Used after `saveAgent` so the same draft session continues as an editable agent.\n */\n bindMutableAgent: (req: { agentId: string; agentName: string; agentSpec: AgentSpec }) => void;\n /** @deprecated Prefer `selectLibraryAgent({ isMutable: false, agentName })`. */\n selectAgent: (agentName: string) => void;\n /** @deprecated Prefer `selectLibraryAgent({ isMutable: true, agentSpec })`. */\n openDraft: () => void;\n /** Remember plain-draft composer choices as the seed for future new chats. */\n rememberDraftSpec: (agentSpec: AgentSpec) => void;\n /**\n * Open a history session, remounting when mutability/identity changes.\n * Prefer explicit `isMutable` from the session row; when omitted, agentName\n * present → immutable and agentName absent → mutable. Immutable rows may omit\n * `agentName` when the registry agent was deleted.\n */\n openHistorySession: (req: { sessionId: string; agentName?: string; isMutable?: boolean }) => void;\n /** Reset current chat; no-op when idle. */\n clearChat: () => void;\n /** Remount key for the chat runtime when binding changes. */\n runtimeKey: string;\n /**\n * History list filter forwarded as `listSessions({ agentId })`.\n * `null` = All chats. Only meaningful when `isLibraryEnabled`.\n */\n historyAgentFilter: string | null;\n setHistoryAgentFilter: (agentId: string | null) => void;\n /** Effective `listSessionsAgentId` for the runtime (SingleAgent locks to name). */\n listSessionsAgentId: string | undefined;\n /** Session to open after a binding remount (history click across mutability). */\n pendingSessionId: string | undefined;\n /**\n * Bumped when the Agents Library catalog may have changed (e.g. after saveAgent).\n * Library chrome should re-fetch when this changes.\n */\n agentsListEpoch: number;\n invalidateAgentsList: () => void;\n};\n\nconst ShellModeContext = createContext<ShellModeContextValue | null>(null);\n\nconst FALLBACK_MUTABLE_SPEC: AgentSpec = {\n model: { name: 'openai-main/gpt-4.1' },\n};\n\nfunction mutableSeedFromConfig(config: AgentConfig): AgentSpec {\n if (config.mode === 'AgentComposer' || config.mode === 'AgentLibraryWithComposer') {\n return config.defaultAgentSpec ?? FALLBACK_MUTABLE_SPEC;\n }\n return FALLBACK_MUTABLE_SPEC;\n}\n\nfunction initialMode(config: AgentConfig, mutableSeed: AgentSpec): ShellMode {\n switch (config.mode) {\n case 'SingleAgent':\n return {\n status: 'active',\n isMutable: false,\n agentId: config.name,\n agentName: config.name,\n locked: true,\n };\n case 'AgentLibrary':\n return { status: 'idle' };\n case 'AgentComposer':\n case 'AgentLibraryWithComposer':\n return {\n status: 'active',\n isMutable: true,\n agentSpec: mutableSeed,\n locked: false,\n };\n }\n}\n\nfunction libraryAgentId(agent: Pick<AgentLibraryEntry, 'agentId' | 'name'>): string {\n return agent.agentId ?? agent.name;\n}\n\nexport function ShellModeProvider({\n agentConfig = DEFAULT_AGENT_CONFIG,\n initialSettingsOpen = false,\n children,\n}: {\n agentConfig?: AgentConfig;\n /** Open settings on first paint (e.g. host boot with no models). Does not re-open later. */\n initialSettingsOpen?: boolean;\n children: ReactNode;\n}) {\n const capabilities = useServerCapabilities();\n const refreshCapabilities = useOptionalRefreshServerCapabilities();\n const rememberedSpecRef = useRef<AgentSpec | null>(readDraftSpecPreferences());\n const mutableSeedRef = useRef(rememberedSpecRef.current ?? mutableSeedFromConfig(agentConfig));\n if (\n rememberedSpecRef.current == null &&\n (agentConfig.mode === 'AgentComposer' || agentConfig.mode === 'AgentLibraryWithComposer') &&\n agentConfig.defaultAgentSpec != null\n ) {\n mutableSeedRef.current = agentConfig.defaultAgentSpec;\n }\n const mutableSeed = mutableSeedRef.current;\n\n const isLibraryEnabled = agentConfig.mode === 'AgentLibrary' || agentConfig.mode === 'AgentLibraryWithComposer';\n const isComposerEnabled = agentConfig.mode === 'AgentComposer' || agentConfig.mode === 'AgentLibraryWithComposer';\n const isNewChatEnabled = agentConfig.mode !== 'AgentLibrary';\n const locked = agentConfig.mode === 'SingleAgent';\n\n const [mode, setMode] = useState<ShellMode>(() => initialMode(agentConfig, mutableSeed));\n const [mutableEpoch, setMutableEpoch] = useState(0);\n const [clearEpoch, setClearEpoch] = useState(0);\n const [agentsListEpoch, setAgentsListEpoch] = useState(0);\n const [settingsOpenState, setSettingsOpenState] = useState(initialSettingsOpen);\n const [settingsSection, setSettingsSection] = useState<SettingsSection>('models');\n const [historyAgentFilter, setHistoryAgentFilter] = useState<string | null>(null);\n const [pendingSessionId, setPendingSessionId] = useState<string | undefined>(undefined);\n const settingsEnabled = capabilities?.settings?.enabled !== false;\n const settingsOpen = settingsEnabled && settingsOpenState;\n const setSettingsOpen = useCallback(\n (open: boolean, section?: SettingsSection) => {\n if (section !== undefined) {\n setSettingsSection(section);\n }\n setSettingsOpenState(settingsEnabled && open);\n },\n [settingsEnabled],\n );\n\n useEffect(() => {\n if (!settingsEnabled) {\n setSettingsOpenState(false);\n }\n }, [settingsEnabled]);\n\n const invalidateAgentsList = useCallback(() => {\n setAgentsListEpoch(n => n + 1);\n }, []);\n\n const lockedAgentName = agentConfig.mode === 'SingleAgent' ? agentConfig.name : '';\n const effectiveMode: ShellMode = useMemo(() => {\n if (!locked) return mode;\n return {\n status: 'active',\n isMutable: false,\n agentId: lockedAgentName,\n agentName: lockedAgentName,\n locked: true,\n };\n }, [locked, lockedAgentName, mode]);\n\n const listSessionsAgentId = useMemo(() => {\n if (locked) return lockedAgentName;\n if (!isLibraryEnabled) return undefined;\n return historyAgentFilter ?? undefined;\n }, [locked, lockedAgentName, isLibraryEnabled, historyAgentFilter]);\n\n const bumpEpoch = useCallback((isMutable: boolean) => {\n if (isMutable) setMutableEpoch(n => n + 1);\n else setClearEpoch(n => n + 1);\n }, []);\n\n const selectLibraryAgent = useCallback(\n (req: SelectLibraryAgentRequest) => {\n if (req.isMutable) {\n if (!isComposerEnabled) return;\n setSettingsOpen(false);\n setPendingSessionId(undefined);\n setMode({\n status: 'active',\n isMutable: true,\n agentId: req.agentId,\n agentName: req.agentName,\n agentSpec: req.agentSpec ?? mutableSeedRef.current,\n locked: false,\n });\n bumpEpoch(true);\n return;\n }\n if (!isLibraryEnabled) return;\n const agentName = req.agentName ?? req.agentId;\n if (agentName == null) return;\n setSettingsOpen(false);\n setPendingSessionId(undefined);\n setMode({\n status: 'active',\n isMutable: false,\n agentId: req.agentId ?? agentName,\n agentName,\n locked: false,\n });\n bumpEpoch(false);\n },\n [isComposerEnabled, isLibraryEnabled, bumpEpoch, setSettingsOpen],\n );\n\n const bindMutableAgent = useCallback(\n (req: { agentId: string; agentName: string; agentSpec: AgentSpec }) => {\n if (!isComposerEnabled) return;\n setMode(prev => {\n if (prev.status !== 'active' || !prev.isMutable) return prev;\n return {\n status: 'active',\n isMutable: true,\n agentId: req.agentId,\n agentName: req.agentName,\n agentSpec: req.agentSpec,\n locked: false,\n };\n });\n },\n [isComposerEnabled],\n );\n\n const selectAgent = useCallback(\n (name: string) => {\n selectLibraryAgent({ isMutable: false, agentId: name, agentName: name });\n },\n [selectLibraryAgent],\n );\n\n const openDraft = useCallback(() => {\n if (!isComposerEnabled) return;\n refreshCapabilities?.();\n selectLibraryAgent({ isMutable: true, agentSpec: mutableSeedRef.current });\n }, [isComposerEnabled, refreshCapabilities, selectLibraryAgent]);\n\n const rememberDraftSpec = useCallback((agentSpec: AgentSpec) => {\n const preferences = selectDraftSpecPreferences(agentSpec);\n rememberedSpecRef.current = preferences;\n mutableSeedRef.current = preferences;\n writeDraftSpecPreferences(preferences);\n }, []);\n\n const openHistorySession = useCallback(\n ({\n sessionId,\n agentName,\n isMutable: isMutableOpt,\n }: {\n sessionId: string;\n agentName?: string;\n isMutable?: boolean;\n }) => {\n setSettingsOpen(false);\n setPendingSessionId(sessionId);\n const isMutable = isMutableOpt ?? agentName == null;\n if (isMutable) {\n if (!isComposerEnabled) return;\n setMode({\n status: 'active',\n isMutable: true,\n agentSpec: mutableSeedRef.current,\n locked: false,\n });\n bumpEpoch(true);\n return;\n }\n // Immutable: allow orphaned refs (deleted agent → no agentName).\n if (locked) {\n if (agentName == null || lockedAgentName !== agentName) return;\n } else if (!isLibraryEnabled) {\n return;\n }\n setMode({\n status: 'active',\n isMutable: false,\n locked: false,\n ...(agentName != null ? { agentId: agentName, agentName } : {}),\n });\n bumpEpoch(false);\n },\n [isLibraryEnabled, isComposerEnabled, locked, lockedAgentName, bumpEpoch, setSettingsOpen],\n );\n\n const clearChat = useCallback(() => {\n if (effectiveMode.status === 'idle') return;\n setPendingSessionId(undefined);\n if (effectiveMode.isMutable) {\n // Preserve Edit binding (name + seeded spec); blank drafts fall back to host seed.\n setMode({\n status: 'active',\n isMutable: true,\n agentId: effectiveMode.agentId,\n agentName: effectiveMode.agentName,\n agentSpec: effectiveMode.agentSpec ?? mutableSeedRef.current,\n locked: false,\n });\n bumpEpoch(true);\n return;\n }\n bumpEpoch(false);\n }, [effectiveMode, bumpEpoch]);\n\n // Mutable remounts are driven only by mutableEpoch (library Edit / New Chat / Clear).\n // Agent id and model must not be in the key — saveAgent binds those onto the same draft.\n const runtimeKey = useMemo(() => {\n if (effectiveMode.status === 'idle') return 'idle';\n if (effectiveMode.isMutable) {\n return `mut:${pendingSessionId ?? ''}:${mutableEpoch}`;\n }\n const id = effectiveMode.agentId ?? effectiveMode.agentName ?? '';\n return `immut:${id}:${pendingSessionId ?? ''}:${clearEpoch}`;\n }, [effectiveMode, mutableEpoch, clearEpoch, pendingSessionId]);\n\n const value = useMemo<ShellModeContextValue>(\n () => ({\n mode: effectiveMode,\n agentConfigMode: agentConfig.mode,\n isLibraryEnabled,\n isComposerEnabled,\n isNewChatEnabled,\n settingsOpen,\n settingsSection,\n setSettingsOpen,\n selectLibraryAgent,\n bindMutableAgent,\n selectAgent,\n openDraft,\n rememberDraftSpec,\n openHistorySession,\n clearChat,\n runtimeKey,\n historyAgentFilter,\n setHistoryAgentFilter,\n listSessionsAgentId,\n pendingSessionId,\n agentsListEpoch,\n invalidateAgentsList,\n }),\n [\n effectiveMode,\n agentConfig.mode,\n isLibraryEnabled,\n isComposerEnabled,\n isNewChatEnabled,\n settingsOpen,\n settingsSection,\n setSettingsOpen,\n selectLibraryAgent,\n bindMutableAgent,\n selectAgent,\n openDraft,\n rememberDraftSpec,\n openHistorySession,\n clearChat,\n runtimeKey,\n historyAgentFilter,\n listSessionsAgentId,\n pendingSessionId,\n agentsListEpoch,\n invalidateAgentsList,\n ],\n );\n\n return <ShellModeContext.Provider value={value}>{children}</ShellModeContext.Provider>;\n}\n\nexport function useShellMode(): ShellModeContextValue {\n const ctx = useContext(ShellModeContext);\n if (ctx == null) {\n throw new Error('useShellMode must be used within a ShellModeProvider.');\n }\n return ctx;\n}\n\nexport function useOptionalShellMode(): ShellModeContextValue | null {\n return useContext(ShellModeContext);\n}\n\n/** True when the shell is bound to a mutable (editable) agentSpec. */\nexport function shellIsMutable(mode: ShellMode): boolean {\n return mode.status === 'active' && mode.isMutable;\n}\n\nexport { libraryAgentId };\n","import type { AgentSpec } from './types.js';\n\nexport const DRAFT_SPEC_PREFERENCES_STORAGE_KEY = 'tfy-aui-draft-spec-preferences';\n\ntype StoredDraftSpecPreferences = {\n version: 1;\n spec: AgentSpec;\n};\n\nfunction isObject(value: unknown): value is object {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isMountList(value: unknown): boolean {\n return Array.isArray(value) && value.every(isObject);\n}\n\nfunction isAgentSpec(value: unknown): value is AgentSpec {\n if (!isObject(value)) return false;\n const model = Reflect.get(value, 'model');\n if (!isObject(model) || typeof Reflect.get(model, 'name') !== 'string') return false;\n\n const params = Reflect.get(model, 'params');\n if (params !== undefined && !isObject(params)) return false;\n\n const skills = Reflect.get(value, 'skills');\n if (skills !== undefined && !isMountList(skills)) return false;\n\n const mcpServers = Reflect.get(value, 'mcpServers');\n if (mcpServers !== undefined && !isMountList(mcpServers)) return false;\n\n const config = Reflect.get(value, 'config');\n return config === undefined || isObject(config);\n}\n\nfunction isStoredDraftSpecPreferences(value: unknown): value is StoredDraftSpecPreferences {\n return isObject(value) && Reflect.get(value, 'version') === 1 && isAgentSpec(Reflect.get(value, 'spec'));\n}\n\n/** Keep only composer choices that should seed future new chats. */\nexport function selectDraftSpecPreferences(spec: AgentSpec): AgentSpec {\n return {\n model: spec.model,\n ...(spec.skills !== undefined ? { skills: spec.skills } : {}),\n ...(spec.mcpServers !== undefined ? { mcpServers: spec.mcpServers } : {}),\n ...(spec.config !== undefined ? { config: spec.config } : {}),\n };\n}\n\nexport function readDraftSpecPreferences(): AgentSpec | null {\n if (typeof window === 'undefined') return null;\n try {\n const stored: unknown = JSON.parse(window.localStorage.getItem(DRAFT_SPEC_PREFERENCES_STORAGE_KEY) ?? 'null');\n return isStoredDraftSpecPreferences(stored) ? stored.spec : null;\n } catch {\n return null;\n }\n}\n\nexport function writeDraftSpecPreferences(spec: AgentSpec): void {\n if (typeof window === 'undefined') return;\n try {\n const stored: StoredDraftSpecPreferences = {\n version: 1,\n spec: selectDraftSpecPreferences(spec),\n };\n window.localStorage.setItem(DRAFT_SPEC_PREFERENCES_STORAGE_KEY, JSON.stringify(stored));\n } catch {\n // Storage can be unavailable or full; in-memory carry-over still works.\n }\n}\n","function isRecord(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === 'object';\n}\n\nfunction readNonEmptyString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() !== '' ? value : undefined;\n}\n\n/**\n * Reads a display string from API-shaped errors: `message`, then nested\n * `error.message`. When neither exists, stringifies the value.\n */\nfunction messageFromErrorShaped(value: unknown): string | undefined {\n if (!isRecord(value)) return undefined;\n const direct = readNonEmptyString(value.message);\n if (direct != null) return direct;\n if (isRecord(value.error)) {\n return readNonEmptyString(value.error.message);\n }\n return undefined;\n}\n\nfunction stringifyError(error: unknown): string {\n if (typeof error === 'string') return error;\n if (isRecord(error)) {\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n }\n return String(error);\n}\n\n/**\n * User-facing error text. Prefers HTTP body `{ error: { message } }` when\n * present (e.g. TrueForgeError), then `error.message` / `error.error.message`,\n * then `fallback`, then a string form of the value.\n */\nexport function getErrorMessage(error: unknown, fallback?: string): string {\n if (typeof error === 'string') {\n const trimmed = error.trim();\n if (trimmed !== '') return error;\n return fallback ?? error;\n }\n\n if (isRecord(error) && 'body' in error) {\n const fromBody = messageFromErrorShaped(error.body);\n if (fromBody != null) return fromBody;\n if (error.body != null) {\n if (typeof error.body === 'string') {\n const trimmed = error.body.trim();\n if (trimmed !== '') return error.body;\n } else {\n return stringifyError(error.body);\n }\n }\n }\n\n const fromShape = messageFromErrorShaped(error);\n if (fromShape != null) return fromShape;\n\n if (fallback != null) return fallback;\n return stringifyError(error);\n}\n","'use client';\n\nimport { createContext, useContext, type ReactNode } from 'react';\n\nconst CompactLayoutContext = createContext(false);\n\nexport function CompactLayoutProvider({ children }: { children: ReactNode }) {\n return <CompactLayoutContext.Provider value>{children}</CompactLayoutContext.Provider>;\n}\n\nexport function useCompactLayout() {\n return useContext(CompactLayoutContext);\n}\n","'use client';\n\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState, type ReactNode } from 'react';\n\nimport { useOptionalServer } from '../../server/ServerContext.js';\nimport type { AgentSkill, AgentUIServer, ConnectorState, ModelSelection } from '../../server/types.js';\nimport { getErrorMessage } from '../../utils/getErrorMessage.js';\n\ntype DraftCatalogValue = {\n models: ModelSelection[];\n skills: AgentSkill[];\n connectors: ConnectorState[];\n loaded: boolean;\n loading: boolean;\n error: string | null;\n /** Kick off catalog fetch (idempotent). Call when a picker opens. */\n ensureLoaded: () => void;\n /** Reload all collections after settings mutate catalog-backed configuration. */\n refresh: () => void;\n /** Refresh connector auth state without reloading unrelated catalogs. */\n refreshConnectors: () => Promise<void>;\n};\n\ntype DraftCatalogContextValue = DraftCatalogValue & {\n server: AgentUIServer | null;\n};\n\nconst DraftCatalogContext = createContext<DraftCatalogContextValue | null>(null);\n\nconst IDLE_ENSURE = () => undefined;\nconst IDLE_REFRESH = async () => undefined;\n\nexport function DraftCatalogProvider({ children }: { children: ReactNode }) {\n const server = useOptionalServer();\n const existing = useContext(DraftCatalogContext);\n if (existing?.server === server) {\n return children;\n }\n return <DraftCatalogStore server={server}>{children}</DraftCatalogStore>;\n}\n\nfunction DraftCatalogStore({ server, children }: { server: AgentUIServer | null; children: ReactNode }) {\n const [requestEpoch, setRequestEpoch] = useState<number | null>(null);\n const [models, setModels] = useState<ModelSelection[]>([]);\n const [skills, setSkills] = useState<AgentSkill[]>([]);\n const [connectors, setConnectors] = useState<ConnectorState[]>([]);\n const [completedEpoch, setCompletedEpoch] = useState<number | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const ensureLoaded = useCallback(() => {\n setRequestEpoch(current => current ?? 0);\n }, []);\n\n const refresh = useCallback(() => {\n setRequestEpoch(current => (current ?? -1) + 1);\n }, []);\n\n const refreshConnectors = useCallback(async () => {\n if (!server) return;\n setLoading(true);\n setError(null);\n try {\n const nextConnectors = await server.getMcp();\n setConnectors(nextConnectors);\n } catch (reason: unknown) {\n setError(getErrorMessage(reason, 'Failed to load connectors.'));\n } finally {\n setLoading(false);\n }\n }, [server]);\n\n useEffect(() => {\n if (requestEpoch === null || !server) return;\n let cancelled = false;\n setLoading(true);\n setError(null);\n // Settle each list alone so one failing picker does not blank the others.\n void Promise.allSettled([server.getModels(), server.getSkills(), server.getMcp()])\n .then(([modelsResult, skillsResult, mcpResult]) => {\n if (cancelled) return;\n const errors: string[] = [];\n if (modelsResult.status === 'fulfilled') {\n setModels(modelsResult.value);\n } else {\n errors.push(getErrorMessage(modelsResult.reason, 'Failed to load models.'));\n }\n if (skillsResult.status === 'fulfilled') {\n setSkills(skillsResult.value);\n } else {\n errors.push(getErrorMessage(skillsResult.reason, 'Failed to load skills.'));\n }\n if (mcpResult.status === 'fulfilled') {\n setConnectors(mcpResult.value);\n } else {\n errors.push(getErrorMessage(mcpResult.reason, 'Failed to load connectors.'));\n }\n setError(errors[0] ?? null);\n })\n .finally(() => {\n if (!cancelled) {\n setCompletedEpoch(requestEpoch);\n setLoading(false);\n }\n });\n return () => {\n cancelled = true;\n };\n }, [requestEpoch, server]);\n\n const loaded = requestEpoch !== null && completedEpoch === requestEpoch;\n const value = useMemo(\n () => ({ server, models, skills, connectors, loaded, loading, error, ensureLoaded, refresh, refreshConnectors }),\n [server, models, skills, connectors, loaded, loading, error, ensureLoaded, refresh, refreshConnectors],\n );\n\n return <DraftCatalogContext.Provider value={value}>{children}</DraftCatalogContext.Provider>;\n}\n\nexport function useDraftCatalog(): DraftCatalogValue {\n const ctx = useContext(DraftCatalogContext);\n if (ctx == null) {\n return {\n models: [],\n skills: [],\n connectors: [],\n loaded: false,\n loading: false,\n error: null,\n ensureLoaded: IDLE_ENSURE,\n refresh: IDLE_ENSURE,\n refreshConnectors: IDLE_REFRESH,\n };\n }\n return ctx;\n}\n"],"mappings":"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","names":["jsx","jsx","useContext","jsx","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","jsx","createContext","useRef","useState","useCallback","useEffect","useMemo","useContext","createContext","useContext","jsx","createContext","useCallback","useContext","useEffect","useMemo","useState","jsx","createContext","useContext","useState","useCallback","useEffect","useMemo"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export { AssistantState, useAui, useAuiState } from '@assistant-ui/react';
|
|
|
6
6
|
import { UseTrueFoundryAgentRuntimeOptions, TrueFoundryAgentConfig } from '@truefoundry/assistant-ui-runtime';
|
|
7
7
|
export { DraftAgentConfig, NamedAgentConfig, TrueFoundryAgentConfig, UseTrueFoundryAgentRuntimeOptions, mergeAgentSpec, trueFoundryAttachmentAdapter, useTrueFoundryAgentRuntime, useTrueFoundryAgentSpec, useTrueFoundryCancel, useTrueFoundryDownloadSandboxFile, useTrueFoundryHistoryPagination, useTrueFoundryMcpAuth, useTrueFoundryRespondToToolApproval, useTrueFoundryToolResponses, useTrueFoundryTurnId, useTrueFoundryUpdateAgentSpec } from '@truefoundry/assistant-ui-runtime';
|
|
8
8
|
import { AgentSpec, AgentLibraryEntry, CatalogServer, AgentUIServer, AgentBuilderCapabilitiesResponse, ModelSelection, AgentSkill, ConnectorState } from '@truefoundry/assistant-ui-runtime/server';
|
|
9
|
-
export { AgentBuilderCapabilitiesResponse, AgentBuilderServer, AgentChatServer, AgentLibraryEntry, AgentSkill, AgentSpec, AgentUIServer, ApprovalDecision, AuthenticateConnectorRequest, CatalogServer, ConnectorAuth, ConnectorAuthApiKey, ConnectorAuthNone, ConnectorAuthOAuth, ConnectorAuthPublic, ConnectorAuthPublicApiKey, ConnectorAuthPublicNone, ConnectorAuthPublicOAuth, ConnectorAuthType, ConnectorAuthenticationResult, ConnectorBase, ConnectorCatalogEntry, ConnectorCatalogServer, ConnectorConfigBase, ConnectorState, CreateConnectorRequest, CreateModelProviderRequest, CreateSandboxProviderRequest, CreateSessionRequest, CreateSkillRequest, CreateSkillRequestBase, DefinedSkill, GithubSkill, ImportGithubSkillRequest, ListResult, ListSessionsOrder, ListSessionsParams, McpServerMount, Model, ModelCatalogServer, ModelEntry, ModelParams, ModelProperties, ModelProviderBase, ModelProviderCatalogEntry, ModelProviderConfigBase, ModelSelection, ModelSelectorEntry, PageParams, PreviousTurnIdInput, ProviderEntry, ProviderType, RegistrySkill, SandboxCatalogServer, SandboxProviderBase, SandboxProviderCatalogEntry, SandboxProviderConfig, SaveAgentRequest, SaveAgentResult, SearchAgentsParams, SelectRegistrySkillRequest, Session, SessionEventItem, SkillBase, SkillCatalogEntry, SkillCatalogServer, SkillConfigBase, SkillMount, ToolBase, Turn, TurnInputItem, TurnState, TurnStreamData, TurnStreamingEvent, UpdateConnectorRequest, UpdateModelProviderRequest, UpdateSandboxProviderRequest, UpdateSessionRequest, UserMessage, UserMessageContent, UserToolApprovalEvent, UserToolResponseEvent } from '@truefoundry/assistant-ui-runtime/server';
|
|
9
|
+
export { AgentBuilderCapabilitiesResponse, AgentBuilderServer, AgentChatServer, AgentLibraryEntry, AgentSkill, AgentSpec, AgentUIServer, ApprovalDecision, AuthenticateConnectorRequest, CatalogServer, ConnectorAuth, ConnectorAuthApiKey, ConnectorAuthNone, ConnectorAuthOAuth, ConnectorAuthPublic, ConnectorAuthPublicApiKey, ConnectorAuthPublicNone, ConnectorAuthPublicOAuth, ConnectorAuthType, ConnectorAuthenticationResult, ConnectorBase, ConnectorCatalogEntry, ConnectorCatalogServer, ConnectorConfigBase, ConnectorState, CreateConnectorRequest, CreateModelProviderRequest, CreateSandboxProviderRequest, CreateSessionRequest, CreateSkillRequest, CreateSkillRequestBase, DefinedSkill, GithubSkill, ImportGithubSkillRequest, ListResult, ListSessionsOrder, ListSessionsParams, McpServerMount, Model, ModelCatalogServer, ModelEntry, ModelParams, ModelProperties, ModelProviderBase, ModelProviderCatalogEntry, ModelProviderConfigBase, ModelSelection, ModelSelectorEntry, PageParams, PreviousTurnIdInput, ProviderEntry, ProviderType, RegistrySkill, SandboxCatalogServer, SandboxProviderBase, SandboxProviderCatalogEntry, SandboxProviderConfig, SandboxProviderListEntry, SandboxSnapshotSyncStatus, SaveAgentRequest, SaveAgentResult, SearchAgentsParams, SelectRegistrySkillRequest, Session, SessionEventItem, SkillBase, SkillCatalogEntry, SkillCatalogServer, SkillConfigBase, SkillMount, ToolBase, Turn, TurnInputItem, TurnState, TurnStreamData, TurnStreamingEvent, UpdateConnectorRequest, UpdateModelProviderRequest, UpdateSandboxProviderRequest, UpdateSessionRequest, UserMessage, UserMessageContent, UserToolApprovalEvent, UserToolResponseEvent } from '@truefoundry/assistant-ui-runtime/server';
|
|
10
10
|
export { C as CreateTrueFoundryServerOptions, T as TrueFoundryServer, c as createTrueFoundryServer } from './createTrueFoundryServer-B72bU-J7.js';
|
|
11
11
|
import { PartState } from '@assistant-ui/core/react';
|
|
12
12
|
|
|
@@ -1343,6 +1343,8 @@ type ShellModeContextValue = {
|
|
|
1343
1343
|
selectAgent: (agentName: string) => void;
|
|
1344
1344
|
/** @deprecated Prefer `selectLibraryAgent({ isMutable: true, agentSpec })`. */
|
|
1345
1345
|
openDraft: () => void;
|
|
1346
|
+
/** Remember plain-draft composer choices as the seed for future new chats. */
|
|
1347
|
+
rememberDraftSpec: (agentSpec: AgentSpec) => void;
|
|
1346
1348
|
/**
|
|
1347
1349
|
* Open a history session, remounting when mutability/identity changes.
|
|
1348
1350
|
* Prefer explicit `isMutable` from the session row; when omitted, agentName
|
|
@@ -1418,7 +1420,8 @@ type ChatLayout = 'sidebar' | 'drawer' | 'dock' | 'widget';
|
|
|
1418
1420
|
type RuntimeAdapters$1 = NonNullable<UseTrueFoundryAgentRuntimeOptions['adapters']>;
|
|
1419
1421
|
type TrueforgeUIProps = {
|
|
1420
1422
|
server: TrueforgeServerConfig;
|
|
1421
|
-
layout
|
|
1423
|
+
/** Built-in layout string or a custom layout component. Defaults to `"sidebar"`. */
|
|
1424
|
+
layout?: LayoutProp;
|
|
1422
1425
|
overrides?: SlotOverrides;
|
|
1423
1426
|
theme?: ThemeConfig;
|
|
1424
1427
|
className?: string;
|
|
@@ -1556,6 +1559,7 @@ type DraftCatalogValue = {
|
|
|
1556
1559
|
models: ModelSelection[];
|
|
1557
1560
|
skills: AgentSkill[];
|
|
1558
1561
|
connectors: ConnectorState[];
|
|
1562
|
+
loaded: boolean;
|
|
1559
1563
|
loading: boolean;
|
|
1560
1564
|
error: string | null;
|
|
1561
1565
|
/** Kick off catalog fetch (idempotent). Call when a picker opens. */
|
package/dist/index.js
CHANGED
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
threadHasPendingMcpAuth,
|
|
27
27
|
useComposerBusyState,
|
|
28
28
|
useComposerPauseView
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-H7DR64W3.js";
|
|
30
30
|
import {
|
|
31
31
|
useAui,
|
|
32
32
|
useAuiState
|
|
@@ -101,6 +101,7 @@ import {
|
|
|
101
101
|
UserMessageEdit,
|
|
102
102
|
WelcomeScreen,
|
|
103
103
|
defaultSlots,
|
|
104
|
+
modelPatchWithReasoningEffort,
|
|
104
105
|
preloadMarkdownOpenUI,
|
|
105
106
|
useBrandName,
|
|
106
107
|
useMCPAuth,
|
|
@@ -108,7 +109,7 @@ import {
|
|
|
108
109
|
useThemeMode,
|
|
109
110
|
useToaster,
|
|
110
111
|
useToasterOptional
|
|
111
|
-
} from "./chunk-
|
|
112
|
+
} from "./chunk-QGNLP2EE.js";
|
|
112
113
|
import {
|
|
113
114
|
DEFAULT_AGENT_CONFIG,
|
|
114
115
|
DraftCatalogProvider,
|
|
@@ -128,10 +129,10 @@ import {
|
|
|
128
129
|
useServer,
|
|
129
130
|
useServerCapabilities,
|
|
130
131
|
useShellMode
|
|
131
|
-
} from "./chunk-
|
|
132
|
+
} from "./chunk-XAZ5HJXV.js";
|
|
132
133
|
import {
|
|
133
134
|
OpenUiFenceBlock
|
|
134
|
-
} from "./chunk-
|
|
135
|
+
} from "./chunk-HT5HKQXE.js";
|
|
135
136
|
import {
|
|
136
137
|
PRESETS,
|
|
137
138
|
ThemeProvider,
|
|
@@ -142,7 +143,7 @@ import {
|
|
|
142
143
|
useOptionalContentClassNames,
|
|
143
144
|
useTheme,
|
|
144
145
|
useThemeIcons
|
|
145
|
-
} from "./chunk-
|
|
146
|
+
} from "./chunk-DTF7ZMUJ.js";
|
|
146
147
|
|
|
147
148
|
// src/icons/agent-2.svg
|
|
148
149
|
import * as React from "react";
|
|
@@ -306,6 +307,97 @@ function ToolGroupContainer({ children, group }) {
|
|
|
306
307
|
// src/containers/TrueforgeUI.tsx
|
|
307
308
|
import { lazy, Suspense, useMemo as useMemo2 } from "react";
|
|
308
309
|
|
|
310
|
+
// src/atoms/draft/DraftSpecPreferenceBridge.tsx
|
|
311
|
+
import { useTrueFoundryAgentSpec, useTrueFoundryUpdateAgentSpec } from "@truefoundry/assistant-ui-runtime";
|
|
312
|
+
import { useEffect as useEffect2 } from "react";
|
|
313
|
+
function mountName(mount) {
|
|
314
|
+
const name = Reflect.get(mount, "name");
|
|
315
|
+
return typeof name === "string" ? name : null;
|
|
316
|
+
}
|
|
317
|
+
function filterMounts(mounts, availableNames) {
|
|
318
|
+
if (mounts === void 0) return void 0;
|
|
319
|
+
const filtered = mounts.filter((mount) => {
|
|
320
|
+
const name = mountName(mount);
|
|
321
|
+
return name !== null && availableNames.has(name);
|
|
322
|
+
});
|
|
323
|
+
return filtered.length === mounts.length ? mounts : filtered;
|
|
324
|
+
}
|
|
325
|
+
function reconcileDraftSpecPreferences({
|
|
326
|
+
agentSpec,
|
|
327
|
+
models,
|
|
328
|
+
skills,
|
|
329
|
+
connectors,
|
|
330
|
+
skillsEnabled
|
|
331
|
+
}) {
|
|
332
|
+
const update = {};
|
|
333
|
+
const selectedModel = agentSpec.model.name.trim();
|
|
334
|
+
if (!models.some((model) => model.name === selectedModel)) {
|
|
335
|
+
const fallback = models[0];
|
|
336
|
+
if (fallback !== void 0) {
|
|
337
|
+
update.model = modelPatchWithReasoningEffort(
|
|
338
|
+
fallback.name,
|
|
339
|
+
agentSpec.model.params,
|
|
340
|
+
fallback.properties.reasoningEfforts
|
|
341
|
+
);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
const nextMcpServers = filterMounts(agentSpec.mcpServers, new Set(connectors.map((connector) => connector.name)));
|
|
345
|
+
if (nextMcpServers !== agentSpec.mcpServers) {
|
|
346
|
+
update.mcpServers = nextMcpServers;
|
|
347
|
+
}
|
|
348
|
+
if (skillsEnabled === false) {
|
|
349
|
+
if (agentSpec.skills !== void 0 && agentSpec.skills.length > 0) {
|
|
350
|
+
update.skills = [];
|
|
351
|
+
}
|
|
352
|
+
} else {
|
|
353
|
+
const nextSkills = filterMounts(agentSpec.skills, new Set(skills.map((skill) => skill.name)));
|
|
354
|
+
if (nextSkills !== agentSpec.skills) {
|
|
355
|
+
update.skills = nextSkills;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return update;
|
|
359
|
+
}
|
|
360
|
+
function DraftSpecPreferenceBridge() {
|
|
361
|
+
const { mode, pendingSessionId, rememberDraftSpec } = useShellMode();
|
|
362
|
+
const { agentSpec } = useTrueFoundryAgentSpec();
|
|
363
|
+
const updateAgentSpec = useTrueFoundryUpdateAgentSpec();
|
|
364
|
+
const capabilities = useServerCapabilities();
|
|
365
|
+
const { models, skills, connectors, loaded, error, ensureLoaded } = useDraftCatalog();
|
|
366
|
+
const isPlainDraft = mode.status === "active" && mode.isMutable && mode.agentId == null && pendingSessionId == null;
|
|
367
|
+
useEffect2(() => {
|
|
368
|
+
if (isPlainDraft) ensureLoaded();
|
|
369
|
+
}, [ensureLoaded, isPlainDraft]);
|
|
370
|
+
useEffect2(() => {
|
|
371
|
+
if (isPlainDraft && agentSpec != null) {
|
|
372
|
+
rememberDraftSpec(agentSpec);
|
|
373
|
+
}
|
|
374
|
+
}, [agentSpec, isPlainDraft, rememberDraftSpec]);
|
|
375
|
+
useEffect2(() => {
|
|
376
|
+
if (!isPlainDraft || agentSpec == null || updateAgentSpec == null || !loaded || error != null) return;
|
|
377
|
+
const update = reconcileDraftSpecPreferences({
|
|
378
|
+
agentSpec,
|
|
379
|
+
models,
|
|
380
|
+
skills,
|
|
381
|
+
connectors,
|
|
382
|
+
skillsEnabled: capabilities?.skill.enabled
|
|
383
|
+
});
|
|
384
|
+
if (Object.keys(update).length > 0) {
|
|
385
|
+
updateAgentSpec(update);
|
|
386
|
+
}
|
|
387
|
+
}, [
|
|
388
|
+
agentSpec,
|
|
389
|
+
capabilities?.skill.enabled,
|
|
390
|
+
connectors,
|
|
391
|
+
error,
|
|
392
|
+
isPlainDraft,
|
|
393
|
+
loaded,
|
|
394
|
+
models,
|
|
395
|
+
skills,
|
|
396
|
+
updateAgentSpec
|
|
397
|
+
]);
|
|
398
|
+
return null;
|
|
399
|
+
}
|
|
400
|
+
|
|
309
401
|
// src/containers/TrueFoundryChatProvider.tsx
|
|
310
402
|
import { AssistantRuntimeProvider } from "@assistant-ui/react";
|
|
311
403
|
import {
|
|
@@ -367,7 +459,7 @@ function TrueFoundryChatProvider(props) {
|
|
|
367
459
|
|
|
368
460
|
// src/containers/useResolvedServer.ts
|
|
369
461
|
import { createTrueFoundryAgentUIServer } from "@truefoundry/assistant-ui-runtime/plugins/truefoundry-agent-server-adapter";
|
|
370
|
-
import { useEffect as
|
|
462
|
+
import { useEffect as useEffect3, useState as useState3 } from "react";
|
|
371
463
|
var DEFAULT_CAPABILITIES = {
|
|
372
464
|
data: {
|
|
373
465
|
sandbox: { enabled: true },
|
|
@@ -410,7 +502,7 @@ function useResolvedServer(config, onError) {
|
|
|
410
502
|
}
|
|
411
503
|
return { status: "loading", server: null, error: null };
|
|
412
504
|
});
|
|
413
|
-
|
|
505
|
+
useEffect3(() => {
|
|
414
506
|
if (directServer) {
|
|
415
507
|
setState({ status: "ready", server: directServer, error: null });
|
|
416
508
|
return;
|
|
@@ -471,10 +563,10 @@ function useResolvedServer(config, onError) {
|
|
|
471
563
|
|
|
472
564
|
// src/containers/TrueforgeUI.tsx
|
|
473
565
|
import { jsx as jsx12, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
474
|
-
var SidebarLayout = lazy(() => import("./SidebarLayout-
|
|
475
|
-
var DrawerLayout = lazy(() => import("./DrawerLayout-
|
|
476
|
-
var DockLayout = lazy(() => import("./DockLayout-
|
|
477
|
-
var WidgetLayout = lazy(() => import("./WidgetLayout-
|
|
566
|
+
var SidebarLayout = lazy(() => import("./SidebarLayout-F3XFXW7B.js").then((m) => ({ default: m.SidebarLayout })));
|
|
567
|
+
var DrawerLayout = lazy(() => import("./DrawerLayout-ZVWCKEIS.js").then((m) => ({ default: m.DrawerLayout })));
|
|
568
|
+
var DockLayout = lazy(() => import("./DockLayout-KEMFRWIR.js").then((m) => ({ default: m.DockLayout })));
|
|
569
|
+
var WidgetLayout = lazy(() => import("./WidgetLayout-SZMABKIR.js").then((m) => ({ default: m.WidgetLayout })));
|
|
478
570
|
function LayoutFallback({ className }) {
|
|
479
571
|
return /* @__PURE__ */ jsx12(
|
|
480
572
|
"div",
|
|
@@ -586,7 +678,10 @@ function ChatProviderFromShell({
|
|
|
586
678
|
agent,
|
|
587
679
|
listSessionsAgentId,
|
|
588
680
|
initialSessionId: pendingSessionId ?? hostInitialSessionId,
|
|
589
|
-
children: /* @__PURE__ */
|
|
681
|
+
children: /* @__PURE__ */ jsxs6(DraftCatalogProvider, { children: [
|
|
682
|
+
/* @__PURE__ */ jsx12(DraftSpecPreferenceBridge, {}),
|
|
683
|
+
children
|
|
684
|
+
] })
|
|
590
685
|
},
|
|
591
686
|
runtimeKey
|
|
592
687
|
);
|
|
@@ -597,7 +692,7 @@ function TrueforgeUI(props) {
|
|
|
597
692
|
}
|
|
598
693
|
function TrueforgeUIShell(props) {
|
|
599
694
|
const {
|
|
600
|
-
layout,
|
|
695
|
+
layout = "sidebar",
|
|
601
696
|
overrides,
|
|
602
697
|
theme,
|
|
603
698
|
className,
|
|
@@ -624,7 +719,7 @@ import {
|
|
|
624
719
|
mergeAgentSpec,
|
|
625
720
|
trueFoundryAttachmentAdapter as trueFoundryAttachmentAdapter2,
|
|
626
721
|
useTrueFoundryAgentRuntime as useTrueFoundryAgentRuntime2,
|
|
627
|
-
useTrueFoundryAgentSpec,
|
|
722
|
+
useTrueFoundryAgentSpec as useTrueFoundryAgentSpec2,
|
|
628
723
|
useTrueFoundryCancel,
|
|
629
724
|
useTrueFoundryDownloadSandboxFile,
|
|
630
725
|
useTrueFoundryHistoryPagination,
|
|
@@ -632,7 +727,7 @@ import {
|
|
|
632
727
|
useTrueFoundryRespondToToolApproval,
|
|
633
728
|
useTrueFoundryToolResponses,
|
|
634
729
|
useTrueFoundryTurnId,
|
|
635
|
-
useTrueFoundryUpdateAgentSpec
|
|
730
|
+
useTrueFoundryUpdateAgentSpec as useTrueFoundryUpdateAgentSpec2
|
|
636
731
|
} from "@truefoundry/assistant-ui-runtime";
|
|
637
732
|
export {
|
|
638
733
|
AgentStepsCard,
|
|
@@ -768,7 +863,7 @@ export {
|
|
|
768
863
|
useToaster,
|
|
769
864
|
useToasterOptional,
|
|
770
865
|
useTrueFoundryAgentRuntime2 as useTrueFoundryAgentRuntime,
|
|
771
|
-
useTrueFoundryAgentSpec,
|
|
866
|
+
useTrueFoundryAgentSpec2 as useTrueFoundryAgentSpec,
|
|
772
867
|
useTrueFoundryCancel,
|
|
773
868
|
useTrueFoundryDownloadSandboxFile,
|
|
774
869
|
useTrueFoundryHistoryPagination,
|
|
@@ -776,6 +871,6 @@ export {
|
|
|
776
871
|
useTrueFoundryRespondToToolApproval,
|
|
777
872
|
useTrueFoundryToolResponses,
|
|
778
873
|
useTrueFoundryTurnId,
|
|
779
|
-
useTrueFoundryUpdateAgentSpec
|
|
874
|
+
useTrueFoundryUpdateAgentSpec2 as useTrueFoundryUpdateAgentSpec
|
|
780
875
|
};
|
|
781
876
|
//# sourceMappingURL=index.js.map
|