@agent-native/toolkit 0.228.0-nightly-20261111212500 → 0.228.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 (361) hide show
  1. package/agent-native.eject.json +2 -0
  2. package/dist/app/agentkit/react/approval-card.d.ts.map +1 -1
  3. package/dist/app/agentkit/react/approval-card.js +5 -3
  4. package/dist/app/agentkit/react/approval-card.js.map +1 -1
  5. package/dist/app/agentkit/react/code-block.d.ts +32 -0
  6. package/dist/app/agentkit/react/code-block.d.ts.map +1 -0
  7. package/dist/app/agentkit/react/code-block.js +125 -0
  8. package/dist/app/agentkit/react/code-block.js.map +1 -0
  9. package/dist/app/agentkit/react/components.d.ts +33 -14
  10. package/dist/app/agentkit/react/components.d.ts.map +1 -1
  11. package/dist/app/agentkit/react/components.js +843 -168
  12. package/dist/app/agentkit/react/components.js.map +1 -1
  13. package/dist/app/agentkit/react/context-usage.d.ts +45 -0
  14. package/dist/app/agentkit/react/context-usage.d.ts.map +1 -0
  15. package/dist/app/agentkit/react/context-usage.js +93 -0
  16. package/dist/app/agentkit/react/context-usage.js.map +1 -0
  17. package/dist/app/agentkit/react/context.d.ts +42 -3
  18. package/dist/app/agentkit/react/context.d.ts.map +1 -1
  19. package/dist/app/agentkit/react/context.js +46 -1
  20. package/dist/app/agentkit/react/context.js.map +1 -1
  21. package/dist/app/agentkit/react/disclosure-content.d.ts +12 -0
  22. package/dist/app/agentkit/react/disclosure-content.d.ts.map +1 -0
  23. package/dist/app/agentkit/react/disclosure-content.js +33 -0
  24. package/dist/app/agentkit/react/disclosure-content.js.map +1 -0
  25. package/dist/app/agentkit/react/duration.d.ts +6 -0
  26. package/dist/app/agentkit/react/duration.d.ts.map +1 -0
  27. package/dist/app/agentkit/react/duration.js +21 -0
  28. package/dist/app/agentkit/react/duration.js.map +1 -0
  29. package/dist/app/agentkit/react/file-change.d.ts +33 -0
  30. package/dist/app/agentkit/react/file-change.d.ts.map +1 -0
  31. package/dist/app/agentkit/react/file-change.js +83 -0
  32. package/dist/app/agentkit/react/file-change.js.map +1 -0
  33. package/dist/app/agentkit/react/file-diff.d.ts +17 -0
  34. package/dist/app/agentkit/react/file-diff.d.ts.map +1 -0
  35. package/dist/app/agentkit/react/file-diff.js +94 -0
  36. package/dist/app/agentkit/react/file-diff.js.map +1 -0
  37. package/dist/app/agentkit/react/index.d.ts +7 -0
  38. package/dist/app/agentkit/react/index.d.ts.map +1 -1
  39. package/dist/app/agentkit/react/index.js +7 -0
  40. package/dist/app/agentkit/react/index.js.map +1 -1
  41. package/dist/app/agentkit/react/question-card.d.ts +67 -0
  42. package/dist/app/agentkit/react/question-card.d.ts.map +1 -0
  43. package/dist/app/agentkit/react/question-card.js +198 -0
  44. package/dist/app/agentkit/react/question-card.js.map +1 -0
  45. package/dist/app/agentkit/react/root.d.ts +3 -2
  46. package/dist/app/agentkit/react/root.d.ts.map +1 -1
  47. package/dist/app/agentkit/react/root.js +2 -2
  48. package/dist/app/agentkit/react/root.js.map +1 -1
  49. package/dist/app/agentkit/react/roving-focus.d.ts +4 -0
  50. package/dist/app/agentkit/react/roving-focus.d.ts.map +1 -0
  51. package/dist/app/agentkit/react/roving-focus.js +75 -0
  52. package/dist/app/agentkit/react/roving-focus.js.map +1 -0
  53. package/dist/app/agentkit/react/stack-trace.d.ts +34 -0
  54. package/dist/app/agentkit/react/stack-trace.d.ts.map +1 -0
  55. package/dist/app/agentkit/react/stack-trace.js +121 -0
  56. package/dist/app/agentkit/react/stack-trace.js.map +1 -0
  57. package/dist/app/agentkit/react/stop-button.d.ts.map +1 -1
  58. package/dist/app/agentkit/react/stop-button.js +22 -6
  59. package/dist/app/agentkit/react/stop-button.js.map +1 -1
  60. package/dist/app/agentkit/react/styles.css +1306 -395
  61. package/dist/app/agentkit/react/terminal.d.ts +28 -0
  62. package/dist/app/agentkit/react/terminal.d.ts.map +1 -0
  63. package/dist/app/agentkit/react/terminal.js +84 -0
  64. package/dist/app/agentkit/react/terminal.js.map +1 -0
  65. package/dist/app/agentkit/react/trace.d.ts +31 -0
  66. package/dist/app/agentkit/react/trace.d.ts.map +1 -0
  67. package/dist/app/agentkit/react/trace.js +73 -0
  68. package/dist/app/agentkit/react/trace.js.map +1 -0
  69. package/dist/app/blocks/library/HighlightedCode.d.ts +2 -1
  70. package/dist/app/blocks/library/HighlightedCode.d.ts.map +1 -1
  71. package/dist/app/blocks/library/HighlightedCode.js +8 -111
  72. package/dist/app/blocks/library/HighlightedCode.js.map +1 -1
  73. package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
  74. package/dist/app/chat/AgentKitAssistantChat.js +23 -245
  75. package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
  76. package/dist/app/chat/agentkit-chat/guided-questions.d.ts +15 -1
  77. package/dist/app/chat/agentkit-chat/guided-questions.d.ts.map +1 -1
  78. package/dist/app/chat/agentkit-chat/guided-questions.js +142 -2
  79. package/dist/app/chat/agentkit-chat/guided-questions.js.map +1 -1
  80. package/dist/app/chat/agentkit-chat/history.js +1 -1
  81. package/dist/app/chat/agentkit-chat/history.js.map +1 -1
  82. package/dist/app/chat/agentkit-chat/index.d.ts +1 -1
  83. package/dist/app/chat/agentkit-chat/index.d.ts.map +1 -1
  84. package/dist/app/chat/agentkit-chat/index.js +1 -1
  85. package/dist/app/chat/agentkit-chat/index.js.map +1 -1
  86. package/dist/app/chat/agentkit-chat/labels.d.ts +5 -0
  87. package/dist/app/chat/agentkit-chat/labels.d.ts.map +1 -0
  88. package/dist/app/chat/agentkit-chat/labels.js +245 -0
  89. package/dist/app/chat/agentkit-chat/labels.js.map +1 -0
  90. package/dist/app/chat/agentkit-chat/questions.d.ts +1 -1
  91. package/dist/app/chat/agentkit-chat/questions.d.ts.map +1 -1
  92. package/dist/app/chat/agentkit-chat/questions.js +1 -1
  93. package/dist/app/chat/agentkit-chat/questions.js.map +1 -1
  94. package/dist/app/chat/agentkit-chat/root.d.ts.map +1 -1
  95. package/dist/app/chat/agentkit-chat/root.js +5 -64
  96. package/dist/app/chat/agentkit-chat/root.js.map +1 -1
  97. package/dist/app/chat/agentkit-chat/work-step-labels.d.ts +2 -0
  98. package/dist/app/chat/agentkit-chat/work-step-labels.d.ts.map +1 -1
  99. package/dist/app/chat/agentkit-chat/work-step-labels.js +31 -0
  100. package/dist/app/chat/agentkit-chat/work-step-labels.js.map +1 -1
  101. package/dist/app/chat/chat/markdown-renderer.d.ts +2 -12
  102. package/dist/app/chat/chat/markdown-renderer.d.ts.map +1 -1
  103. package/dist/app/chat/chat/markdown-renderer.js +2 -41
  104. package/dist/app/chat/chat/markdown-renderer.js.map +1 -1
  105. package/dist/app/chat/chat/tool-call-display.d.ts.map +1 -1
  106. package/dist/app/chat/chat/tool-call-display.js +2 -2
  107. package/dist/app/chat/chat/tool-call-display.js.map +1 -1
  108. package/dist/app/chat/conversation/AgentConversation.d.ts.map +1 -1
  109. package/dist/app/chat/conversation/AgentConversation.js +2 -37
  110. package/dist/app/chat/conversation/AgentConversation.js.map +1 -1
  111. package/dist/app/chat/tool-cells/BashCell.d.ts +3 -1
  112. package/dist/app/chat/tool-cells/BashCell.d.ts.map +1 -1
  113. package/dist/app/chat/tool-cells/BashCell.js +4 -40
  114. package/dist/app/chat/tool-cells/BashCell.js.map +1 -1
  115. package/dist/app/chat/tool-cells/EditCell.d.ts.map +1 -1
  116. package/dist/app/chat/tool-cells/EditCell.js +5 -108
  117. package/dist/app/chat/tool-cells/EditCell.js.map +1 -1
  118. package/dist/app/chat/tool-cells/FilesChangedSummary.d.ts.map +1 -1
  119. package/dist/app/chat/tool-cells/FilesChangedSummary.js +23 -81
  120. package/dist/app/chat/tool-cells/FilesChangedSummary.js.map +1 -1
  121. package/dist/app/chat/tool-cells/WriteCell.d.ts.map +1 -1
  122. package/dist/app/chat/tool-cells/WriteCell.js +5 -24
  123. package/dist/app/chat/tool-cells/WriteCell.js.map +1 -1
  124. package/dist/app/code-highlighter.d.ts +11 -0
  125. package/dist/app/code-highlighter.d.ts.map +1 -0
  126. package/dist/app/code-highlighter.js +122 -0
  127. package/dist/app/code-highlighter.js.map +1 -0
  128. package/dist/app/context-xray/ThreadContextRing.js +3 -3
  129. package/dist/app/context-xray/ThreadContextRing.js.map +1 -1
  130. package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
  131. package/dist/app/i18n/catalogs/ar-SA.js +22 -0
  132. package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
  133. package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
  134. package/dist/app/i18n/catalogs/de-DE.js +22 -0
  135. package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
  136. package/dist/app/i18n/catalogs/en-US.d.ts +22 -0
  137. package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
  138. package/dist/app/i18n/catalogs/en-US.js +22 -0
  139. package/dist/app/i18n/catalogs/en-US.js.map +1 -1
  140. package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
  141. package/dist/app/i18n/catalogs/es-ES.js +22 -0
  142. package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
  143. package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
  144. package/dist/app/i18n/catalogs/fr-FR.js +22 -0
  145. package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
  146. package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
  147. package/dist/app/i18n/catalogs/hi-IN.js +22 -0
  148. package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
  149. package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
  150. package/dist/app/i18n/catalogs/ja-JP.js +22 -0
  151. package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
  152. package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
  153. package/dist/app/i18n/catalogs/ko-KR.js +22 -0
  154. package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
  155. package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
  156. package/dist/app/i18n/catalogs/pt-BR.js +22 -0
  157. package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
  158. package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
  159. package/dist/app/i18n/catalogs/zh-CN.js +22 -0
  160. package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
  161. package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
  162. package/dist/app/i18n/catalogs/zh-TW.js +22 -0
  163. package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
  164. package/dist/app/onboarding/first-run-first-paint.d.ts +10 -0
  165. package/dist/app/onboarding/first-run-first-paint.d.ts.map +1 -0
  166. package/dist/app/onboarding/first-run-first-paint.js +22 -0
  167. package/dist/app/onboarding/first-run-first-paint.js.map +1 -0
  168. package/dist/app/onboarding/first-run-startup-gate.d.ts +3 -1
  169. package/dist/app/onboarding/first-run-startup-gate.d.ts.map +1 -1
  170. package/dist/app/onboarding/first-run-startup-gate.js +30 -6
  171. package/dist/app/onboarding/first-run-startup-gate.js.map +1 -1
  172. package/dist/app/providers/AppProviders.d.ts.map +1 -1
  173. package/dist/app/providers/AppProviders.js +9 -2
  174. package/dist/app/providers/AppProviders.js.map +1 -1
  175. package/dist/app/providers/BuilderSignupActivation.d.ts +2 -1
  176. package/dist/app/providers/BuilderSignupActivation.d.ts.map +1 -1
  177. package/dist/app/providers/BuilderSignupActivation.js +6 -3
  178. package/dist/app/providers/BuilderSignupActivation.js.map +1 -1
  179. package/dist/app/shared/AppShellSkeleton.d.ts.map +1 -1
  180. package/dist/app/shared/AppShellSkeleton.js +11 -1
  181. package/dist/app/shared/AppShellSkeleton.js.map +1 -1
  182. package/dist/app/styles/agent-native.css +2 -2
  183. package/dist/app/styles/tokens/agent-kit.css +20 -3
  184. package/dist/composer/AgentSuggestionBar.d.ts.map +1 -1
  185. package/dist/composer/AgentSuggestionBar.js +2 -2
  186. package/dist/composer/AgentSuggestionBar.js.map +1 -1
  187. package/dist/composer/ComposerContextMenu.js +4 -4
  188. package/dist/composer/ComposerContextMenu.js.map +1 -1
  189. package/dist/composer/ComposerContextPicker.d.ts.map +1 -1
  190. package/dist/composer/ComposerContextPicker.js +2 -2
  191. package/dist/composer/ComposerContextPicker.js.map +1 -1
  192. package/dist/composer/ComposerContextPickerDialog.d.ts.map +1 -1
  193. package/dist/composer/ComposerContextPickerDialog.js +2 -2
  194. package/dist/composer/ComposerContextPickerDialog.js.map +1 -1
  195. package/dist/composer/ComposerModePicker.d.ts.map +1 -1
  196. package/dist/composer/ComposerModePicker.js +2 -1
  197. package/dist/composer/ComposerModePicker.js.map +1 -1
  198. package/dist/composer/ComposerPlusMenu.js +1 -1
  199. package/dist/composer/ComposerPlusMenu.js.map +1 -1
  200. package/dist/composer/MentionChip.js +1 -1
  201. package/dist/composer/MentionChip.js.map +1 -1
  202. package/dist/composer/MentionPopover.d.ts +3 -0
  203. package/dist/composer/MentionPopover.d.ts.map +1 -1
  204. package/dist/composer/MentionPopover.js +34 -15
  205. package/dist/composer/MentionPopover.js.map +1 -1
  206. package/dist/composer/MessageQueueDrawer.d.ts.map +1 -1
  207. package/dist/composer/MessageQueueDrawer.js +14 -9
  208. package/dist/composer/MessageQueueDrawer.js.map +1 -1
  209. package/dist/composer/PastedTextChip.d.ts.map +1 -1
  210. package/dist/composer/PastedTextChip.js +14 -18
  211. package/dist/composer/PastedTextChip.js.map +1 -1
  212. package/dist/composer/PromptBar.js +1 -1
  213. package/dist/composer/PromptBar.js.map +1 -1
  214. package/dist/composer/PromptComposer.d.ts.map +1 -1
  215. package/dist/composer/PromptComposer.js +11 -9
  216. package/dist/composer/PromptComposer.js.map +1 -1
  217. package/dist/composer/RealtimeVoiceMode.js +2 -2
  218. package/dist/composer/RealtimeVoiceMode.js.map +1 -1
  219. package/dist/composer/TiptapComposer.d.ts.map +1 -1
  220. package/dist/composer/TiptapComposer.js +52 -89
  221. package/dist/composer/TiptapComposer.js.map +1 -1
  222. package/dist/composer/VoiceButton.d.ts +3 -1
  223. package/dist/composer/VoiceButton.d.ts.map +1 -1
  224. package/dist/composer/VoiceButton.js +10 -8
  225. package/dist/composer/VoiceButton.js.map +1 -1
  226. package/dist/composer/composer-notice.js +3 -3
  227. package/dist/composer/composer-notice.js.map +1 -1
  228. package/dist/composer/extensions/FileReference.js +1 -1
  229. package/dist/composer/extensions/FileReference.js.map +1 -1
  230. package/dist/composer/extensions/SkillReference.js +1 -1
  231. package/dist/composer/extensions/SkillReference.js.map +1 -1
  232. package/dist/composer/popover-surface.d.ts +1 -1
  233. package/dist/composer/popover-surface.d.ts.map +1 -1
  234. package/dist/composer/popover-surface.js +1 -1
  235. package/dist/composer/popover-surface.js.map +1 -1
  236. package/dist/context-ui/ContextUsageRing.d.ts +1 -45
  237. package/dist/context-ui/ContextUsageRing.d.ts.map +1 -1
  238. package/dist/context-ui/ContextUsageRing.js +2 -87
  239. package/dist/context-ui/ContextUsageRing.js.map +1 -1
  240. package/dist/context-ui/index.d.ts +2 -2
  241. package/dist/context-ui/index.d.ts.map +1 -1
  242. package/dist/context-ui/index.js +2 -2
  243. package/dist/context-ui/index.js.map +1 -1
  244. package/package.json +4 -4
  245. package/src/app/agentkit/react/approval-card.tsx +14 -2
  246. package/src/app/agentkit/react/code-block.spec.tsx +154 -0
  247. package/src/app/agentkit/react/code-block.tsx +317 -0
  248. package/src/app/agentkit/react/components.interaction.spec.tsx +7 -0
  249. package/src/app/agentkit/react/components.papercuts.spec.tsx +143 -2
  250. package/src/app/agentkit/react/components.spec.tsx +40 -47
  251. package/src/app/agentkit/react/components.tsx +1533 -413
  252. package/src/app/agentkit/react/composer-context.spec.tsx +35 -0
  253. package/src/app/agentkit/react/context-usage.tsx +353 -0
  254. package/src/app/agentkit/react/context.tsx +93 -1
  255. package/src/app/agentkit/react/disclosure-content.ts +42 -0
  256. package/src/app/agentkit/react/disclosures.spec.tsx +62 -4
  257. package/src/app/agentkit/react/duration.ts +22 -0
  258. package/src/app/agentkit/react/file-change.spec.tsx +124 -0
  259. package/src/app/agentkit/react/file-change.tsx +228 -0
  260. package/src/app/agentkit/react/file-diff.ts +110 -0
  261. package/src/app/agentkit/react/index.ts +7 -0
  262. package/src/app/agentkit/react/lifecycle.spec.tsx +565 -20
  263. package/src/app/agentkit/react/markdown.spec.tsx +18 -8
  264. package/src/app/agentkit/react/message-actions.spec.tsx +55 -1
  265. package/src/app/agentkit/react/notices.spec.tsx +4 -4
  266. package/src/app/agentkit/react/optimistic-send.spec.tsx +43 -0
  267. package/src/app/agentkit/react/question-card.spec.tsx +276 -0
  268. package/src/app/agentkit/react/question-card.tsx +533 -0
  269. package/src/app/agentkit/react/root.tsx +4 -0
  270. package/src/app/agentkit/react/roving-focus.spec.tsx +114 -0
  271. package/src/app/agentkit/react/roving-focus.ts +82 -0
  272. package/src/app/agentkit/react/stack-trace.spec.tsx +177 -0
  273. package/src/app/agentkit/react/stack-trace.tsx +281 -0
  274. package/src/app/agentkit/react/stop-button.spec.tsx +40 -0
  275. package/src/app/agentkit/react/stop-button.tsx +22 -5
  276. package/src/app/agentkit/react/styles.css +1306 -395
  277. package/src/app/agentkit/react/subagent-step.spec.tsx +554 -0
  278. package/src/app/agentkit/react/terminal.spec.tsx +228 -0
  279. package/src/app/agentkit/react/terminal.tsx +228 -0
  280. package/src/app/agentkit/react/trace.spec.tsx +120 -0
  281. package/src/app/agentkit/react/trace.tsx +239 -0
  282. package/src/app/blocks/library/HighlightedCode.tsx +14 -126
  283. package/src/app/chat/AgentKitAssistantChat.spec.tsx +28 -12
  284. package/src/app/chat/AgentKitAssistantChat.tsx +27 -253
  285. package/src/app/chat/agentkit-chat/approval-card.spec.tsx +1 -0
  286. package/src/app/chat/agentkit-chat/guided-questions.flow.spec.tsx +381 -0
  287. package/src/app/chat/agentkit-chat/guided-questions.tsx +236 -3
  288. package/src/app/chat/agentkit-chat/history.tsx +1 -1
  289. package/src/app/chat/agentkit-chat/index.ts +2 -0
  290. package/src/app/chat/agentkit-chat/labels.ts +259 -0
  291. package/src/app/chat/agentkit-chat/questions.ts +2 -0
  292. package/src/app/chat/agentkit-chat/root.spec.tsx +18 -0
  293. package/src/app/chat/agentkit-chat/root.tsx +5 -64
  294. package/src/app/chat/agentkit-chat/work-step-labels.ts +42 -0
  295. package/src/app/chat/chat/markdown-renderer.tsx +2 -59
  296. package/src/app/chat/chat/tool-call-display.spec.tsx +26 -14
  297. package/src/app/chat/chat/tool-call-display.tsx +2 -1
  298. package/src/app/chat/conversation/AgentConversation.tsx +2 -50
  299. package/src/app/chat/tool-cells/BashCell.tsx +14 -136
  300. package/src/app/chat/tool-cells/EditCell.tsx +11 -248
  301. package/src/app/chat/tool-cells/FilesChangedSummary.spec.tsx +62 -5
  302. package/src/app/chat/tool-cells/FilesChangedSummary.tsx +31 -162
  303. package/src/app/chat/tool-cells/WriteCell.tsx +11 -121
  304. package/src/app/code-highlighter.ts +131 -0
  305. package/src/app/context-xray/ThreadContextRing.tsx +7 -7
  306. package/src/app/i18n/catalogs/ar-SA.ts +22 -0
  307. package/src/app/i18n/catalogs/de-DE.ts +22 -0
  308. package/src/app/i18n/catalogs/en-US.ts +22 -0
  309. package/src/app/i18n/catalogs/es-ES.ts +22 -0
  310. package/src/app/i18n/catalogs/fr-FR.ts +22 -0
  311. package/src/app/i18n/catalogs/hi-IN.ts +22 -0
  312. package/src/app/i18n/catalogs/ja-JP.ts +22 -0
  313. package/src/app/i18n/catalogs/ko-KR.ts +22 -0
  314. package/src/app/i18n/catalogs/pt-BR.ts +22 -0
  315. package/src/app/i18n/catalogs/zh-CN.ts +22 -0
  316. package/src/app/i18n/catalogs/zh-TW.ts +22 -0
  317. package/src/app/onboarding/first-run-first-paint.spec.ts +39 -0
  318. package/src/app/onboarding/first-run-first-paint.ts +24 -0
  319. package/src/app/onboarding/first-run-startup-gate.spec.tsx +125 -13
  320. package/src/app/onboarding/first-run-startup-gate.tsx +48 -5
  321. package/src/app/providers/AppProviders.tsx +18 -0
  322. package/src/app/providers/BuilderSignupActivation.tsx +8 -2
  323. package/src/app/shared/AppShellSkeleton.spec.tsx +60 -1
  324. package/src/app/shared/AppShellSkeleton.tsx +31 -1
  325. package/src/app/styles/agent-native.css +2 -2
  326. package/src/app/styles/agent-native.spec.ts +2 -2
  327. package/src/app/styles/tokens/agent-kit.css +20 -3
  328. package/src/composer/AgentSuggestionBar.spec.tsx +3 -1
  329. package/src/composer/AgentSuggestionBar.tsx +5 -2
  330. package/src/composer/ComposerContextMenu.tsx +4 -4
  331. package/src/composer/ComposerContextPicker.tsx +8 -2
  332. package/src/composer/ComposerContextPickerDialog.tsx +5 -2
  333. package/src/composer/ComposerModePicker.tsx +2 -1
  334. package/src/composer/ComposerPlusMenu.tsx +1 -1
  335. package/src/composer/MentionChip.tsx +1 -1
  336. package/src/composer/MentionPopover.spec.tsx +108 -2
  337. package/src/composer/MentionPopover.tsx +93 -17
  338. package/src/composer/MessageQueueDrawer.spec.tsx +5 -5
  339. package/src/composer/MessageQueueDrawer.tsx +19 -12
  340. package/src/composer/PastedTextChip.spec.tsx +36 -0
  341. package/src/composer/PastedTextChip.tsx +52 -58
  342. package/src/composer/PromptBar.tsx +1 -1
  343. package/src/composer/PromptComposer.context.spec.tsx +2 -2
  344. package/src/composer/PromptComposer.submission.spec.tsx +27 -0
  345. package/src/composer/PromptComposer.tsx +17 -9
  346. package/src/composer/RealtimeVoiceMode.tsx +2 -2
  347. package/src/composer/TiptapComposer.model-picker.spec.tsx +23 -82
  348. package/src/composer/TiptapComposer.tsx +68 -145
  349. package/src/composer/VoiceButton.tsx +12 -7
  350. package/src/composer/composer-notice.tsx +3 -3
  351. package/src/composer/extensions/FileReference.tsx +1 -1
  352. package/src/composer/extensions/SkillReference.tsx +1 -1
  353. package/src/composer/popover-surface.ts +1 -1
  354. package/src/context-ui/ContextUsageRing.spec.tsx +33 -8
  355. package/src/context-ui/ContextUsageRing.tsx +13 -348
  356. package/src/context-ui/index.ts +7 -1
  357. package/dist/composer/ModelPickerParts.d.ts +0 -20
  358. package/dist/composer/ModelPickerParts.d.ts.map +0 -1
  359. package/dist/composer/ModelPickerParts.js +0 -77
  360. package/dist/composer/ModelPickerParts.js.map +0 -1
  361. package/src/composer/ModelPickerParts.tsx +0 -188
