@copilotkit/vue 2.0.0-rc.3 → 2.0.0-rc.30

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 (343) hide show
  1. package/CONTRIBUTOR_GUIDE.md +1 -1
  2. package/PARITY.md +3 -3
  3. package/dist/hooks/use-copilot-action.d.ts.map +1 -1
  4. package/dist/hooks/use-frontend-tool.d.ts +1 -1
  5. package/dist/hooks/use-frontend-tool.d.ts.map +1 -1
  6. package/dist/hooks/zod-parameters.d.ts +14 -0
  7. package/dist/hooks/zod-parameters.d.ts.map +1 -0
  8. package/dist/index.cjs +1 -73
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.mjs +365 -16920
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/use-render-activity-message-BZJ33B_r.cjs +113 -0
  13. package/dist/use-render-activity-message-BZJ33B_r.cjs.map +1 -0
  14. package/dist/use-render-activity-message-DrR407LQ.js +15901 -0
  15. package/dist/use-render-activity-message-DrR407LQ.js.map +1 -0
  16. package/dist/v2/components/A2UIMessageRenderer.d.ts +14 -0
  17. package/dist/v2/components/A2UIMessageRenderer.d.ts.map +1 -1
  18. package/dist/v2/components/A2UISurfaceActivityRenderer.vue.d.ts +10 -3
  19. package/dist/v2/components/A2UISurfaceActivityRenderer.vue.d.ts.map +1 -1
  20. package/dist/v2/components/CopilotKitInspector.vue.d.ts +5 -1
  21. package/dist/v2/components/CopilotKitInspector.vue.d.ts.map +1 -1
  22. package/dist/v2/components/InlineFeatureWarning.vue.d.ts.map +1 -1
  23. package/dist/v2/components/LicenseWarningBanner.vue.d.ts +2 -2
  24. package/dist/v2/components/LicenseWarningBanner.vue.d.ts.map +1 -1
  25. package/dist/v2/components/MCPAppsActivityRenderer.d.ts.map +1 -1
  26. package/dist/v2/components/OpenGenerativeUIRenderer.d.ts +13 -59
  27. package/dist/v2/components/OpenGenerativeUIRenderer.d.ts.map +1 -1
  28. package/dist/v2/components/a2ui/A2UIBuiltInToolCallRenderer.d.ts +3 -11
  29. package/dist/v2/components/a2ui/A2UIBuiltInToolCallRenderer.d.ts.map +1 -1
  30. package/dist/v2/components/a2ui/A2UICatalogContext.d.ts +10 -15
  31. package/dist/v2/components/a2ui/A2UICatalogContext.d.ts.map +1 -1
  32. package/dist/v2/components/a2ui/A2UIRecoveryStates.d.ts +14 -130
  33. package/dist/v2/components/a2ui/A2UIRecoveryStates.d.ts.map +1 -1
  34. package/dist/v2/components/a2ui/catalog.d.ts.map +1 -1
  35. package/dist/v2/components/a2ui/utils.d.ts +3 -15
  36. package/dist/v2/components/a2ui/utils.d.ts.map +1 -1
  37. package/dist/v2/components/a2ui.d.ts +9 -8
  38. package/dist/v2/components/a2ui.d.ts.map +1 -1
  39. package/dist/v2/components/chat/CopilotChat.vue.d.ts +2 -2
  40. package/dist/v2/components/chat/CopilotChat.vue.d.ts.map +1 -1
  41. package/dist/v2/components/chat/CopilotChatAssistantMessage.vue.d.ts.map +1 -1
  42. package/dist/v2/components/chat/CopilotChatAttachmentQueue.vue.d.ts.map +1 -1
  43. package/dist/v2/components/chat/CopilotChatAttachmentRenderer.vue.d.ts.map +1 -1
  44. package/dist/v2/components/chat/CopilotChatAudioRecorder.vue.d.ts +4 -8
  45. package/dist/v2/components/chat/CopilotChatAudioRecorder.vue.d.ts.map +1 -1
  46. package/dist/v2/components/chat/CopilotChatFeedbackCommentPopover.vue.d.ts +1 -1
  47. package/dist/v2/components/chat/CopilotChatFeedbackCommentPopover.vue.d.ts.map +1 -1
  48. package/dist/v2/components/chat/CopilotChatInput.vue.d.ts +7 -286
  49. package/dist/v2/components/chat/CopilotChatInput.vue.d.ts.map +1 -1
  50. package/dist/v2/components/chat/CopilotChatInspectorButton.vue.d.ts.map +1 -1
  51. package/dist/v2/components/chat/CopilotChatLightbox.vue.d.ts.map +1 -1
  52. package/dist/v2/components/chat/CopilotChatMessageView.vue.d.ts +1 -1
  53. package/dist/v2/components/chat/CopilotChatMessageView.vue.d.ts.map +1 -1
  54. package/dist/v2/components/chat/CopilotChatReasoningMessage.vue.d.ts.map +1 -1
  55. package/dist/v2/components/chat/CopilotChatToolCallGroup.vue.d.ts +1 -1
  56. package/dist/v2/components/chat/CopilotChatToolCallGroup.vue.d.ts.map +1 -1
  57. package/dist/v2/components/chat/CopilotChatToolCallItem.vue.d.ts.map +1 -1
  58. package/dist/v2/components/chat/CopilotChatToolCallsView.vue.d.ts +1 -1
  59. package/dist/v2/components/chat/CopilotChatToolCallsView.vue.d.ts.map +1 -1
  60. package/dist/v2/components/chat/CopilotChatUserMessage.vue.d.ts.map +1 -1
  61. package/dist/v2/components/chat/CopilotChatView.vue.d.ts +3 -3
  62. package/dist/v2/components/chat/CopilotChatView.vue.d.ts.map +1 -1
  63. package/dist/v2/components/chat/CopilotChatWorkSummary.vue.d.ts.map +1 -1
  64. package/dist/v2/components/chat/CopilotModalHeader.vue.d.ts.map +1 -1
  65. package/dist/v2/components/chat/CopilotPopup.vue.d.ts +8 -3
  66. package/dist/v2/components/chat/CopilotPopup.vue.d.ts.map +1 -1
  67. package/dist/v2/components/chat/CopilotPopupView.vue.d.ts +5 -3
  68. package/dist/v2/components/chat/CopilotPopupView.vue.d.ts.map +1 -1
  69. package/dist/v2/components/chat/CopilotPopupViewInternal.vue.d.ts +5 -3
  70. package/dist/v2/components/chat/CopilotPopupViewInternal.vue.d.ts.map +1 -1
  71. package/dist/v2/components/chat/CopilotSidebar.vue.d.ts +8 -3
  72. package/dist/v2/components/chat/CopilotSidebar.vue.d.ts.map +1 -1
  73. package/dist/v2/components/chat/CopilotSidebarView.vue.d.ts +6 -4
  74. package/dist/v2/components/chat/CopilotSidebarView.vue.d.ts.map +1 -1
  75. package/dist/v2/components/chat/CopilotSidebarViewInternal.vue.d.ts +6 -4
  76. package/dist/v2/components/chat/CopilotSidebarViewInternal.vue.d.ts.map +1 -1
  77. package/dist/v2/components/chat/CopilotThreadsDrawer.vue.d.ts.map +1 -1
  78. package/dist/v2/components/chat/StreamingMarkdownDefault.vue.d.ts +1 -0
  79. package/dist/v2/components/chat/StreamingMarkdownDefault.vue.d.ts.map +1 -1
  80. package/dist/v2/components/chat/audioRecorder.d.ts +3 -4
  81. package/dist/v2/components/chat/audioRecorder.d.ts.map +1 -1
  82. package/dist/v2/components/chat/copilotChatToolCallItemRender.d.ts +4 -4
  83. package/dist/v2/components/chat/copilotChatToolCallItemRender.d.ts.map +1 -1
  84. package/dist/v2/components/chat/forwarded-slots.d.ts +12 -0
  85. package/dist/v2/components/chat/forwarded-slots.d.ts.map +1 -0
  86. package/dist/v2/components/chat/index.d.ts +34 -31
  87. package/dist/v2/components/chat/index.d.ts.map +1 -1
  88. package/dist/v2/components/chat/inspector-shortcuts.d.ts +2 -1
  89. package/dist/v2/components/chat/inspector-shortcuts.d.ts.map +1 -1
  90. package/dist/v2/components/chat/message-feedback.d.ts +38 -49
  91. package/dist/v2/components/chat/message-feedback.d.ts.map +1 -1
  92. package/dist/v2/components/chat/tool-call-display-context.d.ts +4 -19
  93. package/dist/v2/components/chat/tool-call-display-context.d.ts.map +1 -1
  94. package/dist/v2/components/chat/tool-call-group-parts.d.ts +7 -20
  95. package/dist/v2/components/chat/tool-call-group-parts.d.ts.map +1 -1
  96. package/dist/v2/components/chat/turn-work.d.ts +0 -2
  97. package/dist/v2/components/chat/turn-work.d.ts.map +1 -1
  98. package/dist/v2/components/chat/types.d.ts +9 -4
  99. package/dist/v2/components/chat/types.d.ts.map +1 -1
  100. package/dist/v2/components/chat/use-chat-labels.d.ts +8 -0
  101. package/dist/v2/components/chat/use-chat-labels.d.ts.map +1 -0
  102. package/dist/v2/components/chat/use-copy-feedback.d.ts +11 -0
  103. package/dist/v2/components/chat/use-copy-feedback.d.ts.map +1 -0
  104. package/dist/v2/components/chat/use-lightbox.d.ts.map +1 -1
  105. package/dist/v2/components/icons/index.d.ts +968 -1
  106. package/dist/v2/components/icons/index.d.ts.map +1 -1
  107. package/dist/v2/components/ui/CopilotDropdownMenuContent.vue.d.ts +1 -1
  108. package/dist/v2/components/ui/CopilotDropdownMenuContent.vue.d.ts.map +1 -1
  109. package/dist/v2/hooks/use-agent-context.d.ts +2 -3
  110. package/dist/v2/hooks/use-agent-context.d.ts.map +1 -1
  111. package/dist/v2/hooks/use-agent.d.ts +4 -1
  112. package/dist/v2/hooks/use-agent.d.ts.map +1 -1
  113. package/dist/v2/hooks/use-attachments.d.ts +7 -0
  114. package/dist/v2/hooks/use-attachments.d.ts.map +1 -1
  115. package/dist/v2/hooks/use-capabilities.d.ts.map +1 -1
  116. package/dist/v2/hooks/use-component.d.ts +1 -0
  117. package/dist/v2/hooks/use-component.d.ts.map +1 -1
  118. package/dist/v2/hooks/use-configure-suggestions.d.ts +4 -9
  119. package/dist/v2/hooks/use-configure-suggestions.d.ts.map +1 -1
  120. package/dist/v2/hooks/use-default-render-tool.d.ts +2 -7
  121. package/dist/v2/hooks/use-default-render-tool.d.ts.map +1 -1
  122. package/dist/v2/hooks/use-frontend-tool.d.ts +5 -0
  123. package/dist/v2/hooks/use-frontend-tool.d.ts.map +1 -1
  124. package/dist/v2/hooks/use-human-in-the-loop.d.ts +2 -1
  125. package/dist/v2/hooks/use-human-in-the-loop.d.ts.map +1 -1
  126. package/dist/v2/hooks/use-interrupt.d.ts +0 -1
  127. package/dist/v2/hooks/use-interrupt.d.ts.map +1 -1
  128. package/dist/v2/hooks/use-keyboard-height.d.ts +1 -1
  129. package/dist/v2/hooks/use-keyboard-height.d.ts.map +1 -1
  130. package/dist/v2/hooks/use-pin-to-send.d.ts +4 -12
  131. package/dist/v2/hooks/use-pin-to-send.d.ts.map +1 -1
  132. package/dist/v2/hooks/use-render-activity-message.d.ts +13 -9
  133. package/dist/v2/hooks/use-render-activity-message.d.ts.map +1 -1
  134. package/dist/v2/hooks/use-render-custom-messages.d.ts +5 -7
  135. package/dist/v2/hooks/use-render-custom-messages.d.ts.map +1 -1
  136. package/dist/v2/hooks/use-render-tool.d.ts +1 -1
  137. package/dist/v2/hooks/use-render-tool.d.ts.map +1 -1
  138. package/dist/v2/hooks/use-suggestions.d.ts.map +1 -1
  139. package/dist/v2/hooks/use-threads.d.ts +6 -23
  140. package/dist/v2/hooks/use-threads.d.ts.map +1 -1
  141. package/dist/v2/index.cjs +1 -1
  142. package/dist/v2/index.mjs +197 -200
  143. package/dist/v2/index.mjs.map +1 -1
  144. package/dist/v2/lib/processPartialHtml.d.ts +1 -2
  145. package/dist/v2/lib/processPartialHtml.d.ts.map +1 -1
  146. package/dist/v2/lib/shallow-stable.d.ts.map +1 -1
  147. package/dist/v2/lib/vue-core.d.ts +33 -19
  148. package/dist/v2/lib/vue-core.d.ts.map +1 -1
  149. package/dist/v2/providers/CopilotChatConfigurationProvider.vue.d.ts.map +1 -1
  150. package/dist/v2/providers/CopilotKitProvider.types.d.ts +9 -129
  151. package/dist/v2/providers/CopilotKitProvider.types.d.ts.map +1 -1
  152. package/dist/v2/providers/CopilotKitProvider.vue.d.ts +9 -10
  153. package/dist/v2/providers/CopilotKitProvider.vue.d.ts.map +1 -1
  154. package/dist/v2/providers/chat-configuration-store-key.d.ts +8 -0
  155. package/dist/v2/providers/chat-configuration-store-key.d.ts.map +1 -0
  156. package/dist/v2/providers/markdown-renderer.d.ts +4 -2
  157. package/dist/v2/providers/markdown-renderer.d.ts.map +1 -1
  158. package/dist/v2/providers/types.d.ts +3 -46
  159. package/dist/v2/providers/types.d.ts.map +1 -1
  160. package/dist/v2/providers/use-inspector-thread-override.d.ts +5 -0
  161. package/dist/v2/providers/use-inspector-thread-override.d.ts.map +1 -1
  162. package/dist/v2/types/defineToolCallRenderer.d.ts +1 -1
  163. package/dist/v2/types/defineToolCallRenderer.d.ts.map +1 -1
  164. package/dist/v2/types/human-in-the-loop.d.ts +8 -29
  165. package/dist/v2/types/human-in-the-loop.d.ts.map +1 -1
  166. package/dist/v2/types/interrupt.d.ts +1 -22
  167. package/dist/v2/types/interrupt.d.ts.map +1 -1
  168. package/dist/v2/types/vue-activity-message-renderer.d.ts +16 -15
  169. package/dist/v2/types/vue-activity-message-renderer.d.ts.map +1 -1
  170. package/dist/v2/types/vue-custom-message-renderer.d.ts +7 -16
  171. package/dist/v2/types/vue-custom-message-renderer.d.ts.map +1 -1
  172. package/dist/v2/types/vue-tool-call-renderer.d.ts +16 -35
  173. package/dist/v2/types/vue-tool-call-renderer.d.ts.map +1 -1
  174. package/package.json +12 -13
  175. package/src/__tests__/build-entries.test.ts +29 -0
  176. package/src/hooks/__tests__/zod-parameters.test.ts +520 -0
  177. package/src/hooks/use-copilot-action.ts +2 -1
  178. package/src/hooks/use-frontend-tool.ts +3 -6
  179. package/src/hooks/zod-parameters.ts +162 -0
  180. package/src/v2/__tests__/exports.test.ts +10 -0
  181. package/src/v2/__tests__/mocks/web-inspector.ts +6 -0
  182. package/src/v2/__tests__/utils/test-helpers.ts +34 -4
  183. package/src/v2/components/A2UIMessageRenderer.ts +98 -68
  184. package/src/v2/components/A2UISurfaceActivityRenderer.vue +68 -103
  185. package/src/v2/components/CopilotKitInspector.vue +104 -51
  186. package/src/v2/components/InlineFeatureWarning.vue +20 -21
  187. package/src/v2/components/LicenseWarningBanner.vue +27 -135
  188. package/src/v2/components/MCPAppsActivityRenderer.ts +75 -201
  189. package/src/v2/components/OpenGenerativeUIRenderer.ts +122 -446
  190. package/src/v2/components/__tests__/A2UIMessageRenderer.test.ts +171 -8
  191. package/src/v2/components/__tests__/CopilotKitInspector.test.ts +42 -0
  192. package/src/v2/components/__tests__/LicenseWarningBanner.test.ts +60 -0
  193. package/src/v2/components/__tests__/OpenGenerativeUIRenderer.test.ts +64 -8
  194. package/src/v2/components/__tests__/OpenGenerativeUIToolRenderer.test.ts +38 -0
  195. package/src/v2/components/a2ui/A2UIBuiltInToolCallRenderer.ts +6 -26
  196. package/src/v2/components/a2ui/A2UICatalogContext.ts +27 -185
  197. package/src/v2/components/a2ui/A2UIRecoveryStates.ts +127 -327
  198. package/src/v2/components/a2ui/catalog.ts +3 -3
  199. package/src/v2/components/a2ui/utils.ts +13 -65
  200. package/src/v2/components/a2ui.ts +15 -22
  201. package/src/v2/components/chat/CopilotChat.vue +121 -498
  202. package/src/v2/components/chat/CopilotChatAssistantMessage.vue +47 -184
  203. package/src/v2/components/chat/CopilotChatAttachmentQueue.vue +36 -55
  204. package/src/v2/components/chat/CopilotChatAttachmentRenderer.vue +14 -6
  205. package/src/v2/components/chat/CopilotChatAudioRecorder.vue +19 -246
  206. package/src/v2/components/chat/CopilotChatFeedbackCommentPopover.vue +12 -77
  207. package/src/v2/components/chat/CopilotChatInput.vue +139 -654
  208. package/src/v2/components/chat/CopilotChatInspectorButton.vue +45 -108
  209. package/src/v2/components/chat/CopilotChatLightbox.vue +10 -31
  210. package/src/v2/components/chat/CopilotChatMessageView.vue +96 -274
  211. package/src/v2/components/chat/CopilotChatReasoningMessage.vue +27 -62
  212. package/src/v2/components/chat/CopilotChatToolCallGroup.vue +63 -71
  213. package/src/v2/components/chat/CopilotChatToolCallItem.vue +8 -6
  214. package/src/v2/components/chat/CopilotChatToolCallsView.vue +31 -32
  215. package/src/v2/components/chat/CopilotChatUserMessage.vue +24 -112
  216. package/src/v2/components/chat/CopilotChatView.vue +123 -161
  217. package/src/v2/components/chat/CopilotChatWorkSummary.vue +26 -36
  218. package/src/v2/components/chat/CopilotModalHeader.vue +11 -23
  219. package/src/v2/components/chat/CopilotPopup.vue +23 -25
  220. package/src/v2/components/chat/CopilotPopupView.vue +10 -39
  221. package/src/v2/components/chat/CopilotPopupViewInternal.vue +49 -185
  222. package/src/v2/components/chat/CopilotSidebar.vue +23 -25
  223. package/src/v2/components/chat/CopilotSidebarView.vue +10 -39
  224. package/src/v2/components/chat/CopilotSidebarViewInternal.vue +56 -100
  225. package/src/v2/components/chat/CopilotThreadsDrawer.vue +43 -105
  226. package/src/v2/components/chat/StreamingMarkdownDefault.vue +15 -28
  227. package/src/v2/components/chat/__tests__/CopilotChat.labels.test.ts +19 -4
  228. package/src/v2/components/chat/__tests__/CopilotChat.test.ts +12 -10
  229. package/src/v2/components/chat/__tests__/CopilotChatActivityRendering.e2e.test.ts +26 -9
  230. package/src/v2/components/chat/__tests__/CopilotChatAssistantMessage.learningFeedback.test.ts +5 -5
  231. package/src/v2/components/chat/__tests__/CopilotChatAttachmentQueue.test.ts +28 -0
  232. package/src/v2/components/chat/__tests__/CopilotChatInput.test.ts +132 -1
  233. package/src/v2/components/chat/__tests__/CopilotChatMessageView.test.ts +247 -403
  234. package/src/v2/components/chat/__tests__/CopilotChatMessageView.toolCallDisplay.test.ts +1 -99
  235. package/src/v2/components/chat/__tests__/CopilotChatView.pinToSend.test.ts +43 -1
  236. package/src/v2/components/chat/__tests__/CopilotPopup.test.ts +90 -1
  237. package/src/v2/components/chat/__tests__/CopilotPopupView.test.ts +19 -0
  238. package/src/v2/components/chat/__tests__/CopilotSidebar.test.ts +90 -1
  239. package/src/v2/components/chat/__tests__/CopilotSidebarView.position.test.ts +32 -8
  240. package/src/v2/components/chat/__tests__/CopilotSidebarView.test.ts +2 -1
  241. package/src/v2/components/chat/__tests__/StreamingMarkdownDefault.test.ts +54 -0
  242. package/src/v2/components/chat/audioRecorder.ts +4 -7
  243. package/src/v2/components/chat/copilotChatToolCallItemRender.ts +25 -90
  244. package/src/v2/components/chat/forwarded-slots.ts +17 -0
  245. package/src/v2/components/chat/index.ts +0 -1
  246. package/src/v2/components/chat/inspector-shortcuts.ts +10 -16
  247. package/src/v2/components/chat/message-feedback.ts +92 -195
  248. package/src/v2/components/chat/tool-call-display-context.ts +6 -22
  249. package/src/v2/components/chat/tool-call-group-parts.ts +47 -108
  250. package/src/v2/components/chat/turn-work.ts +0 -9
  251. package/src/v2/components/chat/types.ts +12 -4
  252. package/src/v2/components/chat/use-chat-labels.ts +16 -0
  253. package/src/v2/components/chat/use-copy-feedback.ts +21 -0
  254. package/src/v2/components/chat/use-lightbox.ts +15 -33
  255. package/src/v2/components/icons/__tests__/icons.test.ts +72 -68
  256. package/src/v2/components/icons/index.ts +109 -27
  257. package/src/v2/hooks/__tests__/use-agent-error-state.test.ts +5 -3
  258. package/src/v2/hooks/__tests__/use-agent-stability.test.ts +25 -4
  259. package/src/v2/hooks/__tests__/use-agent-throttle.test.ts +5 -1
  260. package/src/v2/hooks/__tests__/use-agent.test.ts +6 -3
  261. package/src/v2/hooks/__tests__/use-component.test.ts +21 -0
  262. package/src/v2/hooks/__tests__/use-configure-suggestions.test.ts +30 -1
  263. package/src/v2/hooks/__tests__/use-default-render-tool.test.ts +10 -10
  264. package/src/v2/hooks/__tests__/use-frontend-tool.e2e.test.ts +66 -1
  265. package/src/v2/hooks/__tests__/use-human-in-the-loop.e2e.test.ts +6 -1
  266. package/src/v2/hooks/__tests__/use-human-in-the-loop.test.ts +187 -12
  267. package/src/v2/hooks/__tests__/use-interrupt.test.ts +97 -0
  268. package/src/v2/hooks/__tests__/use-render-activity-message.test.ts +106 -0
  269. package/src/v2/hooks/__tests__/use-render-tool.test.ts +3 -6
  270. package/src/v2/hooks/__tests__/use-threads.test.ts +48 -6
  271. package/src/v2/hooks/__tests__/zod-regression.test.ts +5 -4
  272. package/src/v2/hooks/use-agent-context.ts +4 -10
  273. package/src/v2/hooks/use-agent.ts +86 -290
  274. package/src/v2/hooks/use-attachments.ts +48 -168
  275. package/src/v2/hooks/use-capabilities.ts +2 -7
  276. package/src/v2/hooks/use-component.ts +7 -4
  277. package/src/v2/hooks/use-configure-suggestions.ts +29 -220
  278. package/src/v2/hooks/use-default-render-tool.ts +31 -152
  279. package/src/v2/hooks/use-frontend-tool.ts +15 -25
  280. package/src/v2/hooks/use-human-in-the-loop.ts +11 -80
  281. package/src/v2/hooks/use-interrupt.ts +29 -308
  282. package/src/v2/hooks/use-keyboard-height.ts +17 -40
  283. package/src/v2/hooks/use-pin-to-send.ts +15 -99
  284. package/src/v2/hooks/use-render-activity-message.ts +35 -57
  285. package/src/v2/hooks/use-render-custom-messages.ts +24 -88
  286. package/src/v2/hooks/use-render-tool.ts +2 -4
  287. package/src/v2/hooks/use-suggestions.ts +17 -36
  288. package/src/v2/hooks/use-threads.ts +49 -288
  289. package/src/v2/lib/__tests__/shallow-stable.test.ts +54 -0
  290. package/src/v2/lib/__tests__/vue-core-renderers.test.ts +42 -0
  291. package/src/v2/lib/processPartialHtml.ts +6 -21
  292. package/src/v2/lib/shallow-stable.ts +2 -16
  293. package/src/v2/lib/vue-core.ts +90 -85
  294. package/src/v2/providers/CopilotChatConfigurationProvider.vue +48 -186
  295. package/src/v2/providers/CopilotKitProvider.types.ts +12 -132
  296. package/src/v2/providers/CopilotKitProvider.vue +291 -641
  297. package/src/v2/providers/__tests__/CopilotChatConfigurationProvider.test.ts +22 -2
  298. package/src/v2/providers/__tests__/CopilotKitProvider.a2ui.test.ts +38 -2
  299. package/src/v2/providers/__tests__/CopilotKitProvider.config.test.ts +124 -0
  300. package/src/v2/providers/__tests__/CopilotKitProvider.headersAtSendTime.test.ts +3 -3
  301. package/src/v2/providers/__tests__/CopilotKitProvider.learning.test.ts +3 -1
  302. package/src/v2/providers/__tests__/CopilotKitProvider.sandboxFunctions.test.ts +4 -1
  303. package/src/v2/providers/__tests__/CopilotKitProvider.test.ts +88 -28
  304. package/src/v2/providers/chat-configuration-store-key.ts +9 -0
  305. package/src/v2/providers/markdown-renderer.ts +8 -2
  306. package/src/v2/providers/types.ts +3 -49
  307. package/src/v2/providers/use-inspector-thread-override.ts +22 -80
  308. package/src/v2/types/__tests__/defineToolCallRenderer.test.ts +28 -33
  309. package/src/v2/types/defineToolCallRenderer.ts +7 -6
  310. package/src/v2/types/human-in-the-loop.ts +8 -32
  311. package/src/v2/types/interrupt.ts +7 -31
  312. package/src/v2/types/vue-activity-message-renderer.ts +24 -15
  313. package/src/v2/types/vue-custom-message-renderer.ts +12 -16
  314. package/src/v2/types/vue-tool-call-renderer.ts +23 -38
  315. package/tsconfig.json +0 -1
  316. package/vite.config.ts +8 -5
  317. package/vitest.config.ts +12 -7
  318. package/dist/v2/components/chat/BasicMarkdown.vue.d.ts +0 -9
  319. package/dist/v2/components/chat/BasicMarkdown.vue.d.ts.map +0 -1
  320. package/dist/v2/components/chat/normalize-auto-scroll.d.ts +0 -3
  321. package/dist/v2/components/chat/normalize-auto-scroll.d.ts.map +0 -1
  322. package/dist/v2/components/chat/tool-call-layout.d.ts +0 -115
  323. package/dist/v2/components/chat/tool-call-layout.d.ts.map +0 -1
  324. package/dist/v2/lib/is-mobile-viewport.d.ts +0 -15
  325. package/dist/v2/lib/is-mobile-viewport.d.ts.map +0 -1
  326. package/dist/v2/lib/message-feedback.d.ts +0 -33
  327. package/dist/v2/lib/message-feedback.d.ts.map +0 -1
  328. package/dist/v2/lib/transcription-client.d.ts +0 -19
  329. package/dist/v2/lib/transcription-client.d.ts.map +0 -1
  330. package/src/v2/components/__tests__/A2UICatalogContext.test.ts +0 -63
  331. package/src/v2/components/a2ui/__tests__/A2UIRecoveryStates.test.ts +0 -175
  332. package/src/v2/components/chat/BasicMarkdown.vue +0 -160
  333. package/src/v2/components/chat/__tests__/BasicMarkdown.test.ts +0 -69
  334. package/src/v2/components/chat/__tests__/normalize-auto-scroll.test.ts +0 -39
  335. package/src/v2/components/chat/normalize-auto-scroll.ts +0 -17
  336. package/src/v2/components/chat/tool-call-layout.ts +0 -304
  337. package/src/v2/lib/__tests__/is-mobile-viewport.test.ts +0 -48
  338. package/src/v2/lib/__tests__/message-feedback.test.ts +0 -152
  339. package/src/v2/lib/__tests__/processPartialHtml.test.ts +0 -84
  340. package/src/v2/lib/__tests__/transcription-client.test.ts +0 -67
  341. package/src/v2/lib/is-mobile-viewport.ts +0 -23
  342. package/src/v2/lib/message-feedback.ts +0 -120
  343. package/src/v2/lib/transcription-client.ts +0 -151
