@agent-native/toolkit 0.213.1 → 0.214.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.
Files changed (198) hide show
  1. package/agent-native.eject.json +9 -0
  2. package/dist/app/agentkit/react/components.d.ts.map +1 -1
  3. package/dist/app/agentkit/react/components.js +10 -4
  4. package/dist/app/agentkit/react/components.js.map +1 -1
  5. package/dist/app/agentkit/react/context.d.ts +13 -1
  6. package/dist/app/agentkit/react/context.d.ts.map +1 -1
  7. package/dist/app/agentkit/react/context.js +3 -1
  8. package/dist/app/agentkit/react/context.js.map +1 -1
  9. package/dist/app/agentkit/react/index.d.ts +1 -0
  10. package/dist/app/agentkit/react/index.d.ts.map +1 -1
  11. package/dist/app/agentkit/react/index.js +1 -0
  12. package/dist/app/agentkit/react/index.js.map +1 -1
  13. package/dist/app/agentkit/react/message-content-order.d.ts +21 -0
  14. package/dist/app/agentkit/react/message-content-order.d.ts.map +1 -0
  15. package/dist/app/agentkit/react/message-content-order.js +173 -0
  16. package/dist/app/agentkit/react/message-content-order.js.map +1 -0
  17. package/dist/app/agentkit/react/root.d.ts +3 -1
  18. package/dist/app/agentkit/react/root.d.ts.map +1 -1
  19. package/dist/app/agentkit/react/root.js +2 -2
  20. package/dist/app/agentkit/react/root.js.map +1 -1
  21. package/dist/app/agentkit/react/styles.css +2 -2
  22. package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
  23. package/dist/app/chat/AgentKitAssistantChat.js +7 -2
  24. package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
  25. package/dist/app/chat/AgentPanel.d.ts +14 -2
  26. package/dist/app/chat/AgentPanel.d.ts.map +1 -1
  27. package/dist/app/chat/AgentPanel.js +22 -5
  28. package/dist/app/chat/AgentPanel.js.map +1 -1
  29. package/dist/app/chat/chat/surface-types.d.ts +8 -0
  30. package/dist/app/chat/chat/surface-types.d.ts.map +1 -1
  31. package/dist/app/chat/chat/surface-types.js.map +1 -1
  32. package/dist/app/chat/chat/widgets/DataChartRenderer.d.ts.map +1 -1
  33. package/dist/app/chat/chat/widgets/DataChartRenderer.js +127 -30
  34. package/dist/app/chat/chat/widgets/DataChartRenderer.js.map +1 -1
  35. package/dist/app/chat/chat/widgets/DataChartWidget.d.ts +3 -2
  36. package/dist/app/chat/chat/widgets/DataChartWidget.d.ts.map +1 -1
  37. package/dist/app/chat/chat/widgets/DataChartWidget.js +14 -9
  38. package/dist/app/chat/chat/widgets/DataChartWidget.js.map +1 -1
  39. package/dist/app/chat/chat/widgets/DataInsightsWidget.js +1 -1
  40. package/dist/app/chat/chat/widgets/DataInsightsWidget.js.map +1 -1
  41. package/dist/app/chat/chat/widgets/DataTableWidget.d.ts +3 -2
  42. package/dist/app/chat/chat/widgets/DataTableWidget.d.ts.map +1 -1
  43. package/dist/app/chat/chat/widgets/DataTableWidget.js +10 -66
  44. package/dist/app/chat/chat/widgets/DataTableWidget.js.map +1 -1
  45. package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.d.ts +11 -0
  46. package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.d.ts.map +1 -0
  47. package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.js +131 -0
  48. package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.js.map +1 -0
  49. package/dist/app/chat/chat/widgets/builtin-tool-renderers.js +2 -2
  50. package/dist/app/chat/chat/widgets/builtin-tool-renderers.js.map +1 -1
  51. package/dist/app/chat/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  52. package/dist/app/chat/mcp-apps/McpAppRenderer.js +6 -5
  53. package/dist/app/chat/mcp-apps/McpAppRenderer.js.map +1 -1
  54. package/dist/app/chat/mcp-apps/mcp-app-theme.d.ts +2 -0
  55. package/dist/app/chat/mcp-apps/mcp-app-theme.d.ts.map +1 -0
  56. package/dist/app/chat/mcp-apps/mcp-app-theme.js +11 -0
  57. package/dist/app/chat/mcp-apps/mcp-app-theme.js.map +1 -0
  58. package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
  59. package/dist/app/i18n/catalogs/ar-SA.js +8 -0
  60. package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
  61. package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
  62. package/dist/app/i18n/catalogs/de-DE.js +8 -0
  63. package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
  64. package/dist/app/i18n/catalogs/en-US.d.ts +8 -0
  65. package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
  66. package/dist/app/i18n/catalogs/en-US.js +8 -0
  67. package/dist/app/i18n/catalogs/en-US.js.map +1 -1
  68. package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
  69. package/dist/app/i18n/catalogs/es-ES.js +8 -0
  70. package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
  71. package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
  72. package/dist/app/i18n/catalogs/fr-FR.js +8 -0
  73. package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
  74. package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
  75. package/dist/app/i18n/catalogs/hi-IN.js +8 -0
  76. package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
  77. package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
  78. package/dist/app/i18n/catalogs/ja-JP.js +8 -0
  79. package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
  80. package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
  81. package/dist/app/i18n/catalogs/ko-KR.js +8 -0
  82. package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
  83. package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
  84. package/dist/app/i18n/catalogs/pt-BR.js +8 -0
  85. package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
  86. package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
  87. package/dist/app/i18n/catalogs/zh-CN.js +8 -0
  88. package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
  89. package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
  90. package/dist/app/i18n/catalogs/zh-TW.js +8 -0
  91. package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
  92. package/dist/app/providers/AppProviders.d.ts +2 -1
  93. package/dist/app/providers/AppProviders.d.ts.map +1 -1
  94. package/dist/app/providers/AppProviders.js +4 -3
  95. package/dist/app/providers/AppProviders.js.map +1 -1
  96. package/dist/app/providers/ThemeFamilySync.d.ts +2 -0
  97. package/dist/app/providers/ThemeFamilySync.d.ts.map +1 -0
  98. package/dist/app/providers/ThemeFamilySync.js +6 -0
  99. package/dist/app/providers/ThemeFamilySync.js.map +1 -0
  100. package/dist/app/settings/account/PreferencesSettings.d.ts.map +1 -1
  101. package/dist/app/settings/account/PreferencesSettings.js +2 -1
  102. package/dist/app/settings/account/PreferencesSettings.js.map +1 -1
  103. package/dist/app/settings/account/ThemeFamilySettings.d.ts +2 -0
  104. package/dist/app/settings/account/ThemeFamilySettings.d.ts.map +1 -0
  105. package/dist/app/settings/account/ThemeFamilySettings.js +31 -0
  106. package/dist/app/settings/account/ThemeFamilySettings.js.map +1 -0
  107. package/dist/app/settings/account/search-entries.d.ts.map +1 -1
  108. package/dist/app/settings/account/search-entries.js +6 -0
  109. package/dist/app/settings/account/search-entries.js.map +1 -1
  110. package/dist/app/shared/DefaultSpinner.d.ts.map +1 -1
  111. package/dist/app/shared/DefaultSpinner.js +4 -5
  112. package/dist/app/shared/DefaultSpinner.js.map +1 -1
  113. package/dist/app/shared/ErrorBoundary.d.ts +1 -0
  114. package/dist/app/shared/ErrorBoundary.d.ts.map +1 -1
  115. package/dist/app/shared/ErrorBoundary.js +27 -12
  116. package/dist/app/shared/ErrorBoundary.js.map +1 -1
  117. package/dist/app/shared/PoweredByBadge.d.ts.map +1 -1
  118. package/dist/app/shared/PoweredByBadge.js +8 -49
  119. package/dist/app/shared/PoweredByBadge.js.map +1 -1
  120. package/dist/app/styles/agent-conversation.css +0 -23
  121. package/dist/app/styles/agent-native.css +1 -1
  122. package/dist/app/styles/theme-families.css +66 -0
  123. package/dist/composer/ComposerContextBanner.d.ts +22 -0
  124. package/dist/composer/ComposerContextBanner.d.ts.map +1 -0
  125. package/dist/composer/ComposerContextBanner.js +9 -0
  126. package/dist/composer/ComposerContextBanner.js.map +1 -0
  127. package/dist/composer/ComposerModePicker.d.ts +26 -0
  128. package/dist/composer/ComposerModePicker.d.ts.map +1 -0
  129. package/dist/composer/ComposerModePicker.js +14 -0
  130. package/dist/composer/ComposerModePicker.js.map +1 -0
  131. package/dist/composer/index.d.ts +2 -0
  132. package/dist/composer/index.d.ts.map +1 -1
  133. package/dist/composer/index.js +2 -0
  134. package/dist/composer/index.js.map +1 -1
  135. package/dist/styles.css +1 -0
  136. package/package.json +3 -3
  137. package/src/app/agentkit/react/components.spec.tsx +12 -0
  138. package/src/app/agentkit/react/components.tsx +41 -22
  139. package/src/app/agentkit/react/context.tsx +17 -0
  140. package/src/app/agentkit/react/index.ts +1 -0
  141. package/src/app/agentkit/react/lifecycle.spec.tsx +116 -1
  142. package/src/app/agentkit/react/message-content-order.spec.ts +190 -0
  143. package/src/app/agentkit/react/message-content-order.ts +246 -0
  144. package/src/app/agentkit/react/root.tsx +4 -0
  145. package/src/app/agentkit/react/styles.css +2 -2
  146. package/src/app/chat/AgentKitAssistantChat.spec.tsx +19 -0
  147. package/src/app/chat/AgentKitAssistantChat.tsx +10 -1
  148. package/src/app/chat/AgentPanel.header.spec.ts +72 -14
  149. package/src/app/chat/AgentPanel.tsx +97 -53
  150. package/src/app/chat/chat/surface-types.ts +8 -0
  151. package/src/app/chat/chat/widgets/DataChartRenderer.spec.tsx +217 -0
  152. package/src/app/chat/chat/widgets/DataChartRenderer.tsx +306 -68
  153. package/src/app/chat/chat/widgets/DataChartWidget.spec.tsx +329 -0
  154. package/src/app/chat/chat/widgets/DataChartWidget.ssr.spec.tsx +25 -0
  155. package/src/app/chat/chat/widgets/DataChartWidget.tsx +48 -33
  156. package/src/app/chat/chat/widgets/DataInsightsWidget.tsx +2 -2
  157. package/src/app/chat/chat/widgets/DataTableWidget.spec.tsx +37 -3
  158. package/src/app/chat/chat/widgets/DataTableWidget.tsx +22 -86
  159. package/src/app/chat/chat/widgets/DataWidgetDisplayControls.tsx +301 -0
  160. package/src/app/chat/chat/widgets/builtin-tool-renderers.tsx +5 -5
  161. package/src/app/chat/mcp-apps/McpAppRenderer.tsx +10 -5
  162. package/src/app/chat/mcp-apps/mcp-app-theme.spec.ts +30 -0
  163. package/src/app/chat/mcp-apps/mcp-app-theme.ts +11 -0
  164. package/src/app/i18n/catalogs/ar-SA.ts +9 -0
  165. package/src/app/i18n/catalogs/de-DE.ts +9 -0
  166. package/src/app/i18n/catalogs/en-US.ts +9 -0
  167. package/src/app/i18n/catalogs/es-ES.ts +10 -0
  168. package/src/app/i18n/catalogs/fr-FR.ts +10 -0
  169. package/src/app/i18n/catalogs/hi-IN.ts +9 -0
  170. package/src/app/i18n/catalogs/ja-JP.ts +9 -0
  171. package/src/app/i18n/catalogs/ko-KR.ts +9 -0
  172. package/src/app/i18n/catalogs/pt-BR.ts +9 -0
  173. package/src/app/i18n/catalogs/zh-CN.ts +8 -0
  174. package/src/app/i18n/catalogs/zh-TW.ts +9 -0
  175. package/src/app/providers/AppProviders.spec.tsx +71 -0
  176. package/src/app/providers/AppProviders.tsx +10 -0
  177. package/src/app/providers/ThemeFamilySync.tsx +6 -0
  178. package/src/app/settings/account/PreferencesSettings.spec.tsx +13 -2
  179. package/src/app/settings/account/PreferencesSettings.tsx +8 -0
  180. package/src/app/settings/account/ThemeFamilySettings.tsx +61 -0
  181. package/src/app/settings/account/search-entries.ts +6 -0
  182. package/src/app/shared/DefaultSpinner.spec.tsx +14 -0
  183. package/src/app/shared/DefaultSpinner.tsx +4 -5
  184. package/src/app/shared/ErrorBoundary.spec.tsx +45 -2
  185. package/src/app/shared/ErrorBoundary.tsx +37 -12
  186. package/src/app/shared/PoweredByBadge.spec.tsx +16 -0
  187. package/src/app/shared/PoweredByBadge.tsx +8 -50
  188. package/src/app/styles/agent-conversation.css +0 -23
  189. package/src/app/styles/agent-native.css +1 -1
  190. package/src/app/styles/agent-native.spec.ts +18 -0
  191. package/src/app/styles/theme-families.css +66 -0
  192. package/src/app/styles/theme-families.spec.ts +29 -0
  193. package/src/composer/ComposerContextBanner.spec.tsx +74 -0
  194. package/src/composer/ComposerContextBanner.tsx +72 -0
  195. package/src/composer/ComposerModePicker.spec.tsx +101 -0
  196. package/src/composer/ComposerModePicker.tsx +98 -0
  197. package/src/composer/index.ts +9 -0
  198. package/src/styles.css +1 -0
