@vadimcomanescu/nadicode-design-system 2.0.7 → 2.0.8
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/.agents/skills/seed/SKILL.md +17 -8
- package/.agents/skills/seed/contract.md +5 -5
- package/.agents/skills/seed/intent-map.md +3 -3
- package/.agents/skills/seed/recipes/agents-chat.md +44 -20
- package/.agents/skills/seed/references/blocks.md +5 -2
- package/.agents/skills/seed/references/components.md +22 -2
- package/.agents/skills/seed/references/dashboard-patterns.md +12 -12
- package/.agents/skills/seed/references/nextjs.md +20 -80
- package/.agents/skills/seed/references/tokens.md +57 -248
- package/README.md +43 -215
- package/contracts/block-props-schemas.json +2186 -0
- package/contracts/component-props-schemas.json +8322 -0
- package/contracts/consumer-contract.json +178 -0
- package/contracts/consumer-intent-map.json +707 -0
- package/contracts/message-catalog-contract.json +820 -0
- package/contracts/page-kit-props-schemas.json +1894 -0
- package/contracts/public-surface-registry.json +6162 -0
- package/contracts/public-surface-registry.schema.json +227 -0
- package/contracts/release-governance-baseline.json +850 -0
- package/contracts/spec-manifest.json +46 -0
- package/dist/catalog.json +284 -81
- package/dist/chunk-4IGBBIYW.js +47 -0
- package/dist/chunk-4WPZ6T7V.js +186 -0
- package/dist/{chunk-OHOOQUVJ.js → chunk-C7WHMSF3.js} +2 -1
- package/dist/{chunk-4K3PATUT.js → chunk-EEL4RAPC.js} +13 -1
- package/dist/{chunk-ILIHQ2KZ.js → chunk-EK43W2Y6.js} +16 -10
- package/dist/{chunk-IDKZEPWK.js → chunk-FV2G6SAF.js} +6 -5
- package/dist/chunk-HWHJ6IRQ.js +78 -0
- package/dist/{chunk-AUSYEAIJ.js → chunk-I66XWYSS.js} +32 -8
- package/dist/chunk-JDJY4ABS.js +60 -0
- package/dist/{chunk-GV4PKHG4.js → chunk-KWILREVQ.js} +2 -2
- package/dist/{chunk-WI37ZYIF.js → chunk-M4XKO45H.js} +13 -1
- package/dist/{chunk-6N6CSJVE.js → chunk-OJ7OO3QB.js} +2 -2
- package/dist/{chunk-ZHTQF2KI.js → chunk-OSNTB6RY.js} +29 -22
- package/dist/{chunk-GMMPLZLC.js → chunk-PDSQC6VE.js} +1 -1
- package/dist/chunk-QQOWC53X.js +98 -0
- package/dist/chunk-VJ5VD4UT.js +91 -0
- package/dist/{chunk-TUKZKU72.js → chunk-ZKLB5N3Q.js} +1 -1
- package/dist/components/blocks/AgentConversationBlock.d.ts +6 -1
- package/dist/components/blocks/AgentConversationBlock.js +44 -42
- package/dist/components/blocks/AgentRunOverviewBlock.js +1 -1
- package/dist/components/blocks/AgentWorkbenchBlock.d.ts +5 -1
- package/dist/components/blocks/AgentWorkbenchBlock.js +47 -46
- package/dist/components/blocks/AuthLayout.js +2 -2
- package/dist/components/blocks/BannerBlock.js +38 -38
- package/dist/components/blocks/CallToActionBlock.js +2 -2
- package/dist/components/blocks/ChangelogBlock.js +39 -39
- package/dist/components/blocks/ChartBlock.js +38 -38
- package/dist/components/blocks/ChartCollectionBlock.js +1 -1
- package/dist/components/blocks/ChatLayout.d.ts +4 -1
- package/dist/components/blocks/ChatLayout.js +39 -39
- package/dist/components/blocks/CodeBlock.js +2 -2
- package/dist/components/blocks/ContactBlock.js +2 -2
- package/dist/components/blocks/CreateBlock.js +39 -39
- package/dist/components/blocks/DataGridBlock.js +40 -40
- package/dist/components/blocks/DirectoryBlock.js +43 -43
- package/dist/components/blocks/FAQBlock.js +38 -38
- package/dist/components/blocks/FeatureBlock.js +38 -38
- package/dist/components/blocks/GalleryBlock.js +38 -38
- package/dist/components/blocks/HeaderBlock.js +38 -38
- package/dist/components/blocks/HeroBlock.js +41 -41
- package/dist/components/blocks/HeroSectionBlock.js +55 -59
- package/dist/components/blocks/IntegrationsBlock.js +40 -40
- package/dist/components/blocks/InteractiveAreaChartBlock.js +38 -38
- package/dist/components/blocks/KanbanDemoBlock.js +3 -3
- package/dist/components/blocks/LoginBlock.js +2 -2
- package/dist/components/blocks/LogoCloud.js +2 -13
- package/dist/components/blocks/NavUser.js +42 -42
- package/dist/components/blocks/NotFoundBlock.js +41 -41
- package/dist/components/blocks/OnboardingBlock.js +38 -38
- package/dist/components/blocks/PricingBlock.js +4 -4
- package/dist/components/blocks/ProcessFlowBlock.js +2 -2
- package/dist/components/blocks/SettingsLayout.js +42 -42
- package/dist/components/blocks/SignUpBlock.js +1 -1
- package/dist/components/blocks/SocialProofBlock.js +4 -3
- package/dist/components/blocks/StatsBlock.js +38 -38
- package/dist/components/blocks/StatsMarketingBlock.js +2 -2
- package/dist/components/blocks/TestimonialsBlock.js +2 -1
- package/dist/components/blocks/TwoFactorChallengeBlock.js +38 -38
- package/dist/components/blocks/TwoFactorSetupBlock.js +41 -41
- package/dist/components/blocks/VoiceAgentCard.d.ts +3 -1
- package/dist/components/blocks/VoiceAgentCard.js +7 -76
- package/dist/components/blocks/WizardBlock.js +39 -39
- package/dist/components/blocks/user/InviteUserModal.js +38 -38
- package/dist/components/logos/index.js +2 -2
- package/dist/components/page-kits/AgentsChatPageKit.js +59 -58
- package/dist/components/page-kits/AnalyticsPageKit.js +44 -44
- package/dist/components/page-kits/BlogContentPageKit.js +43 -43
- package/dist/components/page-kits/CheckoutPageKit.js +41 -41
- package/dist/components/page-kits/CompanySuitePageKit.js +47 -47
- package/dist/components/page-kits/CrudFormPageKit.js +44 -44
- package/dist/components/page-kits/CrudListDetailPageKit.js +44 -44
- package/dist/components/page-kits/DashboardPageKit.js +44 -44
- package/dist/components/page-kits/KanbanBoardPageKit.js +47 -47
- package/dist/components/page-kits/LandingPageKit.js +50 -49
- package/dist/components/page-kits/LoginPageKit.js +2 -2
- package/dist/components/page-kits/MarketingShellPageKit.js +40 -40
- package/dist/components/page-kits/NavigationShellPageKit.js +42 -42
- package/dist/components/page-kits/OnboardingPageKit.js +44 -44
- package/dist/components/page-kits/PricingPageKit.js +46 -46
- package/dist/components/page-kits/ProfileSettingsPageKit.js +2 -2
- package/dist/components/page-kits/ServiceSuitePageKit.js +47 -46
- package/dist/components/page-kits/SignupPageKit.js +2 -2
- package/dist/components/page-kits/SuccessPageKit.js +38 -38
- package/dist/components/page-kits/TeamSettingsPageKit.js +45 -45
- package/dist/components/page-kits/TwoFactorPageKit.js +41 -41
- package/dist/components/page-kits/VerifyEmailPageKit.js +38 -38
- package/dist/components/page-kits/VoiceAgentsPageKit.js +80 -76
- package/dist/components/ui/Accordion.js +38 -38
- package/dist/components/ui/AgentMessageBubble.d.ts +20 -4
- package/dist/components/ui/AgentMessageBubble.js +39 -39
- package/dist/components/ui/AgentStatus.d.ts +1 -1
- package/dist/components/ui/AgentStatus.js +5 -10
- package/dist/components/ui/AgentTerminal.d.ts +4 -1
- package/dist/components/ui/AgentTerminal.js +3 -1
- package/dist/components/ui/AgentTimeline.d.ts +2 -2
- package/dist/components/ui/AgentTimeline.js +15 -6
- package/dist/components/ui/AnimatedDialog.js +38 -38
- package/dist/components/ui/AnimatedSheet.js +38 -38
- package/dist/components/ui/ApprovalCard.js +1 -1
- package/dist/components/ui/Breadcrumb.js +38 -38
- package/dist/components/ui/Calendar.js +38 -38
- package/dist/components/ui/Carousel.js +38 -38
- package/dist/components/ui/ChatActions.d.ts +14 -0
- package/dist/components/ui/ChatActions.js +52 -0
- package/dist/components/ui/ChatBranch.d.ts +18 -0
- package/dist/components/ui/ChatBranch.js +84 -0
- package/dist/components/ui/ChatChainOfThought.d.ts +25 -0
- package/dist/components/ui/ChatChainOfThought.js +99 -0
- package/dist/components/ui/ChatConfirmation.d.ts +37 -0
- package/dist/components/ui/ChatConfirmation.js +115 -0
- package/dist/components/ui/ChatGreeting.d.ts +18 -0
- package/dist/components/ui/ChatGreeting.js +80 -0
- package/dist/components/ui/ChatMessage.d.ts +40 -0
- package/dist/components/ui/ChatMessage.js +96 -0
- package/dist/components/ui/ChatPlan.d.ts +29 -0
- package/dist/components/ui/ChatPlan.js +86 -0
- package/dist/components/ui/ChatPromptInput.d.ts +32 -0
- package/dist/components/ui/ChatPromptInput.js +193 -0
- package/dist/components/ui/ChatPromptInputAttachments.d.ts +9 -0
- package/dist/components/ui/ChatPromptInputAttachments.js +145 -0
- package/dist/components/ui/ChatQueue.d.ts +32 -0
- package/dist/components/ui/ChatQueue.js +93 -0
- package/dist/components/ui/ChatReasoning.d.ts +20 -0
- package/dist/components/ui/ChatReasoning.js +91 -0
- package/dist/components/ui/ChatResponse.d.ts +14 -0
- package/dist/components/ui/ChatResponse.js +25 -0
- package/dist/components/ui/ChatShimmer.d.ts +23 -0
- package/dist/components/ui/ChatShimmer.js +6 -0
- package/dist/components/ui/ChatSources.d.ts +30 -0
- package/dist/components/ui/ChatSources.js +113 -0
- package/dist/components/ui/ChatSuggestion.d.ts +13 -0
- package/dist/components/ui/ChatSuggestion.js +41 -0
- package/dist/components/ui/ChatThinkingMessage.d.ts +12 -0
- package/dist/components/ui/ChatThinkingMessage.js +55 -0
- package/dist/components/ui/ChatToolCall.d.ts +41 -0
- package/dist/components/ui/ChatToolCall.js +192 -0
- package/dist/components/ui/CheckStatus.d.ts +1 -1
- package/dist/components/ui/Checkbox.js +38 -38
- package/dist/components/ui/CheckoutForm.js +38 -38
- package/dist/components/ui/CheckoutFormDemo.js +38 -38
- package/dist/components/ui/Combobox.js +38 -38
- package/dist/components/ui/Command.js +38 -38
- package/dist/components/ui/ContextMenu.js +38 -38
- package/dist/components/ui/Conversation.d.ts +21 -0
- package/dist/components/ui/Conversation.js +196 -0
- package/dist/components/ui/ConversationThread.d.ts +8 -2
- package/dist/components/ui/ConversationThread.js +34 -16
- package/dist/components/ui/DataTable.js +40 -40
- package/dist/components/ui/DatePicker.js +38 -38
- package/dist/components/ui/DateRangePicker.js +38 -38
- package/dist/components/ui/Dialog.js +38 -38
- package/dist/components/ui/DropdownMenu.js +39 -39
- package/dist/components/ui/FileUpload.js +38 -38
- package/dist/components/ui/InputOTP.js +38 -38
- package/dist/components/ui/KanbanBoard.js +2 -2
- package/dist/components/ui/LanguageSwitcher.js +38 -38
- package/dist/components/ui/Menubar.js +38 -38
- package/dist/components/ui/NavigationMenu.js +38 -38
- package/dist/components/ui/NotificationCenter.js +38 -38
- package/dist/components/ui/Pagination.js +38 -38
- package/dist/components/ui/RadioGroup.js +38 -38
- package/dist/components/ui/Resizable.js +38 -38
- package/dist/components/ui/SearchCommand.js +38 -38
- package/dist/components/ui/Select.js +38 -38
- package/dist/components/ui/SettingsModal.js +38 -38
- package/dist/components/ui/Sheet.js +38 -38
- package/dist/components/ui/Sidebar.js +41 -41
- package/dist/components/ui/StyleToggle.js +1 -1
- package/dist/components/ui/TagInput.js +38 -38
- package/dist/components/ui/ThemeToggle.js +39 -39
- package/dist/components/ui/ThinkingIndicator.d.ts +3 -1
- package/dist/components/ui/ThinkingIndicator.js +2 -1
- package/dist/components/ui/Toast.js +38 -38
- package/dist/components/ui/Toaster.js +38 -38
- package/dist/components/ui/ToolCallCard.d.ts +1 -1
- package/dist/components/ui/ToolCallCard.js +5 -1
- package/dist/components/ui/TreeView.js +38 -38
- package/dist/components/ui/charts/index.js +1 -1
- package/dist/components/ui/icons/index.js +38 -38
- package/dist/components/ui/text-effects/index.js +2 -2
- package/dist/hooks/use-scroll-to-bottom.d.ts +13 -0
- package/dist/hooks/use-scroll-to-bottom.js +2 -0
- package/dist/index.js +43 -43
- package/dist/internal/local-image-assets.d.ts +12 -0
- package/dist/messages/en.js +1 -1
- package/dist/messages/it.js +1 -1
- package/dist/test/PublicSeedTestProvider.js +2 -2
- package/dist/test/simulate-ime-composition.d.ts +54 -0
- package/dist/test/simulate-ime-composition.js +55 -0
- package/eslint-rules/nadicode/config.js +2 -0
- package/eslint-rules/nadicode/index.js +4 -0
- package/eslint-rules/nadicode/rules/no-deprecated-ds-import.js +77 -0
- package/eslint-rules/nadicode/rules/no-forbidden-page-kit-import.js +99 -0
- package/eslint-rules/nadicode/rules/no-unregistered-glass.js +2 -0
- package/package.json +103 -6
- package/scripts/ds-check.mjs +94 -73
- package/dist/chunk-MLUSJTS2.js +0 -107
- package/dist/chunk-TZXZFSD2.js +0 -33
- package/dist/{chunk-MX5FUFQR.js → chunk-7A2RXKGH.js} +2 -2
- package/dist/{chunk-5DKCZWC6.js → chunk-CQEUNASC.js} +1 -1
- package/dist/{chunk-RMLS2QUC.js → chunk-HZERHGBT.js} +1 -1
- package/dist/{chunk-WAVU744B.js → chunk-IXQGKJU4.js} +3 -3
- package/dist/{chunk-4HRVRW2X.js → chunk-J2DCQDXO.js} +2 -2
- package/dist/{chunk-6MFAZU4B.js → chunk-RGE5OQMZ.js} +1 -1
- package/dist/{chunk-PJNHVPHF.js → chunk-TYP2MR3Q.js} +1 -1
- package/dist/{chunk-TS2JSPQR.js → chunk-U4GYSYGN.js} +1 -1
- package/dist/{chunk-EJNF6JLL.js → chunk-VEO56RH4.js} +1 -1
- package/dist/{chunk-AURJQZC4.js → chunk-VNNAL4A6.js} +1 -1
- package/dist/{chunk-5PORR6LE.js → chunk-XTASI4IY.js} +1 -1
- package/dist/{chunk-E4L6LR6P.js → chunk-Z233ZQZE.js} +1 -1
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { m } from './chunk-PD2YEH3H.js';
|
|
2
2
|
import { bezier } from './chunk-CRY67BIF.js';
|
|
3
|
+
import { CheckIcon } from './chunk-CXACRCZ4.js';
|
|
3
4
|
import { ChevronDownIcon } from './chunk-HJBXUXTD.js';
|
|
4
5
|
import { cn } from './chunk-QYZT24TS.js';
|
|
5
6
|
import * as React from 'react';
|
|
6
7
|
import { useTranslations } from 'next-intl';
|
|
7
8
|
import { cva } from 'class-variance-authority';
|
|
8
9
|
import { useReducedMotion } from 'motion/react';
|
|
9
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
10
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
10
11
|
|
|
11
12
|
var PULSE_TRANSITION = { duration: 1.2, repeat: Infinity, ease: bezier["ease-in-out"] };
|
|
12
13
|
var thinkingIndicatorVariants = cva(
|
|
@@ -29,33 +30,38 @@ var dotSizes = {
|
|
|
29
30
|
default: "h-1.5 w-1.5",
|
|
30
31
|
lg: "h-2 w-2"
|
|
31
32
|
};
|
|
32
|
-
function ThinkingIndicator({ className, size = "default", reasoning, ref, ...props }) {
|
|
33
|
+
function ThinkingIndicator({ className, size = "default", reasoning, state = "thinking", ref, ...props }) {
|
|
33
34
|
const t = useTranslations("components.thinkingIndicator");
|
|
34
35
|
const prefersReduced = useReducedMotion();
|
|
35
36
|
const [expanded, setExpanded] = React.useState(false);
|
|
36
37
|
const dotSize = dotSizes[size ?? "default"];
|
|
37
38
|
const reasoningPanelId = React.useId();
|
|
38
|
-
return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col", className), ...props, children: [
|
|
39
|
+
return /* @__PURE__ */ jsxs("div", { ref, role: "status", className: cn("flex flex-col", className), ...props, children: [
|
|
39
40
|
/* @__PURE__ */ jsxs("div", { className: cn(thinkingIndicatorVariants({ size })), children: [
|
|
40
|
-
/* @__PURE__ */
|
|
41
|
-
"
|
|
42
|
-
{
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
41
|
+
state === "complete" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
42
|
+
/* @__PURE__ */ jsx(CheckIcon, { size: 14, "aria-hidden": "true", className: "text-success" }),
|
|
43
|
+
/* @__PURE__ */ jsx("span", { className: "text-text-secondary", children: t("complete") })
|
|
44
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
45
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5", role: "group", "aria-label": t("thinking"), children: [0, 1, 2].map((i) => prefersReduced ? /* @__PURE__ */ jsx(
|
|
46
|
+
"span",
|
|
47
|
+
{
|
|
48
|
+
className: cn("rounded-full bg-accent", dotSize)
|
|
49
|
+
},
|
|
50
|
+
i
|
|
51
|
+
) : /* @__PURE__ */ jsx(
|
|
52
|
+
m.span,
|
|
53
|
+
{
|
|
54
|
+
className: cn("rounded-full bg-accent", dotSize),
|
|
55
|
+
animate: { opacity: [0.3, 1, 0.3] },
|
|
56
|
+
transition: {
|
|
57
|
+
...PULSE_TRANSITION,
|
|
58
|
+
delay: i * 0.2
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
i
|
|
62
|
+
)) }),
|
|
63
|
+
/* @__PURE__ */ jsx("span", { className: "text-text-secondary", children: t("thinking") })
|
|
64
|
+
] }),
|
|
59
65
|
!!reasoning && /* @__PURE__ */ jsx(
|
|
60
66
|
"button",
|
|
61
67
|
{
|
|
@@ -69,6 +75,7 @@ function ThinkingIndicator({ className, size = "default", reasoning, ref, ...pro
|
|
|
69
75
|
ChevronDownIcon,
|
|
70
76
|
{
|
|
71
77
|
size: 14,
|
|
78
|
+
"aria-hidden": "true",
|
|
72
79
|
className: cn("transition-transform", expanded && "rotate-180")
|
|
73
80
|
}
|
|
74
81
|
)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from './chunk-PXDHNGTG.js';
|
|
2
|
-
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuCheckboxItem } from './chunk-
|
|
2
|
+
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuCheckboxItem } from './chunk-CQEUNASC.js';
|
|
3
3
|
import { Input } from './chunk-AP3XXYAY.js';
|
|
4
4
|
import { Button } from './chunk-7KIDDF3I.js';
|
|
5
5
|
import { Settings2Icon } from './chunk-TXGANOAX.js';
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// src/internal/local-image-assets.ts
|
|
2
|
+
function escapeXml(value) {
|
|
3
|
+
return value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
4
|
+
}
|
|
5
|
+
function hashString(value) {
|
|
6
|
+
let hash = 0;
|
|
7
|
+
for (let i = 0; i < value.length; i += 1) {
|
|
8
|
+
hash = hash * 31 + value.charCodeAt(i) >>> 0;
|
|
9
|
+
}
|
|
10
|
+
return hash;
|
|
11
|
+
}
|
|
12
|
+
function svgDataUri(svg) {
|
|
13
|
+
return `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(svg)}`;
|
|
14
|
+
}
|
|
15
|
+
function createLogoDataUri(template) {
|
|
16
|
+
const ring = escapeXml(template.accent);
|
|
17
|
+
const fill = escapeXml(template.accent2);
|
|
18
|
+
const label = escapeXml(template.initials);
|
|
19
|
+
const seed = hashString(template.label);
|
|
20
|
+
const ornament = seed % 3 === 0 ? `<path d="M18 44c10-8 18-12 30-12" stroke="white" stroke-width="3" stroke-linecap="round" opacity="0.85"/>` : seed % 3 === 1 ? `<path d="M20 18l16 28 16-28" stroke="white" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" opacity="0.85"/>` : `<circle cx="34" cy="32" r="13" stroke="white" stroke-width="4" opacity="0.85"/>`;
|
|
21
|
+
return svgDataUri(`
|
|
22
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 64" role="img" aria-label="${escapeXml(template.label)} logo">
|
|
23
|
+
<defs>
|
|
24
|
+
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
25
|
+
<stop offset="0%" stop-color="${ring}"/>
|
|
26
|
+
<stop offset="100%" stop-color="${fill}"/>
|
|
27
|
+
</linearGradient>
|
|
28
|
+
</defs>
|
|
29
|
+
<rect x="1" y="1" width="158" height="62" rx="18" fill="url(#bg)" opacity="0.95"/>
|
|
30
|
+
<rect x="8" y="8" width="48" height="48" rx="14" fill="rgba(255,255,255,0.12)"/>
|
|
31
|
+
${ornament}
|
|
32
|
+
<text
|
|
33
|
+
x="80"
|
|
34
|
+
y="40"
|
|
35
|
+
text-anchor="middle"
|
|
36
|
+
fill="white"
|
|
37
|
+
font-family="Inter, ui-sans-serif, system-ui, sans-serif"
|
|
38
|
+
font-size="22"
|
|
39
|
+
font-weight="700"
|
|
40
|
+
letter-spacing="0.12em"
|
|
41
|
+
>${label}</text>
|
|
42
|
+
</svg>
|
|
43
|
+
`);
|
|
44
|
+
}
|
|
45
|
+
function createAvatarDataUri(seed, initials) {
|
|
46
|
+
const hash = hashString(seed);
|
|
47
|
+
const hue = hash % 360;
|
|
48
|
+
const hue2 = (hue + 36) % 360;
|
|
49
|
+
const label = escapeXml(initials.slice(0, 2).toUpperCase());
|
|
50
|
+
return svgDataUri(`
|
|
51
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="${escapeXml(seed)} avatar">
|
|
52
|
+
<defs>
|
|
53
|
+
<radialGradient id="bg" cx="30%" cy="30%" r="80%">
|
|
54
|
+
<stop offset="0%" stop-color="hsl(${hue} 75% 62%)"/>
|
|
55
|
+
<stop offset="100%" stop-color="hsl(${hue2} 62% 38%)"/>
|
|
56
|
+
</radialGradient>
|
|
57
|
+
</defs>
|
|
58
|
+
<circle cx="64" cy="64" r="60" fill="url(#bg)"/>
|
|
59
|
+
<circle cx="46" cy="44" r="12" fill="rgba(255,255,255,0.22)"/>
|
|
60
|
+
<path d="M34 92c6-16 18-24 30-24s24 8 30 24" fill="none" stroke="rgba(255,255,255,0.28)" stroke-width="8" stroke-linecap="round"/>
|
|
61
|
+
<text
|
|
62
|
+
x="64"
|
|
63
|
+
y="74"
|
|
64
|
+
text-anchor="middle"
|
|
65
|
+
fill="white"
|
|
66
|
+
font-family="Inter, ui-sans-serif, system-ui, sans-serif"
|
|
67
|
+
font-size="38"
|
|
68
|
+
font-weight="800"
|
|
69
|
+
>${label}</text>
|
|
70
|
+
</svg>
|
|
71
|
+
`);
|
|
72
|
+
}
|
|
73
|
+
var BRAND_LOGO_TEMPLATES = [
|
|
74
|
+
{ label: "Nvidia", initials: "NV", accent: "#0e9f6e", accent2: "#084c41" },
|
|
75
|
+
{ label: "Column", initials: "CL", accent: "#1d4ed8", accent2: "#312e81" },
|
|
76
|
+
{ label: "GitHub", initials: "GH", accent: "#111827", accent2: "#374151" },
|
|
77
|
+
{ label: "Nike", initials: "NK", accent: "#0f172a", accent2: "#2563eb" },
|
|
78
|
+
{ label: "Lemon Squeezy", initials: "LS", accent: "#eab308", accent2: "#b45309" },
|
|
79
|
+
{ label: "Laravel", initials: "LR", accent: "#ef4444", accent2: "#7f1d1d" },
|
|
80
|
+
{ label: "Lilly", initials: "LL", accent: "#db2777", accent2: "#831843" },
|
|
81
|
+
{ label: "OpenAI", initials: "OA", accent: "#14b8a6", accent2: "#0f766e" },
|
|
82
|
+
{ label: "Tailwind CSS", initials: "TW", accent: "#38bdf8", accent2: "#0369a1" },
|
|
83
|
+
{ label: "Vercel", initials: "VC", accent: "#020617", accent2: "#334155" },
|
|
84
|
+
{ label: "Zapier", initials: "ZI", accent: "#f97316", accent2: "#9a3412" }
|
|
85
|
+
];
|
|
86
|
+
var LOCAL_CLOUD_LOGOS = BRAND_LOGO_TEMPLATES.map((template, index) => ({
|
|
87
|
+
src: createLogoDataUri(template),
|
|
88
|
+
alt: `${template.label} Logo`,
|
|
89
|
+
height: [20, 16, 16, 20, 16, 28, 20, 24, 16, 20, 20][index]
|
|
90
|
+
}));
|
|
91
|
+
var LOCAL_HERO_LOGOS = BRAND_LOGO_TEMPLATES.slice(0, 8).map((template, index) => ({
|
|
92
|
+
src: createLogoDataUri(template),
|
|
93
|
+
alt: `${template.label} Logo`,
|
|
94
|
+
height: String([20, 16, 16, 20, 20, 16, 28, 24][index])
|
|
95
|
+
}));
|
|
96
|
+
var LOCAL_NIKE_LOGO_SRC = createLogoDataUri(BRAND_LOGO_TEMPLATES[3]);
|
|
97
|
+
|
|
98
|
+
export { LOCAL_CLOUD_LOGOS, LOCAL_HERO_LOGOS, LOCAL_NIKE_LOGO_SRC, createAvatarDataUri };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { useRef, useCallback, useSyncExternalStore, useEffect } from 'react';
|
|
2
|
+
import { useStickToBottom } from 'use-stick-to-bottom';
|
|
3
|
+
|
|
4
|
+
// src/hooks/use-scroll-to-bottom.ts
|
|
5
|
+
var AT_BOTTOM_THRESHOLD_PX = 100;
|
|
6
|
+
var USER_SCROLL_DEBOUNCE_MS = 150;
|
|
7
|
+
var SERVER_SNAPSHOT = true;
|
|
8
|
+
function useScrollToBottom() {
|
|
9
|
+
const {
|
|
10
|
+
scrollRef,
|
|
11
|
+
contentRef,
|
|
12
|
+
scrollToBottom: stbScrollToBottom
|
|
13
|
+
} = useStickToBottom({
|
|
14
|
+
resize: "smooth",
|
|
15
|
+
initial: "smooth"
|
|
16
|
+
});
|
|
17
|
+
const endRef = useRef(null);
|
|
18
|
+
const isAtBottomRef = useRef(true);
|
|
19
|
+
const isUserScrollingRef = useRef(false);
|
|
20
|
+
const checkIfAtBottom = useCallback(() => {
|
|
21
|
+
const container = scrollRef.current;
|
|
22
|
+
if (!container) return true;
|
|
23
|
+
const { scrollTop, scrollHeight, clientHeight } = container;
|
|
24
|
+
return scrollTop + clientHeight >= scrollHeight - AT_BOTTOM_THRESHOLD_PX;
|
|
25
|
+
}, [scrollRef]);
|
|
26
|
+
const subscribe = useCallback((onStoreChange) => {
|
|
27
|
+
const container = scrollRef.current;
|
|
28
|
+
if (!container) return () => {
|
|
29
|
+
};
|
|
30
|
+
isAtBottomRef.current = checkIfAtBottom();
|
|
31
|
+
let scrollTimeout;
|
|
32
|
+
function handleScroll() {
|
|
33
|
+
isUserScrollingRef.current = true;
|
|
34
|
+
clearTimeout(scrollTimeout);
|
|
35
|
+
isAtBottomRef.current = checkIfAtBottom();
|
|
36
|
+
scrollTimeout = setTimeout(() => {
|
|
37
|
+
isUserScrollingRef.current = false;
|
|
38
|
+
}, USER_SCROLL_DEBOUNCE_MS);
|
|
39
|
+
onStoreChange();
|
|
40
|
+
}
|
|
41
|
+
container.addEventListener("scroll", handleScroll, { passive: true });
|
|
42
|
+
return () => {
|
|
43
|
+
container.removeEventListener("scroll", handleScroll);
|
|
44
|
+
clearTimeout(scrollTimeout);
|
|
45
|
+
};
|
|
46
|
+
}, [checkIfAtBottom, scrollRef]);
|
|
47
|
+
const getServerSnapshot = useCallback(() => SERVER_SNAPSHOT, []);
|
|
48
|
+
const isAtBottom = useSyncExternalStore(subscribe, checkIfAtBottom, getServerSnapshot);
|
|
49
|
+
const scrollToBottom = useCallback(
|
|
50
|
+
(behavior = "smooth") => {
|
|
51
|
+
stbScrollToBottom(behavior);
|
|
52
|
+
},
|
|
53
|
+
[stbScrollToBottom]
|
|
54
|
+
);
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
const container = scrollRef.current;
|
|
57
|
+
if (!container) return;
|
|
58
|
+
function scrollIfNeeded() {
|
|
59
|
+
if (isAtBottomRef.current && !isUserScrollingRef.current) {
|
|
60
|
+
requestAnimationFrame(() => {
|
|
61
|
+
stbScrollToBottom("instant");
|
|
62
|
+
isAtBottomRef.current = true;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const mutationObserver = new MutationObserver(scrollIfNeeded);
|
|
67
|
+
mutationObserver.observe(container, {
|
|
68
|
+
childList: true,
|
|
69
|
+
subtree: true,
|
|
70
|
+
characterData: true
|
|
71
|
+
});
|
|
72
|
+
const resizeObserver = new ResizeObserver(scrollIfNeeded);
|
|
73
|
+
resizeObserver.observe(container);
|
|
74
|
+
for (const child of container.children) {
|
|
75
|
+
resizeObserver.observe(child);
|
|
76
|
+
}
|
|
77
|
+
return () => {
|
|
78
|
+
mutationObserver.disconnect();
|
|
79
|
+
resizeObserver.disconnect();
|
|
80
|
+
};
|
|
81
|
+
}, [scrollRef, stbScrollToBottom]);
|
|
82
|
+
return {
|
|
83
|
+
containerRef: scrollRef,
|
|
84
|
+
contentRef,
|
|
85
|
+
endRef,
|
|
86
|
+
isAtBottom,
|
|
87
|
+
scrollToBottom
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export { useScrollToBottom };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SidebarProvider, Sidebar, SidebarHeader, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarSeparator, SidebarContent, SidebarGroup, SidebarGroupLabel, SidebarGroupContent, SidebarMenuBadge, SidebarInset, SidebarTrigger } from './chunk-
|
|
1
|
+
import { SidebarProvider, Sidebar, SidebarHeader, SidebarMenu, SidebarMenuItem, SidebarMenuButton, SidebarSeparator, SidebarContent, SidebarGroup, SidebarGroupLabel, SidebarGroupContent, SidebarMenuBadge, SidebarInset, SidebarTrigger } from './chunk-J2DCQDXO.js';
|
|
2
2
|
import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbPage, BreadcrumbLink, BreadcrumbSeparator } from './chunk-35EX5FP5.js';
|
|
3
3
|
import { Avatar, AvatarFallback } from './chunk-NAAU5IWU.js';
|
|
4
4
|
import { Badge } from './chunk-S4JAHKOP.js';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
interface ToolCall {
|
|
3
|
+
id: string;
|
|
3
4
|
toolName: string;
|
|
4
5
|
args?: Record<string, unknown>;
|
|
5
6
|
status: 'pending' | 'running' | 'complete' | 'error';
|
|
@@ -8,7 +9,11 @@ interface ToolCall {
|
|
|
8
9
|
}
|
|
9
10
|
interface ConversationMessage {
|
|
10
11
|
id: string;
|
|
11
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Message role. Use `"assistant"` for AI messages.
|
|
14
|
+
* @deprecated `"agent"` is accepted for backward compat but will be removed in the next major version.
|
|
15
|
+
*/
|
|
16
|
+
role: 'user' | 'assistant' | 'agent' | 'system';
|
|
12
17
|
content: string;
|
|
13
18
|
timestamp?: string;
|
|
14
19
|
toolCalls?: ToolCall[];
|
|
@@ -1,121 +1,123 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { AgentConversationBlock } from '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
2
|
+
export { AgentConversationBlock } from '../../chunk-4IGBBIYW.js';
|
|
3
|
+
import '../../chunk-4WPZ6T7V.js';
|
|
4
|
+
import '../../chunk-MDAYDDTC.js';
|
|
5
|
+
import '../../chunk-OSNTB6RY.js';
|
|
6
|
+
import '../../chunk-GLU236NN.js';
|
|
5
7
|
import '../../chunk-PD2YEH3H.js';
|
|
6
8
|
import '../../chunk-CRY67BIF.js';
|
|
7
9
|
import '../../chunk-HJC6U46F.js';
|
|
8
|
-
import '../../chunk-
|
|
10
|
+
import '../../chunk-I66XWYSS.js';
|
|
9
11
|
import '../../chunk-GO35FTNJ.js';
|
|
10
|
-
import '../../chunk-
|
|
12
|
+
import '../../chunk-WUO7OONN.js';
|
|
11
13
|
import '../../chunk-FLF5AMNO.js';
|
|
12
|
-
import '../../chunk-
|
|
14
|
+
import '../../chunk-3CLXYQKB.js';
|
|
13
15
|
import '../../chunk-S4GKGKON.js';
|
|
14
16
|
import '../../chunk-LCDDAE7J.js';
|
|
15
17
|
import '../../chunk-R674XI7C.js';
|
|
16
|
-
import '../../chunk-
|
|
18
|
+
import '../../chunk-HNY45VUQ.js';
|
|
17
19
|
import '../../chunk-BPCCTJSK.js';
|
|
18
20
|
import '../../chunk-CGUCH322.js';
|
|
19
21
|
import '../../chunk-ELKIUARM.js';
|
|
20
|
-
import '../../chunk-ZU2GYVAP.js';
|
|
21
22
|
import '../../chunk-KSHJQ2VT.js';
|
|
22
|
-
import '../../chunk-
|
|
23
|
-
import '../../chunk-
|
|
24
|
-
import '../../chunk-CRZ2JE24.js';
|
|
23
|
+
import '../../chunk-GAKU7DFY.js';
|
|
24
|
+
import '../../chunk-T6BRD7TS.js';
|
|
25
25
|
import '../../chunk-TXGANOAX.js';
|
|
26
26
|
import '../../chunk-OITJWGFV.js';
|
|
27
27
|
import '../../chunk-Z74D6D2W.js';
|
|
28
|
-
import '../../chunk-
|
|
28
|
+
import '../../chunk-7WDT2PRI.js';
|
|
29
29
|
import '../../chunk-IJJI4RQU.js';
|
|
30
30
|
import '../../chunk-E7RBK6ML.js';
|
|
31
31
|
import '../../chunk-UBIGDGOP.js';
|
|
32
|
-
import '../../chunk-Q7LVUGFL.js';
|
|
33
32
|
import '../../chunk-ALMGJVMT.js';
|
|
34
33
|
import '../../chunk-QPXTBZWN.js';
|
|
35
|
-
import '../../chunk-
|
|
36
|
-
import '../../chunk-T6BRD7TS.js';
|
|
34
|
+
import '../../chunk-4NXZIMYZ.js';
|
|
37
35
|
import '../../chunk-R5XP45PD.js';
|
|
38
36
|
import '../../chunk-G5EO5FWC.js';
|
|
39
37
|
import '../../chunk-NCULQXJE.js';
|
|
40
38
|
import '../../chunk-VDYPDMYR.js';
|
|
41
39
|
import '../../chunk-WDGIQDQG.js';
|
|
42
|
-
import '../../chunk-
|
|
43
|
-
import '../../chunk-7WDT2PRI.js';
|
|
44
|
-
import '../../chunk-AP5Y5M3R.js';
|
|
40
|
+
import '../../chunk-RYOTIXZO.js';
|
|
45
41
|
import '../../chunk-JZ4G2SJH.js';
|
|
46
42
|
import '../../chunk-KYGKJ553.js';
|
|
47
43
|
import '../../chunk-M7YSMMAC.js';
|
|
48
44
|
import '../../chunk-XQ2UDMPO.js';
|
|
49
45
|
import '../../chunk-JMCSAGZ3.js';
|
|
50
46
|
import '../../chunk-QUKDUSHD.js';
|
|
51
|
-
import '../../chunk-
|
|
52
|
-
import '../../chunk-
|
|
47
|
+
import '../../chunk-O74AEVHW.js';
|
|
48
|
+
import '../../chunk-ZUHIWALK.js';
|
|
53
49
|
import '../../chunk-2IZC7HSV.js';
|
|
54
50
|
import '../../chunk-2SDZMTB2.js';
|
|
55
|
-
import '../../chunk-
|
|
56
|
-
import '../../chunk-
|
|
51
|
+
import '../../chunk-IQEBXXB5.js';
|
|
52
|
+
import '../../chunk-AZUJNRQU.js';
|
|
57
53
|
import '../../chunk-W3B3UOEG.js';
|
|
58
54
|
import '../../chunk-ACRVOD7W.js';
|
|
59
55
|
import '../../chunk-QSU23VYZ.js';
|
|
60
56
|
import '../../chunk-BJYCQ2NV.js';
|
|
61
57
|
import '../../chunk-VM462WZC.js';
|
|
62
|
-
import '../../chunk-O74AEVHW.js';
|
|
63
|
-
import '../../chunk-ZUHIWALK.js';
|
|
64
58
|
import '../../chunk-5UZDOF6V.js';
|
|
65
59
|
import '../../chunk-PKVTEDKO.js';
|
|
66
60
|
import '../../chunk-I3TH7PIB.js';
|
|
67
61
|
import '../../chunk-WGPK3FQ7.js';
|
|
68
62
|
import '../../chunk-JL4MVVFH.js';
|
|
69
|
-
import '../../chunk-
|
|
70
|
-
import '../../chunk-
|
|
63
|
+
import '../../chunk-4FEAWXJD.js';
|
|
64
|
+
import '../../chunk-JHQTKMKG.js';
|
|
71
65
|
import '../../chunk-WA45EC4Y.js';
|
|
72
66
|
import '../../chunk-2MOEOEOI.js';
|
|
73
67
|
import '../../chunk-5LCXASRW.js';
|
|
74
68
|
import '../../chunk-2ZJVU7NV.js';
|
|
75
69
|
import '../../chunk-5ESF6N36.js';
|
|
76
70
|
import '../../chunk-RBPLOM3A.js';
|
|
77
|
-
import '../../chunk-
|
|
71
|
+
import '../../chunk-6BAV4TZ5.js';
|
|
72
|
+
import '../../chunk-SW6QPJM4.js';
|
|
78
73
|
import '../../chunk-2NT57K4U.js';
|
|
79
|
-
import '../../chunk-6G3RRWJT.js';
|
|
80
74
|
import '../../chunk-JRJGSNI4.js';
|
|
81
75
|
import '../../chunk-RF6ECFS5.js';
|
|
82
|
-
import '../../chunk-
|
|
83
|
-
import '../../chunk-
|
|
84
|
-
import '../../chunk-JHQTKMKG.js';
|
|
76
|
+
import '../../chunk-KYZT3RNW.js';
|
|
77
|
+
import '../../chunk-UEG2LI7Z.js';
|
|
85
78
|
import '../../chunk-CI7GPGCJ.js';
|
|
86
79
|
import '../../chunk-226EBOTK.js';
|
|
87
|
-
import '../../chunk-
|
|
88
|
-
import '../../chunk-G24VV5NO.js';
|
|
89
|
-
import '../../chunk-6BAV4TZ5.js';
|
|
90
|
-
import '../../chunk-SW6QPJM4.js';
|
|
80
|
+
import '../../chunk-74RKVIBV.js';
|
|
91
81
|
import '../../chunk-V6WNRZT3.js';
|
|
92
82
|
import '../../chunk-JBK2LA6U.js';
|
|
93
83
|
import '../../chunk-55U27XY4.js';
|
|
94
84
|
import '../../chunk-LSPO6OBI.js';
|
|
95
85
|
import '../../chunk-Y56WBNCY.js';
|
|
96
|
-
import '../../chunk-KYZT3RNW.js';
|
|
97
|
-
import '../../chunk-UEG2LI7Z.js';
|
|
98
86
|
import '../../chunk-JJTQOH7J.js';
|
|
99
87
|
import '../../chunk-72X6SXOX.js';
|
|
100
88
|
import '../../chunk-SR5U52V3.js';
|
|
101
|
-
import '../../chunk-74RKVIBV.js';
|
|
102
89
|
import '../../chunk-AWIJHDNK.js';
|
|
103
|
-
import '../../chunk-BRP6D56U.js';
|
|
104
|
-
import '../../chunk-S733NAYS.js';
|
|
105
90
|
import '../../chunk-MAUTIHQG.js';
|
|
91
|
+
import '../../chunk-S733NAYS.js';
|
|
106
92
|
import '../../chunk-666N6OTL.js';
|
|
107
93
|
import '../../chunk-FMH55OKV.js';
|
|
108
94
|
import '../../chunk-WXVNTJIB.js';
|
|
109
|
-
import '../../chunk-CXACRCZ4.js';
|
|
110
95
|
import '../../chunk-T7H53CK2.js';
|
|
111
|
-
import '../../chunk-
|
|
96
|
+
import '../../chunk-TBKJ34BB.js';
|
|
97
|
+
import '../../chunk-BRP6D56U.js';
|
|
98
|
+
import '../../chunk-6G3RRWJT.js';
|
|
99
|
+
import '../../chunk-ZU2GYVAP.js';
|
|
100
|
+
import '../../chunk-CRZ2JE24.js';
|
|
101
|
+
import '../../chunk-PSVQ7ZNX.js';
|
|
102
|
+
import '../../chunk-WKRIKCJC.js';
|
|
103
|
+
import '../../chunk-JHQ5NMLZ.js';
|
|
104
|
+
import '../../chunk-WFJQ43SM.js';
|
|
105
|
+
import '../../chunk-AP5Y5M3R.js';
|
|
106
|
+
import '../../chunk-Q7LVUGFL.js';
|
|
107
|
+
import '../../chunk-G5YLGJXR.js';
|
|
108
|
+
import '../../chunk-G24VV5NO.js';
|
|
109
|
+
import '../../chunk-R3AO6AZM.js';
|
|
110
|
+
import '../../chunk-GCUTJI7M.js';
|
|
111
|
+
import '../../chunk-CXACRCZ4.js';
|
|
112
112
|
import '../../chunk-P6IRHPFM.js';
|
|
113
113
|
import '../../chunk-SXHYB7JB.js';
|
|
114
|
+
import '../../chunk-BFLN54VR.js';
|
|
114
115
|
import '../../chunk-ONGJ7AC2.js';
|
|
115
116
|
import '../../chunk-UHXGBV5N.js';
|
|
116
117
|
import '../../chunk-UIUMTURU.js';
|
|
117
118
|
import '../../chunk-PRUXIDBD.js';
|
|
118
119
|
import '../../chunk-NURPUVUV.js';
|
|
120
|
+
import '../../chunk-TV4RSQH4.js';
|
|
119
121
|
import '../../chunk-HJBXUXTD.js';
|
|
120
122
|
import '../../chunk-ASKFAYYR.js';
|
|
121
123
|
import '../../chunk-QYZT24TS.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { Typography } from '../../chunk-N53OMWW2.js';
|
|
3
2
|
import { WorkflowGraph } from '../../chunk-VCCI3NRD.js';
|
|
3
|
+
import { Typography } from '../../chunk-N53OMWW2.js';
|
|
4
4
|
import { Heading } from '../../chunk-WI547C47.js';
|
|
5
5
|
import { ContextMeter } from '../../chunk-S2WSXZ7Y.js';
|
|
6
6
|
import { AgentMetricsCard } from '../../chunk-OCQB4IU7.js';
|
|
@@ -10,7 +10,11 @@ export interface AgentWorkbenchToolCall {
|
|
|
10
10
|
}
|
|
11
11
|
export interface AgentWorkbenchMessage {
|
|
12
12
|
id: string;
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Message role. Use `"assistant"` for AI messages.
|
|
15
|
+
* @deprecated `"agent"` is accepted for backward compat but will be removed in the next major version.
|
|
16
|
+
*/
|
|
17
|
+
role: 'user' | 'assistant' | 'agent' | 'system';
|
|
14
18
|
content: string;
|
|
15
19
|
timestamp?: string;
|
|
16
20
|
toolCalls?: AgentWorkbenchToolCall[];
|