@copilotkit/vue 2.0.0-rc.2 → 2.0.0-rc.21

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 (335) hide show
  1. package/PARITY.md +3 -3
  2. package/dist/hooks/use-copilot-action.d.ts.map +1 -1
  3. package/dist/hooks/use-frontend-tool.d.ts +1 -1
  4. package/dist/hooks/use-frontend-tool.d.ts.map +1 -1
  5. package/dist/hooks/zod-parameters.d.ts +14 -0
  6. package/dist/hooks/zod-parameters.d.ts.map +1 -0
  7. package/dist/index.cjs +1 -73
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.mjs +365 -16920
  10. package/dist/index.mjs.map +1 -1
  11. package/dist/use-render-activity-message-BAhbpSDh.js +16200 -0
  12. package/dist/use-render-activity-message-BAhbpSDh.js.map +1 -0
  13. package/dist/use-render-activity-message-DJ6q1qHV.cjs +114 -0
  14. package/dist/use-render-activity-message-DJ6q1qHV.cjs.map +1 -0
  15. package/dist/v2/components/A2UIMessageRenderer.d.ts +14 -0
  16. package/dist/v2/components/A2UIMessageRenderer.d.ts.map +1 -1
  17. package/dist/v2/components/A2UISurfaceActivityRenderer.vue.d.ts +10 -3
  18. package/dist/v2/components/A2UISurfaceActivityRenderer.vue.d.ts.map +1 -1
  19. package/dist/v2/components/CopilotKitInspector.vue.d.ts +5 -1
  20. package/dist/v2/components/CopilotKitInspector.vue.d.ts.map +1 -1
  21. package/dist/v2/components/InlineFeatureWarning.vue.d.ts.map +1 -1
  22. package/dist/v2/components/LicenseWarningBanner.vue.d.ts +2 -2
  23. package/dist/v2/components/LicenseWarningBanner.vue.d.ts.map +1 -1
  24. package/dist/v2/components/MCPAppsActivityRenderer.d.ts.map +1 -1
  25. package/dist/v2/components/OpenGenerativeUIRenderer.d.ts +13 -59
  26. package/dist/v2/components/OpenGenerativeUIRenderer.d.ts.map +1 -1
  27. package/dist/v2/components/a2ui/A2UIBuiltInToolCallRenderer.d.ts +0 -5
  28. package/dist/v2/components/a2ui/A2UIBuiltInToolCallRenderer.d.ts.map +1 -1
  29. package/dist/v2/components/a2ui/A2UICatalogContext.d.ts +10 -15
  30. package/dist/v2/components/a2ui/A2UICatalogContext.d.ts.map +1 -1
  31. package/dist/v2/components/a2ui/A2UIRecoveryStates.d.ts +14 -130
  32. package/dist/v2/components/a2ui/A2UIRecoveryStates.d.ts.map +1 -1
  33. package/dist/v2/components/a2ui/catalog.d.ts.map +1 -1
  34. package/dist/v2/components/a2ui/utils.d.ts +3 -15
  35. package/dist/v2/components/a2ui/utils.d.ts.map +1 -1
  36. package/dist/v2/components/a2ui.d.ts +9 -8
  37. package/dist/v2/components/a2ui.d.ts.map +1 -1
  38. package/dist/v2/components/chat/CopilotChat.vue.d.ts +2 -2
  39. package/dist/v2/components/chat/CopilotChat.vue.d.ts.map +1 -1
  40. package/dist/v2/components/chat/CopilotChatAssistantMessage.vue.d.ts.map +1 -1
  41. package/dist/v2/components/chat/CopilotChatAttachmentQueue.vue.d.ts.map +1 -1
  42. package/dist/v2/components/chat/CopilotChatAttachmentRenderer.vue.d.ts.map +1 -1
  43. package/dist/v2/components/chat/CopilotChatAudioRecorder.vue.d.ts +4 -8
  44. package/dist/v2/components/chat/CopilotChatAudioRecorder.vue.d.ts.map +1 -1
  45. package/dist/v2/components/chat/CopilotChatFeedbackCommentPopover.vue.d.ts +1 -1
  46. package/dist/v2/components/chat/CopilotChatFeedbackCommentPopover.vue.d.ts.map +1 -1
  47. package/dist/v2/components/chat/CopilotChatInput.vue.d.ts +6 -270
  48. package/dist/v2/components/chat/CopilotChatInput.vue.d.ts.map +1 -1
  49. package/dist/v2/components/chat/CopilotChatInspectorButton.vue.d.ts.map +1 -1
  50. package/dist/v2/components/chat/CopilotChatLightbox.vue.d.ts.map +1 -1
  51. package/dist/v2/components/chat/CopilotChatMessageView.vue.d.ts +1 -1
  52. package/dist/v2/components/chat/CopilotChatMessageView.vue.d.ts.map +1 -1
  53. package/dist/v2/components/chat/CopilotChatReasoningMessage.vue.d.ts.map +1 -1
  54. package/dist/v2/components/chat/CopilotChatToolCallGroup.vue.d.ts +1 -1
  55. package/dist/v2/components/chat/CopilotChatToolCallGroup.vue.d.ts.map +1 -1
  56. package/dist/v2/components/chat/CopilotChatToolCallItem.vue.d.ts.map +1 -1
  57. package/dist/v2/components/chat/CopilotChatToolCallsView.vue.d.ts +1 -1
  58. package/dist/v2/components/chat/CopilotChatToolCallsView.vue.d.ts.map +1 -1
  59. package/dist/v2/components/chat/CopilotChatUserMessage.vue.d.ts.map +1 -1
  60. package/dist/v2/components/chat/CopilotChatView.vue.d.ts +3 -3
  61. package/dist/v2/components/chat/CopilotChatView.vue.d.ts.map +1 -1
  62. package/dist/v2/components/chat/CopilotChatWorkSummary.vue.d.ts.map +1 -1
  63. package/dist/v2/components/chat/CopilotModalHeader.vue.d.ts.map +1 -1
  64. package/dist/v2/components/chat/CopilotPopup.vue.d.ts +8 -3
  65. package/dist/v2/components/chat/CopilotPopup.vue.d.ts.map +1 -1
  66. package/dist/v2/components/chat/CopilotPopupView.vue.d.ts +5 -3
  67. package/dist/v2/components/chat/CopilotPopupView.vue.d.ts.map +1 -1
  68. package/dist/v2/components/chat/CopilotPopupViewInternal.vue.d.ts +5 -3
  69. package/dist/v2/components/chat/CopilotPopupViewInternal.vue.d.ts.map +1 -1
  70. package/dist/v2/components/chat/CopilotSidebar.vue.d.ts +8 -3
  71. package/dist/v2/components/chat/CopilotSidebar.vue.d.ts.map +1 -1
  72. package/dist/v2/components/chat/CopilotSidebarView.vue.d.ts +6 -4
  73. package/dist/v2/components/chat/CopilotSidebarView.vue.d.ts.map +1 -1
  74. package/dist/v2/components/chat/CopilotSidebarViewInternal.vue.d.ts +6 -4
  75. package/dist/v2/components/chat/CopilotSidebarViewInternal.vue.d.ts.map +1 -1
  76. package/dist/v2/components/chat/CopilotThreadsDrawer.vue.d.ts.map +1 -1
  77. package/dist/v2/components/chat/StreamingMarkdownDefault.vue.d.ts +1 -0
  78. package/dist/v2/components/chat/StreamingMarkdownDefault.vue.d.ts.map +1 -1
  79. package/dist/v2/components/chat/audioRecorder.d.ts +3 -4
  80. package/dist/v2/components/chat/audioRecorder.d.ts.map +1 -1
  81. package/dist/v2/components/chat/copilotChatToolCallItemRender.d.ts +3 -3
  82. package/dist/v2/components/chat/copilotChatToolCallItemRender.d.ts.map +1 -1
  83. package/dist/v2/components/chat/forwarded-slots.d.ts +12 -0
  84. package/dist/v2/components/chat/forwarded-slots.d.ts.map +1 -0
  85. package/dist/v2/components/chat/index.d.ts +34 -31
  86. package/dist/v2/components/chat/index.d.ts.map +1 -1
  87. package/dist/v2/components/chat/inspector-shortcuts.d.ts +2 -1
  88. package/dist/v2/components/chat/inspector-shortcuts.d.ts.map +1 -1
  89. package/dist/v2/components/chat/message-feedback.d.ts +18 -49
  90. package/dist/v2/components/chat/message-feedback.d.ts.map +1 -1
  91. package/dist/v2/components/chat/tool-call-display-context.d.ts +4 -19
  92. package/dist/v2/components/chat/tool-call-display-context.d.ts.map +1 -1
  93. package/dist/v2/components/chat/tool-call-group-parts.d.ts +7 -20
  94. package/dist/v2/components/chat/tool-call-group-parts.d.ts.map +1 -1
  95. package/dist/v2/components/chat/turn-work.d.ts +0 -2
  96. package/dist/v2/components/chat/turn-work.d.ts.map +1 -1
  97. package/dist/v2/components/chat/types.d.ts +9 -4
  98. package/dist/v2/components/chat/types.d.ts.map +1 -1
  99. package/dist/v2/components/chat/use-chat-labels.d.ts +8 -0
  100. package/dist/v2/components/chat/use-chat-labels.d.ts.map +1 -0
  101. package/dist/v2/components/chat/use-copy-feedback.d.ts +11 -0
  102. package/dist/v2/components/chat/use-copy-feedback.d.ts.map +1 -0
  103. package/dist/v2/components/chat/use-lightbox.d.ts.map +1 -1
  104. package/dist/v2/components/icons/index.d.ts +968 -1
  105. package/dist/v2/components/icons/index.d.ts.map +1 -1
  106. package/dist/v2/components/ui/CopilotDropdownMenuContent.vue.d.ts +1 -1
  107. package/dist/v2/components/ui/CopilotDropdownMenuContent.vue.d.ts.map +1 -1
  108. package/dist/v2/hooks/use-agent-context.d.ts +2 -3
  109. package/dist/v2/hooks/use-agent-context.d.ts.map +1 -1
  110. package/dist/v2/hooks/use-agent.d.ts +4 -1
  111. package/dist/v2/hooks/use-agent.d.ts.map +1 -1
  112. package/dist/v2/hooks/use-attachments.d.ts +7 -0
  113. package/dist/v2/hooks/use-attachments.d.ts.map +1 -1
  114. package/dist/v2/hooks/use-capabilities.d.ts.map +1 -1
  115. package/dist/v2/hooks/use-component.d.ts +1 -0
  116. package/dist/v2/hooks/use-component.d.ts.map +1 -1
  117. package/dist/v2/hooks/use-configure-suggestions.d.ts +4 -9
  118. package/dist/v2/hooks/use-configure-suggestions.d.ts.map +1 -1
  119. package/dist/v2/hooks/use-default-render-tool.d.ts.map +1 -1
  120. package/dist/v2/hooks/use-frontend-tool.d.ts +5 -0
  121. package/dist/v2/hooks/use-frontend-tool.d.ts.map +1 -1
  122. package/dist/v2/hooks/use-human-in-the-loop.d.ts +2 -1
  123. package/dist/v2/hooks/use-human-in-the-loop.d.ts.map +1 -1
  124. package/dist/v2/hooks/use-interrupt.d.ts +0 -1
  125. package/dist/v2/hooks/use-interrupt.d.ts.map +1 -1
  126. package/dist/v2/hooks/use-keyboard-height.d.ts +1 -1
  127. package/dist/v2/hooks/use-keyboard-height.d.ts.map +1 -1
  128. package/dist/v2/hooks/use-pin-to-send.d.ts +4 -12
  129. package/dist/v2/hooks/use-pin-to-send.d.ts.map +1 -1
  130. package/dist/v2/hooks/use-render-activity-message.d.ts +13 -9
  131. package/dist/v2/hooks/use-render-activity-message.d.ts.map +1 -1
  132. package/dist/v2/hooks/use-render-custom-messages.d.ts +5 -7
  133. package/dist/v2/hooks/use-render-custom-messages.d.ts.map +1 -1
  134. package/dist/v2/hooks/use-suggestions.d.ts.map +1 -1
  135. package/dist/v2/hooks/use-threads.d.ts +0 -8
  136. package/dist/v2/hooks/use-threads.d.ts.map +1 -1
  137. package/dist/v2/index.cjs +1 -1
  138. package/dist/v2/index.mjs +197 -200
  139. package/dist/v2/index.mjs.map +1 -1
  140. package/dist/v2/lib/processPartialHtml.d.ts +1 -2
  141. package/dist/v2/lib/processPartialHtml.d.ts.map +1 -1
  142. package/dist/v2/lib/shallow-stable.d.ts.map +1 -1
  143. package/dist/v2/lib/vue-core.d.ts +12 -12
  144. package/dist/v2/lib/vue-core.d.ts.map +1 -1
  145. package/dist/v2/providers/CopilotChatConfigurationProvider.vue.d.ts.map +1 -1
  146. package/dist/v2/providers/CopilotKitProvider.types.d.ts +9 -129
  147. package/dist/v2/providers/CopilotKitProvider.types.d.ts.map +1 -1
  148. package/dist/v2/providers/CopilotKitProvider.vue.d.ts +9 -10
  149. package/dist/v2/providers/CopilotKitProvider.vue.d.ts.map +1 -1
  150. package/dist/v2/providers/chat-configuration-store-key.d.ts +8 -0
  151. package/dist/v2/providers/chat-configuration-store-key.d.ts.map +1 -0
  152. package/dist/v2/providers/markdown-renderer.d.ts +4 -2
  153. package/dist/v2/providers/markdown-renderer.d.ts.map +1 -1
  154. package/dist/v2/providers/types.d.ts +3 -46
  155. package/dist/v2/providers/types.d.ts.map +1 -1
  156. package/dist/v2/providers/use-inspector-thread-override.d.ts +5 -0
  157. package/dist/v2/providers/use-inspector-thread-override.d.ts.map +1 -1
  158. package/dist/v2/types/human-in-the-loop.d.ts +8 -29
  159. package/dist/v2/types/human-in-the-loop.d.ts.map +1 -1
  160. package/dist/v2/types/interrupt.d.ts +1 -22
  161. package/dist/v2/types/interrupt.d.ts.map +1 -1
  162. package/dist/v2/types/vue-activity-message-renderer.d.ts +16 -15
  163. package/dist/v2/types/vue-activity-message-renderer.d.ts.map +1 -1
  164. package/dist/v2/types/vue-custom-message-renderer.d.ts +7 -16
  165. package/dist/v2/types/vue-custom-message-renderer.d.ts.map +1 -1
  166. package/dist/v2/types/vue-tool-call-renderer.d.ts +16 -35
  167. package/dist/v2/types/vue-tool-call-renderer.d.ts.map +1 -1
  168. package/package.json +10 -11
  169. package/src/__tests__/build-entries.test.ts +27 -0
  170. package/src/hooks/__tests__/zod-parameters.test.ts +520 -0
  171. package/src/hooks/use-copilot-action.ts +2 -1
  172. package/src/hooks/use-frontend-tool.ts +3 -6
  173. package/src/hooks/zod-parameters.ts +162 -0
  174. package/src/v2/__tests__/exports.test.ts +10 -0
  175. package/src/v2/__tests__/mocks/web-inspector.ts +6 -0
  176. package/src/v2/__tests__/utils/test-helpers.ts +34 -4
  177. package/src/v2/components/A2UIMessageRenderer.ts +98 -68
  178. package/src/v2/components/A2UISurfaceActivityRenderer.vue +68 -103
  179. package/src/v2/components/CopilotKitInspector.vue +104 -51
  180. package/src/v2/components/InlineFeatureWarning.vue +20 -21
  181. package/src/v2/components/LicenseWarningBanner.vue +27 -135
  182. package/src/v2/components/MCPAppsActivityRenderer.ts +75 -201
  183. package/src/v2/components/OpenGenerativeUIRenderer.ts +122 -446
  184. package/src/v2/components/__tests__/A2UIMessageRenderer.test.ts +171 -8
  185. package/src/v2/components/__tests__/CopilotKitInspector.test.ts +42 -0
  186. package/src/v2/components/__tests__/LicenseWarningBanner.test.ts +60 -0
  187. package/src/v2/components/__tests__/OpenGenerativeUIRenderer.test.ts +64 -8
  188. package/src/v2/components/__tests__/OpenGenerativeUIToolRenderer.test.ts +38 -0
  189. package/src/v2/components/a2ui/A2UIBuiltInToolCallRenderer.ts +2 -7
  190. package/src/v2/components/a2ui/A2UICatalogContext.ts +27 -185
  191. package/src/v2/components/a2ui/A2UIRecoveryStates.ts +127 -327
  192. package/src/v2/components/a2ui/catalog.ts +3 -3
  193. package/src/v2/components/a2ui/utils.ts +13 -65
  194. package/src/v2/components/a2ui.ts +15 -22
  195. package/src/v2/components/chat/CopilotChat.vue +147 -356
  196. package/src/v2/components/chat/CopilotChatAssistantMessage.vue +19 -43
  197. package/src/v2/components/chat/CopilotChatAttachmentQueue.vue +36 -55
  198. package/src/v2/components/chat/CopilotChatAttachmentRenderer.vue +14 -6
  199. package/src/v2/components/chat/CopilotChatAudioRecorder.vue +19 -246
  200. package/src/v2/components/chat/CopilotChatFeedbackCommentPopover.vue +2 -2
  201. package/src/v2/components/chat/CopilotChatInput.vue +108 -436
  202. package/src/v2/components/chat/CopilotChatInspectorButton.vue +45 -108
  203. package/src/v2/components/chat/CopilotChatLightbox.vue +10 -31
  204. package/src/v2/components/chat/CopilotChatMessageView.vue +82 -210
  205. package/src/v2/components/chat/CopilotChatReasoningMessage.vue +7 -15
  206. package/src/v2/components/chat/CopilotChatToolCallGroup.vue +63 -71
  207. package/src/v2/components/chat/CopilotChatToolCallItem.vue +8 -6
  208. package/src/v2/components/chat/CopilotChatToolCallsView.vue +31 -32
  209. package/src/v2/components/chat/CopilotChatUserMessage.vue +24 -112
  210. package/src/v2/components/chat/CopilotChatView.vue +33 -28
  211. package/src/v2/components/chat/CopilotChatWorkSummary.vue +26 -36
  212. package/src/v2/components/chat/CopilotModalHeader.vue +11 -23
  213. package/src/v2/components/chat/CopilotPopup.vue +23 -25
  214. package/src/v2/components/chat/CopilotPopupView.vue +10 -39
  215. package/src/v2/components/chat/CopilotPopupViewInternal.vue +35 -131
  216. package/src/v2/components/chat/CopilotSidebar.vue +23 -25
  217. package/src/v2/components/chat/CopilotSidebarView.vue +10 -39
  218. package/src/v2/components/chat/CopilotSidebarViewInternal.vue +38 -59
  219. package/src/v2/components/chat/CopilotThreadsDrawer.vue +37 -102
  220. package/src/v2/components/chat/StreamingMarkdownDefault.vue +15 -28
  221. package/src/v2/components/chat/__tests__/CopilotChat.labels.test.ts +19 -4
  222. package/src/v2/components/chat/__tests__/CopilotChat.test.ts +12 -10
  223. package/src/v2/components/chat/__tests__/CopilotChatActivityRendering.e2e.test.ts +26 -9
  224. package/src/v2/components/chat/__tests__/CopilotChatAssistantMessage.learningFeedback.test.ts +5 -5
  225. package/src/v2/components/chat/__tests__/CopilotChatAttachmentQueue.test.ts +28 -0
  226. package/src/v2/components/chat/__tests__/CopilotChatInput.test.ts +89 -1
  227. package/src/v2/components/chat/__tests__/CopilotChatMessageView.test.ts +247 -403
  228. package/src/v2/components/chat/__tests__/CopilotChatMessageView.toolCallDisplay.test.ts +1 -99
  229. package/src/v2/components/chat/__tests__/CopilotPopup.test.ts +90 -1
  230. package/src/v2/components/chat/__tests__/CopilotPopupView.test.ts +19 -0
  231. package/src/v2/components/chat/__tests__/CopilotSidebar.test.ts +90 -1
  232. package/src/v2/components/chat/__tests__/CopilotSidebarView.position.test.ts +32 -8
  233. package/src/v2/components/chat/__tests__/CopilotSidebarView.test.ts +2 -1
  234. package/src/v2/components/chat/__tests__/StreamingMarkdownDefault.test.ts +54 -0
  235. package/src/v2/components/chat/audioRecorder.ts +4 -7
  236. package/src/v2/components/chat/copilotChatToolCallItemRender.ts +24 -89
  237. package/src/v2/components/chat/forwarded-slots.ts +17 -0
  238. package/src/v2/components/chat/index.ts +0 -1
  239. package/src/v2/components/chat/inspector-shortcuts.ts +10 -16
  240. package/src/v2/components/chat/message-feedback.ts +62 -197
  241. package/src/v2/components/chat/tool-call-display-context.ts +6 -22
  242. package/src/v2/components/chat/tool-call-group-parts.ts +47 -108
  243. package/src/v2/components/chat/turn-work.ts +0 -9
  244. package/src/v2/components/chat/types.ts +12 -4
  245. package/src/v2/components/chat/use-chat-labels.ts +16 -0
  246. package/src/v2/components/chat/use-copy-feedback.ts +21 -0
  247. package/src/v2/components/chat/use-lightbox.ts +15 -33
  248. package/src/v2/components/icons/__tests__/icons.test.ts +72 -68
  249. package/src/v2/components/icons/index.ts +109 -27
  250. package/src/v2/hooks/__tests__/use-agent-error-state.test.ts +5 -3
  251. package/src/v2/hooks/__tests__/use-agent-stability.test.ts +25 -4
  252. package/src/v2/hooks/__tests__/use-agent-throttle.test.ts +5 -1
  253. package/src/v2/hooks/__tests__/use-agent.test.ts +6 -3
  254. package/src/v2/hooks/__tests__/use-component.test.ts +21 -0
  255. package/src/v2/hooks/__tests__/use-configure-suggestions.test.ts +30 -1
  256. package/src/v2/hooks/__tests__/use-default-render-tool.test.ts +10 -10
  257. package/src/v2/hooks/__tests__/use-frontend-tool.e2e.test.ts +66 -1
  258. package/src/v2/hooks/__tests__/use-human-in-the-loop.e2e.test.ts +6 -1
  259. package/src/v2/hooks/__tests__/use-human-in-the-loop.test.ts +187 -12
  260. package/src/v2/hooks/__tests__/use-interrupt.test.ts +97 -0
  261. package/src/v2/hooks/__tests__/use-render-activity-message.test.ts +106 -0
  262. package/src/v2/hooks/__tests__/use-render-tool.test.ts +3 -6
  263. package/src/v2/hooks/__tests__/use-threads.test.ts +48 -6
  264. package/src/v2/hooks/__tests__/zod-regression.test.ts +5 -4
  265. package/src/v2/hooks/use-agent-context.ts +4 -10
  266. package/src/v2/hooks/use-agent.ts +86 -290
  267. package/src/v2/hooks/use-attachments.ts +48 -168
  268. package/src/v2/hooks/use-capabilities.ts +2 -7
  269. package/src/v2/hooks/use-component.ts +7 -4
  270. package/src/v2/hooks/use-configure-suggestions.ts +28 -218
  271. package/src/v2/hooks/use-default-render-tool.ts +34 -94
  272. package/src/v2/hooks/use-frontend-tool.ts +10 -10
  273. package/src/v2/hooks/use-human-in-the-loop.ts +11 -80
  274. package/src/v2/hooks/use-interrupt.ts +29 -308
  275. package/src/v2/hooks/use-keyboard-height.ts +17 -40
  276. package/src/v2/hooks/use-pin-to-send.ts +15 -99
  277. package/src/v2/hooks/use-render-activity-message.ts +31 -55
  278. package/src/v2/hooks/use-render-custom-messages.ts +24 -88
  279. package/src/v2/hooks/use-suggestions.ts +9 -33
  280. package/src/v2/hooks/use-threads.ts +43 -273
  281. package/src/v2/lib/__tests__/shallow-stable.test.ts +54 -0
  282. package/src/v2/lib/__tests__/vue-core-renderers.test.ts +42 -0
  283. package/src/v2/lib/processPartialHtml.ts +6 -21
  284. package/src/v2/lib/shallow-stable.ts +2 -16
  285. package/src/v2/lib/vue-core.ts +69 -78
  286. package/src/v2/providers/CopilotChatConfigurationProvider.vue +48 -186
  287. package/src/v2/providers/CopilotKitProvider.types.ts +12 -132
  288. package/src/v2/providers/CopilotKitProvider.vue +237 -510
  289. package/src/v2/providers/__tests__/CopilotChatConfigurationProvider.test.ts +22 -2
  290. package/src/v2/providers/__tests__/CopilotKitProvider.a2ui.test.ts +20 -2
  291. package/src/v2/providers/__tests__/CopilotKitProvider.config.test.ts +124 -0
  292. package/src/v2/providers/__tests__/CopilotKitProvider.headersAtSendTime.test.ts +3 -3
  293. package/src/v2/providers/__tests__/CopilotKitProvider.learning.test.ts +3 -1
  294. package/src/v2/providers/__tests__/CopilotKitProvider.sandboxFunctions.test.ts +4 -1
  295. package/src/v2/providers/__tests__/CopilotKitProvider.test.ts +53 -26
  296. package/src/v2/providers/chat-configuration-store-key.ts +9 -0
  297. package/src/v2/providers/markdown-renderer.ts +8 -2
  298. package/src/v2/providers/types.ts +3 -49
  299. package/src/v2/providers/use-inspector-thread-override.ts +22 -80
  300. package/src/v2/types/__tests__/defineToolCallRenderer.test.ts +28 -33
  301. package/src/v2/types/defineToolCallRenderer.ts +5 -4
  302. package/src/v2/types/human-in-the-loop.ts +8 -32
  303. package/src/v2/types/interrupt.ts +7 -31
  304. package/src/v2/types/vue-activity-message-renderer.ts +24 -15
  305. package/src/v2/types/vue-custom-message-renderer.ts +12 -16
  306. package/src/v2/types/vue-tool-call-renderer.ts +23 -38
  307. package/tsconfig.json +0 -1
  308. package/vite.config.ts +8 -5
  309. package/vitest.config.ts +12 -7
  310. package/dist/v2/components/chat/BasicMarkdown.vue.d.ts +0 -9
  311. package/dist/v2/components/chat/BasicMarkdown.vue.d.ts.map +0 -1
  312. package/dist/v2/components/chat/normalize-auto-scroll.d.ts +0 -3
  313. package/dist/v2/components/chat/normalize-auto-scroll.d.ts.map +0 -1
  314. package/dist/v2/components/chat/tool-call-layout.d.ts +0 -115
  315. package/dist/v2/components/chat/tool-call-layout.d.ts.map +0 -1
  316. package/dist/v2/lib/is-mobile-viewport.d.ts +0 -15
  317. package/dist/v2/lib/is-mobile-viewport.d.ts.map +0 -1
  318. package/dist/v2/lib/message-feedback.d.ts +0 -33
  319. package/dist/v2/lib/message-feedback.d.ts.map +0 -1
  320. package/dist/v2/lib/transcription-client.d.ts +0 -19
  321. package/dist/v2/lib/transcription-client.d.ts.map +0 -1
  322. package/src/v2/components/__tests__/A2UICatalogContext.test.ts +0 -63
  323. package/src/v2/components/a2ui/__tests__/A2UIRecoveryStates.test.ts +0 -175
  324. package/src/v2/components/chat/BasicMarkdown.vue +0 -160
  325. package/src/v2/components/chat/__tests__/BasicMarkdown.test.ts +0 -69
  326. package/src/v2/components/chat/__tests__/normalize-auto-scroll.test.ts +0 -39
  327. package/src/v2/components/chat/normalize-auto-scroll.ts +0 -17
  328. package/src/v2/components/chat/tool-call-layout.ts +0 -304
  329. package/src/v2/lib/__tests__/is-mobile-viewport.test.ts +0 -48
  330. package/src/v2/lib/__tests__/message-feedback.test.ts +0 -152
  331. package/src/v2/lib/__tests__/processPartialHtml.test.ts +0 -84
  332. package/src/v2/lib/__tests__/transcription-client.test.ts +0 -67
  333. package/src/v2/lib/is-mobile-viewport.ts +0 -23
  334. package/src/v2/lib/message-feedback.ts +0 -120
  335. package/src/v2/lib/transcription-client.ts +0 -151
