@agent-native/toolkit 0.217.0 → 0.219.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 (206) hide show
  1. package/agent-native.eject.json +21 -0
  2. package/dist/app/agent-page/AgentContextTab.d.ts.map +1 -1
  3. package/dist/app/agent-page/AgentContextTab.js +1 -0
  4. package/dist/app/agent-page/AgentContextTab.js.map +1 -1
  5. package/dist/app/agentkit/react/components.d.ts.map +1 -1
  6. package/dist/app/agentkit/react/components.js +1 -1
  7. package/dist/app/agentkit/react/components.js.map +1 -1
  8. package/dist/app/agentkit/react/context.d.ts +4 -1
  9. package/dist/app/agentkit/react/context.d.ts.map +1 -1
  10. package/dist/app/agentkit/react/context.js +3 -1
  11. package/dist/app/agentkit/react/context.js.map +1 -1
  12. package/dist/app/agentkit/react/data-chart-layout.d.ts +30 -0
  13. package/dist/app/agentkit/react/data-chart-layout.d.ts.map +1 -0
  14. package/dist/app/agentkit/react/data-chart-layout.js +2 -0
  15. package/dist/app/agentkit/react/data-chart-layout.js.map +1 -0
  16. package/dist/app/agentkit/react/index.d.ts +1 -0
  17. package/dist/app/agentkit/react/index.d.ts.map +1 -1
  18. package/dist/app/agentkit/react/index.js +1 -0
  19. package/dist/app/agentkit/react/index.js.map +1 -1
  20. package/dist/app/agentkit/react/root.d.ts +3 -1
  21. package/dist/app/agentkit/react/root.d.ts.map +1 -1
  22. package/dist/app/agentkit/react/root.js +2 -2
  23. package/dist/app/agentkit/react/root.js.map +1 -1
  24. package/dist/app/agentkit/react/styles.css +31 -6
  25. package/dist/app/agentkit/react/transcript-layout.d.ts +2 -0
  26. package/dist/app/agentkit/react/transcript-layout.d.ts.map +1 -1
  27. package/dist/app/agentkit/react/transcript-layout.js.map +1 -1
  28. package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
  29. package/dist/app/chat/AgentKitAssistantChat.js +2 -2
  30. package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
  31. package/dist/app/chat/AgentPanel.js +6 -6
  32. package/dist/app/chat/AgentPanel.js.map +1 -1
  33. package/dist/app/chat/MultiTabAssistantChat.d.ts.map +1 -1
  34. package/dist/app/chat/MultiTabAssistantChat.js +53 -95
  35. package/dist/app/chat/MultiTabAssistantChat.js.map +1 -1
  36. package/dist/app/chat/agentkit-chat/action-widget.d.ts.map +1 -1
  37. package/dist/app/chat/agentkit-chat/action-widget.js +4 -1
  38. package/dist/app/chat/agentkit-chat/action-widget.js.map +1 -1
  39. package/dist/app/chat/agentkit-chat/rail.d.ts +1 -1
  40. package/dist/app/chat/agentkit-chat/rail.d.ts.map +1 -1
  41. package/dist/app/chat/agentkit-chat/rail.js +1 -1
  42. package/dist/app/chat/agentkit-chat/rail.js.map +1 -1
  43. package/dist/app/chat/chat/index.d.ts +2 -1
  44. package/dist/app/chat/chat/index.d.ts.map +1 -1
  45. package/dist/app/chat/chat/index.js +1 -1
  46. package/dist/app/chat/chat/index.js.map +1 -1
  47. package/dist/app/chat/chat/surface-types.d.ts +3 -0
  48. package/dist/app/chat/chat/surface-types.d.ts.map +1 -1
  49. package/dist/app/chat/chat/surface-types.js.map +1 -1
  50. package/dist/app/chat/chat/tool-call-display.d.ts +5 -1
  51. package/dist/app/chat/chat/tool-call-display.d.ts.map +1 -1
  52. package/dist/app/chat/chat/tool-call-display.js +6 -4
  53. package/dist/app/chat/chat/tool-call-display.js.map +1 -1
  54. package/dist/app/chat/chat/tool-render-registry.d.ts +4 -0
  55. package/dist/app/chat/chat/tool-render-registry.d.ts.map +1 -1
  56. package/dist/app/chat/chat/tool-render-registry.js.map +1 -1
  57. package/dist/app/chat/chat/widgets/DataChartRenderer.d.ts +3 -1
  58. package/dist/app/chat/chat/widgets/DataChartRenderer.d.ts.map +1 -1
  59. package/dist/app/chat/chat/widgets/DataChartRenderer.js +116 -26
  60. package/dist/app/chat/chat/widgets/DataChartRenderer.js.map +1 -1
  61. package/dist/app/chat/chat/widgets/DataChartWidget.d.ts +3 -1
  62. package/dist/app/chat/chat/widgets/DataChartWidget.d.ts.map +1 -1
  63. package/dist/app/chat/chat/widgets/DataChartWidget.js +21 -2
  64. package/dist/app/chat/chat/widgets/DataChartWidget.js.map +1 -1
  65. package/dist/app/chat/chat/widgets/DataInsightsWidget.d.ts +3 -1
  66. package/dist/app/chat/chat/widgets/DataInsightsWidget.d.ts.map +1 -1
  67. package/dist/app/chat/chat/widgets/DataInsightsWidget.js +2 -2
  68. package/dist/app/chat/chat/widgets/DataInsightsWidget.js.map +1 -1
  69. package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.d.ts +1 -1
  70. package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.d.ts.map +1 -1
  71. package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.js +3 -1
  72. package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.js.map +1 -1
  73. package/dist/app/chat/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
  74. package/dist/app/chat/chat/widgets/builtin-tool-renderers.js +2 -2
  75. package/dist/app/chat/chat/widgets/builtin-tool-renderers.js.map +1 -1
  76. package/dist/app/chat/chat-first/chat-history.d.ts +13 -2
  77. package/dist/app/chat/chat-first/chat-history.d.ts.map +1 -1
  78. package/dist/app/chat/chat-first/chat-history.js +24 -3
  79. package/dist/app/chat/chat-first/chat-history.js.map +1 -1
  80. package/dist/app/chat/conversation/AgentConversation.d.ts.map +1 -1
  81. package/dist/app/chat/conversation/AgentConversation.js +6 -1
  82. package/dist/app/chat/conversation/AgentConversation.js.map +1 -1
  83. package/dist/app/chat/ownership-history/ChatOwnerAvatar.d.ts +6 -0
  84. package/dist/app/chat/ownership-history/ChatOwnerAvatar.d.ts.map +1 -0
  85. package/dist/app/chat/ownership-history/ChatOwnerAvatar.js +9 -0
  86. package/dist/app/chat/ownership-history/ChatOwnerAvatar.js.map +1 -0
  87. package/dist/app/chat/ownership-history/index.d.ts +11 -0
  88. package/dist/app/chat/ownership-history/index.d.ts.map +1 -0
  89. package/dist/app/chat/ownership-history/index.js +22 -0
  90. package/dist/app/chat/ownership-history/index.js.map +1 -0
  91. package/dist/app/chat/ownership-history/rows.d.ts +27 -0
  92. package/dist/app/chat/ownership-history/rows.d.ts.map +1 -0
  93. package/dist/app/chat/ownership-history/rows.js +101 -0
  94. package/dist/app/chat/ownership-history/rows.js.map +1 -0
  95. package/dist/app/chat/ownership-history/useOwnershipChatHistory.d.ts +52 -0
  96. package/dist/app/chat/ownership-history/useOwnershipChatHistory.d.ts.map +1 -0
  97. package/dist/app/chat/ownership-history/useOwnershipChatHistory.js +497 -0
  98. package/dist/app/chat/ownership-history/useOwnershipChatHistory.js.map +1 -0
  99. package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
  100. package/dist/app/i18n/catalogs/ar-SA.js +3 -0
  101. package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
  102. package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
  103. package/dist/app/i18n/catalogs/de-DE.js +3 -0
  104. package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
  105. package/dist/app/i18n/catalogs/en-US.d.ts +3 -0
  106. package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
  107. package/dist/app/i18n/catalogs/en-US.js +3 -0
  108. package/dist/app/i18n/catalogs/en-US.js.map +1 -1
  109. package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
  110. package/dist/app/i18n/catalogs/es-ES.js +3 -0
  111. package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
  112. package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
  113. package/dist/app/i18n/catalogs/fr-FR.js +3 -0
  114. package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
  115. package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
  116. package/dist/app/i18n/catalogs/hi-IN.js +3 -0
  117. package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
  118. package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
  119. package/dist/app/i18n/catalogs/ja-JP.js +3 -0
  120. package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
  121. package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
  122. package/dist/app/i18n/catalogs/ko-KR.js +3 -0
  123. package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
  124. package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
  125. package/dist/app/i18n/catalogs/pt-BR.js +3 -0
  126. package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
  127. package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
  128. package/dist/app/i18n/catalogs/zh-CN.js +3 -0
  129. package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
  130. package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
  131. package/dist/app/i18n/catalogs/zh-TW.js +3 -0
  132. package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
  133. package/dist/app/shared/CommandMenu.d.ts +2 -0
  134. package/dist/app/shared/CommandMenu.d.ts.map +1 -1
  135. package/dist/app/shared/CommandMenu.js +11 -6
  136. package/dist/app/shared/CommandMenu.js.map +1 -1
  137. package/dist/app/sharing/ShareButton.d.ts.map +1 -1
  138. package/dist/app/sharing/ShareButton.js +9 -8
  139. package/dist/app/sharing/ShareButton.js.map +1 -1
  140. package/dist/chat-history/ChatHistoryList.d.ts +16 -3
  141. package/dist/chat-history/ChatHistoryList.d.ts.map +1 -1
  142. package/dist/chat-history/ChatHistoryList.js +25 -15
  143. package/dist/chat-history/ChatHistoryList.js.map +1 -1
  144. package/dist/chat-history.css +109 -9
  145. package/dist/composer/TiptapComposer.js +1 -1
  146. package/dist/composer/TiptapComposer.js.map +1 -1
  147. package/package.json +10 -3
  148. package/src/app/agent-page/AgentContextTab.spec.ts +50 -2
  149. package/src/app/agent-page/AgentContextTab.tsx +1 -0
  150. package/src/app/agentkit/react/components.interaction.spec.tsx +2 -0
  151. package/src/app/agentkit/react/components.spec.tsx +11 -6
  152. package/src/app/agentkit/react/components.tsx +3 -0
  153. package/src/app/agentkit/react/context.tsx +6 -0
  154. package/src/app/agentkit/react/data-chart-layout.ts +25 -0
  155. package/src/app/agentkit/react/index.ts +1 -0
  156. package/src/app/agentkit/react/root.tsx +4 -0
  157. package/src/app/agentkit/react/styles.css +31 -6
  158. package/src/app/agentkit/react/transcript-layout.ts +2 -0
  159. package/src/app/chat/AgentKitAssistantChat.spec.tsx +201 -27
  160. package/src/app/chat/AgentKitAssistantChat.tsx +3 -0
  161. package/src/app/chat/AgentPanel.tsx +8 -8
  162. package/src/app/chat/MultiTabAssistantChat.spec.tsx +270 -3
  163. package/src/app/chat/MultiTabAssistantChat.tsx +81 -158
  164. package/src/app/chat/agentkit-chat/action-widget.spec.tsx +62 -0
  165. package/src/app/chat/agentkit-chat/action-widget.tsx +4 -0
  166. package/src/app/chat/agentkit-chat/rail.ts +11 -0
  167. package/src/app/chat/chat/index.ts +10 -0
  168. package/src/app/chat/chat/surface-types.ts +3 -0
  169. package/src/app/chat/chat/tool-call-display.spec.tsx +29 -0
  170. package/src/app/chat/chat/tool-call-display.tsx +17 -1
  171. package/src/app/chat/chat/tool-render-registry.tsx +5 -0
  172. package/src/app/chat/chat/widgets/DataChartRenderer.spec.tsx +377 -17
  173. package/src/app/chat/chat/widgets/DataChartRenderer.tsx +232 -63
  174. package/src/app/chat/chat/widgets/DataChartWidget.spec.tsx +67 -0
  175. package/src/app/chat/chat/widgets/DataChartWidget.tsx +39 -5
  176. package/src/app/chat/chat/widgets/DataInsightsWidget.tsx +13 -2
  177. package/src/app/chat/chat/widgets/DataWidgetDisplayControls.tsx +6 -4
  178. package/src/app/chat/chat/widgets/builtin-tool-renderers.tsx +5 -1
  179. package/src/app/chat/chat-first/chat-history.spec.tsx +79 -0
  180. package/src/app/chat/chat-first/chat-history.tsx +75 -22
  181. package/src/app/chat/conversation/AgentConversation.spec.tsx +51 -1
  182. package/src/app/chat/conversation/AgentConversation.tsx +11 -2
  183. package/src/app/chat/ownership-history/ChatOwnerAvatar.tsx +27 -0
  184. package/src/app/chat/ownership-history/index.tsx +67 -0
  185. package/src/app/chat/ownership-history/ownership-history.spec.tsx +3146 -0
  186. package/src/app/chat/ownership-history/rows.ts +156 -0
  187. package/src/app/chat/ownership-history/useOwnershipChatHistory.ts +709 -0
  188. package/src/app/i18n/catalogs/ar-SA.ts +3 -0
  189. package/src/app/i18n/catalogs/de-DE.ts +3 -0
  190. package/src/app/i18n/catalogs/en-US.ts +3 -0
  191. package/src/app/i18n/catalogs/es-ES.ts +3 -0
  192. package/src/app/i18n/catalogs/fr-FR.ts +3 -0
  193. package/src/app/i18n/catalogs/hi-IN.ts +3 -0
  194. package/src/app/i18n/catalogs/ja-JP.ts +3 -0
  195. package/src/app/i18n/catalogs/ko-KR.ts +3 -0
  196. package/src/app/i18n/catalogs/pt-BR.ts +3 -0
  197. package/src/app/i18n/catalogs/zh-CN.ts +3 -0
  198. package/src/app/i18n/catalogs/zh-TW.ts +3 -0
  199. package/src/app/shared/CommandMenu.spec.tsx +175 -6
  200. package/src/app/shared/CommandMenu.tsx +24 -7
  201. package/src/app/sharing/ShareButton.tsx +12 -10
  202. package/src/chat-history/ChatHistoryList.spec.tsx +51 -0
  203. package/src/chat-history/ChatHistoryList.tsx +87 -26
  204. package/src/chat-history/ChatHistoryRailSections.spec.tsx +12 -4
  205. package/src/chat-history.css +109 -9
  206. package/src/composer/TiptapComposer.tsx +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/toolkit",
