@agent-native/core 0.117.2 → 0.118.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 (524) hide show
  1. package/corpus/README.md +3 -3
  2. package/corpus/core/CHANGELOG.md +30 -0
  3. package/corpus/core/docs/content/custom-design-system.mdx +445 -0
  4. package/corpus/core/docs/content/toolkit-ui.mdx +16 -0
  5. package/corpus/core/package.json +1 -1
  6. package/corpus/core/src/a2a/types.ts +1 -0
  7. package/corpus/core/src/agent/types.ts +1 -1
  8. package/corpus/core/src/client/AgentPanel.tsx +90 -107
  9. package/corpus/core/src/client/AssistantChat.tsx +30 -13
  10. package/corpus/core/src/client/CommandMenu.tsx +68 -178
  11. package/corpus/core/src/client/agent-chat-adapter.ts +3 -1
  12. package/corpus/core/src/client/app-providers.tsx +1 -1
  13. package/corpus/core/src/client/chat/message-components.tsx +116 -10
  14. package/corpus/core/src/client/chat/tool-call-display.tsx +26 -5
  15. package/corpus/core/src/client/chat/widgets/InlineExtensionWidget.tsx +14 -40
  16. package/corpus/core/src/client/components/ui/message-scroller.tsx +15 -1
  17. package/corpus/core/src/client/i18n.tsx +22 -0
  18. package/corpus/core/src/client/index.ts +17 -0
  19. package/corpus/core/src/client/org/TeamPage.tsx +257 -153
  20. package/corpus/core/src/client/progress/RunsTray.tsx +89 -88
  21. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +5 -2
  22. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +34 -13
  23. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +13 -0
  24. package/corpus/core/src/client/settings/DemoModeSection.tsx +6 -18
  25. package/corpus/core/src/client/settings/SecretsSection.tsx +97 -52
  26. package/corpus/core/src/client/settings/SettingsPanel.tsx +202 -246
  27. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +23 -2
  28. package/corpus/core/src/client/settings/VoiceTranscriptionSection.tsx +7 -18
  29. package/corpus/core/src/client/settings/index.ts +7 -0
  30. package/corpus/core/src/client/settings/useSettingsPanelController.ts +155 -0
  31. package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +116 -51
  32. package/corpus/core/src/client/setup-connections/index.ts +10 -0
  33. package/corpus/core/src/client/setup-connections/useBuilderConnectCardController.ts +82 -0
  34. package/corpus/core/src/client/sharing/ShareButton.tsx +64 -586
  35. package/corpus/core/src/client/sharing/ShareDialog.tsx +299 -633
  36. package/corpus/core/src/client/sharing/index.ts +42 -0
  37. package/corpus/core/src/client/sharing/share-controller-helpers.ts +318 -0
  38. package/corpus/core/src/client/sharing/useShareButtonController.ts +600 -0
  39. package/corpus/core/src/client/sharing/useShareDialogController.ts +559 -0
  40. package/corpus/core/src/client/sse-event-processor.ts +23 -0
  41. package/corpus/core/src/client/tool-display.ts +71 -0
  42. package/corpus/core/src/client/use-agent-engine-configured.ts +12 -19
  43. package/corpus/core/src/client/use-chat-threads.ts +33 -12
  44. package/corpus/core/src/localization/default-messages.ts +5 -0
  45. package/corpus/core/src/mcp-client/oauth-routes.ts +16 -2
  46. package/corpus/core/src/scripts/call-agent.ts +5 -1
  47. package/corpus/core/src/server/realtime-voice.ts +1 -1
  48. package/corpus/core/src/styles/agent-native.css +0 -24
  49. package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  50. package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  51. package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
  52. package/corpus/core/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
  53. package/corpus/core/src/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
  54. package/corpus/core/src/templates/default/app/design-system.ts +3 -0
  55. package/corpus/core/src/templates/default/app/root.tsx +5 -2
  56. package/corpus/core/src/templates/default/package.json +1 -0
  57. package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  58. package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  59. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  60. package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  61. package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
  62. package/corpus/core/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
  63. package/corpus/core/src/vite/client.ts +39 -0
  64. package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  65. package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  66. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +22 -2
  67. package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +28 -4
  68. package/corpus/templates/analytics/app/components/ui/toolkit-provider.tsx +6 -1
  69. package/corpus/templates/analytics/app/design-system.ts +3 -0
  70. package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  71. package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  72. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +22 -2
  73. package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +28 -4
  74. package/corpus/templates/assets/app/components/ui/alert.tsx +1 -0
  75. package/corpus/templates/assets/app/components/ui/toolkit-provider.tsx +6 -1
  76. package/corpus/templates/assets/app/design-system.ts +3 -0
  77. package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +26 -30
  78. package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  79. package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  80. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +22 -2
  81. package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +28 -4
  82. package/corpus/templates/brain/app/components/ui/dialog.tsx +1 -0
  83. package/corpus/templates/brain/app/components/ui/toolkit-provider.tsx +6 -1
  84. package/corpus/templates/brain/app/design-system.ts +3 -0
  85. package/corpus/templates/brain/app/routes/sources.tsx +8 -8
  86. package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  87. package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  88. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +22 -2
  89. package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +28 -4
  90. package/corpus/templates/calendar/app/components/ui/toolkit-provider.tsx +6 -1
  91. package/corpus/templates/calendar/app/design-system.ts +3 -0
  92. package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  93. package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  94. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
  95. package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
  96. package/corpus/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
  97. package/corpus/templates/chat/app/design-system.ts +3 -0
  98. package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  99. package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  100. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +22 -2
  101. package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +28 -4
  102. package/corpus/templates/clips/app/components/ui/toolkit-provider.tsx +6 -1
  103. package/corpus/templates/clips/app/design-system.ts +3 -0
  104. package/corpus/templates/clips/app/routes/_app.library._index.tsx +1 -1
  105. package/corpus/templates/clips/changelog/2026-07-22-fixed-windows-recordings-aborting-during-the-countdown.md +6 -0
  106. package/corpus/templates/clips/changelog/2026-07-22-permissions-and-rewind-controls-are-now-grouped-with-clearer.md +6 -0
  107. package/corpus/templates/clips/changelog/2026-07-22-the-desktop-popover-opens-centered-under-the-menu-bar-icon-o.md +6 -0
  108. package/corpus/templates/clips/desktop/src/app.tsx +86 -82
  109. package/corpus/templates/clips/desktop/src/styles.css +13 -0
  110. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +10 -1
  111. package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +37 -2
  112. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -0
  113. package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  114. package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  115. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +22 -2
  116. package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +28 -4
  117. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +41 -59
  118. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +41 -41
  119. package/corpus/templates/content/app/components/editor/database/GalleryView.tsx +2 -1
  120. package/corpus/templates/content/app/components/editor/database/ListView.tsx +2 -1
  121. package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +9 -9
  122. package/corpus/templates/content/app/components/editor/database/sidebar.tsx +7 -7
  123. package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +11 -11
  124. package/corpus/templates/content/app/components/ui/checkbox.tsx +1 -0
  125. package/corpus/templates/content/app/components/ui/collapsible.tsx +1 -0
  126. package/corpus/templates/content/app/components/ui/toolkit-provider.tsx +6 -1
  127. package/corpus/templates/content/app/design-system.ts +3 -0
  128. package/corpus/templates/content/app/global.css +29 -3
  129. package/corpus/templates/content/changelog/2026-07-22-page-actions-are-grouped-into-the-three-dots-menu-for-a-clea.md +6 -0
  130. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  131. package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  132. package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +10 -10
  133. package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +1 -6
  134. package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +3 -2
  135. package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +13 -12
  136. package/corpus/templates/crm/app/components/crm/RecordActions.tsx +17 -17
  137. package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +8 -8
  138. package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +3 -8
  139. package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +2 -1
  140. package/corpus/templates/crm/app/components/crm/Surface.tsx +3 -2
  141. package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +2 -2
  142. package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +7 -7
  143. package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +1 -1
  144. package/corpus/templates/crm/app/components/ui/alert-dialog.tsx +1 -0
  145. package/corpus/templates/crm/app/components/ui/badge.tsx +1 -0
  146. package/corpus/templates/crm/app/components/ui/button.tsx +1 -0
  147. package/corpus/templates/crm/app/components/ui/card.tsx +1 -0
  148. package/corpus/templates/crm/app/components/ui/dialog.tsx +1 -0
  149. package/corpus/templates/crm/app/components/ui/input.tsx +1 -0
  150. package/corpus/templates/crm/app/components/ui/label.tsx +1 -0
  151. package/corpus/templates/crm/app/components/ui/select.tsx +1 -0
  152. package/corpus/templates/crm/app/components/ui/sheet.tsx +1 -0
  153. package/corpus/templates/crm/app/components/ui/skeleton.tsx +1 -0
  154. package/corpus/templates/crm/app/components/ui/switch.tsx +1 -0
  155. package/corpus/templates/crm/app/components/ui/table.tsx +1 -0
  156. package/corpus/templates/crm/app/components/ui/tabs.tsx +1 -0
  157. package/corpus/templates/crm/app/components/ui/textarea.tsx +1 -0
  158. package/corpus/templates/crm/app/components/ui/toolkit-provider.tsx +17 -0
  159. package/corpus/templates/crm/app/design-system.ts +3 -0
  160. package/corpus/templates/crm/app/root.tsx +9 -6
  161. package/corpus/templates/crm/app/routes/dashboard.tsx +1 -1
  162. package/corpus/templates/crm/app/routes/proposals.tsx +13 -13
  163. package/corpus/templates/crm/app/routes/setup.tsx +9 -9
  164. package/corpus/templates/crm/app/routes/tasks.tsx +14 -14
  165. package/corpus/templates/crm/app/routes/views.tsx +16 -16
  166. package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  167. package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  168. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +22 -2
  169. package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +28 -4
  170. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +8 -8
  171. package/corpus/templates/design/app/components/ui/command.tsx +1 -0
  172. package/corpus/templates/design/app/components/ui/toolkit-provider.tsx +6 -1
  173. package/corpus/templates/design/app/design-system.ts +3 -0
  174. package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  175. package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  176. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +22 -2
  177. package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +28 -4
  178. package/corpus/templates/dispatch/app/components/ui/button.tsx +1 -0
  179. package/corpus/templates/dispatch/app/components/ui/toolkit-provider.tsx +17 -0
  180. package/corpus/templates/dispatch/app/design-system.ts +3 -0
  181. package/corpus/templates/dispatch/app/root.tsx +10 -7
  182. package/corpus/templates/dispatch/package.json +1 -0
  183. package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  184. package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  185. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +22 -2
  186. package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +28 -4
  187. package/corpus/templates/forms/app/components/ui/toolkit-provider.tsx +6 -1
  188. package/corpus/templates/forms/app/design-system.ts +3 -0
  189. package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  190. package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  191. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +22 -2
  192. package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +28 -4
  193. package/corpus/templates/macros/app/components/ui/toolkit-provider.tsx +6 -1
  194. package/corpus/templates/macros/app/design-system.ts +3 -0
  195. package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  196. package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  197. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +22 -2
  198. package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +28 -4
  199. package/corpus/templates/mail/app/components/email/EmailThread.tsx +134 -93
  200. package/corpus/templates/mail/app/components/email/email-iframe-document.ts +8 -2
  201. package/corpus/templates/mail/app/components/ui/textarea.tsx +1 -21
  202. package/corpus/templates/mail/app/components/ui/toolkit-provider.tsx +6 -1
  203. package/corpus/templates/mail/app/design-system.ts +3 -0
  204. package/corpus/templates/mail/changelog/2026-07-22-email-messages-no-longer-flash-with-an-unstyled-page-while-l.md +6 -0
  205. package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  206. package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  207. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +22 -2
  208. package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +28 -4
  209. package/corpus/templates/plan/app/components/plan/PlanContentRenderer.tsx +1 -1
  210. package/corpus/templates/plan/app/components/ui/toolkit-provider.tsx +6 -1
  211. package/corpus/templates/plan/app/design-system.ts +3 -0
  212. package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  213. package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  214. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +22 -2
  215. package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +28 -4
  216. package/corpus/templates/slides/app/components/ui/toolkit-provider.tsx +6 -1
  217. package/corpus/templates/slides/app/design-system.ts +3 -0
  218. package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  219. package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  220. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +22 -2
  221. package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +28 -4
  222. package/corpus/templates/tasks/app/components/ui/toolkit-provider.tsx +17 -0
  223. package/corpus/templates/tasks/app/design-system.ts +3 -0
  224. package/corpus/templates/tasks/app/root.tsx +5 -2
  225. package/corpus/toolkit/CHANGELOG.md +14 -0
  226. package/corpus/toolkit/agent-native.eject.json +71 -0
  227. package/corpus/toolkit/package.json +31 -1
  228. package/corpus/toolkit/src/chat-history/ChatHistoryRail.tsx +100 -39
  229. package/corpus/toolkit/src/chat-history/index.ts +9 -0
  230. package/corpus/toolkit/src/chat-history/useChatHistoryRailController.ts +76 -0
  231. package/corpus/toolkit/src/chat-history.css +2 -0
  232. package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +11 -8
  233. package/corpus/toolkit/src/composer/PromptComposer.tsx +27 -6
  234. package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +107 -22
  235. package/corpus/toolkit/src/conformance/__fixtures__/css-in-js-adapter.tsx +401 -0
  236. package/corpus/toolkit/src/conformance/index.ts +3 -0
  237. package/corpus/toolkit/src/conformance/runner.tsx +710 -0
  238. package/corpus/toolkit/src/conformance/types.ts +45 -0
  239. package/corpus/toolkit/src/conformance/version.ts +22 -0
  240. package/corpus/toolkit/src/design-system/components.tsx +146 -0
  241. package/corpus/toolkit/src/design-system/context.tsx +31 -0
  242. package/corpus/toolkit/src/design-system/default-adapter.tsx +915 -0
  243. package/corpus/toolkit/src/design-system/definition.ts +14 -0
  244. package/corpus/toolkit/src/design-system/error-boundary.tsx +37 -0
  245. package/corpus/toolkit/src/design-system/index.ts +7 -0
  246. package/corpus/toolkit/src/design-system/theme.ts +145 -0
  247. package/corpus/toolkit/src/design-system/types.ts +363 -0
  248. package/corpus/toolkit/src/provider.tsx +98 -5
  249. package/corpus/toolkit/src/ui/button.tsx +95 -6
  250. package/corpus/toolkit/src/ui/dialog.tsx +48 -23
  251. package/corpus/toolkit/src/ui/popover.tsx +16 -2
  252. package/corpus/toolkit/src/ui/select.tsx +7 -3
  253. package/corpus/toolkit/src/ui/sidebar.tsx +47 -48
  254. package/corpus/toolkit/src/ui/tooltip.tsx +7 -3
  255. package/dist/a2a/types.d.ts +1 -1
  256. package/dist/a2a/types.d.ts.map +1 -1
  257. package/dist/a2a/types.js.map +1 -1
  258. package/dist/agent/types.d.ts +1 -1
  259. package/dist/agent/types.d.ts.map +1 -1
  260. package/dist/agent/types.js.map +1 -1
  261. package/dist/client/AgentPanel.d.ts.map +1 -1
  262. package/dist/client/AgentPanel.js +14 -14
  263. package/dist/client/AgentPanel.js.map +1 -1
  264. package/dist/client/AssistantChat.d.ts.map +1 -1
  265. package/dist/client/AssistantChat.js +26 -15
  266. package/dist/client/AssistantChat.js.map +1 -1
  267. package/dist/client/CommandMenu.d.ts.map +1 -1
  268. package/dist/client/CommandMenu.js +18 -106
  269. package/dist/client/CommandMenu.js.map +1 -1
  270. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  271. package/dist/client/agent-chat-adapter.js +2 -1
  272. package/dist/client/agent-chat-adapter.js.map +1 -1
  273. package/dist/client/app-providers.d.ts.map +1 -1
  274. package/dist/client/app-providers.js +1 -1
  275. package/dist/client/app-providers.js.map +1 -1
  276. package/dist/client/chat/message-components.d.ts +9 -1
  277. package/dist/client/chat/message-components.d.ts.map +1 -1
  278. package/dist/client/chat/message-components.js +62 -7
  279. package/dist/client/chat/message-components.js.map +1 -1
  280. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  281. package/dist/client/chat/tool-call-display.js +20 -5
  282. package/dist/client/chat/tool-call-display.js.map +1 -1
  283. package/dist/client/chat/widgets/InlineExtensionWidget.d.ts.map +1 -1
  284. package/dist/client/chat/widgets/InlineExtensionWidget.js +9 -12
  285. package/dist/client/chat/widgets/InlineExtensionWidget.js.map +1 -1
  286. package/dist/client/components/ui/message-scroller.d.ts +1 -1
  287. package/dist/client/components/ui/message-scroller.d.ts.map +1 -1
  288. package/dist/client/components/ui/message-scroller.js +4 -3
  289. package/dist/client/components/ui/message-scroller.js.map +1 -1
  290. package/dist/client/i18n.d.ts.map +1 -1
  291. package/dist/client/i18n.js +9 -0
  292. package/dist/client/i18n.js.map +1 -1
  293. package/dist/client/index.d.ts +2 -2
  294. package/dist/client/index.d.ts.map +1 -1
  295. package/dist/client/index.js +2 -2
  296. package/dist/client/index.js.map +1 -1
  297. package/dist/client/org/TeamPage.d.ts.map +1 -1
  298. package/dist/client/org/TeamPage.js +41 -33
  299. package/dist/client/org/TeamPage.js.map +1 -1
  300. package/dist/client/progress/RunsTray.d.ts.map +1 -1
  301. package/dist/client/progress/RunsTray.js +9 -10
  302. package/dist/client/progress/RunsTray.js.map +1 -1
  303. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
  304. package/dist/client/resources/McpConnectionSuggestion.js +5 -4
  305. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
  306. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  307. package/dist/client/resources/McpIntegrationDialog.js +10 -8
  308. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  309. package/dist/client/resources/mcp-integration-catalog.d.ts +1 -0
  310. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  311. package/dist/client/resources/mcp-integration-catalog.js +13 -0
  312. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  313. package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
  314. package/dist/client/settings/DemoModeSection.js +2 -5
  315. package/dist/client/settings/DemoModeSection.js.map +1 -1
  316. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  317. package/dist/client/settings/SecretsSection.js +18 -6
  318. package/dist/client/settings/SecretsSection.js.map +1 -1
  319. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  320. package/dist/client/settings/SettingsPanel.js +52 -117
  321. package/dist/client/settings/SettingsPanel.js.map +1 -1
  322. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  323. package/dist/client/settings/SettingsTabsPage.js +16 -1
  324. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  325. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  326. package/dist/client/settings/VoiceTranscriptionSection.js +2 -5
  327. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  328. package/dist/client/settings/index.d.ts +1 -0
  329. package/dist/client/settings/index.d.ts.map +1 -1
  330. package/dist/client/settings/index.js +1 -0
  331. package/dist/client/settings/index.js.map +1 -1
  332. package/dist/client/settings/useSettingsPanelController.d.ts +22 -0
  333. package/dist/client/settings/useSettingsPanelController.d.ts.map +1 -0
  334. package/dist/client/settings/useSettingsPanelController.js +103 -0
  335. package/dist/client/settings/useSettingsPanelController.js.map +1 -0
  336. package/dist/client/setup-connections/BuilderConnectCard.d.ts +14 -6
  337. package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -1
  338. package/dist/client/setup-connections/BuilderConnectCard.js +24 -16
  339. package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -1
  340. package/dist/client/setup-connections/index.d.ts +2 -1
  341. package/dist/client/setup-connections/index.d.ts.map +1 -1
  342. package/dist/client/setup-connections/index.js +2 -1
  343. package/dist/client/setup-connections/index.js.map +1 -1
  344. package/dist/client/setup-connections/useBuilderConnectCardController.d.ts +34 -0
  345. package/dist/client/setup-connections/useBuilderConnectCardController.d.ts.map +1 -0
  346. package/dist/client/setup-connections/useBuilderConnectCardController.js +39 -0
  347. package/dist/client/setup-connections/useBuilderConnectCardController.js.map +1 -0
  348. package/dist/client/sharing/ShareButton.d.ts +2 -1
  349. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  350. package/dist/client/sharing/ShareButton.js +17 -463
  351. package/dist/client/sharing/ShareButton.js.map +1 -1
  352. package/dist/client/sharing/ShareDialog.d.ts +6 -6
  353. package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
  354. package/dist/client/sharing/ShareDialog.js +69 -283
  355. package/dist/client/sharing/ShareDialog.js.map +1 -1
  356. package/dist/client/sharing/index.d.ts +3 -0
  357. package/dist/client/sharing/index.d.ts.map +1 -1
  358. package/dist/client/sharing/index.js +3 -0
  359. package/dist/client/sharing/index.js.map +1 -1
  360. package/dist/client/sharing/share-controller-helpers.d.ts +70 -0
  361. package/dist/client/sharing/share-controller-helpers.d.ts.map +1 -0
  362. package/dist/client/sharing/share-controller-helpers.js +224 -0
  363. package/dist/client/sharing/share-controller-helpers.js.map +1 -0
  364. package/dist/client/sharing/useShareButtonController.d.ts +91 -0
  365. package/dist/client/sharing/useShareButtonController.d.ts.map +1 -0
  366. package/dist/client/sharing/useShareButtonController.js +397 -0
  367. package/dist/client/sharing/useShareButtonController.js.map +1 -0
  368. package/dist/client/sharing/useShareDialogController.d.ts +109 -0
  369. package/dist/client/sharing/useShareDialogController.d.ts.map +1 -0
  370. package/dist/client/sharing/useShareDialogController.js +348 -0
  371. package/dist/client/sharing/useShareDialogController.js.map +1 -0
  372. package/dist/client/sse-event-processor.d.ts.map +1 -1
  373. package/dist/client/sse-event-processor.js +21 -0
  374. package/dist/client/sse-event-processor.js.map +1 -1
  375. package/dist/client/tool-display.d.ts +16 -0
  376. package/dist/client/tool-display.d.ts.map +1 -1
  377. package/dist/client/tool-display.js +52 -0
  378. package/dist/client/tool-display.js.map +1 -1
  379. package/dist/client/use-agent-engine-configured.d.ts +3 -2
  380. package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
  381. package/dist/client/use-agent-engine-configured.js +7 -19
  382. package/dist/client/use-agent-engine-configured.js.map +1 -1
  383. package/dist/client/use-chat-threads.d.ts.map +1 -1
  384. package/dist/client/use-chat-threads.js +21 -8
  385. package/dist/client/use-chat-threads.js.map +1 -1
  386. package/dist/localization/default-messages.d.ts +4 -0
  387. package/dist/localization/default-messages.d.ts.map +1 -1
  388. package/dist/localization/default-messages.js +4 -0
  389. package/dist/localization/default-messages.js.map +1 -1
  390. package/dist/mcp-client/oauth-routes.d.ts +2 -0
  391. package/dist/mcp-client/oauth-routes.d.ts.map +1 -1
  392. package/dist/mcp-client/oauth-routes.js +12 -2
  393. package/dist/mcp-client/oauth-routes.js.map +1 -1
  394. package/dist/observability/routes.d.ts +3 -3
  395. package/dist/provider-api/actions/custom-provider-registration.d.ts +4 -4
  396. package/dist/scripts/call-agent.d.ts.map +1 -1
  397. package/dist/scripts/call-agent.js +5 -1
  398. package/dist/scripts/call-agent.js.map +1 -1
  399. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  400. package/dist/server/realtime-voice.js +1 -1
  401. package/dist/server/realtime-voice.js.map +1 -1
  402. package/dist/server/transcribe-voice.d.ts +1 -1
  403. package/dist/styles/agent-native.css +0 -24
  404. package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  405. package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  406. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
  407. package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
  408. package/dist/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
  409. package/dist/templates/chat/app/design-system.ts +3 -0
  410. package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  411. package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  412. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
  413. package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
  414. package/dist/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
  415. package/dist/templates/default/app/design-system.ts +3 -0
  416. package/dist/templates/default/app/root.tsx +5 -2
  417. package/dist/templates/default/package.json +1 -0
  418. package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  419. package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  420. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  421. package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  422. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
  423. package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
  424. package/dist/vite/client.d.ts +3 -0
  425. package/dist/vite/client.d.ts.map +1 -1
  426. package/dist/vite/client.js +31 -0
  427. package/dist/vite/client.js.map +1 -1
  428. package/docs/content/custom-design-system.mdx +445 -0
  429. package/docs/content/toolkit-ui.mdx +16 -0
  430. package/package.json +2 -2
  431. package/src/a2a/types.ts +1 -0
  432. package/src/agent/types.ts +1 -1
  433. package/src/client/AgentPanel.tsx +90 -107
  434. package/src/client/AssistantChat.tsx +30 -13
  435. package/src/client/CommandMenu.tsx +68 -178
  436. package/src/client/agent-chat-adapter.ts +3 -1
  437. package/src/client/app-providers.tsx +1 -1
  438. package/src/client/chat/message-components.tsx +116 -10
  439. package/src/client/chat/tool-call-display.tsx +26 -5
  440. package/src/client/chat/widgets/InlineExtensionWidget.tsx +14 -40
  441. package/src/client/components/ui/message-scroller.tsx +15 -1
  442. package/src/client/i18n.tsx +22 -0
  443. package/src/client/index.ts +17 -0
  444. package/src/client/org/TeamPage.tsx +257 -153
  445. package/src/client/progress/RunsTray.tsx +89 -88
  446. package/src/client/resources/McpConnectionSuggestion.tsx +5 -2
  447. package/src/client/resources/McpIntegrationDialog.tsx +34 -13
  448. package/src/client/resources/mcp-integration-catalog.ts +13 -0
  449. package/src/client/settings/DemoModeSection.tsx +6 -18
  450. package/src/client/settings/SecretsSection.tsx +97 -52
  451. package/src/client/settings/SettingsPanel.tsx +202 -246
  452. package/src/client/settings/SettingsTabsPage.tsx +23 -2
  453. package/src/client/settings/VoiceTranscriptionSection.tsx +7 -18
  454. package/src/client/settings/index.ts +7 -0
  455. package/src/client/settings/useSettingsPanelController.ts +155 -0
  456. package/src/client/setup-connections/BuilderConnectCard.tsx +116 -51
  457. package/src/client/setup-connections/index.ts +10 -0
  458. package/src/client/setup-connections/useBuilderConnectCardController.ts +82 -0
  459. package/src/client/sharing/ShareButton.tsx +64 -586
  460. package/src/client/sharing/ShareDialog.tsx +299 -633
  461. package/src/client/sharing/index.ts +42 -0
  462. package/src/client/sharing/share-controller-helpers.ts +318 -0
  463. package/src/client/sharing/useShareButtonController.ts +600 -0
  464. package/src/client/sharing/useShareDialogController.ts +559 -0
  465. package/src/client/sse-event-processor.ts +23 -0
  466. package/src/client/tool-display.ts +71 -0
  467. package/src/client/use-agent-engine-configured.ts +12 -19
  468. package/src/client/use-chat-threads.ts +33 -12
  469. package/src/localization/default-messages.ts +5 -0
  470. package/src/mcp-client/oauth-routes.ts +16 -2
  471. package/src/scripts/call-agent.ts +5 -1
  472. package/src/server/realtime-voice.ts +1 -1
  473. package/src/styles/agent-native.css +0 -24
  474. package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  475. package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  476. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
  477. package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
  478. package/src/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
  479. package/src/templates/chat/app/design-system.ts +3 -0
  480. package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  481. package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  482. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
  483. package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
  484. package/src/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
  485. package/src/templates/default/app/design-system.ts +3 -0
  486. package/src/templates/default/app/root.tsx +5 -2
  487. package/src/templates/default/package.json +1 -0
  488. package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  489. package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  490. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  491. package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  492. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
  493. package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
  494. package/src/vite/client.ts +39 -0
  495. package/corpus/templates/analytics/app/components/ui/calendar.tsx +0 -70
  496. package/corpus/templates/analytics/app/components/ui/chart.tsx +0 -386
  497. package/corpus/templates/calendar/app/components/ui/sonner.tsx +0 -58
  498. package/corpus/templates/forms/app/components/ui/calendar.tsx +0 -214
  499. package/corpus/templates/forms/app/components/ui/chart.tsx +0 -379
  500. package/corpus/templates/forms/app/components/ui/command.tsx +0 -153
  501. package/corpus/templates/forms/app/components/ui/context-menu.tsx +0 -198
  502. package/corpus/templates/forms/app/components/ui/menubar.tsx +0 -254
  503. package/corpus/templates/macros/app/components/ui/menubar.tsx +0 -238
  504. package/corpus/templates/macros/app/components/ui/progress.tsx +0 -26
  505. package/corpus/templates/mail/app/components/ui/calendar.tsx +0 -211
  506. package/corpus/templates/mail/app/components/ui/chart.tsx +0 -379
  507. package/corpus/templates/mail/app/components/ui/command.tsx +0 -153
  508. package/corpus/templates/mail/app/components/ui/context-menu.tsx +0 -198
  509. package/corpus/templates/mail/app/components/ui/menubar.tsx +0 -254
  510. package/corpus/templates/tasks/app/components/ui/accordion.tsx +0 -56
  511. package/corpus/templates/tasks/app/components/ui/aspect-ratio.tsx +0 -5
  512. package/corpus/templates/tasks/app/components/ui/breadcrumb.tsx +0 -115
  513. package/corpus/templates/tasks/app/components/ui/calendar.tsx +0 -70
  514. package/corpus/templates/tasks/app/components/ui/carousel.tsx +0 -260
  515. package/corpus/templates/tasks/app/components/ui/chart.tsx +0 -379
  516. package/corpus/templates/tasks/app/components/ui/form.tsx +0 -177
  517. package/corpus/templates/tasks/app/components/ui/hover-card.tsx +0 -27
  518. package/corpus/templates/tasks/app/components/ui/input-otp.tsx +0 -69
  519. package/corpus/templates/tasks/app/components/ui/menubar.tsx +0 -254
  520. package/corpus/templates/tasks/app/components/ui/navigation-menu.tsx +0 -128
  521. package/corpus/templates/tasks/app/components/ui/pagination.tsx +0 -121
  522. package/corpus/templates/tasks/app/components/ui/resizable.tsx +0 -43
  523. package/corpus/templates/tasks/app/components/ui/sidebar.tsx +0 -782
  524. package/corpus/templates/tasks/app/components/ui/toggle.tsx +0 -43