@@ -1,17 +1,25 @@
1
- import { describe, expect, it } from "vitest";
1
+ import { afterEach, describe, expect, it, vi } from "vitest";
2
2
  import { defineComponent, h, ref } from "vue";
3
- import { render, waitFor } from "@testing-library/vue";
3
+ import { fireEvent, render, waitFor } from "@testing-library/vue";
4
+ import type { ɵA2UIActionInterceptor } from "@copilotkit/core";
4
5
  import { createA2UIMessageRenderer } from "../A2UIMessageRenderer";
5
6
  import { CopilotKitKey } from "../../providers/keys";
6
7
 
7
- function copilotKitProvide() {
8
+ function copilotKitProvide(
9
+ onRunAgent: (properties: Record<string, unknown>) => void = () => undefined,
10
+ ) {
11
+ const copilotkit = {
12
+ properties: {} as Record<string, unknown>,
13
+ setProperties(properties: Record<string, unknown>) {
14
+ copilotkit.properties = properties;
15
+ },
16
+ runAgent: async () => {
17
+ onRunAgent(copilotkit.properties);
18
+ },
19
+ };
8
20
  return {
9
21
  [CopilotKitKey as symbol]: {
10
- copilotkit: ref({
11
- properties: {},
12
- setProperties: () => undefined,
13
- runAgent: async () => undefined,
14
- }),
22
+ copilotkit: ref(copilotkit),
15
23
  executingToolCallIds: ref(new Set()),
16
24
  a2uiTheme: ref({}),
17
25
  a2uiCatalog: ref(undefined),
@@ -22,6 +30,10 @@ function copilotKitProvide() {
22
30
  }
23
31
 
24
32
  describe("createA2UIMessageRenderer", () => {
33
+ afterEach(() => {
34
+ vi.useRealTimers();
35
+ });
36
+
25
37
  const renderLifecycle = (
26
38
  content: Record<string, unknown>,
27
39
  options: Partial<Parameters<typeof createA2UIMessageRenderer>[0]> = {},
@@ -46,6 +58,43 @@ describe("createA2UIMessageRenderer", () => {
46
58
  expect(container.textContent).toContain("~97 tokens");
47
59
  });
48
60
 
61
+ it("keeps an early retry looking like building until showAfterMs passes", async () => {
62
+ vi.useFakeTimers();
63
+ const { container } = renderLifecycle(
64
+ { status: "retrying", attempt: 1, maxAttempts: 3 },
65
+ { recovery: { showAfterMs: 2000 } },
66
+ );
67
+ expect(container.textContent).toContain("Building interface");
68
+ await vi.advanceTimersByTimeAsync(2000);
69
+ expect(container.textContent).toContain(
70
+ "Retrying generation… (1/3 attempts)",
71
+ );
72
+ });
73
+
74
+ it("shows retry validation issues unless debugExposure is hidden", () => {
75
+ const retry = {
76
+ status: "retrying",
77
+ attempt: 2,
78
+ errors: [{ code: "missing_required_prop" }],
79
+ };
80
+ const shown = renderLifecycle(retry);
81
+ expect(shown.container.querySelector("details summary")?.textContent).toBe(
82
+ "validation issues",
83
+ );
84
+ expect(shown.container.textContent).toContain("missing_required_prop");
85
+ const hidden = renderLifecycle(retry, {
86
+ recovery: { debugExposure: "hidden" },
87
+ });
88
+ expect(hidden.container.querySelector("details")).toBeNull();
89
+ });
90
+
91
+ it("shows collapsed developer details on failure by default", () => {
92
+ const { container } = renderLifecycle({ status: "failed", error: "boom" });
93
+ const details = container.querySelector("details");
94
+ expect(details?.hasAttribute("open")).toBe(false);
95
+ expect(details?.textContent).toContain("boom");
96
+ });
97
+
49
98
  it("shows the retry state for status 'retrying'", () => {
50
99
  const { container } = renderLifecycle({
51
100
  status: "retrying",
@@ -295,4 +344,118 @@ describe("createA2UIMessageRenderer", () => {
295
344
  expect(container.querySelector("[data-surface-id='s2']")).not.toBeNull();
296
345
  });
297
346
  });
347
+
348
+ const buttonContent = {
349
+ a2ui_operations: [
350
+ {
351
+ version: "v0.9",
352
+ createSurface: {
353
+ surfaceId: "form",
354
+ catalogId: "https://a2ui.org/specification/v0_9/basic_catalog.json",
355
+ },
356
+ },
357
+ {
358
+ version: "v0.9",
359
+ updateComponents: {
360
+ surfaceId: "form",
361
+ components: [
362
+ {
363
+ id: "root",
364
+ component: "Button",
365
+ child: "label",
366
+ action: { event: { name: "confirm", context: { n: 1 } } },
367
+ },
368
+ { id: "label", component: "Text", text: "Confirm" },
369
+ ],
370
+ },
371
+ },
372
+ ],
373
+ };
374
+
375
+ /** Renders the button surface, clicks it, and returns what reached the agent. */
376
+ async function clickButton(onAction?: ɵA2UIActionInterceptor) {
377
+ const forwarded: Record<string, unknown>[] = [];
378
+ const renderer = createA2UIMessageRenderer({ theme: {}, onAction });
379
+ const { findByRole } = render(renderer.render, {
380
+ props: {
381
+ activityType: "a2ui-surface",
382
+ content: buttonContent,
383
+ message: {},
384
+ agent: { agentId: "a" },
385
+ },
386
+ global: {
387
+ provide: copilotKitProvide((properties) =>
388
+ forwarded.push({ ...properties }),
389
+ ),
390
+ },
391
+ });
392
+ await fireEvent.click(await findByRole("button", { hidden: true }));
393
+ return forwarded;
394
+ }
395
+
396
+ it("forwards a button click to the agent wrapped as an A2UI userAction envelope", async () => {
397
+ const forwarded = await clickButton();
398
+ await waitFor(() => expect(forwarded).toHaveLength(1));
399
+ expect(forwarded[0]).toEqual({
400
+ a2uiAction: {
401
+ userAction: {
402
+ name: "confirm",
403
+ surfaceId: "form",
404
+ sourceComponentId: "root",
405
+ context: { n: 1 },
406
+ timestamp: expect.any(String),
407
+ },
408
+ },
409
+ });
410
+ });
411
+
412
+ it("does not run the agent when onAction handles the action", async () => {
413
+ const onAction = vi.fn<ɵA2UIActionInterceptor>(() => null);
414
+ const forwarded = await clickButton(onAction);
415
+ await waitFor(() => expect(onAction).toHaveBeenCalledOnce());
416
+ expect(forwarded).toEqual([]);
417
+ });
418
+
419
+ it("keeps the loader over the hidden surface until the surface can paint", async () => {
420
+ const renderer = createA2UIMessageRenderer({ theme: {} });
421
+ const createOnly = {
422
+ a2ui_operations: [buttonContent.a2ui_operations[0]],
423
+ };
424
+ const mounted = render(renderer.render, {
425
+ props: {
426
+ activityType: "a2ui-surface",
427
+ content: { status: "building", progressTokens: 120 },
428
+ message: {},
429
+ agent: {},
430
+ },
431
+ global: { provide: copilotKitProvide() },
432
+ });
433
+
434
+ await mounted.rerender({
435
+ activityType: "a2ui-surface",
436
+ content: createOnly,
437
+ message: {},
438
+ agent: {},
439
+ });
440
+ // A surface without components cannot paint: the loader stays on top.
441
+ expect(mounted.container.textContent).toContain("~120 tokens");
442
+ expect(
443
+ mounted.container.querySelector(
444
+ "[aria-hidden='true'] [data-testid='a2ui-activity-renderer']",
445
+ ),
446
+ ).not.toBeNull();
447
+
448
+ await mounted.rerender({
449
+ activityType: "a2ui-surface",
450
+ content: buttonContent,
451
+ message: {},
452
+ agent: {},
453
+ });
454
+ await waitFor(() => {
455
+ expect(mounted.container.textContent).not.toContain("Building interface");
456
+ expect(
457
+ mounted.container.querySelector("[aria-hidden='true']"),
458
+ ).toBeNull();
459
+ });
460
+ });
298
461
  });
@@ -62,6 +62,48 @@ describe("CopilotKitInspector", () => {
62
62
  );
63
63
  });
64
64
 
65
+ it("forwards event listeners to the web inspector element", async () => {
66
+ const onVisibility = vi.fn();
67
+ const wrapper = mount(CopilotKitInspector, {
68
+ attrs: { onCpkInspectorVisibilityChange: onVisibility },
69
+ });
70
+ await settleInspectorLoad();
71
+
72
+ const event = new CustomEvent("cpk-inspector-visibility-change", {
73
+ detail: { visible: false },
74
+ });
75
+ wrapper.get("cpk-web-inspector").element.dispatchEvent(event);
76
+
77
+ expect(onVisibility).toHaveBeenCalledWith(event);
78
+ });
79
+
80
+ it("opens a request made before the web inspector module resolves", async () => {
81
+ const wrapper = mount(CopilotKitInspector);
82
+ const openRequest = { messageId: "message-early" };
83
+ await wrapper.setProps({ openRequest });
84
+
85
+ await settleInspectorLoad();
86
+
87
+ const inspector = wrapper.get("cpk-web-inspector")
88
+ .element as HTMLElement & {
89
+ openInspector: ReturnType<typeof vi.fn>;
90
+ };
91
+ expect(inspector.openInspector).toHaveBeenCalledExactlyOnceWith(
92
+ "message_toolbar",
93
+ openRequest,
94
+ );
95
+ });
96
+
97
+ it("emits Inspector visibility and removes the element on unmount", async () => {
98
+ const wrapper = mount(CopilotKitInspector, { attachTo: document.body });
99
+ await settleInspectorLoad();
100
+ expect(wrapper.emitted("visibility-change")).toEqual([[true]]);
101
+
102
+ wrapper.unmount();
103
+
104
+ expect(document.querySelector("cpk-web-inspector")).toBeNull();
105
+ });
106
+
65
107
  it("forwards Inspector open requests to the mounted element", async () => {
66
108
  const openRequest = { messageId: "message-1" };
67
109
  const wrapper = mount(CopilotKitInspector, {
@@ -1,7 +1,24 @@
1
1
  import { mount } from "@vue/test-utils";
2
2
  import { describe, expect, it, vi } from "vitest";
3
+ import { defineComponent, h } from "vue";
4
+ import type { CopilotChatLabels } from "@copilotkit/core";
5
+ import CopilotChatConfigurationProvider from "../../providers/CopilotChatConfigurationProvider.vue";
6
+ import InlineFeatureWarning from "../InlineFeatureWarning.vue";
3
7
  import LicenseWarningBanner from "../LicenseWarningBanner.vue";
4
8
 
9
+ /** Mounts `child` inside a chat configuration with `labels`. */
10
+ function mountWithLabels(
11
+ labels: Partial<CopilotChatLabels>,
12
+ child: () => ReturnType<typeof h>,
13
+ ) {
14
+ const Host = defineComponent({
15
+ setup: () => () =>
16
+ h(CopilotChatConfigurationProvider, { labels }, { default: child }),
17
+ });
18
+ return mount(Host);
19
+ }
20
+
21
+ // The banner text rules are covered next to core's ɵgetLicenseBannerSpec.
5
22
  describe("LicenseWarningBanner", () => {
6
23
  it("reactively renders and invokes the optional dismiss callback", async () => {
7
24
  const onDismiss = vi.fn();
@@ -20,4 +37,47 @@ describe("LicenseWarningBanner", () => {
20
37
 
21
38
  expect(wrapper.find("button").exists()).toBe(false);
22
39
  });
40
+
41
+ it("shows the core spec's text and link", () => {
42
+ const wrapper = mount(LicenseWarningBanner, {
43
+ props: { type: "expiring", graceRemaining: 1 },
44
+ });
45
+
46
+ expect(wrapper.get("span").text()).toBe(
47
+ "Your CopilotKit license expires in 1 day. Please renew.",
48
+ );
49
+ expect(wrapper.get("a").attributes("href")).toBe(
50
+ "https://dashboard.operations.copilotkit.ai",
51
+ );
52
+ });
53
+
54
+ it("uses the configured chat labels", () => {
55
+ const wrapper = mountWithLabels(
56
+ { licenseInvalidText: "Token ungültig" },
57
+ () => h(LicenseWarningBanner, { type: "invalid" }),
58
+ );
59
+
60
+ expect(wrapper.get("span").text()).toBe("Token ungültig");
61
+ });
62
+ });
63
+
64
+ describe("InlineFeatureWarning", () => {
65
+ it("shows the default feature-unlicensed label", () => {
66
+ const wrapper = mount(InlineFeatureWarning, {
67
+ props: { featureName: "Chat" },
68
+ });
69
+
70
+ expect(wrapper.text()).toContain(
71
+ '⚠ The "Chat" feature requires a CopilotKit license.',
72
+ );
73
+ });
74
+
75
+ it("uses the configured feature-unlicensed label", () => {
76
+ const wrapper = mountWithLabels(
77
+ { licenseFeatureUnlicensedText: "{feature} braucht eine Lizenz." },
78
+ () => h(InlineFeatureWarning, { featureName: "Chat" }),
79
+ );
80
+
81
+ expect(wrapper.text()).toContain("Chat braucht eine Lizenz.");
82
+ });
23
83
  });
@@ -1,4 +1,5 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ import type * as CoreModule from "@copilotkit/core";
2
3
  import { render } from "@testing-library/vue";
3
4
  import { ref } from "vue";
4
5
  import type { Ref } from "vue";
@@ -37,12 +38,25 @@ const mockCreate = vi.fn<MockCreateFn>(() => ({
37
38
  destroy: mockDestroy,
38
39
  }));
39
40
 
40
- vi.mock("@jetbrains/websandbox", () => ({
41
- default: {
42
- create: (localApi: Record<string, unknown>, options: SandboxOptions) =>
43
- mockCreate(localApi, options),
44
- },
45
- }));
41
+ // Run the real core controller against a fake websandbox
42
+ vi.mock("@copilotkit/core", async (importOriginal) => {
43
+ const actual = await importOriginal<typeof CoreModule>();
44
+ class TestOpenGenerativeUIController
45
+ extends actual.ɵOpenGenerativeUIController
46
+ {
47
+ constructor() {
48
+ super({
49
+ loadWebsandbox: async () => ({
50
+ create: (localApi, options) => mockCreate(localApi, options),
51
+ }),
52
+ });
53
+ }
54
+ }
55
+ return {
56
+ ...actual,
57
+ ɵOpenGenerativeUIController: TestOpenGenerativeUIController,
58
+ };
59
+ });
46
60
 
47
61
  async function flushImport() {
48
62
  await new Promise((resolve) => setTimeout(resolve, 0));
@@ -86,16 +100,23 @@ describe("OpenGenerativeUIRenderer", () => {
86
100
  vi.restoreAllMocks();
87
101
  });
88
102
 
89
- it("renders placeholder when no html", async () => {
103
+ it("shows the progress overlay with a spinner while generating", async () => {
90
104
  const { getByTestId, queryByTestId } = renderRenderer({
91
105
  initialHeight: 300,
92
106
  });
93
107
  await flushImport();
94
- expect(getByTestId("open-generative-ui-placeholder")).not.toBeNull();
108
+ expect(getByTestId("open-generative-ui-spinner")).not.toBeNull();
95
109
  expect(queryByTestId("open-generative-ui-final-sandbox")).toBeNull();
96
110
  expect(mockCreate).not.toHaveBeenCalled();
97
111
  });
98
112
 
113
+ it("shows no spinner or overlay once generation is done", async () => {
114
+ const { queryByTestId } = renderRenderer({ generating: false });
115
+ await flushImport();
116
+ expect(queryByTestId("open-generative-ui-progress-overlay")).toBeNull();
117
+ expect(queryByTestId("open-generative-ui-spinner")).toBeNull();
118
+ });
119
+
99
120
  it("creates final sandbox when html is complete", async () => {
100
121
  renderRenderer({
101
122
  html: ["<head></head><body><p>Hello</p></body>"],
@@ -178,6 +199,41 @@ describe("OpenGenerativeUIRenderer", () => {
178
199
  expect(options.frameContent).toContain("v2");
179
200
  });
180
201
 
202
+ it("sizes the container to the height the final sandbox reports", async () => {
203
+ const iframe = document.createElement("iframe");
204
+ mockCreate.mockImplementationOnce((_localApi, options) => {
205
+ (options.frameContainer as HTMLElement).appendChild(iframe);
206
+ return {
207
+ iframe,
208
+ promise: Promise.resolve(),
209
+ run: mockRun,
210
+ destroy: mockDestroy,
211
+ };
212
+ });
213
+ const { getByTestId } = renderRenderer({
214
+ initialHeight: 150,
215
+ html: ["<body><p>Chart</p></body>"],
216
+ htmlComplete: true,
217
+ generating: false,
218
+ });
219
+ await flushImport();
220
+ expect(getByTestId("open-generative-ui-renderer").style.height).toBe(
221
+ "150px",
222
+ );
223
+
224
+ window.dispatchEvent(
225
+ new MessageEvent("message", {
226
+ source: iframe.contentWindow,
227
+ data: { type: "__ck_resize", height: 420 },
228
+ }),
229
+ );
230
+ await flushImport();
231
+
232
+ expect(getByTestId("open-generative-ui-renderer").style.height).toBe(
233
+ "420px",
234
+ );
235
+ });
236
+
181
237
  it("destroys sandbox on unmount", async () => {
182
238
  const mounted = renderRenderer({
183
239
  html: ["<head></head><body>bye</body>"],
@@ -0,0 +1,38 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { render } from "@testing-library/vue";
3
+ import { ToolCallStatus } from "@copilotkit/core";
4
+ import { OpenGenerativeUIToolRenderer } from "../OpenGenerativeUIRenderer";
5
+
6
+ function toolProps(messages: string[], status = ToolCallStatus.InProgress) {
7
+ return {
8
+ name: "generateSandboxedUi",
9
+ args: { placeholderMessages: [...messages] },
10
+ status,
11
+ };
12
+ }
13
+
14
+ describe("OpenGenerativeUIToolRenderer", () => {
15
+ beforeEach(() => vi.useFakeTimers());
16
+ afterEach(() => vi.useRealTimers());
17
+
18
+ it("keeps rotating while streamed snapshots repeat the same messages", async () => {
19
+ const view = render(OpenGenerativeUIToolRenderer, {
20
+ props: toolProps(["Sketching", "Styling"]),
21
+ });
22
+ expect(view.container.textContent).toBe("Styling");
23
+
24
+ await vi.advanceTimersByTimeAsync(4000);
25
+ await view.rerender(toolProps(["Sketching", "Styling"]));
26
+ await vi.advanceTimersByTimeAsync(1000);
27
+
28
+ expect(view.container.textContent).toBe("Sketching");
29
+ });
30
+
31
+ it("renders nothing once the tool call is complete", async () => {
32
+ const view = render(OpenGenerativeUIToolRenderer, {
33
+ props: toolProps(["Sketching"]),
34
+ });
35
+ await view.rerender(toolProps(["Sketching"], ToolCallStatus.Complete));
36
+ expect(view.container.textContent).toBe("");
37
+ });
38
+ });
@@ -1,15 +1,10 @@
1
1
  import { watch } from "vue";
2
2
  import type { ShallowRef } from "vue";
3
- import { z } from "zod";
3
+ import * as z from "zod";
4
+ import { ɵRENDER_A2UI_TOOL_NAME as RENDER_A2UI_TOOL_NAME } from "@copilotkit/core";
4
5
  import type { CopilotKitCoreVue } from "../../lib/vue-core";
5
6
  import { defineToolCallRenderer } from "../../types/defineToolCallRenderer";
6
7
 
7
- /**
8
- * Tool name used by the dynamic A2UI generation secondary LLM.
9
- * This renderer is auto-registered when A2UI is enabled.
10
- */
11
- export const RENDER_A2UI_TOOL_NAME = "render_a2ui";
12
-
13
8
  /**
14
9
  * Registers a no-op renderer for the `render_a2ui` tool call so its raw
15
10
  * streamed args are never surfaced in the transcript, as React does.