@@ -0,0 +1,66 @@
1
+ /*
2
+ * The agent-native family uses the shared Tailwind/shadcn palette from the
3
+ * Design template. App styles remain the original family by default.
4
+ */
5
+ :root[data-theme-family="agent-native"],
6
+ :root[data-theme-family="agent-native"][data-appearance] {
7
+ --background: 0 0% 100%;
8
+ --foreground: 0 0% 10%;
9
+ --card: 0 0% 100%;
10
+ --card-foreground: 0 0% 10%;
11
+ --popover: 0 0% 100%;
12
+ --popover-foreground: 0 0% 10%;
13
+ --primary: 0 0% 15%;
14
+ --primary-foreground: 0 0% 100%;
15
+ --secondary: 0 0% 95%;
16
+ --secondary-foreground: 0 0% 15%;
17
+ --muted: 0 0% 95%;
18
+ --muted-foreground: 0 0% 45%;
19
+ --accent: 0 0% 95%;
20
+ --accent-foreground: 0 0% 15%;
21
+ --destructive: 0 84% 60%;
22
+ --destructive-foreground: 0 0% 98%;
23
+ --border: 0 0% 90%;
24
+ --input: 0 0% 90%;
25
+ --ring: 0 0% 40%;
26
+ --radius: 0.5rem;
27
+ --sidebar-background: 0 0% 97%;
28
+ --sidebar-foreground: 0 0% 45%;
29
+ --sidebar-primary: 0 0% 15%;
30
+ --sidebar-primary-foreground: 0 0% 100%;
31
+ --sidebar-accent: 0 0% 95%;
32
+ --sidebar-accent-foreground: 0 0% 15%;
33
+ --sidebar-border: 0 0% 90%;
34
+ --sidebar-ring: 0 0% 40%;
35
+ }
36
+
37
+ .dark[data-theme-family="agent-native"],
38
+ .dark[data-theme-family="agent-native"][data-appearance] {
39
+ --background: 0 0% 13%;
40
+ --foreground: 0 0% 90%;
41
+ --card: 0 0% 15%;
42
+ --card-foreground: 0 0% 90%;
43
+ --popover: 0 0% 15%;
44
+ --popover-foreground: 0 0% 90%;
45
+ --primary: 0 0% 75%;
46
+ --primary-foreground: 0 0% 10%;
47
+ --secondary: 0 0% 18%;
48
+ --secondary-foreground: 0 0% 90%;
49
+ --muted: 0 0% 16%;
50
+ --muted-foreground: 0 0% 60%;
51
+ --accent: 0 0% 18%;
52
+ --accent-foreground: 0 0% 96%;
53
+ --destructive: 0 91% 71%;
54
+ --destructive-foreground: 0 0% 98%;
55
+ --border: 0 0% 24%;
56
+ --input: 0 0% 24%;
57
+ --ring: 0 0% 60%;
58
+ --sidebar-background: 0 0% 10%;
59
+ --sidebar-foreground: 0 0% 60%;
60
+ --sidebar-primary: 0 0% 75%;
61
+ --sidebar-primary-foreground: 0 0% 10%;
62
+ --sidebar-accent: 0 0% 16%;
63
+ --sidebar-accent-foreground: 0 0% 90%;
64
+ --sidebar-border: 0 0% 20%;
65
+ --sidebar-ring: 0 0% 60%;
66
+ }
@@ -0,0 +1,22 @@
1
+ import type { ReactNode } from "react";
2
+ interface ComposerContextBannerBaseProps {
3
+ /** Localized name for the banner's content. */
4
+ ariaLabel: string;
5
+ children: ReactNode;
6
+ /** Localized label for the action that opens or adds context. */
7
+ addContextLabel: string;
8
+ onAddContext: () => void;
9
+ icon?: ReactNode;
10
+ className?: string;
11
+ }
12
+ export type ComposerContextBannerProps = ComposerContextBannerBaseProps & ({
13
+ dismissLabel?: never;
14
+ onDismiss?: never;
15
+ } | {
16
+ dismissLabel: string;
17
+ onDismiss: () => void;
18
+ });
19
+ /** Shared informational banner that hosts can place in `composerContextBannerSlot`. */
20
+ export declare function ComposerContextBanner({ ariaLabel, children, addContextLabel, onAddContext, dismissLabel, onDismiss, icon, className, }: ComposerContextBannerProps): import("react").JSX.Element;
21
+ export {};
22
+ //# sourceMappingURL=ComposerContextBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposerContextBanner.d.ts","sourceRoot":"","sources":["../../src/composer/ComposerContextBanner.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,UAAU,8BAA8B;IACtC,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;IACpB,iEAAiE;IACjE,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,0BAA0B,GAAG,8BAA8B,GACrE,CACI;IAAE,YAAY,CAAC,EAAE,KAAK,CAAC;IAAC,SAAS,CAAC,EAAE,KAAK,CAAA;CAAE,GAC3C;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,IAAI,CAAA;CAAE,CAClD,CAAC;AAEJ,uFAAuF;AACvF,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,IAAI,EACJ,SAAS,GACV,EAAE,0BAA0B,+BAsC5B"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { IconPlus, IconSparkles, IconX } from "@tabler/icons-react";
3
+ import { Button } from "../ui/button.js";
4
+ import { cn } from "../utils.js";
5
+ /** Shared informational banner that hosts can place in `composerContextBannerSlot`. */
6
+ export function ComposerContextBanner({ ariaLabel, children, addContextLabel, onAddContext, dismissLabel, onDismiss, icon, className, }) {
7
+ return (_jsxs("aside", { "aria-label": ariaLabel, "data-agent-composer-slot": "context-banner", className: cn("agent-composer-context-banner mx-auto mb-2 flex w-full max-w-3xl items-center gap-1.5 rounded-lg border border-border bg-background px-2.5 py-2 text-xs text-muted-foreground", className), children: [_jsx("span", { className: "shrink-0 text-primary", children: icon ?? _jsx(IconSparkles, { "aria-hidden": "true", className: "size-4" }) }), _jsx("span", { className: "min-w-0 flex-1", children: children }), _jsxs(Button, { className: "shrink-0", onClick: onAddContext, size: "xs", type: "button", variant: "outline", children: [addContextLabel, _jsx(IconPlus, { "aria-hidden": "true" })] }), onDismiss ? (_jsx(Button, { "aria-label": dismissLabel, className: "shrink-0", onClick: onDismiss, size: "icon-xs", type: "button", variant: "ghost", children: _jsx(IconX, { "aria-hidden": "true" }) })) : null] }));
8
+ }
9
+ //# sourceMappingURL=ComposerContextBanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposerContextBanner.js","sourceRoot":"","sources":["../../src/composer/ComposerContextBanner.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGpE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAmBjC,uFAAuF;AACvF,MAAM,UAAU,qBAAqB,CAAC,EACpC,SAAS,EACT,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,IAAI,EACJ,SAAS,GACkB;IAC3B,OAAO,CACL,+BACc,SAAS,8BACI,gBAAgB,EACzC,SAAS,EAAE,EAAE,CACX,+KAA+K,EAC/K,SAAS,CACV,aAED,eAAM,SAAS,EAAC,uBAAuB,YACpC,IAAI,IAAI,KAAC,YAAY,mBAAa,MAAM,EAAC,SAAS,EAAC,QAAQ,GAAG,GAC1D,EACP,eAAM,SAAS,EAAC,gBAAgB,YAAE,QAAQ,GAAQ,EAClD,MAAC,MAAM,IACL,SAAS,EAAC,UAAU,EACpB,OAAO,EAAE,YAAY,EACrB,IAAI,EAAC,IAAI,EACT,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,SAAS,aAEhB,eAAe,EAChB,KAAC,QAAQ,mBAAa,MAAM,GAAG,IACxB,EACR,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,MAAM,kBACO,YAAY,EACxB,SAAS,EAAC,UAAU,EACpB,OAAO,EAAE,SAAS,EAClB,IAAI,EAAC,SAAS,EACd,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,OAAO,YAEf,KAAC,KAAK,mBAAa,MAAM,GAAG,GACrB,CACV,CAAC,CAAC,CAAC,IAAI,IACF,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { ReactNode } from "react";
2
+ export interface ComposerModeOption {
3
+ /** Stable host-defined mode identifier. */
4
+ value: string;
5
+ /** Localized visible label supplied by the host. */
6
+ label: string;
7
+ /** Optional localized explanation shown in the menu. */
8
+ description?: string;
9
+ /** Optional host-provided icon. */
10
+ icon?: ReactNode;
11
+ disabled?: boolean;
12
+ }
13
+ export interface ComposerModePickerProps {
14
+ /** Localized accessible name for this choice, such as "Ask mode". */
15
+ ariaLabel: string;
16
+ value: string;
17
+ options: readonly ComposerModeOption[];
18
+ onValueChange: (value: string) => void;
19
+ className?: string;
20
+ }
21
+ /**
22
+ * A shared, host-configurable mode picker for composer modes that are not part
23
+ * of the framework's built-in Act/Plan execution setting.
24
+ */
25
+ export declare function ComposerModePicker({ ariaLabel, value, options, onValueChange, className, }: ComposerModePickerProps): import("react").JSX.Element;
26
+ //# sourceMappingURL=ComposerModePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposerModePicker.d.ts","sourceRoot":"","sources":["../../src/composer/ComposerModePicker.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAWvC,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,KAAK,EACL,OAAO,EACP,aAAa,EACb,SAAS,GACV,EAAE,uBAAuB,+BAsDzB"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { IconChevronDown } from "@tabler/icons-react";
3
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuTrigger, } from "../ui/dropdown-menu.js";
4
+ import { cn } from "../utils.js";
5
+ /**
6
+ * A shared, host-configurable mode picker for composer modes that are not part
7
+ * of the framework's built-in Act/Plan execution setting.
8
+ */
9
+ export function ComposerModePicker({ ariaLabel, value, options, onValueChange, className, }) {
10
+ const selectedOption = options.find((option) => option.value === value);
11
+ const selectedLabel = selectedOption?.label ?? value;
12
+ return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs("button", { type: "button", "aria-label": `${ariaLabel}: ${selectedLabel}`, "data-agent-composer-slot": "mode-picker", className: cn("agent-composer-mode-picker inline-flex h-7 max-w-48 shrink-0 items-center gap-1 rounded-md px-2 text-xs font-medium text-muted-foreground hover:bg-accent/50 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", className), children: [selectedOption?.icon, _jsx("span", { className: "min-w-0 truncate", children: selectedLabel }), _jsx(IconChevronDown, { "aria-hidden": "true", className: "size-3 shrink-0 opacity-60" })] }) }), _jsx(DropdownMenuContent, { side: "top", align: "start", collisionPadding: 8, className: "agent-composer-mode-picker-menu min-w-48", children: _jsx(DropdownMenuRadioGroup, { value: value, onValueChange: onValueChange, children: options.map((option) => (_jsxs(DropdownMenuRadioItem, { value: option.value, indicator: "check", disabled: option.disabled, className: "agent-composer-mode-picker-option pe-3", children: [option.icon, _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "block truncate", children: option.label }), option.description ? (_jsx("span", { className: "mt-0.5 block whitespace-normal text-xs text-muted-foreground", children: option.description })) : null] })] }, option.value))) }) })] }));
13
+ }
14
+ //# sourceMappingURL=ComposerModePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComposerModePicker.js","sourceRoot":"","sources":["../../src/composer/ComposerModePicker.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAuBjC;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,SAAS,EACT,KAAK,EACL,OAAO,EACP,aAAa,EACb,SAAS,GACe;IACxB,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG,cAAc,EAAE,KAAK,IAAI,KAAK,CAAC;IAErD,OAAO,CACL,MAAC,YAAY,eACX,KAAC,mBAAmB,IAAC,OAAO,kBAC1B,kBACE,IAAI,EAAC,QAAQ,gBACD,GAAG,SAAS,KAAK,aAAa,EAAE,8BACnB,aAAa,EACtC,SAAS,EAAE,EAAE,CACX,4PAA4P,EAC5P,SAAS,CACV,aAEA,cAAc,EAAE,IAAI,EACrB,eAAM,SAAS,EAAC,kBAAkB,YAAE,aAAa,GAAQ,EACzD,KAAC,eAAe,mBACF,MAAM,EAClB,SAAS,EAAC,4BAA4B,GACtC,IACK,GACW,EACtB,KAAC,mBAAmB,IAClB,IAAI,EAAC,KAAK,EACV,KAAK,EAAC,OAAO,EACb,gBAAgB,EAAE,CAAC,EACnB,SAAS,EAAC,0CAA0C,YAEpD,KAAC,sBAAsB,IAAC,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,YAC/D,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,MAAC,qBAAqB,IAEpB,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,SAAS,EAAC,OAAO,EACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,SAAS,EAAC,wCAAwC,aAEjD,MAAM,CAAC,IAAI,EACZ,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,eAAM,SAAS,EAAC,gBAAgB,YAAE,MAAM,CAAC,KAAK,GAAQ,EACrD,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CACpB,eAAM,SAAS,EAAC,8DAA8D,YAC3E,MAAM,CAAC,WAAW,GACd,CACR,CAAC,CAAC,CAAC,IAAI,IACH,KAdF,MAAM,CAAC,KAAK,CAeK,CACzB,CAAC,GACqB,GACL,IACT,CAChB,CAAC;AACJ,CAAC"}
@@ -1,4 +1,6 @@
1
1
  export { FileReference } from "./extensions/FileReference.js";
