@agent-native/toolkit 0.213.1 → 0.216.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/agent-native.eject.json +9 -0
- package/dist/app/agentkit/react/chat.d.ts.map +1 -1
- package/dist/app/agentkit/react/chat.js +2 -2
- package/dist/app/agentkit/react/chat.js.map +1 -1
- package/dist/app/agentkit/react/components.d.ts +4 -1
- package/dist/app/agentkit/react/components.d.ts.map +1 -1
- package/dist/app/agentkit/react/components.js +73 -13
- package/dist/app/agentkit/react/components.js.map +1 -1
- package/dist/app/agentkit/react/context.d.ts +19 -1
- package/dist/app/agentkit/react/context.d.ts.map +1 -1
- package/dist/app/agentkit/react/context.js +7 -1
- package/dist/app/agentkit/react/context.js.map +1 -1
- package/dist/app/agentkit/react/index.d.ts +2 -0
- package/dist/app/agentkit/react/index.d.ts.map +1 -1
- package/dist/app/agentkit/react/index.js +2 -0
- package/dist/app/agentkit/react/index.js.map +1 -1
- package/dist/app/agentkit/react/message-content-order.d.ts +21 -0
- package/dist/app/agentkit/react/message-content-order.d.ts.map +1 -0
- package/dist/app/agentkit/react/message-content-order.js +173 -0
- package/dist/app/agentkit/react/message-content-order.js.map +1 -0
- package/dist/app/agentkit/react/root.d.ts +6 -1
- package/dist/app/agentkit/react/root.d.ts.map +1 -1
- package/dist/app/agentkit/react/root.js +2 -2
- package/dist/app/agentkit/react/root.js.map +1 -1
- package/dist/app/agentkit/react/styles.css +45 -8
- package/dist/app/agentkit/react/transcript-layout.d.ts +51 -0
- package/dist/app/agentkit/react/transcript-layout.d.ts.map +1 -0
- package/dist/app/agentkit/react/transcript-layout.js +34 -0
- package/dist/app/agentkit/react/transcript-layout.js.map +1 -0
- package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.js +9 -4
- package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
- package/dist/app/chat/AgentPanel.d.ts +16 -2
- package/dist/app/chat/AgentPanel.d.ts.map +1 -1
- package/dist/app/chat/AgentPanel.js +26 -5
- package/dist/app/chat/AgentPanel.js.map +1 -1
- package/dist/app/chat/chat/index.d.ts +2 -0
- package/dist/app/chat/chat/index.d.ts.map +1 -1
- package/dist/app/chat/chat/index.js.map +1 -1
- package/dist/app/chat/chat/surface-types.d.ts +15 -0
- package/dist/app/chat/chat/surface-types.d.ts.map +1 -1
- package/dist/app/chat/chat/surface-types.js.map +1 -1
- package/dist/app/chat/chat/tool-call-display.d.ts +7 -2
- package/dist/app/chat/chat/tool-call-display.d.ts.map +1 -1
- package/dist/app/chat/chat/tool-call-display.js +10 -9
- package/dist/app/chat/chat/tool-call-display.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartRenderer.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartRenderer.js +300 -33
- package/dist/app/chat/chat/widgets/DataChartRenderer.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartWidget.d.ts +3 -2
- package/dist/app/chat/chat/widgets/DataChartWidget.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartWidget.js +18 -9
- package/dist/app/chat/chat/widgets/DataChartWidget.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataInsightsWidget.js +1 -1
- package/dist/app/chat/chat/widgets/DataInsightsWidget.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataTableWidget.d.ts +3 -2
- package/dist/app/chat/chat/widgets/DataTableWidget.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataTableWidget.js +10 -66
- package/dist/app/chat/chat/widgets/DataTableWidget.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.d.ts +11 -0
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.d.ts.map +1 -0
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.js +133 -0
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.js.map +1 -0
- package/dist/app/chat/chat/widgets/builtin-tool-renderers.js +2 -2
- package/dist/app/chat/chat/widgets/builtin-tool-renderers.js.map +1 -1
- package/dist/app/chat/mcp-apps/McpAppRenderer.d.ts.map +1 -1
- package/dist/app/chat/mcp-apps/McpAppRenderer.js +6 -5
- package/dist/app/chat/mcp-apps/McpAppRenderer.js.map +1 -1
- package/dist/app/chat/mcp-apps/mcp-app-theme.d.ts +2 -0
- package/dist/app/chat/mcp-apps/mcp-app-theme.d.ts.map +1 -0
- package/dist/app/chat/mcp-apps/mcp-app-theme.js +11 -0
- package/dist/app/chat/mcp-apps/mcp-app-theme.js.map +1 -0
- package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.js +9 -0
- package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.js +9 -0
- package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
- package/dist/app/i18n/catalogs/en-US.d.ts +9 -0
- package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/en-US.js +9 -0
- package/dist/app/i18n/catalogs/en-US.js.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.js +9 -0
- package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.js +9 -0
- package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.js +9 -0
- package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.js +9 -0
- package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.js +9 -0
- package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.js +9 -0
- package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.js +9 -0
- package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.js +9 -0
- package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
- package/dist/app/providers/AppProviders.d.ts +2 -1
- package/dist/app/providers/AppProviders.d.ts.map +1 -1
- package/dist/app/providers/AppProviders.js +4 -3
- package/dist/app/providers/AppProviders.js.map +1 -1
- package/dist/app/providers/ThemeFamilySync.d.ts +2 -0
- package/dist/app/providers/ThemeFamilySync.d.ts.map +1 -0
- package/dist/app/providers/ThemeFamilySync.js +6 -0
- package/dist/app/providers/ThemeFamilySync.js.map +1 -0
- package/dist/app/settings/account/PreferencesSettings.d.ts.map +1 -1
- package/dist/app/settings/account/PreferencesSettings.js +2 -1
- package/dist/app/settings/account/PreferencesSettings.js.map +1 -1
- package/dist/app/settings/account/ThemeFamilySettings.d.ts +2 -0
- package/dist/app/settings/account/ThemeFamilySettings.d.ts.map +1 -0
- package/dist/app/settings/account/ThemeFamilySettings.js +31 -0
- package/dist/app/settings/account/ThemeFamilySettings.js.map +1 -0
- package/dist/app/settings/account/search-entries.d.ts.map +1 -1
- package/dist/app/settings/account/search-entries.js +6 -0
- package/dist/app/settings/account/search-entries.js.map +1 -1
- package/dist/app/shared/DefaultSpinner.d.ts.map +1 -1
- package/dist/app/shared/DefaultSpinner.js +4 -5
- package/dist/app/shared/DefaultSpinner.js.map +1 -1
- package/dist/app/shared/ErrorBoundary.d.ts +1 -0
- package/dist/app/shared/ErrorBoundary.d.ts.map +1 -1
- package/dist/app/shared/ErrorBoundary.js +27 -12
- package/dist/app/shared/ErrorBoundary.js.map +1 -1
- package/dist/app/shared/PoweredByBadge.d.ts.map +1 -1
- package/dist/app/shared/PoweredByBadge.js +8 -49
- package/dist/app/shared/PoweredByBadge.js.map +1 -1
- package/dist/app/styles/agent-conversation.css +0 -23
- package/dist/app/styles/agent-native.css +1 -1
- package/dist/app/styles/theme-families.css +66 -0
- package/dist/composer/ComposerContextBanner.d.ts +24 -0
- package/dist/composer/ComposerContextBanner.d.ts.map +1 -0
- package/dist/composer/ComposerContextBanner.js +9 -0
- package/dist/composer/ComposerContextBanner.js.map +1 -0
- package/dist/composer/ComposerModePicker.d.ts +26 -0
- package/dist/composer/ComposerModePicker.d.ts.map +1 -0
- package/dist/composer/ComposerModePicker.js +14 -0
- package/dist/composer/ComposerModePicker.js.map +1 -0
- package/dist/composer/index.d.ts +2 -0
- package/dist/composer/index.d.ts.map +1 -1
- package/dist/composer/index.js +2 -0
- package/dist/composer/index.js.map +1 -1
- package/dist/styles.css +1 -0
- package/package.json +3 -3
- package/src/app/agentkit/react/chat.tsx +2 -0
- package/src/app/agentkit/react/components.interaction.spec.tsx +107 -0
- package/src/app/agentkit/react/components.spec.tsx +40 -1
- package/src/app/agentkit/react/components.tsx +186 -31
- package/src/app/agentkit/react/context.tsx +29 -0
- package/src/app/agentkit/react/index.ts +2 -0
- package/src/app/agentkit/react/lifecycle.spec.tsx +289 -4
- package/src/app/agentkit/react/message-content-order.spec.ts +190 -0
- package/src/app/agentkit/react/message-content-order.ts +246 -0
- package/src/app/agentkit/react/root.tsx +11 -0
- package/src/app/agentkit/react/styles.css +45 -8
- package/src/app/agentkit/react/transcript-layout.spec.ts +72 -0
- package/src/app/agentkit/react/transcript-layout.ts +97 -0
- package/src/app/auth/AuthPage.attribution.spec.tsx +6 -0
- package/src/app/chat/AgentKitAssistantChat.spec.tsx +58 -0
- package/src/app/chat/AgentKitAssistantChat.tsx +15 -1
- package/src/app/chat/AgentPanel.header.spec.ts +72 -14
- package/src/app/chat/AgentPanel.page-header-share.spec.tsx +101 -0
- package/src/app/chat/AgentPanel.tsx +111 -55
- package/src/app/chat/chat/index.ts +2 -0
- package/src/app/chat/chat/surface-types.ts +18 -0
- package/src/app/chat/chat/tool-call-display.spec.tsx +83 -0
- package/src/app/chat/chat/tool-call-display.tsx +40 -8
- package/src/app/chat/chat/widgets/DataChartRenderer.spec.tsx +849 -0
- package/src/app/chat/chat/widgets/DataChartRenderer.tsx +567 -72
- package/src/app/chat/chat/widgets/DataChartWidget.spec.tsx +432 -0
- package/src/app/chat/chat/widgets/DataChartWidget.ssr.spec.tsx +25 -0
- package/src/app/chat/chat/widgets/DataChartWidget.tsx +58 -33
- package/src/app/chat/chat/widgets/DataInsightsWidget.tsx +2 -2
- package/src/app/chat/chat/widgets/DataTableWidget.spec.tsx +37 -3
- package/src/app/chat/chat/widgets/DataTableWidget.tsx +22 -86
- package/src/app/chat/chat/widgets/DataWidgetDisplayControls.tsx +321 -0
- package/src/app/chat/chat/widgets/builtin-tool-renderers.tsx +5 -5
- package/src/app/chat/mcp-apps/McpAppRenderer.tsx +10 -5
- package/src/app/chat/mcp-apps/mcp-app-theme.spec.ts +30 -0
- package/src/app/chat/mcp-apps/mcp-app-theme.ts +11 -0
- package/src/app/i18n/catalogs/ar-SA.ts +10 -0
- package/src/app/i18n/catalogs/de-DE.ts +11 -0
- package/src/app/i18n/catalogs/en-US.ts +11 -0
- package/src/app/i18n/catalogs/es-ES.ts +12 -0
- package/src/app/i18n/catalogs/fr-FR.ts +12 -0
- package/src/app/i18n/catalogs/hi-IN.ts +10 -0
- package/src/app/i18n/catalogs/ja-JP.ts +11 -0
- package/src/app/i18n/catalogs/ko-KR.ts +10 -0
- package/src/app/i18n/catalogs/pt-BR.ts +11 -0
- package/src/app/i18n/catalogs/zh-CN.ts +9 -0
- package/src/app/i18n/catalogs/zh-TW.ts +10 -0
- package/src/app/providers/AppProviders.spec.tsx +71 -0
- package/src/app/providers/AppProviders.tsx +10 -0
- package/src/app/providers/ThemeFamilySync.tsx +6 -0
- package/src/app/settings/account/PreferencesSettings.spec.tsx +13 -2
- package/src/app/settings/account/PreferencesSettings.tsx +8 -0
- package/src/app/settings/account/ThemeFamilySettings.tsx +61 -0
- package/src/app/settings/account/search-entries.ts +6 -0
- package/src/app/shared/DefaultSpinner.spec.tsx +14 -0
- package/src/app/shared/DefaultSpinner.tsx +4 -5
- package/src/app/shared/ErrorBoundary.spec.tsx +45 -2
- package/src/app/shared/ErrorBoundary.tsx +37 -12
- package/src/app/shared/PoweredByBadge.spec.tsx +16 -0
- package/src/app/shared/PoweredByBadge.tsx +8 -50
- package/src/app/styles/agent-conversation.css +0 -23
- package/src/app/styles/agent-native.css +1 -1
- package/src/app/styles/agent-native.spec.ts +18 -0
- package/src/app/styles/theme-families.css +66 -0
- package/src/app/styles/theme-families.spec.ts +29 -0
- package/src/composer/ComposerContextBanner.spec.tsx +100 -0
- package/src/composer/ComposerContextBanner.tsx +77 -0
- package/src/composer/ComposerModePicker.spec.tsx +101 -0
- package/src/composer/ComposerModePicker.tsx +98 -0
- package/src/composer/index.ts +9 -0
- package/src/styles.css +1 -0
|
@@ -40,6 +40,7 @@ import {
|
|
|
40
40
|
import {
|
|
41
41
|
createContext,
|
|
42
42
|
Component,
|
|
43
|
+
Fragment,
|
|
43
44
|
memo,
|
|
44
45
|
useCallback,
|
|
45
46
|
useContext,
|
|
@@ -49,6 +50,7 @@ import {
|
|
|
49
50
|
useRef,
|
|
50
51
|
useState,
|
|
51
52
|
type ComponentType,
|
|
53
|
+
type CSSProperties,
|
|
52
54
|
type ErrorInfo,
|
|
53
55
|
type KeyboardEvent as ReactKeyboardEvent,
|
|
54
56
|
type PointerEvent as ReactPointerEvent,
|
|
@@ -136,7 +138,13 @@ import {
|
|
|
136
138
|
type AgentKitSuggestionsRenderProps,
|
|
137
139
|
type AgentRunFailureRenderProps,
|
|
138
140
|
} from "./context.js";
|
|
141
|
+
import { orderMessageContent } from "./message-content-order.js";
|
|
139
142
|
import { AgentStreamingText } from "./streaming-text.js";
|
|
143
|
+
import {
|
|
144
|
+
workedForRowChevronStyle,
|
|
145
|
+
workedForRowSummaryStyle,
|
|
146
|
+
type AgentChatTranscriptLayout,
|
|
147
|
+
} from "./transcript-layout.js";
|
|
140
148
|
|
|
141
149
|
// AgentKit React installs without @agent-native/core, so it repeats core's
|
|
142
150
|
// replay markers. Its specs assert core's attribute names.
|
|
@@ -1464,7 +1472,8 @@ export function AgentActivityGroup({
|
|
|
1464
1472
|
excludeAgentActivities?: boolean;
|
|
1465
1473
|
isCurrentSegment?: boolean;
|
|
1466
1474
|
}) {
|
|
1467
|
-
const { threadId, slots, registry, labels } =
|
|
1475
|
+
const { threadId, slots, registry, labels, formatWorkedForDuration } =
|
|
1476
|
+
useAgentKit();
|
|
1468
1477
|
const thread = useAgentThread();
|
|
1469
1478
|
const runEvents = runId
|
|
1470
1479
|
? thread.events.filter((event) => event.runId === runId)
|
|
@@ -1761,6 +1770,7 @@ export function AgentActivityGroup({
|
|
|
1761
1770
|
}
|
|
1762
1771
|
const hasExpandableActivity = displayGroups.length > 0;
|
|
1763
1772
|
const formatDuration = (ms: number) =>
|
|
1773
|
+
formatWorkedForDuration?.(ms) ??
|
|
1764
1774
|
formatAgentKitDuration(ms, {
|
|
1765
1775
|
hour: labels.durationHourShort,
|
|
1766
1776
|
minute: labels.durationMinuteShort,
|
|
@@ -1907,7 +1917,9 @@ function AgentWorkDisclosure({
|
|
|
1907
1917
|
current?: ReactNode;
|
|
1908
1918
|
children: ReactNode;
|
|
1909
1919
|
}) {
|
|
1920
|
+
const { slots, workedForRowLayout } = useAgentKit();
|
|
1910
1921
|
const [open, setOpen] = useState(false);
|
|
1922
|
+
const Summary = slots.workedForSummary;
|
|
1911
1923
|
return (
|
|
1912
1924
|
<details
|
|
1913
1925
|
className="agentkit-activities"
|
|
@@ -1918,24 +1930,39 @@ function AgentWorkDisclosure({
|
|
|
1918
1930
|
<summary
|
|
1919
1931
|
className="agentkit-activities-summary"
|
|
1920
1932
|
aria-disabled={!expandable}
|
|
1933
|
+
style={workedForRowSummaryStyle(workedForRowLayout)}
|
|
1921
1934
|
onClick={(event) => {
|
|
1922
1935
|
event.preventDefault();
|
|
1923
1936
|
if (!expandable) return;
|
|
1924
1937
|
setOpen((value) => !value);
|
|
1925
1938
|
}}
|
|
1926
1939
|
>
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1940
|
+
{Summary ? (
|
|
1941
|
+
<Summary
|
|
1942
|
+
label={label}
|
|
1943
|
+
running={running}
|
|
1944
|
+
expandable={expandable}
|
|
1945
|
+
open={open}
|
|
1946
|
+
current={current}
|
|
1947
|
+
layout={workedForRowLayout}
|
|
1948
|
+
/>
|
|
1949
|
+
) : (
|
|
1950
|
+
<>
|
|
1951
|
+
<IconChevronRight
|
|
1952
|
+
aria-hidden="true"
|
|
1953
|
+
className="agentkit-icon agentkit-summary-chevron"
|
|
1954
|
+
style={workedForRowChevronStyle(workedForRowLayout)}
|
|
1955
|
+
/>
|
|
1956
|
+
<span className="agentkit-activities-summary-content">
|
|
1957
|
+
{label ? (
|
|
1958
|
+
<span className="agentkit-activities-heading">
|
|
1959
|
+
<span className="agentkit-activities-label">{label}</span>
|
|
1960
|
+
</span>
|
|
1961
|
+
) : null}
|
|
1962
|
+
{current}
|
|
1931
1963
|
</span>
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
</span>
|
|
1935
|
-
<IconChevronRight
|
|
1936
|
-
aria-hidden="true"
|
|
1937
|
-
className="agentkit-icon agentkit-summary-chevron"
|
|
1938
|
-
/>
|
|
1964
|
+
</>
|
|
1965
|
+
)}
|
|
1939
1966
|
</summary>
|
|
1940
1967
|
{children}
|
|
1941
1968
|
</details>
|
|
@@ -3783,11 +3810,15 @@ export function AgentMessageActions({
|
|
|
3783
3810
|
);
|
|
3784
3811
|
}
|
|
3785
3812
|
|
|
3813
|
+
const AgentKitPostWidgetTextContext =
|
|
3814
|
+
createContext<AgentChatTranscriptLayout["postWidgetText"]>(undefined);
|
|
3815
|
+
|
|
3786
3816
|
export function AgentMessageView({
|
|
3787
3817
|
value: message,
|
|
3788
3818
|
threadId,
|
|
3789
3819
|
}: AgentKitRenderProps<AgentMessage>) {
|
|
3790
|
-
const { labels, slots } = useAgentKit();
|
|
3820
|
+
const { labels, slots, resolveMessageContentOrder } = useAgentKit();
|
|
3821
|
+
const postWidgetText = useContext(AgentKitPostWidgetTextContext);
|
|
3791
3822
|
const thread = useAgentThread(threadId);
|
|
3792
3823
|
const visibleMessage = stripAgentMessageContext(message);
|
|
3793
3824
|
const Supplement = slots.messageSupplement;
|
|
@@ -3812,6 +3843,13 @@ export function AgentMessageView({
|
|
|
3812
3843
|
thread.annotationMessageIds[annotation.id] === message.id &&
|
|
3813
3844
|
!embeddedAnnotationIds.has(annotation.id),
|
|
3814
3845
|
);
|
|
3846
|
+
const orderedContent = orderMessageContent(
|
|
3847
|
+
visibleMessage,
|
|
3848
|
+
visibleMessage.parts,
|
|
3849
|
+
attachedWidgets,
|
|
3850
|
+
thread.events,
|
|
3851
|
+
resolveMessageContentOrder,
|
|
3852
|
+
);
|
|
3815
3853
|
if (
|
|
3816
3854
|
!message.parts.length &&
|
|
3817
3855
|
!attachedWidgets.length &&
|
|
@@ -3821,6 +3859,7 @@ export function AgentMessageView({
|
|
|
3821
3859
|
<Supplement value={visibleMessage} threadId={threadId} />
|
|
3822
3860
|
) : null;
|
|
3823
3861
|
}
|
|
3862
|
+
let hasSeenWidget = false;
|
|
3824
3863
|
return (
|
|
3825
3864
|
<article
|
|
3826
3865
|
className="agentkit-message"
|
|
@@ -3830,23 +3869,39 @@ export function AgentMessageView({
|
|
|
3830
3869
|
aria-busy={message.status === "streaming"}
|
|
3831
3870
|
>
|
|
3832
3871
|
<div className="agentkit-message-content">
|
|
3833
|
-
{
|
|
3834
|
-
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
|
|
3838
|
-
|
|
3839
|
-
|
|
3840
|
-
|
|
3841
|
-
|
|
3842
|
-
|
|
3843
|
-
|
|
3844
|
-
|
|
3845
|
-
|
|
3846
|
-
|
|
3847
|
-
|
|
3848
|
-
|
|
3849
|
-
|
|
3872
|
+
{orderedContent.map((item, index) => {
|
|
3873
|
+
const isWidget =
|
|
3874
|
+
item.type === "widget" ||
|
|
3875
|
+
(item.type === "part" && item.part.type === "widget");
|
|
3876
|
+
const followsWidget =
|
|
3877
|
+
message.role === "assistant" &&
|
|
3878
|
+
postWidgetText !== undefined &&
|
|
3879
|
+
hasSeenWidget &&
|
|
3880
|
+
item.type === "part" &&
|
|
3881
|
+
item.part.type === "text";
|
|
3882
|
+
if (isWidget) hasSeenWidget = true;
|
|
3883
|
+
const content = (
|
|
3884
|
+
<AgentMessagePartView
|
|
3885
|
+
value={
|
|
3886
|
+
item.type === "widget"
|
|
3887
|
+
? { type: "widget", widget: item.widget }
|
|
3888
|
+
: item.part
|
|
3889
|
+
}
|
|
3890
|
+
threadId={threadId}
|
|
3891
|
+
active={message.status === "streaming"}
|
|
3892
|
+
resetKey={`${threadId}:${message.id}:${index}`}
|
|
3893
|
+
userMessage={message.role === "user"}
|
|
3894
|
+
/>
|
|
3895
|
+
);
|
|
3896
|
+
|
|
3897
|
+
return followsWidget ? (
|
|
3898
|
+
<div key={item.key} data-post-widget-text="true">
|
|
3899
|
+
{content}
|
|
3900
|
+
</div>
|
|
3901
|
+
) : (
|
|
3902
|
+
<Fragment key={item.key}>{content}</Fragment>
|
|
3903
|
+
);
|
|
3904
|
+
})}
|
|
3850
3905
|
{attachedAnnotations.length ? (
|
|
3851
3906
|
<div className="agentkit-annotations">
|
|
3852
3907
|
{attachedAnnotations.map((annotation) => (
|
|
@@ -4781,9 +4836,103 @@ export interface AgentKitChatProps {
|
|
|
4781
4836
|
emptyComposerPlacement?: "center" | "bottom";
|
|
4782
4837
|
/** Follow new output until the user deliberately scrolls away. */
|
|
4783
4838
|
autoScroll?: boolean;
|
|
4839
|
+
/** Optional transcript geometry. Omitted values keep the shared defaults. */
|
|
4840
|
+
transcriptLayout?: AgentChatTranscriptLayout;
|
|
4784
4841
|
className?: string;
|
|
4785
4842
|
}
|
|
4786
4843
|
|
|
4844
|
+
type AgentKitTranscriptContentStyle = CSSProperties & {
|
|
4845
|
+
"--agentkit-transcript-top-inset"?: string;
|
|
4846
|
+
"--agentkit-transcript-lane-width"?: string;
|
|
4847
|
+
"--agentkit-transcript-lane-offset-inline"?: string;
|
|
4848
|
+
"--agentkit-transcript-message-gap"?: string;
|
|
4849
|
+
"--agentkit-transcript-message-line-height"?: string;
|
|
4850
|
+
"--agentkit-transcript-font-family"?: string;
|
|
4851
|
+
"--agentkit-transcript-post-widget-text-color"?: string;
|
|
4852
|
+
"--agentkit-transcript-post-widget-paragraph-padding-block"?: string;
|
|
4853
|
+
"--agentkit-user-bubble-line-height"?: string;
|
|
4854
|
+
"--agentkit-user-bubble-max-width"?: string;
|
|
4855
|
+
"--agentkit-user-bubble-offset-inline"?: string;
|
|
4856
|
+
"--agentkit-user-bubble-padding-block"?: string;
|
|
4857
|
+
"--agentkit-user-bubble-padding-inline"?: string;
|
|
4858
|
+
};
|
|
4859
|
+
|
|
4860
|
+
function transcriptLength(value: number | undefined, name: string) {
|
|
4861
|
+
if (value === undefined) return undefined;
|
|
4862
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
4863
|
+
throw new RangeError(
|
|
4864
|
+
`transcriptLayout.${name} must be a non-negative number`,
|
|
4865
|
+
);
|
|
4866
|
+
}
|
|
4867
|
+
return `${value}px`;
|
|
4868
|
+
}
|
|
4869
|
+
|
|
4870
|
+
function transcriptOffset(value: number | undefined, name: string) {
|
|
4871
|
+
if (value === undefined) return undefined;
|
|
4872
|
+
if (!Number.isFinite(value)) {
|
|
4873
|
+
throw new RangeError(`transcriptLayout.${name} must be a finite number`);
|
|
4874
|
+
}
|
|
4875
|
+
return `${value}px`;
|
|
4876
|
+
}
|
|
4877
|
+
|
|
4878
|
+
function transcriptContentStyle(
|
|
4879
|
+
layout?: AgentChatTranscriptLayout,
|
|
4880
|
+
): AgentKitTranscriptContentStyle | undefined {
|
|
4881
|
+
if (!layout) return undefined;
|
|
4882
|
+
return {
|
|
4883
|
+
"--agentkit-transcript-top-inset": transcriptLength(
|
|
4884
|
+
layout.topInset,
|
|
4885
|
+
"topInset",
|
|
4886
|
+
),
|
|
4887
|
+
"--agentkit-transcript-lane-width": transcriptLength(
|
|
4888
|
+
layout.messageLaneWidth,
|
|
4889
|
+
"messageLaneWidth",
|
|
4890
|
+
),
|
|
4891
|
+
"--agentkit-transcript-lane-offset-inline": transcriptOffset(
|
|
4892
|
+
layout.messageLaneOffsetInline,
|
|
4893
|
+
"messageLaneOffsetInline",
|
|
4894
|
+
),
|
|
4895
|
+
"--agentkit-transcript-message-gap": transcriptLength(
|
|
4896
|
+
layout.messageGap,
|
|
4897
|
+
"messageGap",
|
|
4898
|
+
),
|
|
4899
|
+
"--agentkit-transcript-message-line-height": transcriptLength(
|
|
4900
|
+
layout.messageLineHeight,
|
|
4901
|
+
"messageLineHeight",
|
|
4902
|
+
),
|
|
4903
|
+
"--agentkit-transcript-font-family": layout.fontFamily,
|
|
4904
|
+
"--agentkit-transcript-post-widget-text-color":
|
|
4905
|
+
layout.postWidgetText?.tone === "muted"
|
|
4906
|
+
? "var(--agentkit-text-muted)"
|
|
4907
|
+
: undefined,
|
|
4908
|
+
"--agentkit-transcript-post-widget-paragraph-padding-block":
|
|
4909
|
+
transcriptLength(
|
|
4910
|
+
layout.postWidgetText?.paragraphPaddingBlock,
|
|
4911
|
+
"postWidgetText.paragraphPaddingBlock",
|
|
4912
|
+
),
|
|
4913
|
+
"--agentkit-user-bubble-line-height": transcriptLength(
|
|
4914
|
+
layout.userBubbleLineHeight,
|
|
4915
|
+
"userBubbleLineHeight",
|
|
4916
|
+
),
|
|
4917
|
+
"--agentkit-user-bubble-max-width": transcriptLength(
|
|
4918
|
+
layout.userBubbleMaxWidth,
|
|
4919
|
+
"userBubbleMaxWidth",
|
|
4920
|
+
),
|
|
4921
|
+
"--agentkit-user-bubble-offset-inline": transcriptOffset(
|
|
4922
|
+
layout.userBubbleOffsetInline,
|
|
4923
|
+
"userBubbleOffsetInline",
|
|
4924
|
+
),
|
|
4925
|
+
"--agentkit-user-bubble-padding-block": transcriptLength(
|
|
4926
|
+
layout.userBubblePadding?.block,
|
|
4927
|
+
"userBubblePadding.block",
|
|
4928
|
+
),
|
|
4929
|
+
"--agentkit-user-bubble-padding-inline": transcriptLength(
|
|
4930
|
+
layout.userBubblePadding?.inline,
|
|
4931
|
+
"userBubblePadding.inline",
|
|
4932
|
+
),
|
|
4933
|
+
};
|
|
4934
|
+
}
|
|
4935
|
+
|
|
4787
4936
|
const AGENTKIT_TRANSCRIPT_BOTTOM_THRESHOLD = 24;
|
|
4788
4937
|
const AGENTKIT_TRANSCRIPT_SCROLLBAR_IDLE_MS = 900;
|
|
4789
4938
|
const AGENTKIT_TRANSCRIPT_SCROLL_KEYS = new Set([
|
|
@@ -4813,6 +4962,7 @@ export function AgentKitChat({
|
|
|
4813
4962
|
hasRenderedMessages = false,
|
|
4814
4963
|
emptyComposerPlacement = "center",
|
|
4815
4964
|
autoScroll = true,
|
|
4965
|
+
transcriptLayout,
|
|
4816
4966
|
className,
|
|
4817
4967
|
}: AgentKitChatProps) {
|
|
4818
4968
|
const { threadId, slots, registry, labels, onThreadForked } = useAgentKit();
|
|
@@ -5563,12 +5713,17 @@ export function AgentKitChat({
|
|
|
5563
5713
|
<div
|
|
5564
5714
|
ref={transcriptContentRef}
|
|
5565
5715
|
className="agentkit-transcript-content"
|
|
5716
|
+
style={transcriptContentStyle(transcriptLayout)}
|
|
5566
5717
|
>
|
|
5567
5718
|
<AgentKitRegionSlot slot={Transcript} threadId={threadId}>
|
|
5568
5719
|
{!hasConversation && EmptyState ? (
|
|
5569
5720
|
<EmptyState threadId={threadId} />
|
|
5570
5721
|
) : null}
|
|
5571
|
-
|
|
5722
|
+
<AgentKitPostWidgetTextContext.Provider
|
|
5723
|
+
value={transcriptLayout?.postWidgetText}
|
|
5724
|
+
>
|
|
5725
|
+
{transcriptItems}
|
|
5726
|
+
</AgentKitPostWidgetTextContext.Provider>
|
|
5572
5727
|
{approvalEntries.map(([approvalId, request]) => (
|
|
5573
5728
|
<AgentKitSurfaceBoundary
|
|
5574
5729
|
key={`${threadId}:${approvalId}`}
|
|
@@ -43,6 +43,9 @@ import {
|
|
|
43
43
|
type ReactNode,
|
|
44
44
|
} from "react";
|
|
45
45
|
|
|
46
|
+
import type { AgentMessageContentOrderResolver } from "./message-content-order.js";
|
|
47
|
+
import type { AgentChatWorkedForRowLayout } from "./transcript-layout.js";
|
|
48
|
+
|
|
46
49
|
export interface AgentKitRenderProps<T> {
|
|
47
50
|
value: T;
|
|
48
51
|
threadId: ThreadId;
|
|
@@ -79,6 +82,15 @@ export interface AgentKitSuggestionsRenderProps {
|
|
|
79
82
|
onSelect: (suggestion: AgentSuggestion) => void;
|
|
80
83
|
}
|
|
81
84
|
|
|
85
|
+
export interface AgentKitWorkedForSummaryRenderProps {
|
|
86
|
+
label: string;
|
|
87
|
+
running?: boolean;
|
|
88
|
+
expandable: boolean;
|
|
89
|
+
open: boolean;
|
|
90
|
+
current?: ReactNode;
|
|
91
|
+
layout?: AgentChatWorkedForRowLayout;
|
|
92
|
+
}
|
|
93
|
+
|
|
82
94
|
export interface AgentConnectionErrorRenderProps {
|
|
83
95
|
error: AgentError;
|
|
84
96
|
threadId: ThreadId;
|
|
@@ -153,6 +165,8 @@ export interface AgentKitSlots {
|
|
|
153
165
|
composer?: ComponentType<{ threadId: ThreadId }>;
|
|
154
166
|
queue?: ComponentType<AgentKitQueueRenderProps>;
|
|
155
167
|
suggestions?: ComponentType<AgentKitSuggestionsRenderProps>;
|
|
168
|
+
/** Replaces the visible work-summary row while the shared disclosure owns its semantics. */
|
|
169
|
+
workedForSummary?: ComponentType<AgentKitWorkedForSummaryRenderProps>;
|
|
156
170
|
}
|
|
157
171
|
|
|
158
172
|
export interface AgentKitToolSource {
|
|
@@ -482,6 +496,9 @@ export interface AgentKitProviderProps {
|
|
|
482
496
|
) => Promise<AgentConnectionResponse>;
|
|
483
497
|
/** Receives full renderer failures while the UI shows a safe fallback. */
|
|
484
498
|
onRenderError?: (failure: AgentKitRenderFailure) => void;
|
|
499
|
+
resolveMessageContentOrder?: AgentMessageContentOrderResolver;
|
|
500
|
+
workedForRowLayout?: AgentChatWorkedForRowLayout;
|
|
501
|
+
formatWorkedForDuration?: (durationMs: number) => string;
|
|
485
502
|
onClientEffect?: (effect: {
|
|
486
503
|
type: "client.effect" | "client.deeplink";
|
|
487
504
|
name: string;
|
|
@@ -511,6 +528,9 @@ export interface AgentKitContextValue {
|
|
|
511
528
|
loadRunUsage?: AgentKitRunUsageLoader;
|
|
512
529
|
onConnectionRequest?: AgentKitProviderProps["onConnectionRequest"];
|
|
513
530
|
onRenderError?: (failure: AgentKitRenderFailure) => void;
|
|
531
|
+
resolveMessageContentOrder?: AgentMessageContentOrderResolver;
|
|
532
|
+
workedForRowLayout?: AgentChatWorkedForRowLayout;
|
|
533
|
+
formatWorkedForDuration?: (durationMs: number) => string;
|
|
514
534
|
registerComposerFocus: (threadId: ThreadId, focus: () => void) => () => void;
|
|
515
535
|
requestComposerFocus: (threadId: ThreadId) => void;
|
|
516
536
|
}
|
|
@@ -531,6 +551,9 @@ export function AgentKitProvider({
|
|
|
531
551
|
loadRunUsage,
|
|
532
552
|
onConnectionRequest,
|
|
533
553
|
onRenderError,
|
|
554
|
+
resolveMessageContentOrder,
|
|
555
|
+
workedForRowLayout,
|
|
556
|
+
formatWorkedForDuration,
|
|
534
557
|
onClientEffect,
|
|
535
558
|
children,
|
|
536
559
|
}: AgentKitProviderProps) {
|
|
@@ -597,6 +620,9 @@ export function AgentKitProvider({
|
|
|
597
620
|
loadRunUsage,
|
|
598
621
|
onConnectionRequest,
|
|
599
622
|
onRenderError,
|
|
623
|
+
resolveMessageContentOrder,
|
|
624
|
+
workedForRowLayout,
|
|
625
|
+
formatWorkedForDuration,
|
|
600
626
|
registerComposerFocus,
|
|
601
627
|
requestComposerFocus,
|
|
602
628
|
}),
|
|
@@ -614,6 +640,9 @@ export function AgentKitProvider({
|
|
|
614
640
|
loadRunUsage,
|
|
615
641
|
onConnectionRequest,
|
|
616
642
|
onRenderError,
|
|
643
|
+
resolveMessageContentOrder,
|
|
644
|
+
workedForRowLayout,
|
|
645
|
+
formatWorkedForDuration,
|
|
617
646
|
registerComposerFocus,
|
|
618
647
|
requestComposerFocus,
|
|
619
648
|
],
|