3
- "version": "0.217.0",
3
+ "version": "0.219.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": {
@@ -46,6 +46,13 @@
46
46
  "import": "./dist/app/chat/agent-sidebar-events.js",
47
47
  "default": "./dist/app/chat/agent-sidebar-events.js"
48
48
  },
49
+ "./app/chat/ownership-history": {
50
+ "types": "./dist/app/chat/ownership-history/index.d.ts",
51
+ "browser": "./dist/app/chat/ownership-history/index.js",
52
+ "development": "./dist/app/chat/ownership-history/index.js",
53
+ "import": "./dist/app/chat/ownership-history/index.js",
54
+ "default": "./dist/app/chat/ownership-history/index.js"
55
+ },
49
56
  "./app/chat": {
50
57
  "types": "./dist/app/chat/index.d.ts",
51
58
  "browser": "./dist/app/chat/index.js",
@@ -678,7 +685,7 @@
678
685
  "y-protocols": "^1.0.7",
679
686
  "yjs": "^13.6.33",
680
687
  "zod": "^4.3.6",
681
- "@agent-native/agentkit": "^0.217.0"
688
+ "@agent-native/agentkit": "^0.219.0"
682
689
  },
683
690
  "devDependencies": {
684
691
  "@excalidraw/excalidraw": "0.18.1",
@@ -702,7 +709,7 @@
702
709
  "typescript-7": "npm:typescript@^7.0.2",
703
710
  "vite": "8.1.0",
704
711
  "vitest": "^4.1.5",
705
- "@agent-native/core": "^0.217.0"
712
+ "@agent-native/core": "^0.219.0"
706
713
  },