2
+ export { ComposerContextBanner, type ComposerContextBannerProps, } from "./ComposerContextBanner.js";
3
+ export { ComposerModePicker, type ComposerModeOption, type ComposerModePickerProps, } from "./ComposerModePicker.js";
2
4
  export { useComposerDefaultActions, mergeComposerMenuItems, } from "./ComposerPlusMenu.js";
3
5
  export { ComposerContextMenu, ComposerContextSearchInput, type ComposerContextSearchInputProps, type ComposerContextPageControls, getComposerContextMenuEntries, type ComposerContextMenuProps, type ComposerContextMenuItem, type ComposerContextMenuAction, type ComposerContextMenuCategory, type ComposerContextPickerConfig, type ComposerContextPickerItem, type ComposerContextPickerRequest, type ComposerContextPickerResult, type ComposerContextPickerSelection, type ComposerContextPickerFooterAction, } from "./ComposerContextMenu.js";
4
6
  export { ComposerContextPickerDialog } from "./ComposerContextPickerDialog.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/composer/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/composer/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  export { FileReference } from "./extensions/FileReference.js";
2
+ export { ComposerContextBanner, } from "./ComposerContextBanner.js";
3
+ export { ComposerModePicker, } from "./ComposerModePicker.js";
2
4
  export { useComposerDefaultActions, mergeComposerMenuItems, } from "./ComposerPlusMenu.js";
