@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
@@ -83,8 +83,8 @@ describe("ContextUsageRingView", () => {
83
83
  )!;
84
84
  expect(button.getAttribute("aria-label")).toBe("Context 78% used");
85
85
  expect(button.dataset.warning).toBeUndefined();
86
- expect(button.querySelector("svg")?.getAttribute("class")).toContain(
87
- "size-5",
86
+ expect(button.querySelector("svg")?.getAttribute("class")).toBe(
87
+ "agentkit-context-ring",
88
88
  );
89
89
  });
90
90
 
@@ -95,8 +95,10 @@ describe("ContextUsageRingView", () => {
95
95
  )!;
96
96
  expect(button.dataset.warning).toBe("true");
97
97
  expect(
98
- button.querySelector("[data-context-ring-fill]")?.getAttribute("class"),
99
- ).toContain("--agent-kit-warning");
98
+ button
99
+ .querySelector("[data-context-ring-fill]")
100
+ ?.getAttribute("data-warning"),
101
+ ).toBe("true");
100
102
  });
101
103
 
102
104
  it("shows at any usage and fills the ring by the true share", () => {
@@ -133,7 +135,7 @@ describe("ContextUsagePanelView", () => {
133
135
  const view = container.querySelector("[data-context-usage-panel]")!;
134
136
  const header = view.firstElementChild!;
135
137
  expect(header.children[0]?.textContent).toBe("Context window");
136
- expect(header.children[0]?.className).toContain("text-muted-foreground");
138
+ expect(header.children[0]?.className).toBe("agentkit-context-usage-title");
137
139
  expect(header.children[1]?.textContent).toBe("779.8k / 1M (78%)");
138
140
  expect(
139
141
  Array.from(view.querySelectorAll("[data-context-usage-segment]")).map(
@@ -202,13 +204,14 @@ describe("ContextUsagePanelView", () => {
202
204
  cells: ["Conversation", "199.8k", "20.0%"],
203
205
  },
204
206
  {
207
+ // Free space takes the bar's own empty track color.
205
208
  kind: "free-space",
206
- swatch: "bg-muted",
209
+ swatch: undefined,
207
210
  cells: ["Free space", "220.2k", "22.0%"],
208
211
  },
209
212
  ]);
210
213
  const bar = view.querySelector<HTMLElement>("[data-context-usage-bar]")!;
211
- expect(bar.className).toContain("bg-muted");
214
+ expect(bar.className).toBe("agentkit-context-usage-bar");
212
215
  expect(
213
216
  Array.from(bar.children).map(
214
217
  (segment) => segment.className.match(/bg-[\w-]+/)?.[0],
@@ -220,6 +223,28 @@ describe("ContextUsagePanelView", () => {
220
223
  expect(list.hidden).toBe(true);
221
224
  });
222
225
 
226
+ it("colors segments and swatches with a CSS color", () => {
227
+ act(() =>
228
+ root.render(
229
+ panel({
230
+ segments: [
231
+ { kind: "System", label: "System", tokens: 80_000, color: "red" },
232
+ ],
233
+ }),
234
+ ),
235
+ );
236
+ const view = container.querySelector("[data-context-usage-panel]")!;
237
+ expect(
238
+ view.querySelector<HTMLElement>('[data-context-usage-segment="System"]')
239
+ ?.style.background,
240
+ ).toBe("red");
241
+ expect(
242
+ view.querySelector<HTMLElement>(
243
+ '[data-context-usage-row="System"] [data-context-usage-swatch]',
244
+ )?.style.background,
245
+ ).toBe("red");
246
+ });
247
+
223
248
  it.each<[ContextCompactState, (view: Element) => void]>([
224
249
  [
225
250
  { state: "running" },
@@ -236,7 +261,7 @@ describe("ContextUsagePanelView", () => {
236
261
  (view) => {
237
262
  const alert = view.querySelector('[role="alert"]')!;
238
263
  expect(alert.textContent).toBe("No model credentials");
239
- expect(alert.className).toContain("agent-kit-tone-warning");
264
+ expect(alert.getAttribute("data-warning")).toBe("true");
240
265
  expect(alert.className).not.toContain("destructive");
241
266
  },
242
267
  ],
@@ -1,348 +1,13 @@
1
- import {
2
- IconAlertTriangle,
3
- IconChevronDown,
4
- IconChevronRight,
5
- } from "@tabler/icons-react";
6
- import { useId, useState, type ReactNode } from "react";
7
-
8
- import { Button } from "../ui/button.js";
9
- import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover.js";
10
- import { Spinner } from "../ui/spinner.js";
11
- import {
12
- Tooltip,
13
- TooltipContent,
14
- TooltipProvider,
15
- TooltipTrigger,
16
- } from "../ui/tooltip.js";
17
- import { cn } from "../utils.js";
18
- import { fallbackContextTranslate, type ContextTranslate } from "./types.js";
19
-
20
- /** At or above this share of the window the ring turns amber. */
21
- export const CONTEXT_USAGE_WARNING_FRACTION = 0.8;
22
-
23
- /** The bar's empty track, which is also the free-space swatch. */
24
- const CONTEXT_USAGE_TRACK_CLASS = "bg-muted";
25
-
26
- export interface ContextUsageSegmentView {
27
- kind: string;
28
- label: string;
29
- tokens: number;
30
- /** A class from `contextGroupColor`, shared with the X-Ray treemap. */
31
- colorClass: string;
32
- }
33
-
34
- export type ContextCompactState =
35
- | { state: "idle" }
36
- | { state: "running" }
37
- | { state: "done"; message: string }
38
- | { state: "error"; message: string };
39
-
40
- /** 779.8k, 1M, 1.05M: the window's own unit, never "1000k". */
41
- export function formatContextWindowTokens(tokens: number): string {
42
- const value = Math.max(0, Math.round(tokens));
43
- if (value >= 1_000_000) return `${Number((value / 1_000_000).toFixed(2))}M`;
44
- if (value >= 1000) return `${Number((value / 1000).toFixed(1))}k`;
45
- return String(value);
46
- }
47
-
48
- export function contextUsagePercent(
49
- usedTokens: number,
50
- windowTokens: number,
51
- ): number {
52
- return Math.round((usedTokens / windowTokens) * 100);
53
- }
54
-
55
- function formatWindowShare(tokens: number, windowTokens: number): string {
56
- return `${((Math.max(0, tokens) / windowTokens) * 100).toFixed(1)}%`;
57
- }
58
-
59
- const CONTEXT_RING_RADIUS = 7;
60
- const CONTEXT_RING_CIRCUMFERENCE = 2 * Math.PI * CONTEXT_RING_RADIUS;
61
-
62
- /** Dash offset that fills `fraction` of the ring, clamped to [0, 1]. */
63
- export function contextRingDashOffset(fraction: number): number {
64
- const share = Math.min(1, Math.max(0, fraction));
65
- return CONTEXT_RING_CIRCUMFERENCE * (1 - share);
66
- }
67
-
68
- // A thick track with a colored fill from 12 o'clock at the true share. Never
69
- // pad a small share up to a visible minimum or round the caps: a short dark
70
- // dash on a light track is what a loading spinner looks like.
71
- function ContextRing({
72
- fraction,
73
- warning,
74
- }: {
75
- fraction: number;
76
- warning: boolean;
77
- }) {
78
- return (
79
- <svg
80
- aria-hidden="true"
81
- viewBox="0 0 20 20"
82
- className="size-5 -rotate-90"
83
- data-context-ring=""
84
- >
85
- <circle
86
- cx="10"
87
- cy="10"
88
- r={CONTEXT_RING_RADIUS}
89
- fill="none"
90
- strokeWidth="3"
91
- className="stroke-muted-foreground/25"
92
- data-context-ring-track=""
93
- />
94
- <circle
95
- cx="10"
96
- cy="10"
97
- r={CONTEXT_RING_RADIUS}
98
- fill="none"
99
- strokeWidth="3"
100
- strokeLinecap="butt"
101
- strokeDasharray={CONTEXT_RING_CIRCUMFERENCE}
102
- strokeDashoffset={contextRingDashOffset(fraction)}
103
- className={cn(
104
- "transition-[stroke-dashoffset] duration-300 motion-reduce:transition-none",
105
- warning
106
- ? "stroke-[hsl(var(--agent-kit-warning))]"
107
- : "stroke-blue-500 dark:stroke-blue-400",
108
- )}
109
- data-context-ring-fill=""
110
- />
111
- </svg>
112
- );
113
- }
114
-
115
- export function ContextUsageRingView({
116
- usedTokens,
117
- windowTokens,
118
- open,
119
- onOpenChange,
120
- children,
121
- translate = fallbackContextTranslate,
122
- }: {
123
- usedTokens: number;
124
- windowTokens: number;
125
- open: boolean;
126
- onOpenChange: (open: boolean) => void;
127
- children: ReactNode;
128
- translate?: ContextTranslate;
129
- }) {
130
- const fraction = usedTokens / windowTokens;
131
- const warning = fraction >= CONTEXT_USAGE_WARNING_FRACTION;
132
- const label = translate("agentChat.contextRing.usedLabel", {
133
- defaultValue: "Context {{percent}}% used",
134
- percent: contextUsagePercent(usedTokens, windowTokens),
135
- });
136
- return (
137
- <TooltipProvider delayDuration={200}>
138
- <Popover open={open} onOpenChange={onOpenChange}>
139
- <Tooltip>
140
- <TooltipTrigger asChild>
141
- <PopoverTrigger asChild>
142
- <button
143
- type="button"
144
- aria-label={label}
145
- data-agent-composer-slot="context-ring"
146
- data-warning={warning ? "true" : undefined}
147
- className={cn(
148
- "flex size-6 shrink-0 items-center justify-center rounded-[var(--agentkit-composer-control-radius,var(--radius-md))] text-muted-foreground hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
149
- open && "bg-accent/60",
150
- )}
151
- >
152
- <ContextRing fraction={fraction} warning={warning} />
153
- </button>
154
- </PopoverTrigger>
155
- </TooltipTrigger>
156
- <TooltipContent>{label}</TooltipContent>
157
- </Tooltip>
158
- <PopoverContent
159
- side="top"
160
- align="end"
161
- sideOffset={6}
162
- collisionPadding={8}
163
- data-agent-native-composer-popover="true"
164
- className="w-[min(calc(100vw-2rem),22rem)] p-3"
165
- >
166
- {children}
167
- </PopoverContent>
168
- </Popover>
169
- </TooltipProvider>
170
- );
171
- }
172
-
173
- export function ContextUsagePanelView({
174
- usedTokens,
175
- windowTokens,
176
- segments,
177
- tokensUntilAutoCompact,
178
- compact,
179
- onCompact,
180
- translate = fallbackContextTranslate,
181
- }: {
182
- usedTokens: number;
183
- windowTokens: number;
184
- segments: readonly ContextUsageSegmentView[];
185
- /** Omitted when no automatic threshold applies or it could not be read. */
186
- tokensUntilAutoCompact?: number | undefined;
187
- compact: ContextCompactState;
188
- onCompact?: (() => void) | undefined;
189
- translate?: ContextTranslate;
190
- }) {
191
- const [expanded, setExpanded] = useState(false);
192
- const breakdownId = useId();
193
- const percent = contextUsagePercent(usedTokens, windowTokens);
194
- const warning = usedTokens / windowTokens >= CONTEXT_USAGE_WARNING_FRACTION;
195
- const barTotal = Math.max(usedTokens, windowTokens);
196
- const rows = [
197
- ...segments,
198
- {
199
- kind: "free-space",
200
- label: translate("agentChat.contextRing.freeSpace", {
201
- defaultValue: "Free space",
202
- }),
203
- tokens: Math.max(0, windowTokens - usedTokens),
204
- colorClass: CONTEXT_USAGE_TRACK_CLASS,
205
- },
206
- ];
207
- return (
208
- <div className="flex flex-col gap-3" data-context-usage-panel="">
209
- <div className="flex items-center gap-2">
210
- <span className="min-w-0 flex-1 truncate text-sm text-muted-foreground">
211
- {translate("agentChat.contextRing.title", {
212
- defaultValue: "Context window",
213
- })}
214
- </span>
215
- <span className="shrink-0 text-sm tabular-nums text-foreground">
216
- {translate("agentChat.contextRing.usage", {
217
- defaultValue: "{{used}} / {{window}} ({{percent}}%)",
218
- used: formatContextWindowTokens(usedTokens),
219
- window: formatContextWindowTokens(windowTokens),
220
- percent,
221
- })}
222
- </span>
223
- <Button
224
- type="button"
225
- variant="ghost"
226
- size="icon-xs"
227
- className="-me-1 shrink-0"
228
- aria-label={translate("agentChat.contextRing.breakdown", {
229
- defaultValue: "Breakdown",
230
- })}
231
- aria-expanded={expanded}
232
- aria-controls={breakdownId}
233
- onClick={() => setExpanded((current) => !current)}
234
- >
235
- {expanded ? (
236
- <IconChevronDown aria-hidden="true" className="size-4" />
237
- ) : (
238
- <IconChevronRight aria-hidden="true" className="size-4" />
239
- )}
240
- </Button>
241
- </div>
242
- <div
243
- role="img"
244
- aria-label={segments
245
- .map(
246
- (segment) =>
247
- `${segment.label} ${formatContextWindowTokens(segment.tokens)}`,
248
- )
249
- .join(", ")}
250
- className={cn(
251
- "flex h-2 w-full overflow-hidden rounded-full",
252
- CONTEXT_USAGE_TRACK_CLASS,
253
- )}
254
- data-context-usage-bar=""
255
- >
256
- {segments.map((segment) => (
257
- <span
258
- key={segment.kind}
259
- data-context-usage-segment={segment.kind}
260
- className={cn("h-full", segment.colorClass)}
261
- style={{ width: `${(segment.tokens / barTotal) * 100}%` }}
262
- />
263
- ))}
264
- </div>
265
- <div
266
- id={breakdownId}
267
- hidden={!expanded}
268
- className="-my-1 max-h-48 overflow-y-auto"
269
- data-context-usage-breakdown=""
270
- >
271
- <table className="w-full table-fixed text-sm">
272
- <tbody>
273
- {rows.map((row) => (
274
- <tr key={row.kind} data-context-usage-row={row.kind}>
275
- <td className="w-4 py-0.5 align-middle">
276
- <span
277
- aria-hidden="true"
278
- data-context-usage-swatch=""
279
- className={cn("block size-2 rounded-[2px]", row.colorClass)}
280
- />
281
- </td>
282
- <td className="truncate py-0.5 text-foreground">{row.label}</td>
283
- <td className="w-20 py-0.5 ps-3 text-end tabular-nums text-muted-foreground">
284
- {formatContextWindowTokens(row.tokens)}
285
- </td>
286
- <td className="w-16 py-0.5 ps-3 text-end tabular-nums text-foreground">
287
- {formatWindowShare(row.tokens, windowTokens)}
288
- </td>
289
- </tr>
290
- ))}
291
- </tbody>
292
- </table>
293
- </div>
294
- {tokensUntilAutoCompact !== undefined ? (
295
- <p
296
- className={cn(
297
- "agent-kit-caption-copy",
298
- warning ? "agent-kit-tone-warning" : "text-muted-foreground",
299
- )}
300
- >
301
- {translate("agentChat.contextRing.untilAutoCompact", {
302
- defaultValue: "{{tokens}} until auto-compact",
303
- tokens: formatContextWindowTokens(tokensUntilAutoCompact),
304
- })}
305
- </p>
306
- ) : null}
307
- {compact.state === "done" ? (
308
- <p
309
- role="status"
310
- className="agent-kit-caption-copy text-muted-foreground"
311
- >
312
- {compact.message}
313
- </p>
314
- ) : null}
315
- {compact.state === "error" ? (
316
- <p
317
- role="alert"
318
- className="flex items-start gap-1.5 agent-kit-caption-copy agent-kit-tone-warning"
319
- >
320
- <IconAlertTriangle
321
- aria-hidden="true"
322
- className="mt-px size-4 shrink-0"
323
- />
324
- <span className="min-w-0">{compact.message}</span>
325
- </p>
326
- ) : null}
327
- {onCompact ? (
328
- <div className="flex justify-end">
329
- <Button
330
- type="button"
331
- variant="outline"
332
- size="xs"
333
- disabled={compact.state === "running"}
334
- aria-busy={compact.state === "running" || undefined}
335
- onClick={onCompact}
336
- >
337
- {compact.state === "running" ? (
338
- <Spinner className="size-3" />
339
- ) : null}
340
- {translate("agentChat.contextRing.compactNow", {
341
- defaultValue: "Compact now",
342
- })}
343
- </Button>
344
- </div>
345
- ) : null}
346
- </div>
347
- );
348
- }
1
+ // These names stay for existing `@agent-native/toolkit/context-ui` imports.
2
+ export {
3
+ CONTEXT_USAGE_WARNING_FRACTION,
4
+ ContextUsagePanel,
5
+ ContextUsagePanel as ContextUsagePanelView,
6
+ ContextUsageRing,
7
+ ContextUsageRing as ContextUsageRingView,
8
+ contextRingDashOffset,
9
+ contextUsagePercent,
10
+ formatContextWindowTokens,
11
+ type ContextCompactState,
12
+ type ContextUsageSegmentView,
13
+ } from "../app/agentkit/react/context-usage.js";
@@ -1,7 +1,9 @@
1
1
  export { ContextMeterView } from "./ContextMeter.js";
2
2
  export {
3
3
  CONTEXT_USAGE_WARNING_FRACTION,
4
+ ContextUsagePanel,
4
5
  ContextUsagePanelView,
6
+ ContextUsageRing,
5
7
  ContextUsageRingView,
6
8
  contextUsagePercent,
7
9
  formatContextWindowTokens,
@@ -14,7 +16,11 @@ export {
14
16
  } from "./ContextSegmentRow.js";
15
17
  export { ContextTreemapView } from "./ContextTreemap.js";
16
18
  export { ContextXRayPanelView, contextGroupLabel } from "./ContextXRayPanel.js";
17
- export { contextGroupColor, formatContextTokens } from "./format.js";
19
+ export {
20
+ contextGroupColor,
21
+ contextGroupFill,
22
+ formatContextTokens,
23
+ } from "./format.js";
18
24
  export type {
19
25
  ContextManifestViewData,
20
26
  ContextSegmentStatus,
@@ -1,20 +0,0 @@
1
- import type { ComposerModelDescription, ComposerTranslate } from "./runtime-adapters.js";
2
- export declare function RecommendedBadge({ t }: {
3
- t: ComposerTranslate;
4
- }): import("react").JSX.Element;
5
- export declare function localizedModelDescription(t: ComposerTranslate, description: ComposerModelDescription | undefined): string | undefined;
6
- export declare function modelBillingLabel(t: ComposerTranslate, description: ComposerModelDescription | undefined): string | undefined;
7
- /** Whether the hover card has anything to say beyond the row's own name. */
8
- export declare function hasModelDetails(description: ComposerModelDescription | undefined): description is ComposerModelDescription;
9
- export declare function ModelRatingMeter({ label, value, t, }: {
10
- label: string;
11
- value: number;
12
- t: ComposerTranslate;
13
- }): import("react").JSX.Element;
14
- export declare function ModelDetailsCard({ name, description, t, formatNumber, }: {
15
- name: string;
16
- description: ComposerModelDescription;
17
- t: ComposerTranslate;
18
- formatNumber: (value: number, options?: Intl.NumberFormatOptions) => string;
19
- }): import("react").JSX.Element;
20
- //# sourceMappingURL=ModelPickerParts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelPickerParts.d.ts","sourceRoot":"","sources":["../../src/composer/ModelPickerParts.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAE/B,wBAAgB,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE;IAAE,CAAC,EAAE,iBAAiB,CAAA;CAAE,+BAY/D;AAED,wBAAgB,yBAAyB,CACvC,CAAC,EAAE,iBAAiB,EACpB,WAAW,EAAE,wBAAwB,GAAG,SAAS,GAChD,MAAM,GAAG,SAAS,CAOpB;AAED,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,iBAAiB,EACpB,WAAW,EAAE,wBAAwB,GAAG,SAAS,GAChD,MAAM,GAAG,SAAS,CAmBpB;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAC7B,WAAW,EAAE,wBAAwB,GAAG,SAAS,GAChD,WAAW,IAAI,wBAAwB,CAQzC;AAID,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,CAAC,GACF,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,iBAAiB,CAAC;CACtB,+BA6BA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,WAAW,EACX,CAAC,EACD,YAAY,GACb,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,wBAAwB,CAAC;IACtC,CAAC,EAAE,iBAAiB,CAAC;IACrB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,KAAK,MAAM,CAAC;CAC7E,+BAiEA"}
@@ -1,77 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Badge } from "../ui/badge.js";
3
- import { Separator } from "../ui/separator.js";
4
- import { cn } from "../utils.js";
5
- export function RecommendedBadge({ t }) {
6
- return (_jsx(Badge, { variant: "outline", size: "sm", className: "shrink-0 text-muted-foreground", children: t("agentChat.composer.effortDefaultBadge", {
7
- defaultValue: "Recommended",
8
- }) }));
9
- }
10
- export function localizedModelDescription(t, description) {
11
- if (!description?.description)
12
- return undefined;
13
- return description.catalogId
14
- ? t(`agentChat.composer.modelDescription.${description.catalogId}`, {
15
- defaultValue: description.description,
16
- })
17
- : description.description;
18
- }
19
- export function modelBillingLabel(t, description) {
20
- const billing = description?.billing;
21
- if (!billing)
22
- return undefined;
23
- switch (billing.kind) {
24
- case "builder-credits":
25
- return t("agentChat.composer.billingBuilderCredits", {
26
- defaultValue: "Uses Builder credits",
27
- });
28
- case "provider-key":
29
- return t("agentChat.composer.billingProviderKey", {
30
- defaultValue: "Billed to your {{provider}} key",
31
- provider: billing.provider,
32
- });
33
- case "subscription":
34
- return t("agentChat.composer.billingSubscription", {
35
- defaultValue: "Uses your {{plan}} plan",
36
- plan: billing.plan,
37
- });
38
- }
39
- }
40
- /** Whether the hover card has anything to say beyond the row's own name. */
41
- export function hasModelDetails(description) {
42
- return Boolean(description &&
43
- (description.description ||
44
- description.ratings ||
45
- description.contextWindow !== undefined ||
46
- description.billing));
47
- }
48
- const RATING_SEGMENTS = [1, 2, 3, 4, 5];
49
- export function ModelRatingMeter({ label, value, t, }) {
50
- return (_jsxs(_Fragment, { children: [_jsx("span", { className: "text-sm text-muted-foreground", children: label }), _jsx("span", { role: "meter", "aria-valuemin": 1, "aria-valuemax": 5, "aria-valuenow": value, "aria-label": t("agentChat.composer.modelRatingAria", {
51
- defaultValue: "{{label}} {{value}} of 5",
52
- label,
53
- value,
54
- }), className: "flex items-center justify-end gap-1", children: RATING_SEGMENTS.map((segment) => (_jsx("span", { "aria-hidden": "true", className: cn("h-1.5 w-5 rounded-full", segment <= value ? "bg-ring" : "bg-muted") }, segment))) })] }));
55
- }
56
- export function ModelDetailsCard({ name, description, t, formatNumber, }) {
57
- const summary = localizedModelDescription(t, description);
58
- const billing = modelBillingLabel(t, description);
59
- const ratings = description.ratings;
60
- const contextWindow = description.contextWindow;
61
- return (_jsxs("div", { "data-agent-composer-model-card": "", children: [_jsx("p", { className: "text-sm font-medium text-foreground", children: name }), summary ? (_jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: summary })) : null, ratings ? (_jsxs(_Fragment, { children: [_jsx(Separator, { className: "my-3" }), _jsxs("div", { className: "grid grid-cols-[1fr_auto] items-center gap-x-4 gap-y-2.5", children: [_jsx(ModelRatingMeter, { t: t, label: t("agentChat.composer.modelCost", {
62
- defaultValue: "Cost",
63
- }), value: ratings.cost }), _jsx(ModelRatingMeter, { t: t, label: t("agentChat.composer.modelReasoning", {
64
- defaultValue: "Reasoning",
65
- }), value: ratings.reasoning }), _jsx(ModelRatingMeter, { t: t, label: t("agentChat.composer.modelSpeed", {
66
- defaultValue: "Speed",
67
- }), value: ratings.speed })] })] })) : null, contextWindow !== undefined ? (_jsxs(_Fragment, { children: [_jsx(Separator, { className: "my-3" }), _jsxs("div", { className: "flex items-center justify-between gap-4 text-sm", children: [_jsx("span", { className: "text-muted-foreground", children: t("agentChat.composer.contextWindow", {
68
- defaultValue: "Context window",
69
- }) }), _jsx("span", { className: "text-foreground tabular-nums", children: t("agentChat.composer.tokenCount", {
70
- defaultValue: "{{count}} tokens",
71
- count: formatNumber(contextWindow, {
72
- notation: "compact",
73
- maximumFractionDigits: 2,
74
- }),
75
- }) })] })] })) : null, billing ? (_jsx("p", { className: "mt-2 text-xs text-muted-foreground", children: billing })) : null] }));
76
- }
77
- //# sourceMappingURL=ModelPickerParts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ModelPickerParts.js","sourceRoot":"","sources":["../../src/composer/ModelPickerParts.tsx"],"names":[],"mappings":"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"}