@@ -15,10 +15,18 @@
15
15
  * </CommandMenu>
16
16
  */
17
17
 
18
+ import {
19
+ Command as CommandPrimitive,
20
+ CommandGroup as CommandGroupPrimitive,
21
+ CommandInput as CommandInputPrimitive,
22
+ CommandItem as CommandItemPrimitive,
23
+ CommandList as CommandListPrimitive,
24
+ CommandSeparator as CommandSeparatorPrimitive,
25
+ CommandShortcut as CommandShortcutPrimitive,
26
+ } from "@agent-native/toolkit/ui/command";
18
27
  import {
19
28
  IconBook2,
20
29
  IconExternalLink,
21
- IconSearch,
22
30
  IconMessage,
23
31
  IconHistory,
24
32
  } from "@tabler/icons-react";
@@ -36,6 +44,7 @@ import React, {
36
44
  import { parseChangelog } from "../changelog/parse.js";
37
45
  import { sendToAgentChat } from "./agent-chat.js";
38
46
  import { ChangelogDialog, useChangelogSeen } from "./changelog/Changelog.js";
47
+ import { Dialog, DialogContent, DialogTitle } from "./components/ui/dialog.js";
39
48
  import { cn } from "./utils.js";
40
49
 
41
50
  // ─── Context ────────────────────────────────────────────────────────────────
@@ -43,8 +52,6 @@ import { cn } from "./utils.js";
43
52
  interface CommandMenuContextValue {
44
53
  search: string;
45
54
  onOpenChange: (open: boolean) => void;
46
- containerRef: React.RefObject<HTMLDivElement | null>;
47
- setSelectedIndex: (index: number) => void;
48
55
  }
49
56
 
50
57
  const CommandMenuContext = createContext<CommandMenuContextValue | null>(null);
@@ -122,14 +129,7 @@ interface CommandGroupProps {
122
129
 
123
130
  function CommandGroup({ heading, children }: CommandGroupProps) {
124
131
  return (
125
- <div className="overflow-hidden p-1 text-foreground">
126
- {heading && (
127
- <div className="px-2 py-1.5 text-xs font-medium text-muted-foreground">
128
- {heading}
129
- </div>
130
- )}
131
- {children}
132
- </div>
132
+ <CommandGroupPrimitive heading={heading}>{children}</CommandGroupPrimitive>
133
133
  );
134
134
  }
135
135
 
@@ -148,9 +148,7 @@ function CommandItem({
148
148
  className,
149
149
  deferSelect = true,
150
150
  }: CommandItemProps) {
151
- const { onOpenChange, containerRef, setSelectedIndex } =
152
- useCommandMenuContext();
153
- const itemRef = useRef<HTMLDivElement>(null);
151
+ const { onOpenChange } = useCommandMenuContext();
154
152
 
155
153
  const handleSelect = () => {
156
154
  if (!deferSelect) {
@@ -164,26 +162,13 @@ function CommandItem({
164
162
  setTimeout(onSelect, 50);
165
163
  };
166
164
 
167
- const handleMouseEnter = () => {
168
- if (!containerRef.current || !itemRef.current) return;
169
- const items = containerRef.current.querySelectorAll('[role="option"]');
170
- const index = Array.from(items).indexOf(itemRef.current);
171
- if (index >= 0) setSelectedIndex(index);
172
- };
173
-
174
165
  return (
175
- <div
176
- ref={itemRef}
177
- className={cn(
178
- "relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none",
179
- className,
180
- )}
181
- onClick={handleSelect}
182
- onMouseEnter={handleMouseEnter}
183
- role="option"
166
+ <CommandItemPrimitive
167
+ className={cn("cursor-pointer gap-2", className)}
168
+ onSelect={handleSelect}
184
169
  >
185
170
  {children}
186
- </div>
171
+ </CommandItemPrimitive>
187
172
  );
188
173
  }
189
174
 
@@ -194,19 +179,14 @@ interface CommandShortcutProps {
194
179
 
195
180
  function CommandShortcut({ children, className }: CommandShortcutProps) {
196
181
  return (
197
- <span
198
- className={cn(
199
- "ms-auto text-xs tracking-widest text-muted-foreground",
200
- className,
201
- )}
202
- >
182
+ <CommandShortcutPrimitive className={className}>
203
183
  {children}
204
- </span>
184
+ </CommandShortcutPrimitive>
205
185
  );
206
186
  }
207
187
 
208
188
  function CommandSeparator({ className }: { className?: string }) {
209
- return <div className={cn("-mx-1 my-1 h-px bg-border", className)} />;
189
+ return <CommandSeparatorPrimitive className={cn("my-1", className)} />;
210
190
  }
211
191
 
212
192
  export interface CommandMenuDoc {
@@ -319,7 +299,6 @@ export function CommandMenu({
319
299
  changelogKey,
320
300
  }: CommandMenuProps) {
321
301
  const [search, setSearch] = useState("");
322
- const [selectedIndex, setSelectedIndex] = useState(0);
323
302
  const inputRef = useRef<HTMLInputElement>(null);
324
303
  const containerRef = useRef<HTMLDivElement>(null);
325
304
 
@@ -349,13 +328,11 @@ export function CommandMenu({
349
328
  useEffect(() => {
350
329
  if (!open) {
351
330
  setSearch("");
352
- setSelectedIndex(0);
353
331
  return;
354
332
  }
355
333
 
356
334
  if (open) {
357
335
  setSearch("");
358
- setSelectedIndex(0);
359
336
  // Wait for render then focus
360
337
  requestAnimationFrame(() => {
361
338
  inputRef.current?.focus();
@@ -363,64 +340,6 @@ export function CommandMenu({
363
340
  }
364
341
  }, [open]);
365
342
 
366
- // Reset selection when search changes
367
- useEffect(() => {
368
- setSelectedIndex(0);
369
- }, [search]);
370
-
371
- // Keep selected item scrolled into view
372
- useEffect(() => {
373
- const items = containerRef.current?.querySelectorAll('[role="option"]');
374
- if (items && items[selectedIndex]) {
375
- items[selectedIndex].scrollIntoView({ block: "nearest" });
376
- }
377
- }, [selectedIndex]);
378
-
379
- // Apply selected styling directly (can't rely on Tailwind scanning core package)
380
- useEffect(() => {
381
- const items = containerRef.current?.querySelectorAll('[role="option"]');
382
- if (!items) return;
383
- items.forEach((item, i) => {
384
- const el = item as HTMLElement;
385
- if (i === selectedIndex) {
386
- el.style.backgroundColor = "hsl(var(--accent))";
387
- el.style.color = "hsl(var(--accent-foreground))";
388
- } else {
389
- el.style.backgroundColor = "";
390
- el.style.color = "";
391
- }
392
- });
393
- });
394
-
395
- // Close on escape
396
- useEffect(() => {
397
- if (!open) return;
398
- const handleKeyDown = (e: KeyboardEvent) => {
399
- if (e.key === "Escape") {
400
- e.preventDefault();
401
- onOpenChange(false);
402
- }
403
- };
404
- document.addEventListener("keydown", handleKeyDown);
405
- return () => document.removeEventListener("keydown", handleKeyDown);
406
- }, [open, onOpenChange]);
407
-
408
- // Close on click outside
409
- useEffect(() => {
410
- if (!open) return;
411
- const handleClick = (e: MouseEvent) => {
412
- if (
413
- containerRef.current &&
414
- !containerRef.current.contains(e.target as Node)
415
- ) {
416
- onOpenChange(false);
417
- }
418
- };
419
- // Use capture to handle clicks before they bubble
420
- document.addEventListener("mousedown", handleClick, true);
421
- return () => document.removeEventListener("mousedown", handleClick, true);
422
- }, [open, onOpenChange]);
423
-
424
343
  const handleSubmitToAgent = useCallback(() => {
425
344
  onOpenChange(false);
426
345
  if (!search.trim()) {
@@ -430,24 +349,6 @@ export function CommandMenu({
430
349
  submitToAgent(search.trim());
431
350
  }, [search, onOpenChange]);
432
351
 
433
- const handleKeyDown = (e: React.KeyboardEvent) => {
434
- const items = containerRef.current?.querySelectorAll('[role="option"]');
435
- const itemCount = items?.length ?? 0;
436
-
437
- if (e.key === "ArrowDown") {
438
- e.preventDefault();
439
- setSelectedIndex((prev) => (prev + 1) % itemCount || 0);
440
- } else if (e.key === "ArrowUp") {
441
- e.preventDefault();
442
- setSelectedIndex((prev) => (prev - 1 + itemCount) % itemCount || 0);
443
- } else if (e.key === "Enter") {
444
- e.preventDefault();
445
- if (items && items[selectedIndex]) {
446
- (items[selectedIndex] as HTMLElement).click();
447
- }
448
- }
449
- };
450
-
451
352
  // The built-in "What's new" row matches changelog-ish search terms.
452
353
  const changelogRowMatches =
453
354
  !search ||
@@ -528,34 +429,47 @@ export function CommandMenu({
528
429
 
529
430
  return (
530
431
  <>
531
- {open && (
532
- <div className="fixed inset-0 z-50 bg-black/50">
533
- <div
534
- ref={containerRef}
535
- className={cn(
536
- "fixed left-1/2 top-[15vh] -translate-x-1/2 w-full max-w-lg",
537
- "rounded-lg border border-border bg-popover text-popover-foreground shadow-lg",
538
- className,
539
- )}
432
+ <Dialog open={open} onOpenChange={onOpenChange}>
433
+ <DialogContent
434
+ ref={containerRef}
435
+ aria-describedby={undefined}
436
+ hideClose
437
+ motion="instant"
438
+ overlayClassName="fixed inset-0 z-50 bg-black/50 backdrop-blur-none transition-none"
439
+ overlayStyle={{
440
+ zIndex: 50,
441
+ backgroundColor: "rgb(0 0 0 / 0.5)",
442
+ backdropFilter: "none",
443
+ animation: "none",
444
+ transition: "none",
445
+ }}
446
+ className={cn(
447
+ "fixed left-1/2 top-[15vh] !z-50 !max-h-none -translate-x-1/2 !translate-y-0 !gap-0 w-full max-w-lg",
448
+ "rounded-lg border border-border bg-popover p-0 text-popover-foreground shadow-lg",
449
+ className,
450
+ )}
451
+ style={{
452
+ animation: "none",
453
+ transition: "none",
454
+ }}
455
+ >
456
+ <DialogTitle className="sr-only">{placeholder}</DialogTitle>
457
+ <CommandPrimitive
458
+ loop
459
+ shouldFilter={false}
460
+ className="h-auto rounded-lg"
540
461
  >
541
- <CommandMenuContext.Provider
542
- value={{ search, onOpenChange, containerRef, setSelectedIndex }}
543
- >
462
+ <CommandMenuContext.Provider value={{ search, onOpenChange }}>
544
463
  {/* Search input */}
545
- <div className="flex items-center border-b px-3">
546
- <IconSearch className="me-2 h-4 w-4 shrink-0 opacity-50" />
547
- <input
548
- ref={inputRef}
549
- value={search}
550
- onChange={(e) => setSearch(e.target.value)}
551
- onKeyDown={handleKeyDown}
552
- placeholder={placeholder}
553
- className="flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50"
554
- />
555
- </div>
464
+ <CommandInputPrimitive
465
+ ref={inputRef}
466
+ value={search}
467
+ onValueChange={setSearch}
468
+ placeholder={placeholder}
469
+ />
556
470
 
557
471
  {/* Command list */}
558
- <div className="max-h-[300px] overflow-y-auto overflow-x-hidden">
472
+ <CommandListPrimitive>
559
473
  {dynamicResults}
560
474
  {hasResults && filteredChildren}
561
475
 
@@ -564,21 +478,9 @@ export function CommandMenu({
564
478
  <>
565
479
  {hasResults && <CommandSeparator />}
566
480
  <div className="p-1">
567
- <div
568
- className="relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2 text-sm outline-none"
569
- onClick={openChangelog}
570
- onMouseEnter={(e) => {
571
- const items =
572
- containerRef.current?.querySelectorAll(
573
- '[role="option"]',
574
- );
575
- if (!items) return;
576
- const index = Array.from(items).indexOf(
577
- e.currentTarget,
578
- );
579
- if (index >= 0) setSelectedIndex(index);
580
- }}
581
- role="option"
481
+ <CommandItemPrimitive
482
+ className="cursor-pointer gap-2 py-2"
483
+ onSelect={openChangelog}
582
484
  >
583
485
  <IconHistory className="h-4 w-4 text-muted-foreground" />
584
486
  <span>{changelogLabel}</span>
@@ -588,7 +490,7 @@ export function CommandMenu({
588
490
  aria-label="New updates available"
589
491
  />
590
492
  )}
591
- </div>
493
+ </CommandItemPrimitive>
592
494
  </div>
593
495
  </>
594
496
  )}
@@ -600,21 +502,9 @@ export function CommandMenu({
600
502
  <CommandSeparator />
601
503
  )}
602
504
  <div className="p-1">
603
- <div
604
- className="relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-2 text-sm outline-none"
605
- onClick={handleSubmitToAgent}
606
- onMouseEnter={(e) => {
607
- const items =
608
- containerRef.current?.querySelectorAll(
609
- '[role="option"]',
610
- );
611
- if (!items) return;
612
- const index = Array.from(items).indexOf(
613
- e.currentTarget,
614
- );
615
- if (index >= 0) setSelectedIndex(index);
616
- }}
617
- role="option"
505
+ <CommandItemPrimitive
506
+ className="cursor-pointer gap-2 py-2"
507
+ onSelect={handleSubmitToAgent}
618
508
  >
619
509
  <IconMessage className="h-4 w-4 text-muted-foreground" />
620
510
  <span>
@@ -636,15 +526,15 @@ export function CommandMenu({
636
526
 
637
527
  </span>
638
528
  )}
639
- </div>
529
+ </CommandItemPrimitive>
640
530
  </div>
641
531
  </>
642
532
  )}
643
- </div>
533
+ </CommandListPrimitive>
644
534
  </CommandMenuContext.Provider>
645
- </div>
646
- </div>
647
- )}
535
+ </CommandPrimitive>
536
+ </DialogContent>
537
+ </Dialog>
648
538
 
649
539
  {hasChangelog && (
650
540
  <ChangelogDialog
@@ -673,7 +673,9 @@ function contentToStructuredMessages(
673
673
  }
674
674
 
675
675
  if (isToolCallContentPart(part)) {
676
- if (part.activity === true) continue;
676
+ if (part.activity === true || part.toolName.startsWith("agent:")) {
677
+ continue;
678
+ }
677
679
  const toolCallId = nextToolCallId();
678
680
  assistantParts.push({
679
681
  type: "tool-call",
@@ -48,11 +48,11 @@
48
48
  * intentionally animates theme changes (e.g. content).
49
49
  */
50
50
 
51
+ import { Toaster } from "@agent-native/toolkit/ui/sonner";
51
52
  import { TooltipProvider } from "@radix-ui/react-tooltip";
52
53
  import { QueryClientProvider, type QueryClient } from "@tanstack/react-query";
53
54
  import { ThemeProvider, type Attribute } from "next-themes";
54
55
  import React from "react";
55
- import { Toaster } from "sonner";
56
56
 
57
57
  import { ClientOnly } from "./ClientOnly.js";
58
58
  import { DefaultSpinner } from "./DefaultSpinner.js";
@@ -64,6 +64,10 @@ import {
64
64
  import { ThumbsFeedback } from "../observability/ThumbsFeedback.js";
65
65
  import { McpConnectionSuggestion } from "../resources/McpConnectionSuggestion.js";
66
66
  import type { ContentPart } from "../sse-event-processor.js";
67
+ import {
68
+ isCallAgentToolCallShadowed,
69
+ shadowedCallAgentToolCallIds,
70
+ } from "../tool-display.js";
67
71
  import { cn } from "../utils.js";
68
72
  import {
69
73
  MarkdownText,
@@ -860,6 +864,49 @@ export function assistantMessageHasUnresolvedTool(content: unknown): boolean {
860
864
  });
861
865
  }
862
866
 
867
+ export function assistantMessageHasCompletedCustomUi(
868
+ content: unknown,
869
+ ): boolean {
870
+ if (!Array.isArray(content)) return false;
871
+ let lastTextIndex = -1;
872
+ for (let index = 0; index < content.length; index++) {
873
+ const part = content[index];
874
+ if (
875
+ part &&
876
+ typeof part === "object" &&
877
+ (part as { type?: unknown }).type === "text"
878
+ ) {
879
+ lastTextIndex = index;
880
+ }
881
+ }
882
+ let hasCompletedTool = false;
883
+ let lastCompletedToolIsCustomUi = false;
884
+ for (let index = lastTextIndex + 1; index < content.length; index++) {
885
+ const part = content[index];
886
+ if (!part || typeof part !== "object") continue;
887
+ const record = part as {
888
+ type?: unknown;
889
+ result?: unknown;
890
+ isError?: unknown;
891
+ activity?: unknown;
892
+ chatUI?: unknown;
893
+ mcpApp?: unknown;
894
+ };
895
+ if (
896
+ record.type !== "tool-call" ||
897
+ record.activity === true ||
898
+ record.result === undefined ||
899
+ record.isError === true
900
+ ) {
901
+ continue;
902
+ }
903
+ hasCompletedTool = true;
904
+ lastCompletedToolIsCustomUi =
905
+ record.chatUI !== undefined || record.mcpApp !== undefined;
906
+ }
907
+ return hasCompletedTool && lastCompletedToolIsCustomUi;
908
+ }
909
+
863
910
  // Only the last assistant message may shimmer as "the currently running
864
911
  // tool" — an older message's dangling unresolved tool-call must never
865
912
  // shimmer once a later run is active.
@@ -870,8 +917,10 @@ export function computeActiveTailToolCallId(
870
917
  if (!isLast) return null;
871
918
  return (
872
919
  content?.reduce(
873
- (latestToolCallId, part) =>
874
- part.type === "tool-call" && (chatRunning || part.activity === true)
920
+ (latestToolCallId, part, index) =>
921
+ part.type === "tool-call" &&
922
+ !isCallAgentToolCallShadowed(content, index) &&
923
+ (chatRunning || part.activity === true)
875
924
  ? part.toolCallId
876
925
  : latestToolCallId,
877
926
  null as string | null,
@@ -903,12 +952,19 @@ export function shouldShowMissingFinalResponse({
903
952
  statusIsTerminal,
904
953
  hasAssistantText,
905
954
  hasUnresolvedTool,
955
+ hasCompletedCustomUi,
906
956
  }: {
907
957
  statusIsTerminal: boolean;
908
958
  hasAssistantText: boolean;
909
959
  hasUnresolvedTool: boolean;
960
+ hasCompletedCustomUi?: boolean;
910
961
  }): boolean {
911
- return statusIsTerminal && !hasAssistantText && !hasUnresolvedTool;
962
+ return (
963
+ statusIsTerminal &&
964
+ !hasAssistantText &&
965
+ !hasUnresolvedTool &&
966
+ !hasCompletedCustomUi
967
+ );
912
968
  }
913
969
 
914
970
  export function shouldShowAssistantWorkSummary({
@@ -977,19 +1033,34 @@ const ALWAYS_VISIBLE_ASSISTANT_TOOLS = new Set(["connect-builder"]);
977
1033
  export function isCollapsibleAssistantWorkPart(part: {
978
1034
  type?: string;
979
1035
  toolName?: string;
1036
+ chatUI?: unknown;
1037
+ mcpApp?: unknown;
980
1038
  }): boolean {
981
1039
  if (part.type === "reasoning") return true;
982
1040
  return (
983
1041
  part.type === "tool-call" &&
984
- !ALWAYS_VISIBLE_ASSISTANT_TOOLS.has(part.toolName ?? "")
1042
+ !ALWAYS_VISIBLE_ASSISTANT_TOOLS.has(part.toolName ?? "") &&
1043
+ part.chatUI === undefined &&
1044
+ part.mcpApp === undefined
985
1045
  );
986
1046
  }
987
1047
 
988
1048
  export function getAssistantToolSummaryInfo(
989
- parts: readonly { type?: string; toolName?: string }[],
1049
+ parts: readonly {
1050
+ type?: string;
1051
+ toolCallId?: string;
1052
+ toolName?: string;
1053
+ args?: Record<string, unknown>;
1054
+ chatUI?: unknown;
1055
+ mcpApp?: unknown;
1056
+ }[],
990
1057
  ): { startIndex: number; hiddenToolCount: number } {
991
1058
  const toolCallIndices = parts.reduce<number[]>((indices, part, index) => {
992
- if (part.type === "tool-call" && isCollapsibleAssistantWorkPart(part)) {
1059
+ if (
1060
+ part.type === "tool-call" &&
1061
+ !isCallAgentToolCallShadowed(parts, index) &&
1062
+ isCollapsibleAssistantWorkPart(part)
1063
+ ) {
993
1064
  indices.push(index);
994
1065
  }
995
1066
  return indices;
@@ -1012,11 +1083,23 @@ export function getAssistantToolSummaryInfo(
1012
1083
  function groupAssistantWorkParts(
1013
1084
  part: {
1014
1085
  type?: string;
1086
+ toolCallId?: string;
1015
1087
  toolName?: string;
1088
+ args?: Record<string, unknown>;
1089
+ chatUI?: unknown;
1090
+ mcpApp?: unknown;
1016
1091
  },
1017
1092
  index: number,
1018
- parts: readonly { type?: string; toolName?: string }[],
1093
+ parts: readonly {
1094
+ type?: string;
1095
+ toolCallId?: string;
1096
+ toolName?: string;
1097
+ args?: Record<string, unknown>;
1098
+ chatUI?: unknown;
1099
+ mcpApp?: unknown;
1100
+ }[],
1019
1101
  ): ["group-work"] | ["group-work", "group-ran-tools"] | null {
1102
+ if (isCallAgentToolCallShadowed(parts, index)) return null;
1020
1103
  if (isCollapsibleAssistantWorkPart(part)) {
1021
1104
  const { startIndex } = getAssistantToolSummaryInfo(parts);
1022
1105
  if (isAssistantToolSummaryPart(parts, index, startIndex)) {
@@ -1028,16 +1111,29 @@ function groupAssistantWorkParts(
1028
1111
  }
1029
1112
 
1030
1113
  function isAssistantToolSummaryPart(
1031
- parts: readonly { type?: string; toolName?: string }[],
1114
+ parts: readonly {
1115
+ type?: string;
1116
+ toolCallId?: string;
1117
+ toolName?: string;
1118
+ args?: Record<string, unknown>;
1119
+ chatUI?: unknown;
1120
+ mcpApp?: unknown;
1121
+ }[],
1032
1122
  index: number,
1033
1123
  startIndex: number,
1034
1124
  ): boolean {
1035
1125
  if (startIndex < 0 || index >= startIndex) return false;
1036
- if (!isCollapsibleAssistantWorkPart(parts[index]!)) return false;
1126
+ if (
1127
+ isCallAgentToolCallShadowed(parts, index) ||
1128
+ !isCollapsibleAssistantWorkPart(parts[index]!)
1129
+ ) {
1130
+ return false;
1131
+ }
1037
1132
 
1038
1133
  let segmentStart = index;
1039
1134
  while (
1040
1135
  segmentStart > 0 &&
1136
+ !isCallAgentToolCallShadowed(parts, segmentStart - 1) &&
1041
1137
  isCollapsibleAssistantWorkPart(parts[segmentStart - 1]!)
1042
1138
  ) {
1043
1139
  segmentStart--;
@@ -1046,6 +1142,7 @@ function isAssistantToolSummaryPart(
1046
1142
  let segmentEnd = index + 1;
1047
1143
  while (
1048
1144
  segmentEnd < startIndex &&
1145
+ !isCallAgentToolCallShadowed(parts, segmentEnd) &&
1049
1146
  isCollapsibleAssistantWorkPart(parts[segmentEnd]!)
1050
1147
  ) {
1051
1148
  segmentEnd++;
@@ -1073,10 +1170,14 @@ export function AssistantMessage() {
1073
1170
  const hasUnresolvedTool = assistantMessageHasUnresolvedTool(msg.content);
1074
1171
  const responseConnectionText = messageTextFromContent(msg.content);
1075
1172
  const statusIsTerminal = assistantMessageStatusIsTerminal(msg);
1173
+ const hasCompletedCustomUi = assistantMessageHasCompletedCustomUi(
1174
+ msg.content,
1175
+ );
1076
1176
  const showMissingFinalResponse = shouldShowMissingFinalResponse({
1077
1177
  statusIsTerminal,
1078
1178
  hasAssistantText: responseConnectionText.trim().length > 0,
1079
1179
  hasUnresolvedTool,
1180
+ hasCompletedCustomUi,
1080
1181
  });
1081
1182
  const responseConnectionContext = latestUserMessageText(thread.messages);
1082
1183
  const isComplete = shouldShowAssistantMessageFooter({
@@ -1191,10 +1292,14 @@ export function AssistantMessage() {
1191
1292
  const hasCollapsibleWork =
1192
1293
  Array.isArray(msgContent) &&
1193
1294
  msgContent.some(
1194
- (p) =>
1295
+ (p, index) =>
1296
+ !isCallAgentToolCallShadowed(msgContent, index) &&
1195
1297
  (p.type !== "tool-call" || p.activity !== true) &&
1196
1298
  isCollapsibleAssistantWorkPart(p),
1197
1299
  );
1300
+ const shadowedToolCallIds = Array.isArray(msgContent)
1301
+ ? shadowedCallAgentToolCallIds(msgContent)
1302
+ : new Set<string>();
1198
1303
  const activeTailToolCallId = computeActiveTailToolCallId(msgContent, {
1199
1304
  chatRunning,
1200
1305
  isLast,
@@ -1243,6 +1348,7 @@ export function AssistantMessage() {
1243
1348
  case "reasoning":
1244
1349
  return <ReasoningMessagePart />;
1245
1350
  case "tool-call":
1351
+ if (shadowedToolCallIds.has(part.toolCallId)) return null;
1246
1352
  return part.toolUI ? (
1247
1353
  <ToolActivityPresentation
1248
1354
  toolName={part.toolName}