3
5
  export { ComposerContextMenu, ComposerContextSearchInput, getComposerContextMenuEntries, } from "./ComposerContextMenu.js";
4
6
  export { ComposerContextPickerDialog } from "./ComposerContextPickerDialog.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/composer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAG1B,6BAA6B,GAW9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,GAE3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EACL,kBAAkB,GAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,GAIzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,8BAA8B,EAC9B,kCAAkC,EAClC,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,mCAAmC,EACnC,wCAAwC,EACxC,qBAAqB,EACrB,iBAAiB,GAQlB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,0BAA0B,GAE3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,GAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,SAAS,GAGV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,GAMnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAQvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,0BAA0B,EAC1B,wCAAwC,EACxC,wBAAwB,EACxB,iCAAiC,EACjC,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,GAK7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,mCAAmC,EACnC,kCAAkC,EAClC,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,GAG1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,+BAA+B,EAC/B,0BAA0B,GAG3B,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/composer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACL,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,kBAAkB,GAGnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAG1B,6BAA6B,GAW9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,4BAA4B,EAC5B,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,GAE3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EACL,kBAAkB,GAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,GAIzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,8BAA8B,EAC9B,kCAAkC,EAClC,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,mCAAmC,EACnC,wCAAwC,EACxC,qBAAqB,EACrB,iBAAiB,GAQlB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,0BAA0B,GAE3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,GAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,SAAS,GAGV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,GAMnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAQvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,0BAA0B,EAC1B,wCAAwC,EACxC,wBAAwB,EACxB,iCAAiC,EACjC,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,4BAA4B,GAK7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,mCAAmC,EACnC,kCAAkC,EAClC,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,EAC3B,yBAAyB,GAG1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,+BAA+B,EAC/B,0BAA0B,GAG3B,MAAM,uBAAuB,CAAC"}