@@ -668,7 +668,7 @@ export function AttachmentChip({
668
668
  <div
669
669
  role="status"
670
670
  title={message}
671
- className="agent-composer-attachment-chip group relative inline-flex max-w-[240px] items-center gap-2 rounded-md border border-amber-500/40 bg-amber-500/10 px-2 py-1.5 text-xs"
671
+ className="agent-composer-attachment-chip group relative inline-flex max-w-[240px] items-center gap-2 rounded-[var(--agent-kit-radius-sm,0.5rem)] border border-amber-500/40 bg-amber-500/10 px-2 py-1.5 text-xs"
672
672
  >
673
673
  <IconAlertTriangle className="h-4 w-4 shrink-0 text-amber-500" />
674
674
  <span className="flex min-w-0 flex-col">
@@ -682,7 +682,7 @@ export function AttachmentChip({
682
682
  name: attachment.name,
683
683
  defaultValue: `Remove ${attachment.name}`,
684
684
  })}
685
- className="flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground"
685
+ className="relative flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded-[var(--agent-kit-radius-xs,0.25rem)] text-muted-foreground hover:text-foreground after:absolute after:-inset-0.5 after:content-['']"
686
686
  >
687
687
  <IconX className="h-3 w-3" />
688
688
  </button>
@@ -704,7 +704,7 @@ export function AttachmentChip({
704
704
  name: attachment.name,
705
705
  defaultValue: `Preview ${attachment.name}`,
706
706
  })}