707
714
  "peerDependencies": {
708
715
  "@agent-native/core": ">=0.205.1",
@@ -1,7 +1,28 @@
1
1
  import type { ChatThreadSummary } from "@agent-native/core/client/agent-chat";
2
- import { describe, expect, it } from "vitest";
2
+ import { createElement } from "react";
3
+ import { renderToStaticMarkup } from "react-dom/server";
4
+ import { describe, expect, it, vi } from "vitest";
3
5
 
4
- import { mostRecentlyUpdatedThread } from "./AgentContextTab.js";
6
+ import {
7
+ AgentContextTab,
8
+ mostRecentlyUpdatedThread,
9
+ } from "./AgentContextTab.js";
10
+
11
+ const hooks = vi.hoisted(() => ({
12
+ threads: vi.fn(),
13
+ query: vi.fn((..._args: unknown[]) => ({})),
14
+ }));
15
+
16
+ vi.mock("@agent-native/core/client/agent-chat", () => ({
17
+ useChatThreads: hooks.threads,
18
+ }));
19
+ vi.mock("@agent-native/core/client/hooks", () => ({
20
+ useActionQuery: hooks.query,
21
+ }));
22
+ vi.mock("../context-xray/index.js", () => ({
23
+ ContextMeter: () => null,
24
+ ContextTreemap: () => null,
25
+ }));
5
26
 
6
27
  function thread(
7
28
  id: string,
@@ -32,4 +53,31 @@ describe("mostRecentlyUpdatedThread", () => {
32
53
  it("returns undefined when no threads exist", () => {
33
54
  expect(mostRecentlyUpdatedThread([])).toBeUndefined();
34
55
  });
56
+
57
+ it("requests only owned lifecycle summaries before choosing the latest snapshot", () => {
58
+ hooks.threads.mockReturnValue({
59
+ threads: [thread("old-pinned", 100, 500), thread("newest", 300)],
60
+ });
61
+ hooks.query.mockClear();
62
+ renderToStaticMarkup(createElement(AgentContextTab, { scope: "user" }));
63
+
64
+ expect(hooks.threads).toHaveBeenCalledWith(
65
+ undefined,
66
+ "agent-context-page",
67
+ null,
68
+ {
69
+ autoCreate: false,
70
+ restoreActiveThread: false,
71
+ ownership: "mine",
72
+ },
73
+ );
74
+ expect(hooks.query.mock.calls).toEqual([
75
+ ["context-preview-get", { scope: "user" }, { staleTime: 5_000 }],
76
+ [
77
+ "context-manifest-get",
78
+ { threadId: "newest" },
79
+ { enabled: true, staleTime: 1_000 },
80
+ ],
81
+ ]);
82
+ });
35
83
  });
@@ -328,6 +328,7 @@ export function AgentContextTab({ scope }: AgentPageTabProps) {
328
328
  const threads = useChatThreads(undefined, "agent-context-page", null, {
329
329
  autoCreate: false,
330
330
  restoreActiveThread: false,
331
+ ownership: "mine",
331
332
  });
332
333
  const latestThread = mostRecentlyUpdatedThread(threads.threads);
333
334
  const liveManifestQuery = useActionQuery(
@@ -263,6 +263,7 @@ describe("AgentKitChat interactions", () => {
263
263
  topInset: 5,
264
264
  messageLaneWidth: 730,
265
265
  messageLaneOffsetInline: -33,
266
+ messageLaneOffsetMode: "responsive",
266
267
  messageGap: 12,
267
268
  messageLineHeight: 20,
268
269
  fontFamily: "IBM Plex Sans",
@@ -285,6 +286,7 @@ describe("AgentKitChat interactions", () => {
285
286
  ".agentkit-transcript-content",
286
287
  );
287
288
  expect(transcript).not.toBeNull();
289
+ expect(transcript!.dataset.laneOffsetMode).toBe("responsive");
288
290
  expect(
289
291
  transcript!.style.getPropertyValue("--agentkit-transcript-top-inset"),
290
292
  ).toBe("5px");
@@ -401,7 +401,10 @@ describe("AgentKitChat", () => {
401
401
  ".agentkit-transcript {\n grid-column: 1;\n grid-row: 2;",
402
402
  );
403
403
  expect(styles).toMatch(
404
- /\.agentkit-transcript \{[\s\S]*inline-size: 100%;[\s\S]*overflow-y: auto;/,
404
+ /\.agentkit-transcript \{[\s\S]*container-name: agentkit-transcript;[\s\S]*container-type: inline-size;[\s\S]*inline-size: 100%;[\s\S]*overflow-y: auto;/,
405
+ );
406
+ expect(styles).toContain(
407
+ "@container agentkit-transcript (max-width: 74.999rem)",
405
408
  );
406
409
  expect(styles).not.toMatch(
407
410
  /\.agentkit-transcript \{[^}]*inline-size: min\(100%, 47rem\);/,
@@ -500,17 +503,19 @@ describe("AgentKitChat", () => {
500
503
  expect(styles).toMatch(
501
504
  /@media \(max-width: 40rem\)[\s\S]*\[data-agent-composer-slot="area"\][\s\S]*padding-inline: 0;/,
502
505
  );
503
- expect(styles).toMatch(
504
- /\[data-agent-composer-slot="model-button"\] \{[\s\S]*max-inline-size: 11rem;/,
505
- );
506
+ const modelButtonRule = styles.match(
507
+ /\.agentkit-composer \[data-agent-composer-slot="model-button"\] \{([^}]*)\}/,
508
+ )?.[1];
509
+ expect(modelButtonRule).toContain("max-inline-size: 11rem;");
510
+ expect(modelButtonRule).toContain("flex: 0 1 auto;");
506
511
  expect(styles).toMatch(
507
512
  /\[data-agent-composer-slot="mode-button"\] \{[\s\S]*min-inline-size: 3\.5rem;/,
508
513
  );
509
514
  expect(styles).toMatch(
510
- /@media \(max-width: 40rem\)[\s\S]*\[data-agent-composer-slot="model-button"\][\s\S]*max-inline-size: 7\.5rem;/,
515
+ /@container \(max-width: 24rem\)[\s\S]*\[data-agent-composer-slot="model-button"\][\s\S]*max-inline-size: 7\.5rem;/,
511
516
  );
512
517
  expect(styles).toMatch(
513
- /@media \(max-width: 40rem\)[\s\S]*\.agent-composer-model-effort[\s\S]*display: none;/,
518
+ /@container \(max-width: 24rem\)[\s\S]*\.agent-composer-model-effort[\s\S]*display: none;/,
514
519
  );
515
520
  const composerPopoverRule = styles.match(
516
521
  /\[data-agent-native-composer-popover="true"\] \{([^}]*)\}/,
@@ -5713,6 +5713,9 @@ export function AgentKitChat({
5713
5713
  <div
5714
5714
  ref={transcriptContentRef}
5715
5715
  className="agentkit-transcript-content"
5716
+ data-lane-offset-mode={
5717
+ transcriptLayout?.messageLaneOffsetMode ?? "clamped"
5718
+ }
5716
5719
  style={transcriptContentStyle(transcriptLayout)}
5717
5720
  >
5718
5721
  <AgentKitRegionSlot slot={Transcript} threadId={threadId}>
@@ -43,6 +43,7 @@ import {
43
43
  type ReactNode,
44
44
  } from "react";
45
45
 
46
+ import type { AgentChatDataChartLayout } from "./data-chart-layout.js";
46
47
  import type { AgentMessageContentOrderResolver } from "./message-content-order.js";
47
48
  import type { AgentChatWorkedForRowLayout } from "./transcript-layout.js";
48
49
 
@@ -498,6 +499,7 @@ export interface AgentKitProviderProps {
498
499
  onRenderError?: (failure: AgentKitRenderFailure) => void;
499
500
  resolveMessageContentOrder?: AgentMessageContentOrderResolver;
500
501
  workedForRowLayout?: AgentChatWorkedForRowLayout;
502
+ dataChartLayout?: AgentChatDataChartLayout;
501
503
  formatWorkedForDuration?: (durationMs: number) => string;
502
504
  onClientEffect?: (effect: {
503
505
  type: "client.effect" | "client.deeplink";
@@ -530,6 +532,7 @@ export interface AgentKitContextValue {
530
532
  onRenderError?: (failure: AgentKitRenderFailure) => void;
531
533
  resolveMessageContentOrder?: AgentMessageContentOrderResolver;
532
534
  workedForRowLayout?: AgentChatWorkedForRowLayout;
535
+ dataChartLayout?: AgentChatDataChartLayout;
533
536
  formatWorkedForDuration?: (durationMs: number) => string;
534
537
  registerComposerFocus: (threadId: ThreadId, focus: () => void) => () => void;
535
538
  requestComposerFocus: (threadId: ThreadId) => void;
@@ -553,6 +556,7 @@ export function AgentKitProvider({
553
556
  onRenderError,
554
557
  resolveMessageContentOrder,
555
558
  workedForRowLayout,
559
+ dataChartLayout,
556
560
  formatWorkedForDuration,
557
561
  onClientEffect,
558
562
  children,
@@ -622,6 +626,7 @@ export function AgentKitProvider({
622
626
  onRenderError,
623
627
  resolveMessageContentOrder,
624
628
  workedForRowLayout,
629
+ dataChartLayout,
625
630
  formatWorkedForDuration,
626
631
  registerComposerFocus,
627
632
  requestComposerFocus,
@@ -642,6 +647,7 @@ export function AgentKitProvider({
642
647
  onRenderError,
643
648
  resolveMessageContentOrder,
644
649
  workedForRowLayout,
650
+ dataChartLayout,
645
651
  formatWorkedForDuration,
646
652
  registerComposerFocus,
647
653
  requestComposerFocus,
@@ -0,0 +1,25 @@
1
+ /** Optional shared presentation controls for built-in data charts in chat. */
2
+ export interface AgentChatDataChartLayout {
3
+ /** Maximum card width, in CSS pixels. The card remains responsive below it. */
4
+ maxWidth?: number;
5
+ /** Plot spacing in CSS pixels. The left inset remains data-driven. */
6
+ plotInsets?: { top?: number; right?: number; bottom?: number };
7
+ /** CSS font family for chart labels. */
8
+ labelFontFamily?: string;
9
+ /** Chart label font size, in CSS pixels. */
10
+ labelFontSize?: number;
11
+ /** Chart label color treatment. */
12
+ labelTone?: "foreground" | "muted";
13
+ /** CSS font family for the chart title. */
14
+ titleFontFamily?: string;
15
+ /** Chart title font size, in CSS pixels. */
16
+ titleFontSize?: number;
17
+ /** Chart title font weight. */
18
+ titleFontWeight?: number;
19
+ /** Chart title line height, in CSS pixels. */
20
+ titleLineHeight?: number;
21
+ /** Chart title color treatment. */
22
+ titleTone?: "foreground" | "muted";
23
+ /** Visual weight of chart display actions. */
24
+ actionsVariant?: "primary" | "secondary" | "quiet";
25
+ }
@@ -1,6 +1,7 @@
1
1
  export * from "./chat.js";
2
2
  export * from "./components.js";
3
3
  export * from "./context.js";
4
+ export * from "./data-chart-layout.js";
4
5
  export * from "./message-content-order.js";
5
6
  export * from "./root.js";
6
7
  export * from "./streaming-text.js";
@@ -30,6 +30,7 @@ import {
30
30
  type AgentKitRunUsageLoader,
31
31
  type AgentKitSlots,
32
32
  } from "./context.js";
33
+ import type { AgentChatDataChartLayout } from "./data-chart-layout.js";
33
34
  import type { AgentMessageContentOrderResolver } from "./message-content-order.js";
34
35
  import type { AgentChatWorkedForRowLayout } from "./transcript-layout.js";
35
36
 
@@ -88,6 +89,7 @@ export interface AgentKitRootBaseProps {
88
89
  onRenderError?: (failure: AgentKitRenderFailure) => void;
89
90
  resolveMessageContentOrder?: AgentMessageContentOrderResolver;
90
91
  workedForRowLayout?: AgentChatWorkedForRowLayout;
92
+ dataChartLayout?: AgentChatDataChartLayout;
91
93
  formatWorkedForDuration?: (durationMs: number) => string;
92
94
  onClientEffect?: (effect: {
93
95
  type: "client.effect" | "client.deeplink";
@@ -120,6 +122,7 @@ export function AgentKitRoot({
120
122
  onRenderError,
121
123
  resolveMessageContentOrder,
122
124
  workedForRowLayout,
125
+ dataChartLayout,
123
126
  formatWorkedForDuration,
124
127
  onClientEffect,
125
128
  load = "auto",
@@ -300,6 +303,7 @@ export function AgentKitRoot({
300
303
  onRenderError={onRenderError}
301
304
  resolveMessageContentOrder={resolveMessageContentOrder}
302
305
  workedForRowLayout={workedForRowLayout}
306
+ dataChartLayout={dataChartLayout}
303
307
  formatWorkedForDuration={formatWorkedForDuration}
304
308
  onClientEffect={onClientEffect}
305
309
  >
@@ -104,6 +104,7 @@
104
104
  var(--agent-kit-composer-surface, var(--agentkit-surface))
105
105
  );
106
106
  box-shadow: var(--agentkit-elevation);
107
+ container-type: inline-size;
107
108
  }
108
109
 
109
110
  .agentkit-composer[data-agent-composer-slot="root"]:focus-within {
@@ -161,9 +162,11 @@
161
162
  flex: 1;
162
163
  }
163
164
 
165
+ /* Only the model picker shrinks, so narrow composers never push out send. */
164
166
  .agentkit-composer [data-agent-composer-slot="model-button"] {
165
- flex: none;
167
+ flex: 0 1 auto;
166
168
  max-inline-size: 11rem;
169
+ overflow: hidden;
167
170
  }
168
171
 
169
172
  .agentkit-composer [data-agent-composer-slot="mode-button"] {
@@ -627,6 +630,8 @@ body:has(> [data-agent-native-composer-popover="true"]) > .fixed.inset-0 {
627
630
  .agentkit-transcript {
628
631
  grid-column: 1;
629
632
  grid-row: 2;
633
+ container-name: agentkit-transcript;
634
+ container-type: inline-size;
630
635
  inline-size: 100%;
631
636
  min-block-size: 0;
632
637
  overflow-y: auto;
@@ -683,6 +688,22 @@ body:has(> [data-agent-native-composer-popover="true"]) > .fixed.inset-0 {
683
688
  padding-block-start: var(--agentkit-transcript-top-inset, 1.5rem);
684
689
  }
685
690
 
691
+ .agentkit-transcript-content[data-lane-offset-mode="responsive"] {
692
+ inset-inline-start: var(--agentkit-transcript-lane-offset-inline, 0px);
693
+ }
694
+
695
+ @container agentkit-transcript (max-width: 74.999rem) {
696
+ .agentkit-transcript-content[data-lane-offset-mode="responsive"] {
697
+ inset-inline-start: clamp(
698
+ calc(
699
+ (100% - min(100%, var(--agentkit-transcript-lane-width, 47rem))) / -2
700
+ ),
701
+ var(--agentkit-transcript-lane-offset-inline, 0px),
702
+ calc((100% - min(100%, var(--agentkit-transcript-lane-width, 47rem))) / 2)
703
+ );
704
+ }
705
+ }
706
+
686
707
  .agentkit-scroll-to-bottom-control {
687
708
  position: sticky;
688
709
  z-index: 2;
@@ -2151,9 +2172,16 @@ button.agentkit-object {
2151
2172
  padding-inline: 0;
2152
2173
  }
2153
2174
 
2175
+ .agentkit-message[data-role="user"] .agentkit-message-content {
2176
+ max-inline-size: min(94%, var(--agentkit-user-bubble-max-width, 38rem));
2177
+ }
2178
+ }
2179
+
2180
+ /* Composer width, not viewport: desktop side panels are as narrow as phones. */
2181
+ @container (max-width: 24rem) {
2154
2182
  .agentkit-composer [data-agent-composer-slot="toolbar"] {
2155
2183
  gap: 0.125rem;
2156
- padding-inline: 0.5rem;
2184
+ padding-inline: 0.375rem;
2157
2185
  }
2158
2186
 
2159
2187
  .agentkit-composer [data-agent-composer-slot="model-button"] {
@@ -2162,14 +2190,11 @@ button.agentkit-object {
2162
2190
  }
2163
2191
 
2164
2192
  .agentkit-composer [data-agent-composer-slot="mode-button"] {
2193
+ min-inline-size: 0;
2165
2194
  padding-inline: 0.375rem;
2166
2195
  }
2167
2196
 
2168
2197
  .agentkit-composer .agent-composer-model-effort {
2169
2198
  display: none;
2170
2199
  }
2171
-
2172
- .agentkit-message[data-role="user"] .agentkit-message-content {
2173
- max-inline-size: min(94%, var(--agentkit-user-bubble-max-width, 38rem));
2174
- }
2175
2200
  }
@@ -7,6 +7,8 @@ export interface AgentChatTranscriptLayout {
7
7
  messageLaneWidth?: number;
8
8
  /** Signed inline offset for the centered message lane, in CSS pixels. */
9
9
  messageLaneOffsetInline?: number;
10
+ /** Keep the offset within the lane at all widths or allow wide-screen docking. */
11
+ messageLaneOffsetMode?: "clamped" | "responsive";
10
12
  /** Space after each message, in CSS pixels. */
11
13
  messageGap?: number;
12
14
  /** Assistant message line height, in CSS pixels. */