package/dist/styles.css CHANGED
@@ -18,6 +18,7 @@
18
18
  */
19
19
  @import "./theme/resource-icons.css";
20
20
  @import "./app-shell/prompt-home.css";
21
+ @import "./app/styles/theme-families.css";
21
22
  @import "./app/styles/agent-native.css";
22
23
 
23
24
  @source "./**/*.{js,ts,tsx}";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/toolkit",
3
- "version": "0.213.1",
3
+ "version": "0.214.0",
4
4
  "description": "Reusable app-building UI and helpers for Agent-Native apps.",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -678,7 +678,7 @@
678
678
  "y-protocols": "^1.0.7",
679
679
  "yjs": "^13.6.33",
680
680
  "zod": "^4.3.6",
681
- "@agent-native/agentkit": "^0.213.1"
681
+ "@agent-native/agentkit": "^0.214.0"
682
682
  },
683
683
  "devDependencies": {
684
684
  "@excalidraw/excalidraw": "0.18.1",
@@ -702,7 +702,7 @@
702
702
  "typescript-7": "npm:typescript@^7.0.2",
703
703
  "vite": "8.1.0",
704
704
  "vitest": "^4.1.5",
705
- "@agent-native/core": "^0.213.1"
705
+ "@agent-native/core": "^0.214.0"
706
706
  },