707
- className="agent-composer-attachment-image group flex h-16 min-w-16 max-w-28 cursor-zoom-in items-center justify-center overflow-hidden rounded-lg border border-border/70 bg-muted/50"
707
+ className="agent-composer-attachment-image group flex h-16 min-w-16 max-w-28 cursor-zoom-in items-center justify-center overflow-hidden rounded-[var(--agent-kit-radius-sm,0.5rem)] border border-border bg-muted/50"
708
708
  >
709
709
  {src ? (
710
710
  <img
@@ -723,7 +723,7 @@ export function AttachmentChip({
723
723
  defaultValue: `Remove ${attachment.name}`,
724
724
  })}
725
725
  data-agent-composer-slot="attachment-remove"
726
- className="absolute end-1 top-1 flex h-5 w-5 cursor-pointer items-center justify-center rounded-full border border-border/60 bg-background/90 text-muted-foreground hover:text-foreground after:absolute after:-inset-0.5 after:content-['']"
726
+ className="absolute end-1 top-1 flex h-5 w-5 cursor-pointer items-center justify-center rounded-[var(--agent-kit-radius-xs,0.25rem)] border border-border bg-background/90 text-muted-foreground hover:text-foreground after:absolute after:-inset-0.5 after:content-['']"
727
727
  >
728
728
  <IconX className="h-3 w-3" />
729
729
  </button>
@@ -732,8 +732,8 @@ export function AttachmentChip({
732
732
  }
733
733
 
734
734
  return (
735
- <div className="agent-composer-attachment-chip group relative inline-flex max-w-[200px] items-center gap-2 rounded-md border border-border/70 bg-muted/50 px-2 py-1.5 text-xs">
736
- <div className="flex h-6 w-6 shrink-0 items-center justify-center rounded bg-background agent-kit-micro-copy font-semibold uppercase text-muted-foreground">
735
+ <div className="agent-composer-attachment-chip group relative inline-flex max-w-[200px] items-center gap-2 rounded-[var(--agent-kit-radius-sm,0.5rem)] border border-border bg-muted/50 px-2 py-1.5 text-xs">
736
+ <div className="flex h-6 w-6 shrink-0 items-center justify-center rounded-[var(--agent-kit-radius-xs,0.25rem)] bg-background agent-kit-micro-copy font-semibold uppercase text-muted-foreground">
737
737
  {attachment.name.split(".").pop() ||
738
738
  t("agentChat.composer.file", { defaultValue: "file" })}
739
739
  </div>
@@ -746,7 +746,7 @@ export function AttachmentChip({
746
746
  defaultValue: `Remove ${attachment.name}`,
747
747
  })}
748
748
  data-agent-composer-slot="attachment-remove"
749
- className="relative flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground after:absolute after:-inset-0.5 after:content-['']"
749
+ className="relative flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded-[var(--agent-kit-radius-xs,0.25rem)] text-muted-foreground hover:text-foreground after:absolute after:-inset-0.5 after:content-['']"
750
750
  >
751
751
  <IconX className="h-3 w-3" />
752
752
  </button>
@@ -758,8 +758,11 @@ const NO_HIDDEN_ATTACHMENTS: readonly string[] = [];
758
758
 
759
759
  function PromptAttachmentStrip({
760
760
  hiddenIds = NO_HIDDEN_ATTACHMENTS,
761
+ onRemoved,
761
762
  }: {
762
763
  hiddenIds?: readonly string[];
764
+ /** Runs after a chip is removed, so focus has somewhere to land. */
765
+ onRemoved?: () => void;
763
766
  }) {
764
767
  const allAttachments = useComposer((state) => state.attachments);
765
768
  const attachments = hiddenIds.length
@@ -770,8 +773,9 @@ function PromptAttachmentStrip({
770
773
  const handleRemove = useCallback(
771
774
  (id: string) => {
772
775
  void aui.composer().attachment({ id }).remove();
776
+ onRemoved?.();
773
777
  },
774
- [aui],
778
+ [aui, onRemoved],
775
779
  );
776
780
 
777
781
  if (attachments.length === 0) return null;
@@ -1100,6 +1104,7 @@ function PromptComposerInner({
1100
1104
  window.dispatchEvent(new Event("agent-engine:configured-changed"));
1101
1105
  }
1102
1106
  }, []);
1107
+ const focusComposer = useCallback(() => localRef.current?.focus(), []);
1103
1108
  const firstRunOwnsSurface = useFirstRunOnboardingGateOwnsSurface();
1104
1109
  useEffect(() => {
1105
1110
  if (!autoFocus || composerDisabled || firstRunOwnsSurface) return;
@@ -1210,7 +1215,10 @@ function PromptComposerInner({
1210
1215
  {t("agentChat.setup.providerStatusUnavailable")}
1211
1216
  </ComposerNotice>
1212
1217
  ) : null}
1213
- <PromptAttachmentStrip hiddenIds={optimisticAttachmentIds} />
1218
+ <PromptAttachmentStrip
1219
+ hiddenIds={optimisticAttachmentIds}
1220
+ onRemoved={focusComposer}
1221
+ />
1214
1222
  <TiptapComposer
1215
1223
  contextItems={contextItems}
1216
1224
  contextMenuItems={contextMenuItems}
@@ -166,7 +166,7 @@ export function RealtimeVoiceComposerControls({
166
166
  ? "user"
167
167
  : "idle"
168
168
  }
169
- className="flex h-[var(--agentkit-composer-toolbar-control-size,1.5rem)] min-w-0 shrink items-center gap-1.5 overflow-hidden rounded-full bg-muted ps-2 pe-2.5 transition-[width,background-color] duration-150 ease-out starting:bg-transparent motion-reduce:transition-none"
169
+ className="flex h-[var(--agentkit-composer-toolbar-control-size,1.5rem)] min-w-0 shrink items-center gap-1.5 overflow-hidden rounded-[var(--agent-kit-radius-xs,0.25rem)] bg-muted ps-2 pe-2.5 transition-[width,background-color] duration-150 ease-out starting:bg-transparent motion-reduce:transition-none"
170
170
  >
171
171
  {state === "connecting" ? (
172
172
  <IconLoader2
@@ -270,7 +270,7 @@ export function RealtimeVoiceEndButton({
270
270
  onClick={() =>
271
271
  voice.state === "error" ? voice.dismissError() : voice.end()
272
272
  }
273
- className="agent-composer-send-button shrink-0 flex size-[var(--agentkit-composer-primary-control-size,1.75rem)] items-center justify-center rounded-full bg-primary text-primary-foreground hover:opacity-90 transition-[opacity,transform] duration-150 active:scale-[0.97] disabled:opacity-30 disabled:cursor-not-allowed"
273
+ className="agent-composer-send-button shrink-0 flex size-[var(--agentkit-composer-primary-control-size,1.75rem)] items-center justify-center rounded-[var(--agent-kit-radius-sm,0.5rem)] bg-primary text-primary-foreground hover:opacity-90 transition-[opacity,transform] duration-150 active:scale-[0.97] disabled:opacity-30 disabled:cursor-not-allowed"
274
274
  >
275
275
  <span
276
276
  key={settling ? "settling" : "end"}
@@ -264,26 +264,23 @@ describe("TiptapComposer model picker", () => {
264
264
  "gpt-6-1-sol",
265
265
  "gemini-3-1-pro",
266
266
  "claude-sonnet-5-5",
267
+ // oracle-change: the model menu dropped its details card, printed digits and Recommended badges.
268
+ ]);
269
+ // Digit shortcuts are announced, not printed.
270
+ expect(rows.map((row) => row.textContent)).toEqual([
271
+ "Auto",
272
+ "Opus 5.5",
273
+ "GPT-6.1 Sol",
274
+ "Gemini 3.1 Pro",
275
+ "Sonnet 5.5",
276
+ ]);
277
+ expect(rows.map((row) => row.getAttribute("aria-keyshortcuts"))).toEqual([
278
+ "1",
279
+ "2",
280
+ "3",
281
+ "4",
282
+ "5",
267
283
  ]);
268
- expect(rows[1]!.textContent).toBe("Opus 5.5" + "2");
269
- expect(rows[1]!.textContent).not.toContain("Flagship capability");
270
- // Auto's badge follows its name inside the label group; only the check
271
- // and the shortcut sit at the far end.
272
- const autoLabel = rows[0]!.firstElementChild!;
273
- expect(autoLabel.firstElementChild?.textContent).toBe("Auto");
274
- expect(autoLabel.lastElementChild?.textContent).toBe("Recommended");
275
- expect(
276
- rows.slice(1).some((row) => row.textContent?.includes("Recommended")),
277
- ).toBe(false);
278
- // The current model's check takes its number's place in the one
279
- // trailing column.
280
- expect(
281
- rows.map(
282
- (row) =>
283
- row.lastElementChild?.textContent ||
284
- (row.lastElementChild?.querySelector("svg") ? "check" : ""),
285
- ),
286
- ).toEqual(["1", "2", "3", "4", "check"]);
287
284
  const selected = rows.filter(
288
285
  (row) => row.getAttribute("aria-checked") === "true",
289
286
  );
@@ -425,12 +422,6 @@ describe("TiptapComposer model picker", () => {
425
422
  const [row] = topLevelRows(menu);
426
423
  expect(row!.textContent).toBe("my-fine-tune");
427
424
  expect(row!.querySelector(".agent-kit-caption-copy")).toBeNull();
428
- await act(async () => row!.focus());
429
- const card = document.querySelector<HTMLElement>(
430
- "[data-agent-composer-model-card]",
431
- );
432
- expect(card?.textContent).toContain("Context window");
433
- expect(card?.querySelector('[role="meter"]')).toBeNull();
434
425
  });
435
426
 
436
427
  it("shows the connect choices and no model list with nothing connected", async () => {
@@ -505,14 +496,13 @@ describe("TiptapComposer model picker", () => {
505
496
  expect(onModelChange).toHaveBeenCalledWith("gpt-6-1-sol", "builder");
506
497
  expect(document.querySelector('[role="menu"]')).toBeNull();
507
498
 
508
- // The current row shows a check instead of 1, and 1 still selects it.
509
499
  const reopened = await openPicker();
510
- expect(topLevelRows(reopened)[0]!.textContent).not.toContain("1");
500
+ expect(topLevelRows(reopened)[0]!.textContent).toBe("Auto");
511
501
  await act(async () => keydown(topLevelRows(reopened)[0]!, "1"));
512
502
  expect(onModelChange).toHaveBeenLastCalledWith("auto", "builder");
513
503
  });
514
504
 
515
- it("shows the focused model's ratings, context window, and billing beside the menu", async () => {
505
+ it("shows nothing beside the menu when a model has focus", async () => {
516
506
  act(() =>
517
507
  root.render(
518
508
  <Harness
@@ -527,45 +517,12 @@ describe("TiptapComposer model picker", () => {
527
517
  '[data-agent-composer-model-row="claude-opus-5-5"]',
528
518
  )!;
529
519
  await act(async () => opus.focus());
530
- const card = document.querySelector<HTMLElement>(
531
- "[data-agent-composer-model-card]",
532
- )!;
533
- expect(card.firstElementChild?.textContent).toBe("Opus 5.5");
534
- const surface = card.closest<HTMLElement>('[role="tooltip"]')!;
535
- expect(surface.className).toMatch(/\bp-4\b/);
536
- expect(surface.className).toMatch(/\bw-72\b/);
537
- const segments = Array.from(
538
- card.querySelectorAll('[role="meter"]')[2]!.children,
539
- ).map((segment) => segment.className.match(/bg-\w+/)?.[0]);
540
- expect(segments).toEqual([
541
- "bg-ring",
542
- "bg-ring",
543
- "bg-muted",
544
- "bg-muted",
545
- "bg-muted",
546
- ]);
547
- expect(card.textContent).toContain(
548
- "Most capable Claude model for complex work",
549
- );
550
- expect(
551
- Array.from(card.querySelectorAll('[role="meter"]')).map((meter) =>
552
- meter.getAttribute("aria-label"),
553
- ),
554
- ).toEqual(["Cost 5 of 5", "Reasoning 5 of 5", "Speed 2 of 5"]);
555
- expect(card.textContent).toContain("1M tokens");
556
- expect(card.textContent).toContain("Uses Builder credits");
557
- expect(opus.getAttribute("aria-describedby")).toBe(
558
- card.closest('[role="tooltip"]')?.id,
559
- );
520
+ expect(document.querySelector('[role="tooltip"]')).toBeNull();
521
+ expect(opus.hasAttribute("aria-describedby")).toBe(false);
560
522
  expect(document.activeElement).toBe(opus);
561
-
562
- await act(async () => opus.blur());
563
- expect(
564
- document.querySelector("[data-agent-composer-model-card]"),
565
- ).toBeNull();
566
523
  });
567
524
 
568
- it("picks effort from a submenu that marks the default level", async () => {
525
+ it("picks effort from a submenu", async () => {
569
526
  const onEffortChange = vi.fn();
570
527
  act(() =>
571
528
  root.render(
@@ -615,13 +572,7 @@ describe("TiptapComposer model picker", () => {
615
572
  expect(
616
573
  levels.filter((level) => level.getAttribute("aria-checked") === "true"),
617
574
  ).toEqual([levels[4]]);
618
- // The badge marks the provider's default level, not a harness default.
619
- expect(
620
- levels.filter((level) => level.textContent?.includes("Recommended")),
621
- ).toEqual([levels[1]]);
622
- expect(levels[1]!.firstElementChild?.lastElementChild?.textContent).toBe(
623
- "Recommended",
624
- );
575
+ expect(panel.textContent).not.toContain("Recommended");
625
576
  expect(panel.textContent).not.toMatch(/usage/);
626
577
 
627
578
  await act(async () => levels[2]!.click());
@@ -781,7 +732,7 @@ describe("TiptapComposer model picker", () => {
781
732
  expect(document.querySelector('[role="menu"]')).not.toBeNull();
782
733
  });
783
734
 
784
- it("stacks More models in one menu on a narrow viewport, without the card", async () => {
735
+ it("stacks More models in one menu on a narrow viewport", async () => {
785
736
  Object.defineProperty(window, "innerWidth", {
786
737
  configurable: true,
787
738
  value: 390,
@@ -806,16 +757,6 @@ describe("TiptapComposer model picker", () => {
806
757
  ).toContain("Codex");
807
758
  expect(topLevelRows(menu)).toHaveLength(BUILDER_MODELS.length);
808
759
  expect(document.querySelectorAll('[role="menu"]')).toHaveLength(1);
809
- await act(async () =>
810
- menu
811
- .querySelector<HTMLElement>(
812
- '[data-agent-composer-model-row="claude-opus-5-5"]',
813
- )!
814
- .focus(),
815
- );
816
- expect(
817
- document.querySelector("[data-agent-composer-model-card]"),
818
- ).toBeNull();
819
760
  });
820
761
 
821
762
  it("keeps the plain row list without a catalog", async () => {