@@ -119,6 +119,23 @@ describe("CopilotChatConfigurationProvider", () => {
119
119
  expect(wrapper.find("[data-testid=placeholder]").text()).toBe("Inner");
120
120
  });
121
121
 
122
+ it("a nested non-explicit seed yields to the parent's thread, like React", () => {
123
+ const Display = makeDisplay();
124
+ const wrapper = mount(CopilotChatConfigurationProvider, {
125
+ props: { threadId: "outer-thread" },
126
+ slots: {
127
+ default: () =>
128
+ h(
129
+ CopilotChatConfigurationProvider,
130
+ { threadId: "inner-seed", hasExplicitThreadId: false },
131
+ { default: () => h(Display) },
132
+ ),
133
+ },
134
+ });
135
+
136
+ expect(wrapper.find("[data-testid=thread]").text()).toBe("outer-thread");
137
+ });
138
+
122
139
  it("creates and mutates modal state when isModalDefaultOpen is provided", async () => {
123
140
  const Toggle = defineComponent({
124
141
  setup() {
@@ -398,9 +415,12 @@ describe("CopilotChatConfiguration drawer-awareness", () => {
398
415
  });
399
416
 
400
417
  describe("CopilotChatConfiguration modal-setter presence contract", () => {
401
- it("bare provider (no isModalDefaultOpen, no parent) exposes setModalOpen as undefined", () => {
418
+ it("bare provider (no isModalDefaultOpen, no parent) owns a modal that starts open, like React", async () => {
402
419
  const cfg = harness({ threadId: "thread-1" });
403
- expect(cfg().setModalOpen).toBeUndefined();
420
+ expect(cfg().isModalOpen).toBe(true);
421
+ cfg().setModalOpen?.(false);
422
+ await nextTick();
423
+ expect(cfg().isModalOpen).toBe(false);
404
424
  });
405
425
 
406
426
  it("provider with isModalDefaultOpen exposes a working setModalOpen", async () => {
@@ -1,7 +1,7 @@
1
1
  import { describe, expect, it } from "vitest";
2
- import { defineComponent, h, ref } from "vue";
2
+ import { defineComponent, h, nextTick, ref } from "vue";
3
3
  import { mount } from "@vue/test-utils";
4
- import { z } from "zod";
4
+ import { z } from "zod-v3";
5
5
  import { Catalog } from "@a2ui/web_core/v0_9";
6
6
  import type { ComponentApi } from "@a2ui/web_core/v0_9";
7
7
  import CopilotKitProvider from "../CopilotKitProvider.vue";
@@ -70,6 +70,24 @@ describe("CopilotKitProvider a2ui catalog auto-enable", () => {
70
70
  expect(a2uiRenderer).toBeDefined();
71
71
  });
72
72
 
73
+ it("keeps the built-in render_a2ui renderer and the app's renderers together when the app's renderers change", async () => {
74
+ const catalog = { id: "test", components: new Map() };
75
+ const weather = { name: "weather", args: z.any(), render: () => null };
76
+ const { wrapper, observedCore } = mountProvider({
77
+ a2ui: { catalog },
78
+ renderToolCalls: [weather],
79
+ });
80
+ const names = () =>
81
+ observedCore.value?.renderToolCalls.map((renderer) => renderer.name);
82
+ expect(names()).toEqual(["weather", "render_a2ui"]);
83
+
84
+ await wrapper.setProps({
85
+ renderToolCalls: [weather, { ...weather, name: "search" }],
86
+ });
87
+
88
+ expect(names()).toEqual(["weather", "search", "render_a2ui"]);
89
+ });
90
+
73
91
  it("does not register an a2ui-surface renderer when no catalog is provided and runtime has not signaled a2uiEnabled", () => {
74
92
  const { observedCore } = mountProvider({ a2ui: { theme: {} } });
75
93
 
@@ -125,4 +143,22 @@ describe("CopilotKitProvider a2ui catalog context", () => {
125
143
  expect(value).toContain(" - FlightCard:\n {");
126
144
  expect(value).toContain('"airline"');
127
145
  });
146
+
147
+ it("registers the catalog's components with core for the Inspector", () => {
148
+ const { observedCore } = mountProvider({
149
+ a2ui: { catalog: makeCustomCatalog() },
150
+ });
151
+ expect(
152
+ observedCore.value?.catalogComponents.map((component) => component.name),
153
+ ).toEqual(["FlightCard"]);
154
+ });
155
+
156
+ it("stops advertising a component the Inspector disables", async () => {
157
+ const { observedCore } = mountProvider({
158
+ a2ui: { catalog: makeCustomCatalog() },
159
+ });
160
+ observedCore.value?.setCatalogComponentEnabled("FlightCard", false);
161
+ await nextTick();
162
+ expect(capabilitiesValue(observedCore.value)).not.toContain("FlightCard");
163
+ });
128
164
  });
@@ -0,0 +1,124 @@
1
+ import { afterEach, describe, expect, it, vi } from "vitest";
2
+ import { createSSRApp } from "vue";
3
+ import { mount } from "@vue/test-utils";
4
+ import { renderToString } from "vue/server-renderer";
5
+ import CopilotKitProvider from "../CopilotKitProvider.vue";
6
+
7
+ const RUNTIME_URL = "https://runtime.example/api/copilotkit";
8
+ const SHAPE_WARNING =
9
+ "renderToolCalls must be a stable array. If you want to dynamically add or remove tools, use `useFrontendTool` instead.";
10
+
11
+ function stubInfoFetch() {
12
+ const fetchMock = vi.fn(async () => {
13
+ throw new Error("network failure");
14
+ });
15
+ vi.stubGlobal("fetch", fetchMock);
16
+ return () =>
17
+ fetchMock.mock.calls.filter(([url]) => String(url).includes("/info"));
18
+ }
19
+
20
+ /** A tool call renderer shape: only `name` and `agentId` matter here. */
21
+ function renderer(name: string) {
22
+ return { name, args: undefined, render: () => null };
23
+ }
24
+
25
+ afterEach(() => {
26
+ vi.unstubAllGlobals();
27
+ vi.restoreAllMocks();
28
+ });
29
+
30
+ describe("CopilotKitProvider (Vue) runtime connection", () => {
31
+ it("does not fetch /info during server-side rendering", async () => {
32
+ const infoCalls = stubInfoFetch();
33
+ await renderToString(
34
+ createSSRApp(CopilotKitProvider, { runtimeUrl: RUNTIME_URL }),
35
+ );
36
+ await new Promise((resolve) => setTimeout(resolve, 20));
37
+ expect(infoCalls()).toHaveLength(0);
38
+ });
39
+
40
+ it("fetches /info once the provider mounts", async () => {
41
+ vi.spyOn(console, "error").mockImplementation(() => {});
42
+ const infoCalls = stubInfoFetch();
43
+ const wrapper = mount(CopilotKitProvider, {
44
+ props: { runtimeUrl: RUNTIME_URL },
45
+ });
46
+ await vi.waitFor(() => expect(infoCalls().length).toBeGreaterThan(0));
47
+ wrapper.unmount();
48
+ });
49
+ });
50
+
51
+ describe("CopilotKitProvider (Vue) errors", () => {
52
+ it("logs core errors when no onError is given", async () => {
53
+ stubInfoFetch();
54
+ const error = vi.spyOn(console, "error").mockImplementation(() => {});
55
+ const wrapper = mount(CopilotKitProvider, {
56
+ props: { runtimeUrl: RUNTIME_URL },
57
+ });
58
+ await vi.waitFor(() =>
59
+ expect(error).toHaveBeenCalledWith(
60
+ "[CopilotKit] Error (runtime_info_fetch_failed):",
61
+ expect.any(Error),
62
+ expect.anything(),
63
+ ),
64
+ );
65
+ wrapper.unmount();
66
+ });
67
+
68
+ it("reports an invalid defaultThrottleMs once, from core", () => {
69
+ const error = vi.spyOn(console, "error").mockImplementation(() => {});
70
+ const wrapper = mount(CopilotKitProvider, {
71
+ props: { runtimeUrl: RUNTIME_URL, defaultThrottleMs: -1 },
72
+ });
73
+ const providerCopies = error.mock.calls.filter(
74
+ ([message]) =>
75
+ typeof message === "string" &&
76
+ message.startsWith("CopilotKitProvider: defaultThrottleMs"),
77
+ );
78
+ const coreReports = error.mock.calls.filter(
79
+ ([message]) =>
80
+ typeof message === "string" &&
81
+ message.startsWith("CopilotKitCore.setDefaultThrottleMs"),
82
+ );
83
+ expect(providerCopies).toEqual([]);
84
+ expect(coreReports.length).toBeGreaterThan(0);
85
+ wrapper.unmount();
86
+ });
87
+ });
88
+
89
+ describe("CopilotKitProvider (Vue) renderToolCalls warning", () => {
90
+ it("warns when the renderToolCalls shape changes", async () => {
91
+ const error = vi.spyOn(console, "error").mockImplementation(() => {});
92
+ const wrapper = mount(CopilotKitProvider, {
93
+ props: { runtimeUrl: RUNTIME_URL, renderToolCalls: [renderer("a")] },
94
+ });
95
+ await wrapper.setProps({ renderToolCalls: [renderer("b")] });
96
+ expect(error).toHaveBeenCalledWith(SHAPE_WARNING);
97
+ wrapper.unmount();
98
+ });
99
+
100
+ it("does not warn for a new array with the same tools", async () => {
101
+ const error = vi.spyOn(console, "error").mockImplementation(() => {});
102
+ const wrapper = mount(CopilotKitProvider, {
103
+ props: { runtimeUrl: RUNTIME_URL, renderToolCalls: [renderer("a")] },
104
+ });
105
+ await wrapper.setProps({ renderToolCalls: [renderer("a")] });
106
+ expect(error).not.toHaveBeenCalledWith(SHAPE_WARNING);
107
+ wrapper.unmount();
108
+ });
109
+ });
110
+
111
+ describe("CopilotKitProvider (Vue) config diagnostics", () => {
112
+ it("warns about a missing runtime config once", async () => {
113
+ const warn = vi.spyOn(console, "warn").mockImplementation(() => {});
114
+ const wrapper = mount(CopilotKitProvider, { props: {} });
115
+ await wrapper.setProps({ properties: { tenant: "acme" } });
116
+ const missing = warn.mock.calls.filter(
117
+ ([message]) =>
118
+ message ===
119
+ "Missing required prop: 'runtimeUrl' or 'publicApiKey' or 'publicLicenseKey'",
120
+ );
121
+ expect(missing).toHaveLength(1);
122
+ wrapper.unmount();
123
+ });
124
+ });
@@ -7,12 +7,12 @@ import { mount } from "@vue/test-utils";
7
7
  import { defineComponent, h, nextTick } from "vue";
8
8
  import { afterEach, describe, expect, it, vi } from "vitest";
9
9
  import { HttpAgent } from "@ag-ui/client";
10
+ import { ɵtranscribeAudio } from "@copilotkit/core";
10
11
  import type { CopilotKitHeadersSource } from "@copilotkit/core";
11
12
  import CopilotKitProvider from "../CopilotKitProvider.vue";
12
13
  import { useCopilotKit } from "../useCopilotKit";
13
14
  import { useAgent } from "../../hooks/use-agent";
14
15
  import { useThreads } from "../../hooks/use-threads";
15
- import { transcribeAudio } from "../../lib/transcription-client";
16
16
  import type { CopilotKitCoreVue } from "../../lib/vue-core";
17
17
 
18
18
  type Call = { url: string; auth: string | null; publicApiKey: string | null };
@@ -418,14 +418,14 @@ describe("CopilotKitProvider — headers builder evaluated at send time (#1937)"
418
418
  // Force an actual resolution while signed in, so the header source's
419
419
  // last snapshot is non-empty — otherwise a stale-merge bug has nothing
420
420
  // stale to leak, and the assertion below would pass vacuously.
421
- await transcribeAudio(getCore(), new Blob(["a"], { type: "audio/webm" }));
421
+ await ɵtranscribeAudio(getCore(), new Blob(["a"], { type: "audio/webm" }));
422
422
  const firstCall = calls.find((c) => c.url.endsWith("/transcribe"));
423
423
  expect(firstCall?.auth).toBe("Bearer x");
424
424
 
425
425
  calls.length = 0;
426
426
  signedIn = false;
427
427
 
428
- await transcribeAudio(getCore(), new Blob(["a"], { type: "audio/webm" }));
428
+ await ɵtranscribeAudio(getCore(), new Blob(["a"], { type: "audio/webm" }));
429
429
  const secondCall = calls.find((c) => c.url.endsWith("/transcribe"));
430
430
  expect(secondCall).toBeDefined();
431
431
  expect(secondCall!.auth).toBeNull();
@@ -478,7 +478,9 @@ describe("CopilotKitProvider learning prop", () => {
478
478
  const app = renderApp(true);
479
479
 
480
480
  await app.unmount();
481
- expect(stop).toHaveBeenCalledTimes(1);
481
+ // The learning watcher stops capture, then disposing the core stops
482
+ // it again. Stopping twice is safe; capture must end either way.
483
+ expect(stop).toHaveBeenCalled();
482
484
  expect(History.prototype.pushState).toBe(nativePushState);
483
485
  });
484
486
 
@@ -79,7 +79,10 @@ describe("CopilotKitProvider sandbox functions", () => {
79
79
  },
80
80
  });
81
81
  const sandboxContext = findSandboxContext(observedCore.value!.context);
82
- expect(sandboxContext).toBeDefined();
82
+ // The same model-visible call form React and Angular send.
83
+ expect(sandboxContext?.description).toBe(
84
+ "Sandbox functions available in generated sandboxed UI code. Call via: await Websandbox.connection.remote.<functionName>(args)",
85
+ );
83
86
  });
84
87
 
85
88
  it("does not register agent context when sandbox functions are empty", () => {
@@ -5,11 +5,12 @@ import {
5
5
  createSSRApp,
6
6
  defineComponent,
7
7
  h,
8
+ inject,
8
9
  nextTick,
9
10
  ref,
10
11
  watchEffect,
11
12
  } from "vue";
12
- import type { VNode } from "vue";
13
+ import type { ComputedRef, VNode } from "vue";
13
14
  import { renderToString } from "vue/server-renderer";
14
15
  import type {
15
16
  CopilotKitCoreSubscriber,
@@ -23,6 +24,7 @@ import { defineWebInspector } from "@copilotkit/web-inspector";
23
24
  import { z } from "zod";
24
25
  import CopilotKitProvider from "../CopilotKitProvider.vue";
25
26
  import { useCopilotKit } from "../useCopilotKit";
27
+ import { InspectorKey } from "../keys";
26
28
  import type { VueFrontendTool } from "../../types";
27
29
  import type { VueHumanInTheLoop } from "../../types";
28
30
  import { mountWithProvider } from "../../__tests__/utils/mount";
@@ -320,7 +322,7 @@ describe("CopilotKitProvider", () => {
320
322
  expect(renderTool?.render).toStrictEqual(TestComponent);
321
323
  });
322
324
 
323
- it("does not scope frontendTools-derived render entries by agentId", () => {
325
+ it("scopes frontendTools-derived render entries by agentId, like useFrontendTool", () => {
324
326
  const TestComponent = defineComponent({
325
327
  setup() {
326
328
  return () => h("div", "Test");
@@ -342,7 +344,7 @@ describe("CopilotKitProvider", () => {
342
344
  );
343
345
 
344
346
  expect(renderTool).toBeDefined();
345
- expect(renderTool?.agentId).toBeUndefined();
347
+ expect(renderTool?.agentId).toBe("specific-agent");
346
348
  });
347
349
  });
348
350
 
@@ -409,6 +411,39 @@ describe("CopilotKitProvider", () => {
409
411
  expect(typeof renderTool?.render).toBe("function");
410
412
  });
411
413
 
414
+ it("keeps the wrapped render and the tools when only renderToolCalls changes", async () => {
415
+ // A new wrapper is a new component type, so Vue would remount the card
416
+ // and lose its state.
417
+ const humanInTheLoop: VueHumanInTheLoop[] = [
418
+ {
419
+ name: "approvalTool",
420
+ parameters: z.object({}),
421
+ render: HitlComponent,
422
+ },
423
+ ];
424
+ const weather = () => [
425
+ { name: "weather", args: z.any(), render: HitlComponent },
426
+ ];
427
+ const { wrapper, getCore } = mountWithProvider(() => h("div"), {
428
+ humanInTheLoop,
429
+ renderToolCalls: weather(),
430
+ });
431
+ const approveRender = () =>
432
+ getCore().renderToolCalls.find((rc) => rc.name === "approvalTool")
433
+ ?.render;
434
+ const before = approveRender();
435
+ const setTools = vi.spyOn(getCore(), "setTools");
436
+
437
+ await wrapper.setProps({ renderToolCalls: weather() });
438
+ await flush();
439
+
440
+ expect(getCore().renderToolCalls.map((rc) => rc.name)).toContain(
441
+ "weather",
442
+ );
443
+ expect(approveRender()).toBe(before);
444
+ expect(setTools).not.toHaveBeenCalled();
445
+ });
446
+
412
447
  it("keeps the tool call pending until respond is called", async () => {
413
448
  // Reproduces OSS-803: the handler used to warn and resolve undefined
414
449
  // immediately, so the HITL UI flashed and disappeared instead of waiting
@@ -810,6 +845,23 @@ describe("CopilotKitProvider", () => {
810
845
  });
811
846
  });
812
847
 
848
+ describe("Unmount", () => {
849
+ it("disposes the core it created, so subscribers stop hearing from it", () => {
850
+ const { getCore, wrapper } = mountWithProvider(() => h("div"));
851
+ const core = getCore();
852
+ const onPropertiesChanged = vi.fn();
853
+ core.subscribe({ onPropertiesChanged });
854
+
855
+ core.setProperties({ before: "unmount" });
856
+ expect(onPropertiesChanged).toHaveBeenCalledTimes(1);
857
+
858
+ wrapper.unmount();
859
+ core.setProperties({ after: "unmount" });
860
+
861
+ expect(onPropertiesChanged).toHaveBeenCalledTimes(1);
862
+ });
863
+ });
864
+
813
865
  describe("inspector visibility", () => {
814
866
  async function settleInspectorLoad(): Promise<void> {
815
867
  await vi.dynamicImportSettled();
@@ -821,7 +873,7 @@ describe("CopilotKitProvider", () => {
821
873
  vi.stubEnv("NODE_ENV", "development");
822
874
  });
823
875
 
824
- it("renders by default on any development host and passes the provider core before connection", async () => {
876
+ it("renders by default on a loopback development host and passes the provider core before connection", async () => {
825
877
  let providerCore: CopilotKitCoreContextValue | null = null;
826
878
  const Probe = defineComponent({
827
879
  setup() {
@@ -855,12 +907,10 @@ describe("CopilotKitProvider", () => {
855
907
  view.unmount();
856
908
  });
857
909
 
858
- it("does not render or load when explicitly disabled in development", async () => {
910
+ it("never renders or loads on a remote development host, even when explicitly enabled", async () => {
911
+ vi.stubGlobal("location", new URL("http://192.168.1.25:3000"));
859
912
  const view = render(CopilotKitProvider, {
860
- props: {
861
- runtimeUrl: "/api/copilotkit",
862
- enableInspector: false,
863
- },
913
+ props: { runtimeUrl: "/api/copilotkit", enableInspector: true },
864
914
  slots: { default: "child" },
865
915
  });
866
916
 
@@ -870,45 +920,55 @@ describe("CopilotKitProvider", () => {
870
920
  view.unmount();
871
921
  });
872
922
 
873
- it("never renders or loads in production, even when explicitly enabled", async () => {
874
- vi.stubEnv("NODE_ENV", "production");
875
- const view = render(CopilotKitProvider, {
876
- props: {
877
- runtimeUrl: "/api/copilotkit",
878
- enableInspector: true,
923
+ it("enables Inspector message actions only while the Inspector is shown", async () => {
924
+ let isInspectorEnabled: ComputedRef<boolean> | undefined;
925
+ const Probe = defineComponent({
926
+ setup() {
927
+ isInspectorEnabled = inject(InspectorKey)?.isInspectorEnabled;
928
+ return () => null;
879
929
  },
880
- slots: { default: "child" },
930
+ });
931
+ const view = render(CopilotKitProvider, {
932
+ props: { runtimeUrl: "/api/copilotkit" },
933
+ slots: { default: Probe },
881
934
  });
882
935
 
883
- await settleInspectorLoad();
884
- expect(view.container.querySelector("cpk-web-inspector")).toBeNull();
885
- expect(defineWebInspector).not.toHaveBeenCalled();
936
+ await waitFor(() => {
937
+ expect(isInspectorEnabled?.value).toBe(true);
938
+ });
939
+ const inspector = view.container.querySelector("cpk-web-inspector")!;
940
+ inspector.dispatchEvent(
941
+ new CustomEvent("cpk-inspector-visibility-change", {
942
+ detail: { visible: false },
943
+ }),
944
+ );
945
+ await nextTick();
946
+ expect(isInspectorEnabled?.value).toBe(false);
947
+ expect(inspector.isConnected).toBe(true);
886
948
  view.unmount();
887
949
  });
888
950
 
889
- it("does not let legacy showDevConsole disable the development Inspector", async () => {
951
+ it("does not render or load when explicitly disabled in development", async () => {
890
952
  const view = render(CopilotKitProvider, {
891
953
  props: {
892
954
  runtimeUrl: "/api/copilotkit",
893
- showDevConsole: false,
955
+ enableInspector: false,
894
956
  },
895
957
  slots: { default: "child" },
896
958
  });
897
959
 
898
- await waitFor(() => {
899
- expect(
900
- view.container.querySelector("cpk-web-inspector"),
901
- ).not.toBeNull();
902
- });
960
+ await settleInspectorLoad();
961
+ expect(view.container.querySelector("cpk-web-inspector")).toBeNull();
962
+ expect(defineWebInspector).not.toHaveBeenCalled();
903
963
  view.unmount();
904
964
  });
905
965
 
906
- it("does not let legacy showDevConsole enable the production Inspector", async () => {
966
+ it("never renders or loads in production, even when explicitly enabled", async () => {
907
967
  vi.stubEnv("NODE_ENV", "production");
908
968
  const view = render(CopilotKitProvider, {
909
969
  props: {
910
970
  runtimeUrl: "/api/copilotkit",
911
- showDevConsole: "auto",
971
+ enableInspector: true,
912
972
  },
913
973
  slots: { default: "child" },
914
974
  });
@@ -0,0 +1,9 @@
1
+ import type { InjectionKey } from "vue";
2
+ import type { ɵChatConfigurationStore } from "@copilotkit/core";
3
+
4
+ /**
5
+ * The nearest `CopilotChatConfigurationProvider`'s core store, so a nested
6
+ * provider can link its own store to it.
7
+ */
8
+ export const ChatConfigurationStoreKey: InjectionKey<ɵChatConfigurationStore> =
9
+ Symbol("CopilotChatConfigurationStore");
@@ -1,7 +1,11 @@
1
1
  import { inject } from "vue";
2
2
  import type { Component, InjectionKey } from "vue";
3
- import type { VueStreamingMarkdownNodeRenderers } from "@copilotkit/markdown-renderer/vue";
4
- import type { StreamingMarkdownParserOptions } from "@copilotkit/markdown-renderer";
3
+ import type {
4
+ VueStreamingMarkdownCitationClickHandler,
5
+ VueStreamingMarkdownLinkClickHandler,
6
+ VueStreamingMarkdownNodeRenderers,
7
+ } from "@copilotkit/markdown/vue";
8
+ import type { StreamingMarkdownParserOptions } from "@copilotkit/markdown";
5
9
 
6
10
  /** Config for the built-in Vue default renderer (pass instead of a component). */
7
11
  export interface DefaultMarkdownRendererProps {
@@ -9,6 +13,8 @@ export interface DefaultMarkdownRendererProps {
9
13
  caret?: boolean;
10
14
  options?: Partial<StreamingMarkdownParserOptions>;
11
15
  class?: string;
16
+ onLinkClick?: VueStreamingMarkdownLinkClickHandler;
17
+ onCitationClick?: VueStreamingMarkdownCitationClickHandler;
12
18
  }
13
19
 
14
20
  export type MarkdownRendererValue = Component | DefaultMarkdownRendererProps;
@@ -1,53 +1,7 @@
1
- export const CopilotChatDefaultLabels = {
2
- chatInputPlaceholder: "Type a message...",
3
- chatInputToolbarStartTranscribeButtonLabel: "Transcribe",
4
- chatInputToolbarCancelTranscribeButtonLabel: "Cancel",
5
- chatInputToolbarFinishTranscribeButtonLabel: "Finish",
6
- chatInputToolbarAddButtonLabel: "Add photos or files",
7
- chatInputToolbarToolsButtonLabel: "Tools",
8
- chatInputToolbarSendButtonLabel: "Send message",
9
- chatInputToolbarStopButtonLabel: "Stop",
10
- assistantMessageToolbarCopyCodeLabel: "Copy",
11
- assistantMessageToolbarCopyCodeCopiedLabel: "Copied",
12
- assistantMessageToolbarCopyMessageLabel: "Copy",
13
- assistantMessageToolbarInspectorLabel: "View in Inspector",
14
- assistantMessageToolbarInspectorDescription:
15
- "Open this message in the Inspector",
16
- assistantMessageToolbarInspectorLocalOnlyLabel: "Local only",
17
- assistantMessageToolbarInspectorLocalOnlyDescription:
18
- "Only visible on localhost or loopback hosts in development. Never shown in production.",
19
- assistantMessageToolbarInspectorTitle: "CopilotKit Inspector",
20
- assistantMessageToolbarInspectorHideLabel: "Hide this icon",
21
- assistantMessageToolbarInspectorHideDescription: "Until you reload this page",
22
- assistantMessageToolbarThumbsUpLabel: "Good response",
23
- assistantMessageToolbarThumbsDownLabel: "Bad response",
24
- assistantMessageFeedbackCommentPlaceholder: "Add a comment (optional)",
25
- assistantMessageFeedbackCommentSubmitLabel: "Send comment",
26
- assistantMessageToolbarReadAloudLabel: "Read aloud",
27
- assistantMessageToolbarRegenerateLabel: "Regenerate",
28
- userMessageToolbarCopyMessageLabel: "Copy",
29
- userMessageToolbarEditMessageLabel: "Edit",
30
- userMessageToolbarPreviousBranchLabel: "Previous branch",
31
- userMessageToolbarNextBranchLabel: "Next branch",
32
- chatDisclaimerText:
33
- "AI can make mistakes. Please verify important information.",
34
- chatToggleOpenLabel: "Open chat",
35
- chatToggleCloseLabel: "Close chat",
36
- chatScrollToBottomLabel: "Scroll to bottom",
37
- modalHeaderTitle: "CopilotKit Chat",
38
- welcomeMessageText: "How can I help you today?",
39
- reasoningMessageThinkingLabel: "Thinking…",
40
- chatInputSlashMenuLabel: "Slash commands",
41
- chatInputSlashMenuEmptyText: "No commands found",
42
- attachmentRemoveButtonLabel: "Remove attachment",
43
- attachmentPlayVideoButtonLabel: "Play video",
44
- attachmentPreviewCloseButtonLabel: "Close preview",
45
- modalHeaderCloseButtonLabel: "Close",
46
- modalHeaderThreadsButtonLabel: "Open threads",
47
- sidebarLabel: "Copilot chat sidebar",
48
- } as const;
1
+ import type { CopilotChatLabels } from "@copilotkit/core";
49
2
 
50
- export type CopilotChatLabels = typeof CopilotChatDefaultLabels;
3
+ export { CopilotChatDefaultLabels } from "@copilotkit/core";
4
+ export type { CopilotChatLabels } from "@copilotkit/core";
51
5
 
52
6
  export interface CopilotChatConfigurationValue {
53
7
  labels: CopilotChatLabels;