707
707
  "peerDependencies": {
708
708
  "@agent-native/core": ">=0.205.1",
@@ -196,6 +196,18 @@ describe("AgentMessageActions layout", () => {
196
196
  });
197
197
 
198
198
  describe("AgentKitChat", () => {
199
+ it("keeps work-summary chevrons visible before the row is opened", () => {
200
+ const styles = readFileSync(
201
+ new URL("./styles.css", import.meta.url),
202
+ "utf8",
203
+ ).replace(/\r\n/g, "\n");
204
+ const rule = styles.match(
205
+ /\.agentkit-activities-summary > \.agentkit-summary-chevron \{([^}]*)\}/,
206
+ )?.[1];
207
+
208
+ expect(rule).toContain("opacity: 1;");
209
+ });
210
+
199
211
  it("renders the complete reference surface from one managed component", () => {
200
212
  const transport: AgentTransport = {
201
213
  async startRun() {
@@ -136,6 +136,7 @@ import {
136
136
  type AgentKitSuggestionsRenderProps,
137
137
  type AgentRunFailureRenderProps,
138
138
  } from "./context.js";
139
+ import { orderMessageContent } from "./message-content-order.js";
139
140
  import { AgentStreamingText } from "./streaming-text.js";
140
141
 
141
142
  // AgentKit React installs without @agent-native/core, so it repeats core's
@@ -1907,7 +1908,9 @@ function AgentWorkDisclosure({
1907
1908
  current?: ReactNode;
1908
1909
  children: ReactNode;
1909
1910
  }) {
1911
+ const { slots } = useAgentKit();
1910
1912
  const [open, setOpen] = useState(false);
1913
+ const Summary = slots.workedForSummary;
1911
1914
  return (
1912
1915
  <details
1913
1916
  className="agentkit-activities"
@@ -1924,18 +1927,30 @@ function AgentWorkDisclosure({
1924
1927
  setOpen((value) => !value);
1925
1928
  }}
1926
1929
  >
1927
- <span className="agentkit-activities-summary-content">
1928
- {label ? (
1929
- <span className="agentkit-activities-heading">
1930
- <span className="agentkit-activities-label">{label}</span>
1930
+ {Summary ? (
1931
+ <Summary
1932
+ label={label}
1933
+ running={running}
1934
+ expandable={expandable}
1935
+ open={open}
1936
+ current={current}
1937
+ />
1938
+ ) : (
1939
+ <>
1940
+ <IconChevronRight
1941
+ aria-hidden="true"
1942
+ className="agentkit-icon agentkit-summary-chevron"
1943
+ />
1944
+ <span className="agentkit-activities-summary-content">
1945
+ {label ? (
1946
+ <span className="agentkit-activities-heading">
1947
+ <span className="agentkit-activities-label">{label}</span>
1948
+ </span>
1949
+ ) : null}
1950
+ {current}
1931
1951
  </span>
1932
- ) : null}
1933
- {current}
1934
- </span>
1935
- <IconChevronRight
1936
- aria-hidden="true"
1937
- className="agentkit-icon agentkit-summary-chevron"
1938
- />
1952
+ </>
1953
+ )}
1939
1954
  </summary>
1940
1955
  {children}
1941
1956
  </details>
@@ -3787,7 +3802,7 @@ export function AgentMessageView({
3787
3802
  value: message,
3788
3803
  threadId,
3789
3804
  }: AgentKitRenderProps<AgentMessage>) {
3790
- const { labels, slots } = useAgentKit();
3805
+ const { labels, slots, resolveMessageContentOrder } = useAgentKit();
3791
3806
  const thread = useAgentThread(threadId);
3792
3807
  const visibleMessage = stripAgentMessageContext(message);
3793
3808
  const Supplement = slots.messageSupplement;
@@ -3812,6 +3827,13 @@ export function AgentMessageView({
3812
3827
  thread.annotationMessageIds[annotation.id] === message.id &&
3813
3828
  !embeddedAnnotationIds.has(annotation.id),
3814
3829
  );
3830
+ const orderedContent = orderMessageContent(
3831
+ visibleMessage,
3832
+ visibleMessage.parts,
3833
+ attachedWidgets,
3834
+ thread.events,
3835
+ resolveMessageContentOrder,
3836
+ );
3815
3837
  if (
3816
3838
  !message.parts.length &&
3817
3839
  !attachedWidgets.length &&
@@ -3830,23 +3852,20 @@ export function AgentMessageView({
3830
3852
  aria-busy={message.status === "streaming"}
3831
3853
  >
3832
3854
  <div className="agentkit-message-content">
3833
- {visibleMessage.parts.map((part, index) => (
3855
+ {orderedContent.map((item, index) => (
3834
3856
  <AgentMessagePartView
3835
- key={`${message.id}-${index}`}
3836
- value={part}
3857
+ key={item.key}
3858
+ value={
3859
+ item.type === "widget"
3860
+ ? { type: "widget", widget: item.widget }
3861
+ : item.part
3862
+ }
3837
3863
  threadId={threadId}
3838
3864
  active={message.status === "streaming"}
3839
3865
  resetKey={`${threadId}:${message.id}:${index}`}
3840
3866
  userMessage={message.role === "user"}
3841
3867
  />
3842
3868
  ))}
3843
- {attachedWidgets.map((widget) => (
3844
- <AgentMessagePartView
3845
- key={widget.id}
3846
- value={{ type: "widget", widget }}
3847
- threadId={threadId}
3848
- />
3849
- ))}
3850
3869
  {attachedAnnotations.length ? (
3851
3870
  <div className="agentkit-annotations">
3852
3871
  {attachedAnnotations.map((annotation) => (
@@ -43,6 +43,8 @@ import {
43
43
  type ReactNode,
44
44
  } from "react";
45
45
 
46
+ import type { AgentMessageContentOrderResolver } from "./message-content-order.js";
47
+
46
48
  export interface AgentKitRenderProps<T> {
47
49
  value: T;
48
50
  threadId: ThreadId;
@@ -79,6 +81,14 @@ export interface AgentKitSuggestionsRenderProps {
79
81
  onSelect: (suggestion: AgentSuggestion) => void;
80
82
  }
81
83
 
84
+ export interface AgentKitWorkedForSummaryRenderProps {
85
+ label: string;
86
+ running?: boolean;
87
+ expandable: boolean;
88
+ open: boolean;
89
+ current?: ReactNode;
90
+ }
91
+
82
92
  export interface AgentConnectionErrorRenderProps {
83
93
  error: AgentError;
84
94
  threadId: ThreadId;
@@ -153,6 +163,8 @@ export interface AgentKitSlots {
153
163
  composer?: ComponentType<{ threadId: ThreadId }>;
154
164
  queue?: ComponentType<AgentKitQueueRenderProps>;
155
165
  suggestions?: ComponentType<AgentKitSuggestionsRenderProps>;
166
+ /** Replaces the visible work-summary row while the shared disclosure owns its semantics. */
167
+ workedForSummary?: ComponentType<AgentKitWorkedForSummaryRenderProps>;
156
168
  }
157
169
 
158
170
  export interface AgentKitToolSource {
@@ -482,6 +494,7 @@ export interface AgentKitProviderProps {
482
494
  ) => Promise<AgentConnectionResponse>;
483
495
  /** Receives full renderer failures while the UI shows a safe fallback. */
484
496
  onRenderError?: (failure: AgentKitRenderFailure) => void;
497
+ resolveMessageContentOrder?: AgentMessageContentOrderResolver;
485
498
  onClientEffect?: (effect: {
486
499
  type: "client.effect" | "client.deeplink";
487
500
  name: string;
@@ -511,6 +524,7 @@ export interface AgentKitContextValue {
511
524
  loadRunUsage?: AgentKitRunUsageLoader;
512
525
  onConnectionRequest?: AgentKitProviderProps["onConnectionRequest"];
513
526
  onRenderError?: (failure: AgentKitRenderFailure) => void;
527
+ resolveMessageContentOrder?: AgentMessageContentOrderResolver;
514
528
  registerComposerFocus: (threadId: ThreadId, focus: () => void) => () => void;
515
529
  requestComposerFocus: (threadId: ThreadId) => void;
516
530
  }
@@ -531,6 +545,7 @@ export function AgentKitProvider({
531
545
  loadRunUsage,
532
546
  onConnectionRequest,
533
547
  onRenderError,
548
+ resolveMessageContentOrder,
534
549
  onClientEffect,
535
550
  children,
536
551
  }: AgentKitProviderProps) {
@@ -597,6 +612,7 @@ export function AgentKitProvider({
597
612
  loadRunUsage,
598
613
  onConnectionRequest,
599
614
  onRenderError,
615
+ resolveMessageContentOrder,
600
616
  registerComposerFocus,
601
617
  requestComposerFocus,
602
618
  }),
@@ -614,6 +630,7 @@ export function AgentKitProvider({
614
630
  loadRunUsage,
615
631
  onConnectionRequest,
616
632
  onRenderError,
633
+ resolveMessageContentOrder,
617
634
  registerComposerFocus,
618
635
  requestComposerFocus,
619
636
  ],
@@ -1,5 +1,6 @@
1
1
  export * from "./chat.js";
2
2
  export * from "./components.js";
3
3
  export * from "./context.js";
4
+ export * from "./message-content-order.js";
4
5
  export * from "./root.js";
5
6
  export * from "./streaming-text.js";
@@ -157,6 +157,83 @@ afterEach(async () => {
157
157
  });
158
158
 
159
159
  describe("AgentChat lifecycle", () => {
160
+ it("renders host-ordered text around an attached widget", async () => {
161
+ const threadId = "thread-host-content-order";
162
+ const message = {
163
+ id: "assistant-host-content-order",
164
+ role: "assistant" as const,
165
+ status: "complete" as const,
166
+ parts: [{ type: "text" as const, text: "Intro. Summary." }],
167
+ };
168
+ const widget = {
169
+ id: "chart-host-content-order",
170
+ kind: "test-chart",
171
+ data: {},
172
+ };
173
+ const thread = {
174
+ ...createAgentThreadState(threadId),
175
+ messages: [message],
176
+ widgets: { [widget.id]: widget },
177
+ widgetMessageIds: { [widget.id]: message.id },
178
+ };
179
+ const observable = observableController({
180
+ connection: "connected",
181
+ capabilities: {},
182
+ capabilitiesStatus: "ready",
183
+ threads: { [threadId]: thread },
184
+ revision: 0,
185
+ });
186
+ const tree = mount();
187
+
188
+ await tree.render(
189
+ <AgentKitProvider
190
+ controller={observable.controller}
191
+ threadId={threadId}
192
+ resolveMessageContentOrder={({ parts, widgets }) => {
193
+ const part = parts[0];
194
+ const chart = widgets[0];
195
+ if (part?.type !== "text" || !chart) return [];
196
+ return [
197
+ {
198
+ key: "intro",
199
+ type: "part",
200
+ part: { ...part, text: "Intro. " },
201
+ },
202
+ { key: chart.id, type: "widget", widget: chart },
203
+ {
204
+ key: "summary",
205
+ type: "part",
206
+ part: { ...part, text: "Summary." },
207
+ },
208
+ ];
209
+ }}
210
+ registry={{
211
+ widgets: {
212
+ "test-chart": () => <span data-chart-result>Chart</span>,
213
+ },
214
+ }}
215
+ slots={{
216
+ text: ({ value }) => <span data-chat-part>{value.text}</span>,
217
+ }}
218
+ >
219
+ <AgentKitChat composer={false} />
220
+ </AgentKitProvider>,
221
+ );
222
+
223
+ const content = tree.container.querySelector(
224
+ `[data-message-id="${message.id}"] .agentkit-message-content`,
225
+ );
226
+ const renderedOrder = [...(content?.children ?? [])].map((element) =>
227
+ element.hasAttribute("data-chat-part")
228
+ ? element.textContent
229
+ : element.hasAttribute("data-chart-result")
230
+ ? "chart"
231
+ : "other",
232
+ );
233
+ expect(renderedOrder).toEqual(["Intro. ", "chart", "Summary."]);
234
+ await tree.unmount();
235
+ });
236
+
160
237
  it("keeps partial transcript updates out of live announcements", async () => {
161
238
  const threadId = "thread-accessible-transcript";
162
239
  const thread = {
@@ -1744,6 +1821,44 @@ describe("AgentChat lifecycle", () => {
1744
1821
  ".agentkit-activities-summary > .agentkit-summary-chevron",
1745
1822
  ),
1746
1823
  ).not.toBeNull();
1824
+ await tree.render(
1825
+ <AgentKitProvider
1826
+ controller={observable.controller}
1827
+ threadId={threadId}
1828
+ registry={{
1829
+ activities: {
1830
+ reasoning: ({ value }) => (
1831
+ <span data-protocol-reasoning>{value.label}</span>
1832
+ ),
1833
+ },
1834
+ }}
1835
+ slots={{
1836
+ reasoning: ({ value, active, resetKey }) => (
1837
+ <span data-thought={resetKey} data-active={active}>
1838
+ {value.text}
1839
+ </span>
1840
+ ),
1841
+ workedForSummary: ({ label, open, current }) => (
1842
+ <span data-work-summary data-open={open}>
1843
+ <span>{label}</span>
1844
+ <span data-work-chevron aria-hidden="true">
1845
+ ›
1846
+ </span>
1847
+ {current}
1848
+ </span>
1849
+ ),
1850
+ }}
1851
+ >
1852
+ <AgentKitChat composer={false} />
1853
+ </AgentKitProvider>,
1854
+ );
1855
+ expect(work.querySelector("[data-work-summary]")?.textContent).toContain(
1856
+ "Searching documentation",
1857
+ );
1858
+ expect(work.querySelector("[data-work-chevron]")).not.toBeNull();
1859
+ expect(
1860
+ work.querySelector("[data-work-summary]")?.getAttribute("data-open"),
1861
+ ).toBe("false");
1747
1862
  thread = reduceAgentEvent(thread, {
1748
1863
  ...base(8, 18),
1749
1864
  type: "message.completed",
@@ -1765,7 +1880,7 @@ describe("AgentChat lifecycle", () => {
1765
1880
  await flush();
1766
1881
  expect(tree.container.querySelector(".agentkit-activities")).toBe(work);
1767
1882
  expect(work.open).toBe(false);
1768
- expect(work.querySelector("summary")?.textContent).toBe("Worked for 18s");
1883
+ expect(work.querySelector("summary")?.textContent).toBe("Worked for 18s›");
1769
1884
  expect(work.querySelector("[data-agentkit-current-activity]")).toBeNull();
1770
1885
  expect(tree.container.querySelectorAll("article")).toHaveLength(1);
1771
1886
  const answer = tree.container.querySelector(