@touchvue/chat 1.0.0-beta.5 → 1.0.0-beta.50

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 (443) hide show
  1. package/README.md +25 -25
  2. package/es/_virtual/_plugin-vue_export-helper.mjs +10 -0
  3. package/es/_virtual/_plugin-vue_export-helper.mjs.map +1 -0
  4. package/es/index.mjs.map +1 -1
  5. package/es/node_modules/.pnpm/@touchvue_a2ui@1.0.0-beta.46/node_modules/@touchvue/a2ui/dist/index.mjs +4816 -0
  6. package/es/node_modules/.pnpm/@touchvue_a2ui@1.0.0-beta.46/node_modules/@touchvue/a2ui/dist/index.mjs.map +1 -0
  7. package/es/node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.mjs +1380 -0
  8. package/es/node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.mjs.map +1 -0
  9. package/es/node_modules/.pnpm/html2canvas@1.4.1/node_modules/html2canvas/dist/html2canvas.esm.mjs +7824 -0
  10. package/es/node_modules/.pnpm/html2canvas@1.4.1/node_modules/html2canvas/dist/html2canvas.esm.mjs.map +1 -0
  11. package/es/package.json.css +1 -1
  12. package/es/package.json.mjs +2 -2
  13. package/es/packages/components/index.mjs +1 -1
  14. package/es/packages/components/resolver.mjs.map +1 -1
  15. package/es/packages/components/touchchat/component/AiRobot/HelloChat.vue.mjs +3 -2
  16. package/es/packages/components/touchchat/component/AiRobot/HelloChat.vue.mjs.map +1 -1
  17. package/es/packages/components/touchchat/component/AiRobot/HelloChat.vue2.mjs +219 -159
  18. package/es/packages/components/touchchat/component/AiRobot/HelloChat.vue2.mjs.map +1 -1
  19. package/es/packages/components/touchchat/component/AiRobot/face.vue.mjs +3 -2
  20. package/es/packages/components/touchchat/component/AiRobot/face.vue.mjs.map +1 -1
  21. package/es/packages/components/touchchat/component/AiRobot/face.vue2.mjs +27 -13
  22. package/es/packages/components/touchchat/component/AiRobot/face.vue2.mjs.map +1 -1
  23. package/es/packages/components/touchchat/component/AiRobot/letter.vue.mjs +3 -2
  24. package/es/packages/components/touchchat/component/AiRobot/letter.vue.mjs.map +1 -1
  25. package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs +182 -41
  26. package/es/packages/components/touchchat/component/AiRobot/letter.vue2.mjs.map +1 -1
  27. package/es/packages/components/touchchat/component/AiRobot/meterialPrepare.vue.mjs +3 -2
  28. package/es/packages/components/touchchat/component/AiRobot/meterialPrepare.vue.mjs.map +1 -1
  29. package/es/packages/components/touchchat/component/AiRobot/meterialPrepare.vue2.mjs +15 -10
  30. package/es/packages/components/touchchat/component/AiRobot/meterialPrepare.vue2.mjs.map +1 -1
  31. package/es/packages/components/touchchat/component/AiRobot/start.vue.mjs +3 -2
  32. package/es/packages/components/touchchat/component/AiRobot/start.vue.mjs.map +1 -1
  33. package/es/packages/components/touchchat/component/AiRobot/start.vue2.mjs +18 -11
  34. package/es/packages/components/touchchat/component/AiRobot/start.vue2.mjs.map +1 -1
  35. package/es/packages/components/touchchat/component/CardView.vue.mjs +3 -2
  36. package/es/packages/components/touchchat/component/CardView.vue.mjs.map +1 -1
  37. package/es/packages/components/touchchat/component/CardView.vue2.mjs +66 -42
  38. package/es/packages/components/touchchat/component/CardView.vue2.mjs.map +1 -1
  39. package/es/packages/components/touchchat/component/FileContent.vue.mjs +7 -0
  40. package/es/packages/components/touchchat/component/FileContent.vue.mjs.map +1 -0
  41. package/es/packages/components/touchchat/component/FileContent.vue2.mjs +206 -0
  42. package/es/packages/components/touchchat/component/FileContent.vue2.mjs.map +1 -0
  43. package/es/packages/components/touchchat/component/FileView.vue.mjs +3 -2
  44. package/es/packages/components/touchchat/component/FileView.vue.mjs.map +1 -1
  45. package/es/packages/components/touchchat/component/FileView.vue2.mjs +17 -4
  46. package/es/packages/components/touchchat/component/FileView.vue2.mjs.map +1 -1
  47. package/es/packages/components/touchchat/component/HelloChat.vue.mjs +3 -2
  48. package/es/packages/components/touchchat/component/HelloChat.vue.mjs.map +1 -1
  49. package/es/packages/components/touchchat/component/HelloChat.vue2.mjs +26 -14
  50. package/es/packages/components/touchchat/component/HelloChat.vue2.mjs.map +1 -1
  51. package/es/packages/components/touchchat/component/ImageFile.vue.mjs +7 -0
  52. package/es/packages/components/touchchat/component/ImageFile.vue.mjs.map +1 -0
  53. package/es/packages/components/touchchat/component/ImageFile.vue2.mjs +162 -0
  54. package/es/packages/components/touchchat/component/ImageFile.vue2.mjs.map +1 -0
  55. package/es/packages/components/touchchat/component/ImageView.vue.mjs +3 -2
  56. package/es/packages/components/touchchat/component/ImageView.vue.mjs.map +1 -1
  57. package/es/packages/components/touchchat/component/ImageView.vue2.mjs +1 -1
  58. package/es/packages/components/touchchat/component/ImageView.vue2.mjs.map +1 -1
  59. package/es/packages/components/touchchat/component/LinkView.vue.mjs +3 -2
  60. package/es/packages/components/touchchat/component/LinkView.vue.mjs.map +1 -1
  61. package/es/packages/components/touchchat/component/LinkView.vue2.mjs +19 -5
  62. package/es/packages/components/touchchat/component/LinkView.vue2.mjs.map +1 -1
  63. package/es/packages/components/touchchat/component/MarkLayer.vue.mjs +7 -0
  64. package/es/packages/components/touchchat/component/MarkLayer.vue.mjs.map +1 -0
  65. package/es/packages/components/touchchat/component/MarkLayer.vue2.mjs +56 -0
  66. package/es/packages/components/touchchat/component/MarkLayer.vue2.mjs.map +1 -0
  67. package/es/packages/components/touchchat/component/ModuleSelect.vue.mjs +7 -0
  68. package/es/packages/components/touchchat/component/ModuleSelect.vue.mjs.map +1 -0
  69. package/es/packages/components/touchchat/component/ModuleSelect.vue2.mjs +121 -0
  70. package/es/packages/components/touchchat/component/ModuleSelect.vue2.mjs.map +1 -0
  71. package/es/packages/components/touchchat/component/PDFFile.vue.mjs +7 -0
  72. package/es/packages/components/touchchat/component/PDFFile.vue.mjs.map +1 -0
  73. package/es/packages/components/touchchat/component/PDFFile.vue2.mjs +211 -0
  74. package/es/packages/components/touchchat/component/PDFFile.vue2.mjs.map +1 -0
  75. package/es/packages/components/touchchat/component/QuoteContent.vue.mjs +7 -0
  76. package/es/packages/components/touchchat/component/QuoteContent.vue.mjs.map +1 -0
  77. package/es/packages/components/touchchat/component/QuoteContent.vue2.mjs +40 -0
  78. package/es/packages/components/touchchat/component/QuoteContent.vue2.mjs.map +1 -0
  79. package/es/packages/components/touchchat/component/RealtimeVoice.vue.mjs +7 -0
  80. package/es/packages/components/touchchat/component/RealtimeVoice.vue.mjs.map +1 -0
  81. package/es/packages/components/touchchat/component/RealtimeVoice.vue2.mjs +160 -0
  82. package/es/packages/components/touchchat/component/RealtimeVoice.vue2.mjs.map +1 -0
  83. package/es/packages/components/touchchat/component/Screenshot.vue.mjs +7 -0
  84. package/es/packages/components/touchchat/component/Screenshot.vue.mjs.map +1 -0
  85. package/es/packages/components/touchchat/component/Screenshot.vue2.mjs +208 -0
  86. package/es/packages/components/touchchat/component/Screenshot.vue2.mjs.map +1 -0
  87. package/es/packages/components/touchchat/component/ThoughtChain.vue.mjs +7 -0
  88. package/es/packages/components/touchchat/component/ThoughtChain.vue.mjs.map +1 -0
  89. package/es/packages/components/touchchat/component/ThoughtChain.vue2.mjs +69 -0
  90. package/es/packages/components/touchchat/component/ThoughtChain.vue2.mjs.map +1 -0
  91. package/es/packages/components/touchchat/component/UploadView.vue.mjs +7 -0
  92. package/es/packages/components/touchchat/component/UploadView.vue.mjs.map +1 -0
  93. package/es/packages/components/touchchat/component/UploadView.vue2.mjs +186 -0
  94. package/es/packages/components/touchchat/component/UploadView.vue2.mjs.map +1 -0
  95. package/es/packages/components/touchchat/component/UploadView_api.vue.mjs +7 -0
  96. package/es/packages/components/touchchat/component/UploadView_api.vue.mjs.map +1 -0
  97. package/es/packages/components/touchchat/component/UploadView_api.vue2.mjs +166 -0
  98. package/es/packages/components/touchchat/component/UploadView_api.vue2.mjs.map +1 -0
  99. package/es/packages/components/touchchat/component/VideoFile.vue.mjs +7 -0
  100. package/es/packages/components/touchchat/component/VideoFile.vue.mjs.map +1 -0
  101. package/es/packages/components/touchchat/component/VideoFile.vue2.mjs +33 -0
  102. package/es/packages/components/touchchat/component/VideoFile.vue2.mjs.map +1 -0
  103. package/es/packages/components/touchchat/component/VoiceView.vue.mjs +7 -0
  104. package/es/packages/components/touchchat/component/VoiceView.vue.mjs.map +1 -0
  105. package/es/packages/components/touchchat/component/VoiceView.vue2.mjs +165 -0
  106. package/es/packages/components/touchchat/component/VoiceView.vue2.mjs.map +1 -0
  107. package/es/packages/components/touchchat/img/file/doc.png.mjs +4 -0
  108. package/es/packages/components/touchchat/img/file/doc.png.mjs.map +1 -0
  109. package/es/packages/components/touchchat/img/file/docx.png.mjs +4 -0
  110. package/es/packages/components/touchchat/img/file/docx.png.mjs.map +1 -0
  111. package/es/packages/components/touchchat/img/file/gif.png.mjs +4 -0
  112. package/es/packages/components/touchchat/img/file/gif.png.mjs.map +1 -0
  113. package/es/packages/components/touchchat/img/file/html.png.mjs +4 -0
  114. package/es/packages/components/touchchat/img/file/html.png.mjs.map +1 -0
  115. package/es/packages/components/touchchat/img/file/jpg.png.mjs +4 -0
  116. package/es/packages/components/touchchat/img/file/jpg.png.mjs.map +1 -0
  117. package/es/packages/components/touchchat/img/file/mp3.png.mjs +4 -0
  118. package/es/packages/components/touchchat/img/file/mp3.png.mjs.map +1 -0
  119. package/es/packages/components/touchchat/img/file/mp4.png.mjs +4 -0
  120. package/es/packages/components/touchchat/img/file/mp4.png.mjs.map +1 -0
  121. package/es/packages/components/touchchat/img/file/music.png.mjs +4 -0
  122. package/es/packages/components/touchchat/img/file/music.png.mjs.map +1 -0
  123. package/es/packages/components/touchchat/img/file/pdf.png.mjs +4 -0
  124. package/es/packages/components/touchchat/img/file/pdf.png.mjs.map +1 -0
  125. package/es/packages/components/touchchat/img/file/png.png.mjs +4 -0
  126. package/es/packages/components/touchchat/img/file/png.png.mjs.map +1 -0
  127. package/es/packages/components/touchchat/img/file/ppt.png.mjs +4 -0
  128. package/es/packages/components/touchchat/img/file/ppt.png.mjs.map +1 -0
  129. package/es/packages/components/touchchat/img/file/pptx.png.mjs +4 -0
  130. package/es/packages/components/touchchat/img/file/pptx.png.mjs.map +1 -0
  131. package/es/packages/components/touchchat/img/file/txt.png.mjs +4 -0
  132. package/es/packages/components/touchchat/img/file/txt.png.mjs.map +1 -0
  133. package/es/packages/components/touchchat/img/file/xls.png.mjs +4 -0
  134. package/es/packages/components/touchchat/img/file/xls.png.mjs.map +1 -0
  135. package/es/packages/components/touchchat/img/file/xlsx.png.mjs +4 -0
  136. package/es/packages/components/touchchat/img/file/xlsx.png.mjs.map +1 -0
  137. package/es/packages/components/touchchat/img/svg/reset.svg.mjs +4 -0
  138. package/es/packages/components/touchchat/img/svg/reset.svg.mjs.map +1 -0
  139. package/es/packages/components/touchchat/index.mjs +5 -5
  140. package/es/packages/components/touchchat/index.mjs.map +1 -1
  141. package/es/packages/components/touchchat/src/AiChat/AgentsView.vue.mjs +7 -0
  142. package/es/packages/components/touchchat/src/AiChat/AgentsView.vue.mjs.map +1 -0
  143. package/es/packages/components/touchchat/src/AiChat/AgentsView.vue2.mjs +59 -0
  144. package/es/packages/components/touchchat/src/AiChat/AgentsView.vue2.mjs.map +1 -0
  145. package/es/packages/components/touchchat/src/AiChat/AiMessage.vue.mjs +3 -2
  146. package/es/packages/components/touchchat/src/AiChat/AiMessage.vue.mjs.map +1 -1
  147. package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs +322 -139
  148. package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs.map +1 -1
  149. package/es/packages/components/touchchat/src/AiChat/Chat/TouchChat.mjs +18 -0
  150. package/es/packages/components/touchchat/src/AiChat/Chat/TouchChat.mjs.map +1 -0
  151. package/es/packages/components/touchchat/src/AiChat/Chat/scriptMatcher.mjs +145 -0
  152. package/es/packages/components/touchchat/src/AiChat/Chat/scriptMatcher.mjs.map +1 -0
  153. package/es/packages/components/touchchat/src/AiChat/Chat/types.mjs +19 -0
  154. package/es/packages/components/touchchat/src/AiChat/Chat/types.mjs.map +1 -0
  155. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs +693 -0
  156. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs.map +1 -0
  157. package/es/packages/components/touchchat/src/AiChat/Chat/useCopy.mjs +55 -0
  158. package/es/packages/components/touchchat/src/AiChat/Chat/useCopy.mjs.map +1 -0
  159. package/es/packages/components/touchchat/src/AiChat/Chat/useMessageRender.mjs +155 -0
  160. package/es/packages/components/touchchat/src/AiChat/Chat/useMessageRender.mjs.map +1 -0
  161. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs +345 -0
  162. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs.map +1 -0
  163. package/es/packages/components/touchchat/src/AiChat/Chat/useScroll.mjs +74 -0
  164. package/es/packages/components/touchchat/src/AiChat/Chat/useScroll.mjs.map +1 -0
  165. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue.mjs +3 -2
  166. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue.mjs.map +1 -1
  167. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +472 -44
  168. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
  169. package/es/packages/components/touchchat/src/AiChat/HistoryList.vue.mjs +3 -2
  170. package/es/packages/components/touchchat/src/AiChat/HistoryList.vue.mjs.map +1 -1
  171. package/es/packages/components/touchchat/src/AiChat/HistoryList.vue2.mjs +180 -98
  172. package/es/packages/components/touchchat/src/AiChat/HistoryList.vue2.mjs.map +1 -1
  173. package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue.mjs +3 -2
  174. package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue.mjs.map +1 -1
  175. package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.mjs +29 -12
  176. package/es/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.mjs.map +1 -1
  177. package/es/packages/components/touchchat/src/AiChat/MessageActions.vue.mjs +3 -2
  178. package/es/packages/components/touchchat/src/AiChat/MessageActions.vue.mjs.map +1 -1
  179. package/es/packages/components/touchchat/src/AiChat/MessageActions.vue2.mjs +175 -62
  180. package/es/packages/components/touchchat/src/AiChat/MessageActions.vue2.mjs.map +1 -1
  181. package/es/packages/components/touchchat/src/AiChat/SiderBarView.vue.mjs +3 -2
  182. package/es/packages/components/touchchat/src/AiChat/SiderBarView.vue.mjs.map +1 -1
  183. package/es/packages/components/touchchat/src/AiChat/SiderBarView.vue2.mjs +14 -8
  184. package/es/packages/components/touchchat/src/AiChat/SiderBarView.vue2.mjs.map +1 -1
  185. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue.mjs +7 -0
  186. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue.mjs.map +1 -0
  187. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs +1034 -0
  188. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs.map +1 -0
  189. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue.mjs +3 -2
  190. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue.mjs.map +1 -1
  191. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs +276 -1004
  192. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs.map +1 -1
  193. package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue.mjs +3 -2
  194. package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue.mjs.map +1 -1
  195. package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs +346 -122
  196. package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs.map +1 -1
  197. package/es/packages/components/touchchat/src/AiChat/UserMessage.vue.mjs +3 -2
  198. package/es/packages/components/touchchat/src/AiChat/UserMessage.vue.mjs.map +1 -1
  199. package/es/packages/components/touchchat/src/AiChat/UserMessage.vue2.mjs +143 -64
  200. package/es/packages/components/touchchat/src/AiChat/UserMessage.vue2.mjs.map +1 -1
  201. package/es/packages/components/touchchat/src/index.vue.mjs +3 -2
  202. package/es/packages/components/touchchat/src/index.vue.mjs.map +1 -1
  203. package/es/packages/components/touchchat/src/index.vue2.mjs +252 -143
  204. package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
  205. package/es/packages/components/touchchat/src/types/a2a.mjs +11 -0
  206. package/es/packages/components/touchchat/src/types/a2a.mjs.map +1 -0
  207. package/es/packages/components/touchchat/utils/a2aService.mjs +316 -0
  208. package/es/packages/components/touchchat/utils/a2aService.mjs.map +1 -0
  209. package/es/packages/components/touchchat/utils/fetchStream.mjs +8 -2
  210. package/es/packages/components/touchchat/utils/fetchStream.mjs.map +1 -1
  211. package/es/packages/components/touchchat/utils/markdown.mjs +31 -13
  212. package/es/packages/components/touchchat/utils/markdown.mjs.map +1 -1
  213. package/es/packages/utils/config.mjs.map +1 -1
  214. package/es/packages/utils/types.mjs.map +1 -1
  215. package/global.d.ts +2 -2
  216. package/lib/_virtual/_plugin-vue_export-helper.js +14 -0
  217. package/lib/_virtual/_plugin-vue_export-helper.js.map +1 -0
  218. package/lib/index.js.map +1 -1
  219. package/lib/node_modules/.pnpm/@touchvue_a2ui@1.0.0-beta.46/node_modules/@touchvue/a2ui/dist/index.js +4819 -0
  220. package/lib/node_modules/.pnpm/@touchvue_a2ui@1.0.0-beta.46/node_modules/@touchvue/a2ui/dist/index.js.map +1 -0
  221. package/lib/node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.js +1384 -0
  222. package/lib/node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.js.map +1 -0
  223. package/lib/node_modules/.pnpm/html2canvas@1.4.1/node_modules/html2canvas/dist/html2canvas.esm.js +7828 -0
  224. package/lib/node_modules/.pnpm/html2canvas@1.4.1/node_modules/html2canvas/dist/html2canvas.esm.js.map +1 -0
  225. package/lib/package.json.css +1 -1
  226. package/lib/package.json.js +2 -2
  227. package/lib/packages/components/index.js +2 -2
  228. package/lib/packages/components/resolver.js.map +1 -1
  229. package/lib/packages/components/touchchat/component/AiRobot/HelloChat.vue.js +3 -2
  230. package/lib/packages/components/touchchat/component/AiRobot/HelloChat.vue.js.map +1 -1
  231. package/lib/packages/components/touchchat/component/AiRobot/HelloChat.vue2.js +219 -159
  232. package/lib/packages/components/touchchat/component/AiRobot/HelloChat.vue2.js.map +1 -1
  233. package/lib/packages/components/touchchat/component/AiRobot/face.vue.js +3 -2
  234. package/lib/packages/components/touchchat/component/AiRobot/face.vue.js.map +1 -1
  235. package/lib/packages/components/touchchat/component/AiRobot/face.vue2.js +26 -12
  236. package/lib/packages/components/touchchat/component/AiRobot/face.vue2.js.map +1 -1
  237. package/lib/packages/components/touchchat/component/AiRobot/letter.vue.js +3 -2
  238. package/lib/packages/components/touchchat/component/AiRobot/letter.vue.js.map +1 -1
  239. package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js +181 -40
  240. package/lib/packages/components/touchchat/component/AiRobot/letter.vue2.js.map +1 -1
  241. package/lib/packages/components/touchchat/component/AiRobot/meterialPrepare.vue.js +3 -2
  242. package/lib/packages/components/touchchat/component/AiRobot/meterialPrepare.vue.js.map +1 -1
  243. package/lib/packages/components/touchchat/component/AiRobot/meterialPrepare.vue2.js +15 -10
  244. package/lib/packages/components/touchchat/component/AiRobot/meterialPrepare.vue2.js.map +1 -1
  245. package/lib/packages/components/touchchat/component/AiRobot/start.vue.js +3 -2
  246. package/lib/packages/components/touchchat/component/AiRobot/start.vue.js.map +1 -1
  247. package/lib/packages/components/touchchat/component/AiRobot/start.vue2.js +17 -10
  248. package/lib/packages/components/touchchat/component/AiRobot/start.vue2.js.map +1 -1
  249. package/lib/packages/components/touchchat/component/CardView.vue.js +3 -2
  250. package/lib/packages/components/touchchat/component/CardView.vue.js.map +1 -1
  251. package/lib/packages/components/touchchat/component/CardView.vue2.js +66 -42
  252. package/lib/packages/components/touchchat/component/CardView.vue2.js.map +1 -1
  253. package/lib/packages/components/touchchat/component/FileContent.vue.js +11 -0
  254. package/lib/packages/components/touchchat/component/FileContent.vue.js.map +1 -0
  255. package/lib/packages/components/touchchat/component/FileContent.vue2.js +210 -0
  256. package/lib/packages/components/touchchat/component/FileContent.vue2.js.map +1 -0
  257. package/lib/packages/components/touchchat/component/FileView.vue.js +3 -2
  258. package/lib/packages/components/touchchat/component/FileView.vue.js.map +1 -1
  259. package/lib/packages/components/touchchat/component/FileView.vue2.js +16 -3
  260. package/lib/packages/components/touchchat/component/FileView.vue2.js.map +1 -1
  261. package/lib/packages/components/touchchat/component/HelloChat.vue.js +3 -2
  262. package/lib/packages/components/touchchat/component/HelloChat.vue.js.map +1 -1
  263. package/lib/packages/components/touchchat/component/HelloChat.vue2.js +26 -14
  264. package/lib/packages/components/touchchat/component/HelloChat.vue2.js.map +1 -1
  265. package/lib/packages/components/touchchat/component/ImageFile.vue.js +11 -0
  266. package/lib/packages/components/touchchat/component/ImageFile.vue.js.map +1 -0
  267. package/lib/packages/components/touchchat/component/ImageFile.vue2.js +166 -0
  268. package/lib/packages/components/touchchat/component/ImageFile.vue2.js.map +1 -0
  269. package/lib/packages/components/touchchat/component/ImageView.vue.js +3 -2
  270. package/lib/packages/components/touchchat/component/ImageView.vue.js.map +1 -1
  271. package/lib/packages/components/touchchat/component/ImageView.vue2.js +1 -1
  272. package/lib/packages/components/touchchat/component/ImageView.vue2.js.map +1 -1
  273. package/lib/packages/components/touchchat/component/LinkView.vue.js +3 -2
  274. package/lib/packages/components/touchchat/component/LinkView.vue.js.map +1 -1
  275. package/lib/packages/components/touchchat/component/LinkView.vue2.js +18 -4
  276. package/lib/packages/components/touchchat/component/LinkView.vue2.js.map +1 -1
  277. package/lib/packages/components/touchchat/component/MarkLayer.vue.js +11 -0
  278. package/lib/packages/components/touchchat/component/MarkLayer.vue.js.map +1 -0
  279. package/lib/packages/components/touchchat/component/MarkLayer.vue2.js +60 -0
  280. package/lib/packages/components/touchchat/component/MarkLayer.vue2.js.map +1 -0
  281. package/lib/packages/components/touchchat/component/ModuleSelect.vue.js +11 -0
  282. package/lib/packages/components/touchchat/component/ModuleSelect.vue.js.map +1 -0
  283. package/lib/packages/components/touchchat/component/ModuleSelect.vue2.js +125 -0
  284. package/lib/packages/components/touchchat/component/ModuleSelect.vue2.js.map +1 -0
  285. package/lib/packages/components/touchchat/component/PDFFile.vue.js +11 -0
  286. package/lib/packages/components/touchchat/component/PDFFile.vue.js.map +1 -0
  287. package/lib/packages/components/touchchat/component/PDFFile.vue2.js +215 -0
  288. package/lib/packages/components/touchchat/component/PDFFile.vue2.js.map +1 -0
  289. package/lib/packages/components/touchchat/component/QuoteContent.vue.js +11 -0
  290. package/lib/packages/components/touchchat/component/QuoteContent.vue.js.map +1 -0
  291. package/lib/packages/components/touchchat/component/QuoteContent.vue2.js +44 -0
  292. package/lib/packages/components/touchchat/component/QuoteContent.vue2.js.map +1 -0
  293. package/lib/packages/components/touchchat/component/RealtimeVoice.vue.js +11 -0
  294. package/lib/packages/components/touchchat/component/RealtimeVoice.vue.js.map +1 -0
  295. package/lib/packages/components/touchchat/component/RealtimeVoice.vue2.js +164 -0
  296. package/lib/packages/components/touchchat/component/RealtimeVoice.vue2.js.map +1 -0
  297. package/lib/packages/components/touchchat/component/Screenshot.vue.js +11 -0
  298. package/lib/packages/components/touchchat/component/Screenshot.vue.js.map +1 -0
  299. package/lib/packages/components/touchchat/component/Screenshot.vue2.js +212 -0
  300. package/lib/packages/components/touchchat/component/Screenshot.vue2.js.map +1 -0
  301. package/lib/packages/components/touchchat/component/ThoughtChain.vue.js +11 -0
  302. package/lib/packages/components/touchchat/component/ThoughtChain.vue.js.map +1 -0
  303. package/lib/packages/components/touchchat/component/ThoughtChain.vue2.js +73 -0
  304. package/lib/packages/components/touchchat/component/ThoughtChain.vue2.js.map +1 -0
  305. package/lib/packages/components/touchchat/component/UploadView.vue.js +11 -0
  306. package/lib/packages/components/touchchat/component/UploadView.vue.js.map +1 -0
  307. package/lib/packages/components/touchchat/component/UploadView.vue2.js +190 -0
  308. package/lib/packages/components/touchchat/component/UploadView.vue2.js.map +1 -0
  309. package/lib/packages/components/touchchat/component/UploadView_api.vue.js +11 -0
  310. package/lib/packages/components/touchchat/component/UploadView_api.vue.js.map +1 -0
  311. package/lib/packages/components/touchchat/component/UploadView_api.vue2.js +170 -0
  312. package/lib/packages/components/touchchat/component/UploadView_api.vue2.js.map +1 -0
  313. package/lib/packages/components/touchchat/component/VideoFile.vue.js +11 -0
  314. package/lib/packages/components/touchchat/component/VideoFile.vue.js.map +1 -0
  315. package/lib/packages/components/touchchat/component/VideoFile.vue2.js +37 -0
  316. package/lib/packages/components/touchchat/component/VideoFile.vue2.js.map +1 -0
  317. package/lib/packages/components/touchchat/component/VoiceView.vue.js +11 -0
  318. package/lib/packages/components/touchchat/component/VoiceView.vue.js.map +1 -0
  319. package/lib/packages/components/touchchat/component/VoiceView.vue2.js +169 -0
  320. package/lib/packages/components/touchchat/component/VoiceView.vue2.js.map +1 -0
  321. package/lib/packages/components/touchchat/img/file/doc.png.js +8 -0
  322. package/lib/packages/components/touchchat/img/file/doc.png.js.map +1 -0
  323. package/lib/packages/components/touchchat/img/file/docx.png.js +8 -0
  324. package/lib/packages/components/touchchat/img/file/docx.png.js.map +1 -0
  325. package/lib/packages/components/touchchat/img/file/gif.png.js +8 -0
  326. package/lib/packages/components/touchchat/img/file/gif.png.js.map +1 -0
  327. package/lib/packages/components/touchchat/img/file/html.png.js +8 -0
  328. package/lib/packages/components/touchchat/img/file/html.png.js.map +1 -0
  329. package/lib/packages/components/touchchat/img/file/jpg.png.js +8 -0
  330. package/lib/packages/components/touchchat/img/file/jpg.png.js.map +1 -0
  331. package/lib/packages/components/touchchat/img/file/mp3.png.js +8 -0
  332. package/lib/packages/components/touchchat/img/file/mp3.png.js.map +1 -0
  333. package/lib/packages/components/touchchat/img/file/mp4.png.js +8 -0
  334. package/lib/packages/components/touchchat/img/file/mp4.png.js.map +1 -0
  335. package/lib/packages/components/touchchat/img/file/music.png.js +8 -0
  336. package/lib/packages/components/touchchat/img/file/music.png.js.map +1 -0
  337. package/lib/packages/components/touchchat/img/file/pdf.png.js +8 -0
  338. package/lib/packages/components/touchchat/img/file/pdf.png.js.map +1 -0
  339. package/lib/packages/components/touchchat/img/file/png.png.js +8 -0
  340. package/lib/packages/components/touchchat/img/file/png.png.js.map +1 -0
  341. package/lib/packages/components/touchchat/img/file/ppt.png.js +8 -0
  342. package/lib/packages/components/touchchat/img/file/ppt.png.js.map +1 -0
  343. package/lib/packages/components/touchchat/img/file/pptx.png.js +8 -0
  344. package/lib/packages/components/touchchat/img/file/pptx.png.js.map +1 -0
  345. package/lib/packages/components/touchchat/img/file/txt.png.js +8 -0
  346. package/lib/packages/components/touchchat/img/file/txt.png.js.map +1 -0
  347. package/lib/packages/components/touchchat/img/file/xls.png.js +8 -0
  348. package/lib/packages/components/touchchat/img/file/xls.png.js.map +1 -0
  349. package/lib/packages/components/touchchat/img/file/xlsx.png.js +8 -0
  350. package/lib/packages/components/touchchat/img/file/xlsx.png.js.map +1 -0
  351. package/lib/packages/components/touchchat/img/svg/reset.svg.js +8 -0
  352. package/lib/packages/components/touchchat/img/svg/reset.svg.js.map +1 -0
  353. package/lib/packages/components/touchchat/index.js +6 -6
  354. package/lib/packages/components/touchchat/index.js.map +1 -1
  355. package/lib/packages/components/touchchat/src/AiChat/AgentsView.vue.js +11 -0
  356. package/lib/packages/components/touchchat/src/AiChat/AgentsView.vue.js.map +1 -0
  357. package/lib/packages/components/touchchat/src/AiChat/AgentsView.vue2.js +63 -0
  358. package/lib/packages/components/touchchat/src/AiChat/AgentsView.vue2.js.map +1 -0
  359. package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue.js +3 -2
  360. package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue.js.map +1 -1
  361. package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js +321 -138
  362. package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js.map +1 -1
  363. package/lib/packages/components/touchchat/src/AiChat/Chat/TouchChat.js +21 -0
  364. package/lib/packages/components/touchchat/src/AiChat/Chat/TouchChat.js.map +1 -0
  365. package/lib/packages/components/touchchat/src/AiChat/Chat/scriptMatcher.js +147 -0
  366. package/lib/packages/components/touchchat/src/AiChat/Chat/scriptMatcher.js.map +1 -0
  367. package/lib/packages/components/touchchat/src/AiChat/Chat/types.js +22 -0
  368. package/lib/packages/components/touchchat/src/AiChat/Chat/types.js.map +1 -0
  369. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js +695 -0
  370. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js.map +1 -0
  371. package/lib/packages/components/touchchat/src/AiChat/Chat/useCopy.js +57 -0
  372. package/lib/packages/components/touchchat/src/AiChat/Chat/useCopy.js.map +1 -0
  373. package/lib/packages/components/touchchat/src/AiChat/Chat/useMessageRender.js +157 -0
  374. package/lib/packages/components/touchchat/src/AiChat/Chat/useMessageRender.js.map +1 -0
  375. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js +347 -0
  376. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js.map +1 -0
  377. package/lib/packages/components/touchchat/src/AiChat/Chat/useScroll.js +76 -0
  378. package/lib/packages/components/touchchat/src/AiChat/Chat/useScroll.js.map +1 -0
  379. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue.js +3 -2
  380. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue.js.map +1 -1
  381. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +471 -43
  382. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
  383. package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue.js +3 -2
  384. package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue.js.map +1 -1
  385. package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue2.js +179 -97
  386. package/lib/packages/components/touchchat/src/AiChat/HistoryList.vue2.js.map +1 -1
  387. package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue.js +3 -2
  388. package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue.js.map +1 -1
  389. package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.js +28 -11
  390. package/lib/packages/components/touchchat/src/AiChat/HistorySidebar.vue2.js.map +1 -1
  391. package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue.js +3 -2
  392. package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue.js.map +1 -1
  393. package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue2.js +174 -61
  394. package/lib/packages/components/touchchat/src/AiChat/MessageActions.vue2.js.map +1 -1
  395. package/lib/packages/components/touchchat/src/AiChat/SiderBarView.vue.js +3 -2
  396. package/lib/packages/components/touchchat/src/AiChat/SiderBarView.vue.js.map +1 -1
  397. package/lib/packages/components/touchchat/src/AiChat/SiderBarView.vue2.js +14 -8
  398. package/lib/packages/components/touchchat/src/AiChat/SiderBarView.vue2.js.map +1 -1
  399. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue.js +11 -0
  400. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue.js.map +1 -0
  401. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js +1038 -0
  402. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js.map +1 -0
  403. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue.js +3 -2
  404. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue.js.map +1 -1
  405. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js +275 -1003
  406. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js.map +1 -1
  407. package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue.js +3 -2
  408. package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue.js.map +1 -1
  409. package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js +345 -121
  410. package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js.map +1 -1
  411. package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue.js +3 -2
  412. package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue.js.map +1 -1
  413. package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue2.js +142 -63
  414. package/lib/packages/components/touchchat/src/AiChat/UserMessage.vue2.js.map +1 -1
  415. package/lib/packages/components/touchchat/src/index.vue.js +3 -2
  416. package/lib/packages/components/touchchat/src/index.vue.js.map +1 -1
  417. package/lib/packages/components/touchchat/src/index.vue2.js +251 -142
  418. package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
  419. package/lib/packages/components/touchchat/src/types/a2a.js +13 -0
  420. package/lib/packages/components/touchchat/src/types/a2a.js.map +1 -0
  421. package/lib/packages/components/touchchat/utils/a2aService.js +319 -0
  422. package/lib/packages/components/touchchat/utils/a2aService.js.map +1 -0
  423. package/lib/packages/components/touchchat/utils/fetchStream.js +8 -2
  424. package/lib/packages/components/touchchat/utils/fetchStream.js.map +1 -1
  425. package/lib/packages/components/touchchat/utils/markdown.js +31 -13
  426. package/lib/packages/components/touchchat/utils/markdown.js.map +1 -1
  427. package/lib/packages/utils/config.js.map +1 -1
  428. package/lib/packages/utils/types.js.map +1 -1
  429. package/package.json +83 -83
  430. package/theme/components/index.css +969 -43
  431. package/theme/font/iconfont.woff +0 -0
  432. package/theme/font/iconfont.woff2 +0 -0
  433. package/theme/index.css +969 -43
  434. package/theme/skin/default.css +969 -43
  435. package/types/global.d.ts +2 -2
  436. package/es/packages/components/touchchat/src/AiChat/Scene.vue.mjs +0 -6
  437. package/es/packages/components/touchchat/src/AiChat/Scene.vue.mjs.map +0 -1
  438. package/es/packages/components/touchchat/src/AiChat/Scene.vue2.mjs +0 -42
  439. package/es/packages/components/touchchat/src/AiChat/Scene.vue2.mjs.map +0 -1
  440. package/lib/packages/components/touchchat/src/AiChat/Scene.vue.js +0 -10
  441. package/lib/packages/components/touchchat/src/AiChat/Scene.vue.js.map +0 -1
  442. package/lib/packages/components/touchchat/src/AiChat/Scene.vue2.js +0 -46
  443. package/lib/packages/components/touchchat/src/AiChat/Scene.vue2.js.map +0 -1
@@ -0,0 +1,316 @@
1
+ class A2AService {
2
+ constructor() {
3
+ this.agents = /* @__PURE__ */ new Map();
4
+ }
5
+ // Register an agent
6
+ registerAgent(config) {
7
+ this.agents.set(config.id, config);
8
+ }
9
+ // Unregister an agent
10
+ unregisterAgent(agentId) {
11
+ this.agents.delete(agentId);
12
+ }
13
+ // Get registered agent
14
+ getAgent(agentId) {
15
+ return this.agents.get(agentId);
16
+ }
17
+ // Get all registered agents
18
+ getAllAgents() {
19
+ return Array.from(this.agents.values());
20
+ }
21
+ // Fetch agent card (agent discovery)
22
+ async fetchAgentCard(url) {
23
+ const response = await fetch(url, {
24
+ method: "GET",
25
+ headers: {
26
+ Accept: "application/json"
27
+ }
28
+ });
29
+ if (!response.ok) {
30
+ throw new Error(`Failed to fetch agent card: ${response.statusText}`);
31
+ }
32
+ return response.json();
33
+ }
34
+ // Send message to agent (non-streaming)
35
+ async sendMessage(agentId, message, sessionId) {
36
+ const agent = this.agents.get(agentId);
37
+ if (!agent) {
38
+ throw new Error(`Agent ${agentId} not found`);
39
+ }
40
+ const request = {
41
+ jsonrpc: "2.0",
42
+ id: this.generateId(),
43
+ method: "message/send",
44
+ params: {
45
+ message,
46
+ sessionId
47
+ }
48
+ };
49
+ const response = await fetch(agent.endpoint, {
50
+ method: "POST",
51
+ headers: {
52
+ "Content-Type": "application/json",
53
+ ...agent.authToken && { Authorization: `Bearer ${agent.authToken}` }
54
+ },
55
+ body: JSON.stringify(request)
56
+ });
57
+ if (!response.ok) {
58
+ throw new Error(`HTTP error: ${response.status}`);
59
+ }
60
+ const data = await response.json();
61
+ if (data.error) {
62
+ throw new Error(`A2A error: ${data.error.message}`);
63
+ }
64
+ return data.result;
65
+ }
66
+ // Stream message to agent (for streaming responses)
67
+ async streamMessage(agentId, message, sessionId, signal) {
68
+ const agent = this.agents.get(agentId);
69
+ if (!agent) {
70
+ throw new Error(`Agent ${agentId} not found`);
71
+ }
72
+ const request = {
73
+ jsonrpc: "2.0",
74
+ id: this.generateId(),
75
+ method: "message/stream",
76
+ params: {
77
+ message,
78
+ sessionId
79
+ }
80
+ };
81
+ const response = await fetch(agent.endpoint, {
82
+ method: "POST",
83
+ headers: {
84
+ "Content-Type": "application/json",
85
+ Accept: "text/event-stream",
86
+ ...agent.authToken && { Authorization: `Bearer ${agent.authToken}` }
87
+ },
88
+ body: JSON.stringify(request),
89
+ signal
90
+ });
91
+ if (!response.ok) {
92
+ throw new Error(`HTTP error: ${response.status}`);
93
+ }
94
+ if (!response.body) {
95
+ throw new Error("No response body");
96
+ }
97
+ return new ReadableStream({
98
+ async start(controller) {
99
+ const reader = response.body.getReader();
100
+ const decoder = new TextDecoder();
101
+ let buffer = "";
102
+ if (signal) {
103
+ signal.addEventListener("abort", () => {
104
+ controller.close();
105
+ reader.cancel();
106
+ });
107
+ }
108
+ try {
109
+ let isDone = false;
110
+ while (!isDone) {
111
+ if (signal == null ? void 0 : signal.aborted) {
112
+ controller.close();
113
+ return;
114
+ }
115
+ const { done, value } = await reader.read();
116
+ if (done) {
117
+ isDone = true;
118
+ controller.close();
119
+ break;
120
+ }
121
+ buffer += decoder.decode(value, { stream: true });
122
+ const lines = buffer.split("\n");
123
+ buffer = lines.pop() || "";
124
+ const fn = async (data) => {
125
+ if (data === "[DONE]") {
126
+ controller.close();
127
+ return;
128
+ }
129
+ try {
130
+ const chunk = JSON.parse(data);
131
+ await new Promise((resolve) => setTimeout(resolve, 50));
132
+ controller.enqueue(chunk);
133
+ } catch (e) {
134
+ console.warn("Failed to parse SSE data:", data);
135
+ }
136
+ };
137
+ for (const line of lines) {
138
+ const trimmed = line.trim();
139
+ if (trimmed.startsWith("data:")) {
140
+ const data = trimmed.slice(5);
141
+ await fn(data);
142
+ } else if (trimmed.startsWith("data: ")) {
143
+ const data = trimmed.slice(6);
144
+ await fn(data);
145
+ }
146
+ }
147
+ }
148
+ } finally {
149
+ reader.releaseLock();
150
+ }
151
+ }
152
+ });
153
+ }
154
+ // Multi-agent message routing
155
+ async routeMessage(agentIds, message, mode = "sequential") {
156
+ const results = /* @__PURE__ */ new Map();
157
+ if (mode === "parallel") {
158
+ const promises = agentIds.map(async (agentId) => {
159
+ try {
160
+ const task = await this.sendMessage(agentId, message);
161
+ return { agentId, task, error: null };
162
+ } catch (error) {
163
+ return { agentId, task: null, error };
164
+ }
165
+ });
166
+ const settled = await Promise.all(promises);
167
+ for (const { agentId, task, error } of settled) {
168
+ if (task) {
169
+ results.set(agentId, task);
170
+ } else {
171
+ console.error(`Error sending to agent ${agentId}:`, error);
172
+ }
173
+ }
174
+ } else {
175
+ for (const agentId of agentIds) {
176
+ try {
177
+ const task = await this.sendMessage(agentId, message);
178
+ results.set(agentId, task);
179
+ } catch (error) {
180
+ console.error(`Error sending to agent ${agentId}:`, error);
181
+ }
182
+ }
183
+ }
184
+ return results;
185
+ }
186
+ // Get task status
187
+ async getTask(agentId, taskId) {
188
+ const agent = this.agents.get(agentId);
189
+ if (!agent) {
190
+ throw new Error(`Agent ${agentId} not found`);
191
+ }
192
+ const request = {
193
+ jsonrpc: "2.0",
194
+ id: this.generateId(),
195
+ method: "task/get",
196
+ params: { taskId }
197
+ };
198
+ const response = await fetch(agent.endpoint, {
199
+ method: "POST",
200
+ headers: {
201
+ "Content-Type": "application/json",
202
+ ...agent.authToken && { Authorization: `Bearer ${agent.authToken}` }
203
+ },
204
+ body: JSON.stringify(request)
205
+ });
206
+ if (!response.ok) {
207
+ throw new Error(`HTTP error: ${response.status}`);
208
+ }
209
+ const data = await response.json();
210
+ if (data.error) {
211
+ throw new Error(`A2A error: ${data.error.message}`);
212
+ }
213
+ return data.result;
214
+ }
215
+ // Cancel task
216
+ async cancelTask(agentId, taskId) {
217
+ const agent = this.agents.get(agentId);
218
+ if (!agent) {
219
+ throw new Error(`Agent ${agentId} not found`);
220
+ }
221
+ const request = {
222
+ jsonrpc: "2.0",
223
+ id: this.generateId(),
224
+ method: "task/cancel",
225
+ params: { taskId }
226
+ };
227
+ const response = await fetch(agent.endpoint, {
228
+ method: "POST",
229
+ headers: {
230
+ "Content-Type": "application/json",
231
+ ...agent.authToken && { Authorization: `Bearer ${agent.authToken}` }
232
+ },
233
+ body: JSON.stringify(request)
234
+ });
235
+ if (!response.ok) {
236
+ throw new Error(`HTTP error: ${response.status}`);
237
+ }
238
+ const data = await response.json();
239
+ if (data.error) {
240
+ throw new Error(`A2A error: ${data.error.message}`);
241
+ }
242
+ }
243
+ // Generate unique ID
244
+ generateId() {
245
+ return `req-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
246
+ }
247
+ // Multi-agent streaming message
248
+ async *streamMultiAgentMessage(hostEndpoint, subAgents, message, headers, sessionId, signal) {
249
+ const subAgentsJson = JSON.stringify(subAgents);
250
+ const xSubAgents = btoa(unescape(encodeURIComponent(subAgentsJson)));
251
+ const request = {
252
+ jsonrpc: "2.0",
253
+ id: this.generateId(),
254
+ method: "message/stream",
255
+ params: {
256
+ message,
257
+ sessionId
258
+ }
259
+ };
260
+ const response = await fetch(hostEndpoint, {
261
+ method: "POST",
262
+ headers: {
263
+ "Content-Type": "application/json",
264
+ Accept: "text/event-stream",
265
+ "X-Sub-Agents": xSubAgents,
266
+ // 'ai-jwt-token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhc2lhaW5mby5jb20iLCJzdWIiOiJkZW5nd2FuIiwiYXVkIjoiY29tLmFpZi5wYWFzLndlYlRva2VuIiwidXNlckluZm8iOiJ7XCJhbGlhc1wiOlwiZGVuZ3dhblwiLFwiYXV0b2luXCI6ZmFsc2UsXCJlbnZDb2RlXCI6XCJQUk9EXCIsXCJlbnZOYW1lXCI6XCLnlJ_kuqfnjq_looNcIixcImxhbmd1YWdlXCI6XCJ6aFwiLFwicGVybWlzc2lvbnNcIjpbXCJcIixcInBvcnRhbDpzeXN0ZW06cm9sZTpiaW5kXCIsXCJwb3J0YWw6ZGljdGlvbmFyeTpkYXRhOmFkZFwiLG51bGwsXCJhZ2VudFwiLFwicG9ydGFsOnN5c3RlbTp1c2VyOmRlbGV0ZVwiLFwicG9ydGFsOmRpY3Rpb25hcnk6ZGF0YTp1cGRhdGVcIixcImF1ZGl0TG9nL2xpc3RBdWRpdExvZ1wiLFwicG9ydGFsOmRpY3Rpb25hcnk6ZGF0YTpkZWxldGVcIixcInBvcnRhbDpzeXN0ZW06dXNlcjp1cGRhdGVcIixcInBvcnRhbDptY3A6YXVkaXRcIixcInBvcnRhbDptY3A6c2FmZWF1ZGl0XCIsXCJwb3J0YWw6bWNwOnRvb2xjb25maXJtXCIsXCJwb3J0YWw6c3lzdGVtOnRlbmFudDphZGRcIixcInBvcnRhbDpzeXN0ZW06dGVuYW50OnJlbGF0aW9uXCIsXCJwb3J0YWw6c3lzdGVtOm9wZXJhdGlvbjpwZXJtaXNzaW9uXCIsXCJwb3J0YWw6c3lzdGVtUGFyYW1ldGVyOmRlbGV0ZVwiLFwicG9ydGFsOmRpY3Rpb25hcnk6dXBkYXRlXCIsXCJwb3J0YWw6c3lzdGVtOnJvbGU6YWRkXCIsXCJ0ZW5hbnQvZ2V0VGVuYW50RHRvTGlzdFwiLFwicG9ydGFsOnN5c3RlbTpyb2xlOnVwZGF0ZVwiLFwicG9ydGFsOmFnZW50OmF1ZGl0XCIsXCJwb3J0YWw6bm90aWNlOnVwZGF0ZVwiLFwicG9ydGFsOnN5c3RlbTpyb2xlOmRlbGV0ZVwiLFwicG9ydGFsOnN5c3RlbTp1c2VyOmFkZFwiLFwibWVudS9nZXRNZW51QnlQYXJhbVwiLFwicG9ydGFsOmRpY3Rpb25hcnk6ZGVsZXRlXCIsXCJwb3J0YWw6c3lzdGVtOm9wZXJhdGlvbjpkZWxldGVcIixcInVzZXIvcXVlcnlVc2VyRHRvTGlzdFwiLFwicG9ydGFsOnN5c3RlbTptZW51OmFkZFwiLFwicG9ydGFsOnN5c3RlbVBhcmFtZXRlcjp1cGRhdGVcIixcInBvcnRhbDphZ2VudDptb2RlbGNoZWNrXCIsXCJwb3J0YWw6c3lzdGVtOm1lbnU6dXBkYXRlXCIsXCJyb2xlL3F1ZXJ5Um9sZUxpc3RcIixcInBvcnRhbDpzeXN0ZW06bWVudTpkZWxldGVcIixcInBvcnRhbDpub3RpY2U6YWRkXCIsXCJwb3J0YWw6c3lzdGVtOnRlbmFudDpkZWxldGVcIixcInBvcnRhbDpzeXN0ZW1QYXJhbWV0ZXI6YWRkXCIsXCJyb2xlUGVybWlzc2lvbnMvcXVlcnlNZW51UGVybWlzc2lvbkxpc3RcIixcInBvcnRhbDpzeXN0ZW06dGVuYW50OnVwZGF0ZVwiLFwibm90aWNlL2xpc3ROb3RpY2VcIl0sXCJwbGF0Zm9ybU1hbmFnZXJcIjp0cnVlLFwicm9sZUxpc3RcIjpbe1wiY3JlYXRlVGltZVwiOlwiMjAyNi0wMy0wMSAwMDowMDowMFwiLFwiaGFzRWRpdFwiOjEsXCJyb2xlQ29kZVwiOlwiY2FwX3Byb3ZpZGVyXCIsXCJyb2xlSWRcIjoxMixcInJvbGVOYW1lXCI6XCLog73lipvmj5DkvpvogIVcIixcInJvbGVUeXBlXCI6MX0se1wiY3JlYXRlVGltZVwiOlwiMjAyNi0wMy0wMSAwMDowMDowMFwiLFwiaGFzRWRpdFwiOjEsXCJyb2xlQ29kZVwiOlwidGVuYW50X2FkbWluXCIsXCJyb2xlSWRcIjo4LFwicm9sZU5hbWVcIjpcIuenn-aIt-euoeeQhuWRmFwiLFwicm9sZVR5cGVcIjoxfSx7XCJjcmVhdGVUaW1lXCI6XCIyMDIyLTA2LTI4IDAwOjAwOjAwXCIsXCJoYXNFZGl0XCI6MSxcInJvbGVDb2RlXCI6XCJyb2xlX2FkbWluXCIsXCJyb2xlSWRcIjoxLFwicm9sZU5hbWVcIjpcIui2hee6p-euoeeQhuWRmFwiLFwicm9sZVR5cGVcIjoxfV0sXCJ0ZW5hbnRDb2RlXCI6XCJ0ZW5hbnQtb25lXCIsXCJ0ZW5hbnRJZFwiOjUsXCJ0ZW5hbnROYW1lXCI6XCLkuIDnuqfov5DokKXnqbrpl7RcIixcInVzZXJJZFwiOjYsXCJ1c2VyTmFtZVwiOlwiZGVuZ3dhblwifSIsImV4cCI6MTc3Mzk5ODEzN30.7P8WVl3ji1G2unk0wOISJbF43ilcuzksOdSOQJNHGXM'
267
+ // 'ai-jwt-token': authToken
268
+ ...headers
269
+ },
270
+ body: JSON.stringify(request),
271
+ signal
272
+ });
273
+ if (!response.ok) {
274
+ throw new Error(`HTTP error: ${response.status}`);
275
+ }
276
+ if (!response.body) {
277
+ throw new Error("No response body");
278
+ }
279
+ const reader = response.body.getReader();
280
+ const decoder = new TextDecoder();
281
+ let buffer = "";
282
+ try {
283
+ while (true) {
284
+ if (signal == null ? void 0 : signal.aborted) {
285
+ return;
286
+ }
287
+ const { done, value } = await reader.read();
288
+ if (done)
289
+ break;
290
+ buffer += decoder.decode(value, { stream: true });
291
+ const lines = buffer.split("\n");
292
+ buffer = lines.pop() || "";
293
+ for (const line of lines) {
294
+ const trimmed = line.trim();
295
+ if (trimmed.startsWith("data: ")) {
296
+ const data = trimmed.slice(6);
297
+ if (data === "[DONE]")
298
+ return;
299
+ try {
300
+ const chunk = JSON.parse(data);
301
+ yield chunk;
302
+ } catch (e) {
303
+ console.warn("Failed to parse SSE data:", data);
304
+ }
305
+ }
306
+ }
307
+ }
308
+ } finally {
309
+ reader.releaseLock();
310
+ }
311
+ }
312
+ }
313
+ const a2aService = new A2AService();
314
+
315
+ export { A2AService, a2aService };
316
+ //# sourceMappingURL=a2aService.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2aService.mjs","sources":["../../../../../../packages/components/touchchat/utils/a2aService.ts"],"sourcesContent":["import type { AgentConfig, Message, JSONRPCRequest, StreamChunk, Task, AgentCard, SubAgent } from '../src/types/a2a'\r\n// @/types/a2a\r\n\r\n// A2A Service - Handles communication with A2A agents\r\nexport class A2AService {\r\n\tprivate agents: Map<string, AgentConfig> = new Map()\r\n\r\n\t// Register an agent\r\n\tregisterAgent(config: AgentConfig): void {\r\n\t\tthis.agents.set(config.id, config)\r\n\t}\r\n\r\n\t// Unregister an agent\r\n\tunregisterAgent(agentId: string): void {\r\n\t\tthis.agents.delete(agentId)\r\n\t}\r\n\r\n\t// Get registered agent\r\n\tgetAgent(agentId: string): AgentConfig | undefined {\r\n\t\treturn this.agents.get(agentId)\r\n\t}\r\n\r\n\t// Get all registered agents\r\n\tgetAllAgents(): AgentConfig[] {\r\n\t\treturn Array.from(this.agents.values())\r\n\t}\r\n\r\n\t// Fetch agent card (agent discovery)\r\n\tasync fetchAgentCard(url: string): Promise<AgentCard> {\r\n\t\tconst response = await fetch(url, {\r\n\t\t\tmethod: 'GET',\r\n\t\t\theaders: {\r\n\t\t\t\tAccept: 'application/json'\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`Failed to fetch agent card: ${response.statusText}`)\r\n\t\t}\r\n\r\n\t\treturn response.json()\r\n\t}\r\n\r\n\t// Send message to agent (non-streaming)\r\n\tasync sendMessage(agentId: string, message: Message, sessionId?: string): Promise<Task> {\r\n\t\tconst agent = this.agents.get(agentId)\r\n\t\tif (!agent) {\r\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\r\n\t\t}\r\n\r\n\t\tconst request: JSONRPCRequest = {\r\n\t\t\tjsonrpc: '2.0',\r\n\t\t\tid: this.generateId(),\r\n\t\t\tmethod: 'message/send',\r\n\t\t\tparams: {\r\n\t\t\t\tmessage,\r\n\t\t\t\tsessionId\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst response = await fetch(agent.endpoint, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify(request)\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\r\n\t\t}\r\n\r\n\t\tconst data = await response.json()\r\n\r\n\t\tif (data.error) {\r\n\t\t\tthrow new Error(`A2A error: ${data.error.message}`)\r\n\t\t}\r\n\r\n\t\treturn data.result as Task\r\n\t}\r\n\r\n\t// Stream message to agent (for streaming responses)\r\n\tasync streamMessage(agentId: string, message: Message, sessionId?: string, signal?: AbortSignal): Promise<ReadableStream<StreamChunk>> {\r\n\t\tconst agent = this.agents.get(agentId)\r\n\t\tif (!agent) {\r\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\r\n\t\t}\r\n\r\n\t\tconst request: JSONRPCRequest = {\r\n\t\t\tjsonrpc: '2.0',\r\n\t\t\tid: this.generateId(),\r\n\t\t\tmethod: 'message/stream',\r\n\t\t\tparams: {\r\n\t\t\t\tmessage,\r\n\t\t\t\tsessionId\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst response = await fetch(agent.endpoint, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\tAccept: 'text/event-stream',\r\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify(request),\r\n\t\t\tsignal\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\r\n\t\t}\r\n\r\n\t\tif (!response.body) {\r\n\t\t\tthrow new Error('No response body')\r\n\t\t}\r\n\r\n\t\treturn new ReadableStream<StreamChunk>({\r\n\t\t\tasync start(controller) {\r\n\t\t\t\tconst reader = response.body!.getReader()\r\n\t\t\t\tconst decoder = new TextDecoder()\r\n\t\t\t\tlet buffer = ''\r\n\r\n\t\t\t\t// Handle abort signal\r\n\t\t\t\tif (signal) {\r\n\t\t\t\t\tsignal.addEventListener('abort', () => {\r\n\t\t\t\t\t\tcontroller.close()\r\n\t\t\t\t\t\treader.cancel()\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tlet isDone = false\r\n\t\t\t\t\twhile (!isDone) {\r\n\t\t\t\t\t\t// Check if the signal has been aborted\r\n\t\t\t\t\t\tif (signal?.aborted) {\r\n\t\t\t\t\t\t\tcontroller.close()\r\n\t\t\t\t\t\t\treturn\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tconst { done, value } = await reader.read()\r\n\t\t\t\t\t\tif (done) {\r\n\t\t\t\t\t\t\tisDone = true\r\n\t\t\t\t\t\t\tcontroller.close()\r\n\t\t\t\t\t\t\tbreak\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbuffer += decoder.decode(value, { stream: true })\r\n\t\t\t\t\t\tconst lines = buffer.split('\\n')\r\n\t\t\t\t\t\tbuffer = lines.pop() || ''\r\n\r\n\t\t\t\t\t\tconst fn = async (data: string) => {\r\n\t\t\t\t\t\t\tif (data === '[DONE]') {\r\n\t\t\t\t\t\t\t\tcontroller.close()\r\n\t\t\t\t\t\t\t\treturn\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tconst chunk: StreamChunk = JSON.parse(data)\r\n\t\t\t\t\t\t\t\t// Add a small delay to simulate streaming effect\r\n\t\t\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, 50))\r\n\t\t\t\t\t\t\t\tcontroller.enqueue(chunk)\r\n\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\tconsole.warn('Failed to parse SSE data:', data)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfor (const line of lines) {\r\n\t\t\t\t\t\t\tconst trimmed = line.trim()\r\n\t\t\t\t\t\t\tif (trimmed.startsWith('data:')) {\r\n\t\t\t\t\t\t\t\tconst data = trimmed.slice(5)\r\n\t\t\t\t\t\t\t\tawait fn(data)\r\n\t\t\t\t\t\t\t} else if (trimmed.startsWith('data: ')) {\r\n\t\t\t\t\t\t\t\tconst data = trimmed.slice(6)\r\n\t\t\t\t\t\t\t\tawait fn(data)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} finally {\r\n\t\t\t\t\treader.releaseLock()\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t// Multi-agent message routing\r\n\tasync routeMessage(agentIds: string[], message: Message, mode: 'sequential' | 'parallel' = 'sequential'): Promise<Map<string, Task>> {\r\n\t\tconst results = new Map<string, Task>()\r\n\r\n\t\tif (mode === 'parallel') {\r\n\t\t\tconst promises = agentIds.map(async agentId => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst task = await this.sendMessage(agentId, message)\r\n\t\t\t\t\treturn { agentId, task, error: null }\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\treturn { agentId, task: null, error }\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tconst settled = await Promise.all(promises)\r\n\t\t\tfor (const { agentId, task, error } of settled) {\r\n\t\t\t\tif (task) {\r\n\t\t\t\t\tresults.set(agentId, task)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconsole.error(`Error sending to agent ${agentId}:`, error)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// Sequential\r\n\t\t\tfor (const agentId of agentIds) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst task = await this.sendMessage(agentId, message)\r\n\t\t\t\t\tresults.set(agentId, task)\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tconsole.error(`Error sending to agent ${agentId}:`, error)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results\r\n\t}\r\n\r\n\t// Get task status\r\n\tasync getTask(agentId: string, taskId: string): Promise<Task> {\r\n\t\tconst agent = this.agents.get(agentId)\r\n\t\tif (!agent) {\r\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\r\n\t\t}\r\n\r\n\t\tconst request: JSONRPCRequest = {\r\n\t\t\tjsonrpc: '2.0',\r\n\t\t\tid: this.generateId(),\r\n\t\t\tmethod: 'task/get',\r\n\t\t\tparams: { taskId }\r\n\t\t}\r\n\r\n\t\tconst response = await fetch(agent.endpoint, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify(request)\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\r\n\t\t}\r\n\r\n\t\tconst data = await response.json()\r\n\r\n\t\tif (data.error) {\r\n\t\t\tthrow new Error(`A2A error: ${data.error.message}`)\r\n\t\t}\r\n\r\n\t\treturn data.result as Task\r\n\t}\r\n\r\n\t// Cancel task\r\n\tasync cancelTask(agentId: string, taskId: string): Promise<void> {\r\n\t\tconst agent = this.agents.get(agentId)\r\n\t\tif (!agent) {\r\n\t\t\tthrow new Error(`Agent ${agentId} not found`)\r\n\t\t}\r\n\r\n\t\tconst request: JSONRPCRequest = {\r\n\t\t\tjsonrpc: '2.0',\r\n\t\t\tid: this.generateId(),\r\n\t\t\tmethod: 'task/cancel',\r\n\t\t\tparams: { taskId }\r\n\t\t}\r\n\r\n\t\tconst response = await fetch(agent.endpoint, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\t...(agent.authToken && { Authorization: `Bearer ${agent.authToken}` })\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify(request)\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\r\n\t\t}\r\n\r\n\t\tconst data = await response.json()\r\n\r\n\t\tif (data.error) {\r\n\t\t\tthrow new Error(`A2A error: ${data.error.message}`)\r\n\t\t}\r\n\t}\r\n\r\n\t// Generate unique ID\r\n\tprivate generateId(): string {\r\n\t\treturn `req-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`\r\n\t}\r\n\r\n\t// Multi-agent streaming message\r\n\tasync *streamMultiAgentMessage(hostEndpoint: string, subAgents: SubAgent[], message: Message, headers: object, sessionId?: string, signal?: AbortSignal): AsyncGenerator<StreamChunk, void, unknown> {\r\n\t\t// Build X-Sub-Agents headers: JSON array -> Base64\r\n\t\tconst subAgentsJson = JSON.stringify(subAgents)\r\n\t\t// Use Unicode-safe Base64 encoding\r\n\t\tconst xSubAgents = btoa(unescape(encodeURIComponent(subAgentsJson)))\r\n\r\n\t\tconst request: JSONRPCRequest = {\r\n\t\t\tjsonrpc: '2.0',\r\n\t\t\tid: this.generateId(),\r\n\t\t\tmethod: 'message/stream',\r\n\t\t\tparams: {\r\n\t\t\t\tmessage,\r\n\t\t\t\tsessionId\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst response = await fetch(hostEndpoint, {\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\t'Content-Type': 'application/json',\r\n\t\t\t\tAccept: 'text/event-stream',\r\n\t\t\t\t'X-Sub-Agents': xSubAgents,\r\n\t\t\t\t// 'ai-jwt-token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhc2lhaW5mby5jb20iLCJzdWIiOiJkZW5nd2FuIiwiYXVkIjoiY29tLmFpZi5wYWFzLndlYlRva2VuIiwidXNlckluZm8iOiJ7XCJhbGlhc1wiOlwiZGVuZ3dhblwiLFwiYXV0b2luXCI6ZmFsc2UsXCJlbnZDb2RlXCI6XCJQUk9EXCIsXCJlbnZOYW1lXCI6XCLnlJ_kuqfnjq_looNcIixcImxhbmd1YWdlXCI6XCJ6aFwiLFwicGVybWlzc2lvbnNcIjpbXCJcIixcInBvcnRhbDpzeXN0ZW06cm9sZTpiaW5kXCIsXCJwb3J0YWw6ZGljdGlvbmFyeTpkYXRhOmFkZFwiLG51bGwsXCJhZ2VudFwiLFwicG9ydGFsOnN5c3RlbTp1c2VyOmRlbGV0ZVwiLFwicG9ydGFsOmRpY3Rpb25hcnk6ZGF0YTp1cGRhdGVcIixcImF1ZGl0TG9nL2xpc3RBdWRpdExvZ1wiLFwicG9ydGFsOmRpY3Rpb25hcnk6ZGF0YTpkZWxldGVcIixcInBvcnRhbDpzeXN0ZW06dXNlcjp1cGRhdGVcIixcInBvcnRhbDptY3A6YXVkaXRcIixcInBvcnRhbDptY3A6c2FmZWF1ZGl0XCIsXCJwb3J0YWw6bWNwOnRvb2xjb25maXJtXCIsXCJwb3J0YWw6c3lzdGVtOnRlbmFudDphZGRcIixcInBvcnRhbDpzeXN0ZW06dGVuYW50OnJlbGF0aW9uXCIsXCJwb3J0YWw6c3lzdGVtOm9wZXJhdGlvbjpwZXJtaXNzaW9uXCIsXCJwb3J0YWw6c3lzdGVtUGFyYW1ldGVyOmRlbGV0ZVwiLFwicG9ydGFsOmRpY3Rpb25hcnk6dXBkYXRlXCIsXCJwb3J0YWw6c3lzdGVtOnJvbGU6YWRkXCIsXCJ0ZW5hbnQvZ2V0VGVuYW50RHRvTGlzdFwiLFwicG9ydGFsOnN5c3RlbTpyb2xlOnVwZGF0ZVwiLFwicG9ydGFsOmFnZW50OmF1ZGl0XCIsXCJwb3J0YWw6bm90aWNlOnVwZGF0ZVwiLFwicG9ydGFsOnN5c3RlbTpyb2xlOmRlbGV0ZVwiLFwicG9ydGFsOnN5c3RlbTp1c2VyOmFkZFwiLFwibWVudS9nZXRNZW51QnlQYXJhbVwiLFwicG9ydGFsOmRpY3Rpb25hcnk6ZGVsZXRlXCIsXCJwb3J0YWw6c3lzdGVtOm9wZXJhdGlvbjpkZWxldGVcIixcInVzZXIvcXVlcnlVc2VyRHRvTGlzdFwiLFwicG9ydGFsOnN5c3RlbTptZW51OmFkZFwiLFwicG9ydGFsOnN5c3RlbVBhcmFtZXRlcjp1cGRhdGVcIixcInBvcnRhbDphZ2VudDptb2RlbGNoZWNrXCIsXCJwb3J0YWw6c3lzdGVtOm1lbnU6dXBkYXRlXCIsXCJyb2xlL3F1ZXJ5Um9sZUxpc3RcIixcInBvcnRhbDpzeXN0ZW06bWVudTpkZWxldGVcIixcInBvcnRhbDpub3RpY2U6YWRkXCIsXCJwb3J0YWw6c3lzdGVtOnRlbmFudDpkZWxldGVcIixcInBvcnRhbDpzeXN0ZW1QYXJhbWV0ZXI6YWRkXCIsXCJyb2xlUGVybWlzc2lvbnMvcXVlcnlNZW51UGVybWlzc2lvbkxpc3RcIixcInBvcnRhbDpzeXN0ZW06dGVuYW50OnVwZGF0ZVwiLFwibm90aWNlL2xpc3ROb3RpY2VcIl0sXCJwbGF0Zm9ybU1hbmFnZXJcIjp0cnVlLFwicm9sZUxpc3RcIjpbe1wiY3JlYXRlVGltZVwiOlwiMjAyNi0wMy0wMSAwMDowMDowMFwiLFwiaGFzRWRpdFwiOjEsXCJyb2xlQ29kZVwiOlwiY2FwX3Byb3ZpZGVyXCIsXCJyb2xlSWRcIjoxMixcInJvbGVOYW1lXCI6XCLog73lipvmj5DkvpvogIVcIixcInJvbGVUeXBlXCI6MX0se1wiY3JlYXRlVGltZVwiOlwiMjAyNi0wMy0wMSAwMDowMDowMFwiLFwiaGFzRWRpdFwiOjEsXCJyb2xlQ29kZVwiOlwidGVuYW50X2FkbWluXCIsXCJyb2xlSWRcIjo4LFwicm9sZU5hbWVcIjpcIuenn-aIt-euoeeQhuWRmFwiLFwicm9sZVR5cGVcIjoxfSx7XCJjcmVhdGVUaW1lXCI6XCIyMDIyLTA2LTI4IDAwOjAwOjAwXCIsXCJoYXNFZGl0XCI6MSxcInJvbGVDb2RlXCI6XCJyb2xlX2FkbWluXCIsXCJyb2xlSWRcIjoxLFwicm9sZU5hbWVcIjpcIui2hee6p-euoeeQhuWRmFwiLFwicm9sZVR5cGVcIjoxfV0sXCJ0ZW5hbnRDb2RlXCI6XCJ0ZW5hbnQtb25lXCIsXCJ0ZW5hbnRJZFwiOjUsXCJ0ZW5hbnROYW1lXCI6XCLkuIDnuqfov5DokKXnqbrpl7RcIixcInVzZXJJZFwiOjYsXCJ1c2VyTmFtZVwiOlwiZGVuZ3dhblwifSIsImV4cCI6MTc3Mzk5ODEzN30.7P8WVl3ji1G2unk0wOISJbF43ilcuzksOdSOQJNHGXM'\r\n\t\t\t\t// 'ai-jwt-token': authToken\r\n\t\t\t\t...headers\r\n\t\t\t},\r\n\t\t\tbody: JSON.stringify(request),\r\n\t\t\tsignal\r\n\t\t})\r\n\r\n\t\tif (!response.ok) {\r\n\t\t\tthrow new Error(`HTTP error: ${response.status}`)\r\n\t\t}\r\n\r\n\t\tif (!response.body) {\r\n\t\t\tthrow new Error('No response body')\r\n\t\t}\r\n\r\n\t\tconst reader = response.body.getReader()\r\n\t\tconst decoder = new TextDecoder()\r\n\t\tlet buffer = ''\r\n\r\n\t\ttry {\r\n\t\t\twhile (true) {\r\n\t\t\t\t// Check if the signal has been aborted\r\n\t\t\t\tif (signal?.aborted) {\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst { done, value } = await reader.read()\r\n\t\t\t\tif (done) break\r\n\r\n\t\t\t\tbuffer += decoder.decode(value, { stream: true })\r\n\t\t\t\tconst lines = buffer.split('\\n')\r\n\t\t\t\tbuffer = lines.pop() || ''\r\n\r\n\t\t\t\tfor (const line of lines) {\r\n\t\t\t\t\tconst trimmed = line.trim()\r\n\t\t\t\t\tif (trimmed.startsWith('data: ')) {\r\n\t\t\t\t\t\tconst data = trimmed.slice(6)\r\n\t\t\t\t\t\tif (data === '[DONE]') return\r\n\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tconst chunk: StreamChunk = JSON.parse(data)\r\n\t\t\t\t\t\t\tyield chunk\r\n\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\tconsole.warn('Failed to parse SSE data:', data)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} finally {\r\n\t\t\treader.releaseLock()\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// Singleton instance\r\nexport const a2aService = new A2AService()\r\n"],"names":[],"mappings":"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"}
@@ -73,10 +73,16 @@ class FetchStream {
73
73
  }
74
74
  (_d = this.ondone) == null ? void 0 : _d.call(this, allDataText);
75
75
  } else {
76
- throw response;
76
+ const errorBody = await response.text();
77
+ throw new Error(errorBody || `\u8BF7\u6C42\u5931\u8D25: ${response.status} ${response.statusText}`);
77
78
  }
78
79
  } catch (response) {
79
- (_e = this.onerror) == null ? void 0 : _e.call(this, response instanceof Response ? response : new Error(String(response)));
80
+ const isAbortError = response instanceof Error && response.name === "AbortError";
81
+ if (!isAbortError) {
82
+ (_e = this.onerror) == null ? void 0 : _e.call(this, response instanceof Response ? response : new Error(String(response)));
83
+ } else if (this.onabort) {
84
+ this.onabort();
85
+ }
80
86
  }
81
87
  }
82
88
  // 中断 fetch 请求
@@ -1 +1 @@
1
- {"version":3,"file":"fetchStream.mjs","sources":["../../../../../../packages/components/touchchat/utils/fetchStream.ts"],"sourcesContent":["// 定义 FetchStream 所需的选项接口\r\ninterface FetchStreamOptions {\r\n url: string;\r\n requestInit?: RequestInit;\r\n onmessage?: (line: string, index: number) => void;\r\n ondone?: (allDataText: string) => void;\r\n onerror?: (response: Response | Error) => void;\r\n onabort?: () => void;\r\n ontimeout?: () => void;\r\n}\r\n\r\nconst decoder = new TextDecoder('utf-8');\r\nlet partial = ''; // 未完成的字节\r\n\r\n// 改进的handleChunk函数,更安全地处理UTF-8字符\r\nconst handleChunk = (chunk: Uint8Array): string => {\r\n // 将新数据块拼接到剩余字节\r\n const data = partial + decoder.decode(chunk, { stream: true });\r\n\r\n // 查找最后一个完整行结束位置\r\n const lastNewline = data.lastIndexOf('\\n');\r\n\r\n if (lastNewline >= 0) {\r\n partial = data.slice(lastNewline + 1); // 保留不完整部分\r\n return data.slice(0, lastNewline + 1); // 返回完整行\r\n }\r\n\r\n // 如果没有找到换行符,保留全部数据\r\n partial = data;\r\n return '';\r\n};\r\n\r\n// FetchStream 类,用于处理流式请求\r\nexport class FetchStream {\r\n url: string;\r\n requestInit: RequestInit;\r\n onmessage?: (line: string, index: number) => void;\r\n ondone?: (allDataText: string) => void;\r\n onerror?: (response: Response | Error) => void;\r\n onabort?: () => void;\r\n ontimeout?: () => void;\r\n controller: AbortController | null;\r\n timer: ReturnType<typeof setTimeout> | null;\r\n\r\n constructor(options: FetchStreamOptions) {\r\n if (!options.url) {\r\n throw new Error('url argument must be provided');\r\n }\r\n this.url = options.url;\r\n this.requestInit = options.requestInit || {};\r\n this.onmessage = options.onmessage;\r\n this.ondone = options.ondone;\r\n this.onerror = options.onerror;\r\n this.onabort = options.onabort;\r\n this.ontimeout = options.ontimeout;\r\n\r\n this.controller = new AbortController();\r\n this.timer = null;\r\n\r\n this.createFetchRequest();\r\n }\r\n\r\n // 创建 fetch 请求\r\n async createFetchRequest(): Promise<void> {\r\n this.timeout();\r\n\r\n try {\r\n const response = await fetch(this.url, {\r\n method: 'POST',\r\n signal: this.controller?.signal,\r\n ...this.requestInit,\r\n });\r\n\r\n if (this.timer) {\r\n clearTimeout(this.timer);\r\n }\r\n\r\n if (response.status === 200) {\r\n if (!response.body) {\r\n throw new Error('Response body is null');\r\n }\r\n const reader = response.body.getReader();\r\n let allDataText = '';\r\n let buffer = '';\r\n let index = 0;\r\n\r\n let shouldContinue = true;\r\n while (shouldContinue) {\r\n const { value, done } = await reader.read();\r\n if (done) {\r\n shouldContinue = false;\r\n break;\r\n }\r\n\r\n if (value) {\r\n const dataText = handleChunk(value);\r\n if (dataText) {\r\n allDataText += dataText;\r\n buffer += dataText;\r\n\r\n // 处理完整行\r\n let lineEndIndex;\r\n while ((lineEndIndex = buffer.indexOf('\\n')) >= 0) {\r\n const line = buffer.slice(0, lineEndIndex);\r\n buffer = buffer.slice(lineEndIndex + 1);\r\n this.onmessage?.(line, index++);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 处理剩余数据\r\n if (buffer.length > 0) {\r\n this.onmessage?.(buffer, index++);\r\n }\r\n\r\n this.ondone?.(allDataText);\r\n } else {\r\n throw response;\r\n }\r\n } catch (response) {\r\n this.onerror?.(response instanceof Response ? response : new Error(String(response)));\r\n }\r\n }\r\n\r\n // 中断 fetch 请求\r\n abort(): void {\r\n try {\r\n this.controller?.abort();\r\n this.onabort?.();\r\n } catch (error) {\r\n console.error('Abort error:', error);\r\n }\r\n }\r\n\r\n // 超时中断\r\n timeout(time: number = 60000): void {\r\n this.timer = setTimeout(() => {\r\n this.abort();\r\n this.ontimeout?.();\r\n }, time);\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetchStream.mjs","sources":["../../../../../../packages/components/touchchat/utils/fetchStream.ts"],"sourcesContent":["// 定义 FetchStream 所需的选项接口\r\ninterface FetchStreamOptions {\r\n\turl: string\r\n\trequestInit?: RequestInit\r\n\tonmessage?: (line: string, index: number) => void\r\n\tondone?: (allDataText: string) => void\r\n\tonerror?: (response: Response | Error) => void\r\n\tonabort?: () => void\r\n\tontimeout?: () => void\r\n}\r\n\r\nconst decoder = new TextDecoder('utf-8')\r\nlet partial = '' // 未完成的字节\r\n\r\n// 改进的handleChunk函数,更安全地处理UTF-8字符\r\nconst handleChunk = (chunk: Uint8Array): string => {\r\n\t// 将新数据块拼接到剩余字节\r\n\tconst data = partial + decoder.decode(chunk, { stream: true })\r\n\r\n\t// 查找最后一个完整行结束位置\r\n\tconst lastNewline = data.lastIndexOf('\\n')\r\n\r\n\tif (lastNewline >= 0) {\r\n\t\tpartial = data.slice(lastNewline + 1) // 保留不完整部分\r\n\t\treturn data.slice(0, lastNewline + 1) // 返回完整行\r\n\t}\r\n\r\n\t// 如果没有找到换行符,保留全部数据\r\n\tpartial = data\r\n\treturn ''\r\n}\r\n\r\n// FetchStream 类,用于处理流式请求\r\nexport class FetchStream {\r\n\turl: string\r\n\trequestInit: RequestInit\r\n\tonmessage?: (line: string, index: number) => void\r\n\tondone?: (allDataText: string) => void\r\n\tonerror?: (response: Response | Error) => void\r\n\tonabort?: () => void\r\n\tontimeout?: () => void\r\n\tcontroller: AbortController | null\r\n\ttimer: ReturnType<typeof setTimeout> | null\r\n\r\n\tconstructor(options: FetchStreamOptions) {\r\n\t\tif (!options.url) {\r\n\t\t\tthrow new Error('url argument must be provided')\r\n\t\t}\r\n\t\tthis.url = options.url\r\n\t\tthis.requestInit = options.requestInit || {}\r\n\t\tthis.onmessage = options.onmessage\r\n\t\tthis.ondone = options.ondone\r\n\t\tthis.onerror = options.onerror\r\n\t\tthis.onabort = options.onabort\r\n\t\tthis.ontimeout = options.ontimeout\r\n\r\n\t\tthis.controller = new AbortController()\r\n\t\tthis.timer = null\r\n\r\n\t\tthis.createFetchRequest()\r\n\t}\r\n\r\n\t// 创建 fetch 请求\r\n\tasync createFetchRequest(): Promise<void> {\r\n\t\tthis.timeout()\r\n\r\n\t\ttry {\r\n\t\t\tconst response = await fetch(this.url, {\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\tsignal: this.controller?.signal,\r\n\t\t\t\t...this.requestInit\r\n\t\t\t})\r\n\r\n\t\t\tif (this.timer) {\r\n\t\t\t\tclearTimeout(this.timer)\r\n\t\t\t}\r\n\r\n\t\t\tif (response.status === 200) {\r\n\t\t\t\tif (!response.body) {\r\n\t\t\t\t\tthrow new Error('Response body is null')\r\n\t\t\t\t}\r\n\t\t\t\tconst reader = response.body.getReader()\r\n\t\t\t\tlet allDataText = ''\r\n\t\t\t\tlet buffer = ''\r\n\t\t\t\tlet index = 0\r\n\r\n\t\t\t\tlet shouldContinue = true\r\n\t\t\t\twhile (shouldContinue) {\r\n\t\t\t\t\tconst { value, done } = await reader.read()\r\n\t\t\t\t\tif (done) {\r\n\t\t\t\t\t\tshouldContinue = false\r\n\t\t\t\t\t\tbreak\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (value) {\r\n\t\t\t\t\t\tconst dataText = handleChunk(value)\r\n\r\n\t\t\t\t\t\tif (dataText) {\r\n\t\t\t\t\t\t\tallDataText += dataText\r\n\t\t\t\t\t\t\tbuffer += dataText\r\n\r\n\t\t\t\t\t\t\t// 处理完整行\r\n\t\t\t\t\t\t\tlet lineEndIndex\r\n\t\t\t\t\t\t\twhile ((lineEndIndex = buffer.indexOf('\\n')) >= 0) {\r\n\t\t\t\t\t\t\t\tconst line = buffer.slice(0, lineEndIndex)\r\n\t\t\t\t\t\t\t\tbuffer = buffer.slice(lineEndIndex + 1)\r\n\t\t\t\t\t\t\t\tthis.onmessage?.(line, index++)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// 处理剩余数据\r\n\t\t\t\tif (buffer.length > 0) {\r\n\t\t\t\t\tthis.onmessage?.(buffer, index++)\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.ondone?.(allDataText)\r\n\t\t\t} else {\r\n\t\t\t\t// 读取响应体中的错误信息\r\n\t\t\t\tconst errorBody = await response.text()\r\n\t\t\t\tthrow new Error(errorBody || `请求失败: ${response.status} ${response.statusText}`)\r\n\t\t\t}\r\n\t\t} catch (response) {\r\n\t\t\t// 如果是用户主动中止的错误,不调用onerror\r\n\t\t\tconst isAbortError = response instanceof Error && response.name === 'AbortError'\r\n\r\n\t\t\t// 如果不是用户主动中止的错误,则调用 onerror\r\n\t\t\tif (!isAbortError) {\r\n\t\t\t\tthis.onerror?.(response instanceof Response ? response : new Error(String(response)))\r\n\t\t\t} else if (this.onabort) {\r\n\t\t\t\t// 如果是中止错误且定义了 onabort 回调,则调用它\r\n\t\t\t\tthis.onabort()\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// 中断 fetch 请求\r\n\tabort(): void {\r\n\t\ttry {\r\n\t\t\tthis.controller?.abort()\r\n\t\t\tthis.onabort?.()\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error('Abort error:', error)\r\n\t\t}\r\n\t}\r\n\r\n\t// 超时中断\r\n\ttimeout(time: number = 60000): void {\r\n\t\tthis.timer = setTimeout(() => {\r\n\t\t\tthis.abort()\r\n\t\t\tthis.ontimeout?.()\r\n\t\t}, time)\r\n\t}\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -6,27 +6,29 @@ import ins_plugin from '../../../../node_modules/.pnpm/markdown-it-ins@4.0.0/nod
6
6
  import ins_plugin$1 from '../../../../node_modules/.pnpm/markdown-it-mark@4.0.0/node_modules/markdown-it-mark/index.mjs';
7
7
  import sub_plugin from '../../../../node_modules/.pnpm/markdown-it-sub@2.0.0/node_modules/markdown-it-sub/index.mjs';
8
8
  import sup_plugin from '../../../../node_modules/.pnpm/markdown-it-sup@2.0.0/node_modules/markdown-it-sup/index.mjs';
9
+ import purify from '../../../../node_modules/.pnpm/dompurify@3.3.0/node_modules/dompurify/dist/purify.es.mjs';
9
10
  import highlightPlugin from './hight-it.mjs';
10
11
  import MarkdownIt from '../../../../node_modules/.pnpm/markdown-it@14.1.0/node_modules/markdown-it/lib/index.mjs';
11
12
  import emoji_plugin from '../../../../node_modules/.pnpm/markdown-it-emoji@3.0.0/node_modules/markdown-it-emoji/lib/full.mjs';
12
13
 
13
- let markdown = null;
14
- const defaults = {
14
+ const getDOMPurify = () => {
15
+ if (typeof window !== "undefined") {
16
+ return purify;
17
+ }
18
+ return null;
19
+ };
20
+ const mdInstance = new MarkdownIt({
15
21
  html: true,
16
22
  xhtmlOut: false,
17
23
  breaks: true,
18
24
  langPrefix: "language-",
19
25
  linkify: false,
20
- typographer: true,
21
- _highlight: true,
22
- _strict: false,
23
- _view: "html"
24
- };
25
- markdown = new MarkdownIt(defaults).use(abbr_plugin).use(container_plugin, "warning").use(deflist_plugin).use(emoji_plugin).use(footnote_plugin).use(ins_plugin).use(ins_plugin$1).use(sub_plugin).use(sup_plugin).use(highlightPlugin);
26
- markdown.renderer.rules.table_open = function() {
27
- return '<table class="table table-striped">\n';
26
+ typographer: true
27
+ }).use(abbr_plugin).use(container_plugin, "warning").use(deflist_plugin).use(emoji_plugin).use(footnote_plugin).use(ins_plugin).use(ins_plugin$1).use(sub_plugin).use(sup_plugin).use(highlightPlugin);
28
+ mdInstance.renderer.rules.table_open = function() {
29
+ return '<table class="table touchchat-table">\n';
28
30
  };
29
- markdown.renderer.rules.paragraph_open = markdown.renderer.rules.heading_open = (tokens, idx, options, env, slf) => {
31
+ mdInstance.renderer.rules.paragraph_open = mdInstance.renderer.rules.heading_open = (tokens, idx, options, env, slf) => {
30
32
  let line;
31
33
  if (tokens[idx].map && tokens[idx].level === 0) {
32
34
  line = tokens[idx].map[0];
@@ -35,8 +37,24 @@ markdown.renderer.rules.paragraph_open = markdown.renderer.rules.heading_open =
35
37
  }
36
38
  return slf.renderToken(tokens, idx, options, env, slf);
37
39
  };
40
+ const markdown = {
41
+ render: (content, options) => {
42
+ if (!content)
43
+ return "";
44
+ let processedContent = content;
45
+ if (options == null ? void 0 : options.isReasoning) {
46
+ processedContent = processedContent.trim();
47
+ }
48
+ const html = mdInstance.render(processedContent);
49
+ const purify = getDOMPurify();
50
+ const sanitizedHtml = purify ? purify.sanitize(html) : html;
51
+ if (options == null ? void 0 : options.isReasoning) {
52
+ return sanitizedHtml;
53
+ }
54
+ return sanitizedHtml;
55
+ }
56
+ };
38
57
  console.log("markdown", markdown);
39
- var markdown$1 = markdown;
40
58
 
41
- export { markdown$1 as default };
59
+ export { markdown as default };
42
60
  //# sourceMappingURL=markdown.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.mjs","sources":["../../../../../../packages/components/touchchat/utils/markdown.ts"],"sourcesContent":["import Markdown, { Options, MarkdownIt } from 'markdown-it';\nimport mdAbbr from 'markdown-it-abbr';\nimport mdContainer from 'markdown-it-container';\nimport mdDeflist from 'markdown-it-deflist';\nimport { full as mdEmoji } from 'markdown-it-emoji';\nimport mdFootnote from 'markdown-it-footnote';\nimport mdIns from 'markdown-it-ins';\nimport mdMark from 'markdown-it-mark';\nimport mdSub from 'markdown-it-sub';\nimport mdSup from 'markdown-it-sup';\nimport highlightPlugin from './hight-it.ts';\n\ninterface MarkdownOptions extends Options {\n _highlight?: boolean;\n _strict?: boolean;\n _view?: 'html' | 'src' | 'debug';\n}\n\nlet markdown: MarkdownIt | null = null;\nconst defaults: MarkdownOptions = {\n html: true,\n xhtmlOut: false,\n breaks: true,\n langPrefix: 'language-',\n linkify: false,\n typographer: true,\n _highlight: true,\n _strict: false,\n _view: 'html',\n};\n\n// 正确初始化markdown\nmarkdown = new Markdown(defaults)\n .use(mdAbbr)\n .use(mdContainer, 'warning')\n .use(mdDeflist)\n .use(mdEmoji)\n .use(mdFootnote)\n .use(mdIns)\n .use(mdMark)\n .use(mdSub)\n .use(mdSup)\n .use(highlightPlugin);\n\nmarkdown.renderer.rules.table_open = function () {\n return '<table class=\"table table-striped\">\\n';\n};\n\nmarkdown.renderer.rules.paragraph_open = markdown.renderer.rules.heading_open = (\n tokens: any[],\n idx: number,\n options: any,\n env: any,\n slf: any\n) => {\n let line: number | undefined;\n if (tokens[idx].map && tokens[idx].level === 0) {\n line = tokens[idx].map[0];\n tokens[idx].attrJoin('class', 'line');\n tokens[idx].attrSet('data-line', String(line));\n }\n return slf.renderToken(tokens, idx, options, env, slf);\n};\n\nconsole.log('markdown', markdown);\n\nexport default markdown;\n"],"names":["Markdown","mdAbbr","mdContainer","mdDeflist","mdEmoji","mdFootnote","mdIns","mdMark","mdSub","mdSup"],"mappings":";;;;;;;;;;;;AAkBA,IAAI,QAA8B,GAAA,IAAA,CAAA;AAClC,MAAM,QAA4B,GAAA;AAAA,EAChC,IAAM,EAAA,IAAA;AAAA,EACN,QAAU,EAAA,KAAA;AAAA,EACV,MAAQ,EAAA,IAAA;AAAA,EACR,UAAY,EAAA,WAAA;AAAA,EACZ,OAAS,EAAA,KAAA;AAAA,EACT,WAAa,EAAA,IAAA;AAAA,EACb,UAAY,EAAA,IAAA;AAAA,EACZ,OAAS,EAAA,KAAA;AAAA,EACT,KAAO,EAAA,MAAA;AACT,CAAA,CAAA;AAGA,QAAA,GAAW,IAAIA,UAAA,CAAS,QAAQ,CAAA,CAC7B,IAAIC,WAAM,CAAA,CACV,GAAI,CAAAC,gBAAA,EAAa,SAAS,CAAA,CAC1B,GAAI,CAAAC,cAAS,EACb,GAAI,CAAAC,YAAO,CACX,CAAA,GAAA,CAAIC,eAAU,CAAA,CACd,GAAI,CAAAC,UAAK,EACT,GAAI,CAAAC,YAAM,CACV,CAAA,GAAA,CAAIC,UAAK,CACT,CAAA,GAAA,CAAIC,UAAK,CAAA,CACT,IAAI,eAAe,CAAA,CAAA;AAEtB,QAAS,CAAA,QAAA,CAAS,KAAM,CAAA,UAAA,GAAa,WAAY;AAC/C,EAAO,OAAA,uCAAA,CAAA;AACT,CAAA,CAAA;AAEA,QAAA,CAAS,QAAS,CAAA,KAAA,CAAM,cAAiB,GAAA,QAAA,CAAS,QAAS,CAAA,KAAA,CAAM,YAAe,GAAA,CAC9E,MACA,EAAA,GAAA,EACA,OACA,EAAA,GAAA,EACA,GACG,KAAA;AACH,EAAI,IAAA,IAAA,CAAA;AACJ,EAAI,IAAA,MAAA,CAAO,GAAG,CAAE,CAAA,GAAA,IAAO,OAAO,GAAG,CAAA,CAAE,UAAU,CAAG,EAAA;AAC9C,IAAA,IAAA,GAAO,MAAO,CAAA,GAAG,CAAE,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACxB,IAAA,MAAA,CAAO,GAAG,CAAA,CAAE,QAAS,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AACpC,IAAA,MAAA,CAAO,GAAG,CAAE,CAAA,OAAA,CAAQ,WAAa,EAAA,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,GAC/C;AACA,EAAA,OAAO,IAAI,WAAY,CAAA,MAAA,EAAQ,GAAK,EAAA,OAAA,EAAS,KAAK,GAAG,CAAA,CAAA;AACvD,CAAA,CAAA;AAEA,OAAQ,CAAA,GAAA,CAAI,YAAY,QAAQ,CAAA,CAAA;AAEhC,iBAAe,QAAA;;;;"}
1
+ {"version":3,"file":"markdown.mjs","sources":["../../../../../../packages/components/touchchat/utils/markdown.ts"],"sourcesContent":["import Markdown from 'markdown-it'\nimport mdAbbr from 'markdown-it-abbr'\nimport mdContainer from 'markdown-it-container'\nimport mdDeflist from 'markdown-it-deflist'\nimport { full as mdEmoji } from 'markdown-it-emoji'\nimport mdFootnote from 'markdown-it-footnote'\nimport mdIns from 'markdown-it-ins'\nimport mdMark from 'markdown-it-mark'\nimport mdSub from 'markdown-it-sub'\nimport mdSup from 'markdown-it-sup'\nimport DOMPurify from 'dompurify'\nimport highlightPlugin from './hight-it.ts'\n\n// 确保 DOMPurify 在浏览器环境中正确初始化\nconst getDOMPurify = () => {\n\tif (typeof window !== 'undefined') {\n\t\treturn DOMPurify\n\t}\n\treturn null\n}\n\ninterface RenderOptions {\n\tisReasoning?: boolean\n}\n\n// 创建原始 markdown-it 实例\nconst mdInstance = new Markdown({\n\thtml: true,\n\txhtmlOut: false,\n\tbreaks: true,\n\tlangPrefix: 'language-',\n\tlinkify: false,\n\ttypographer: true\n})\n\t.use(mdAbbr)\n\t.use(mdContainer, 'warning')\n\t.use(mdDeflist)\n\t.use(mdEmoji)\n\t.use(mdFootnote)\n\t.use(mdIns)\n\t.use(mdMark)\n\t.use(mdSub)\n\t.use(mdSup)\n\t.use(highlightPlugin)\n\n// 自定义渲染规则\nmdInstance.renderer.rules.table_open = function () {\n\treturn '<table class=\"table touchchat-table\">\\n'\n}\n\nmdInstance.renderer.rules.paragraph_open = mdInstance.renderer.rules.heading_open = (tokens: any[], idx: number, options: any, env: any, slf: any) => {\n\tlet line: number | undefined\n\tif (tokens[idx].map && tokens[idx].level === 0) {\n\t\tline = tokens[idx].map[0]\n\t\ttokens[idx].attrJoin('class', 'line')\n\t\ttokens[idx].attrSet('data-line', String(line))\n\t}\n\treturn slf.renderToken(tokens, idx, options, env, slf)\n}\n\n// 创建包装对象,支持带参数的 render 方法\nconst markdown = {\n\trender: (content: string, options?: RenderOptions): string => {\n\t\tif (!content) return ''\n\n\t\t// 根据 isReasoning 参数添加不同的 CSS 类\n\t\tlet processedContent = content\n\t\tif (options?.isReasoning) {\n\t\t\t// 对于推理内容,可以添加特定的标记或处理\n\t\t\t// 这里可以根据需要添加特殊的渲染逻辑\n\t\t\t// 例如,可以添加一个包装 div 来标识这是推理内容\n\t\t\tprocessedContent = processedContent.trim()\n\t\t}\n\n\t\tconst html = mdInstance.render(processedContent)\n\t\t\n\t\t// 安全地使用 DOMPurify\n\t\tconst purify = getDOMPurify()\n\t\tconst sanitizedHtml = purify ? purify.sanitize(html) : html\n\n\t\t// 如果是推理内容,可以添加额外的包装\n\t\tif (options?.isReasoning) {\n\t\t\t// 可以在这里添加特殊的 CSS 类或包装\n\t\t\t// 例如:return `<div class=\"reasoning-content\">${sanitizedHtml}</div>`\n\t\t\treturn sanitizedHtml\n\t\t}\n\n\t\treturn sanitizedHtml\n\t}\n}\n\nconsole.log('markdown', markdown)\n\nexport default markdown\n"],"names":["DOMPurify","Markdown","mdAbbr","mdContainer","mdDeflist","mdEmoji","mdFootnote","mdIns","mdMark","mdSub","mdSup"],"mappings":";;;;;;;;;;;;;AAcA,MAAM,eAAe,MAAM;AAC1B,EAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AAClC,IAAO,OAAAA,MAAA,CAAA;AAAA,GACR;AACA,EAAO,OAAA,IAAA,CAAA;AACR,CAAA,CAAA;AAOA,MAAM,UAAA,GAAa,IAAIC,UAAS,CAAA;AAAA,EAC/B,IAAM,EAAA,IAAA;AAAA,EACN,QAAU,EAAA,KAAA;AAAA,EACV,MAAQ,EAAA,IAAA;AAAA,EACR,UAAY,EAAA,WAAA;AAAA,EACZ,OAAS,EAAA,KAAA;AAAA,EACT,WAAa,EAAA,IAAA;AACd,CAAC,CACC,CAAA,GAAA,CAAIC,WAAM,CAAA,CACV,GAAI,CAAAC,gBAAA,EAAa,SAAS,CAAA,CAC1B,GAAI,CAAAC,cAAS,CACb,CAAA,GAAA,CAAIC,YAAO,CACX,CAAA,GAAA,CAAIC,eAAU,CAAA,CACd,GAAI,CAAAC,UAAK,CACT,CAAA,GAAA,CAAIC,YAAM,CAAA,CACV,GAAI,CAAAC,UAAK,CACT,CAAA,GAAA,CAAIC,UAAK,CAAA,CACT,IAAI,eAAe,CAAA,CAAA;AAGrB,UAAW,CAAA,QAAA,CAAS,KAAM,CAAA,UAAA,GAAa,WAAY;AAClD,EAAO,OAAA,yCAAA,CAAA;AACR,CAAA,CAAA;AAEA,UAAA,CAAW,QAAS,CAAA,KAAA,CAAM,cAAiB,GAAA,UAAA,CAAW,QAAS,CAAA,KAAA,CAAM,YAAe,GAAA,CAAC,MAAe,EAAA,GAAA,EAAa,OAAc,EAAA,GAAA,EAAU,GAAa,KAAA;AACrJ,EAAI,IAAA,IAAA,CAAA;AACJ,EAAI,IAAA,MAAA,CAAO,GAAG,CAAE,CAAA,GAAA,IAAO,OAAO,GAAG,CAAA,CAAE,UAAU,CAAG,EAAA;AAC/C,IAAA,IAAA,GAAO,MAAO,CAAA,GAAG,CAAE,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AACxB,IAAA,MAAA,CAAO,GAAG,CAAA,CAAE,QAAS,CAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AACpC,IAAA,MAAA,CAAO,GAAG,CAAE,CAAA,OAAA,CAAQ,WAAa,EAAA,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AAAA,GAC9C;AACA,EAAA,OAAO,IAAI,WAAY,CAAA,MAAA,EAAQ,GAAK,EAAA,OAAA,EAAS,KAAK,GAAG,CAAA,CAAA;AACtD,CAAA,CAAA;AAGA,MAAM,QAAW,GAAA;AAAA,EAChB,MAAA,EAAQ,CAAC,OAAA,EAAiB,OAAoC,KAAA;AAC7D,IAAA,IAAI,CAAC,OAAA;AAAS,MAAO,OAAA,EAAA,CAAA;AAGrB,IAAA,IAAI,gBAAmB,GAAA,OAAA,CAAA;AACvB,IAAA,IAAI,mCAAS,WAAa,EAAA;AAIzB,MAAA,gBAAA,GAAmB,iBAAiB,IAAK,EAAA,CAAA;AAAA,KAC1C;AAEA,IAAM,MAAA,IAAA,GAAO,UAAW,CAAA,MAAA,CAAO,gBAAgB,CAAA,CAAA;AAG/C,IAAA,MAAM,SAAS,YAAa,EAAA,CAAA;AAC5B,IAAA,MAAM,aAAgB,GAAA,MAAA,GAAS,MAAO,CAAA,QAAA,CAAS,IAAI,CAAI,GAAA,IAAA,CAAA;AAGvD,IAAA,IAAI,mCAAS,WAAa,EAAA;AAGzB,MAAO,OAAA,aAAA,CAAA;AAAA,KACR;AAEA,IAAO,OAAA,aAAA,CAAA;AAAA,GACR;AACD,EAAA;AAEA,OAAQ,CAAA,GAAA,CAAI,YAAY,QAAQ,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.mjs","sources":["../../../../packages/utils/config.ts"],"sourcesContent":["import { getCurrentInstance } from 'vue';\r\n\r\n// 定义全局配置选项类型\r\nexport interface TouchVueUIOptions {\r\n size?: 'small' | 'medium' | 'large';\r\n zIndex?: number;\r\n // 其他可能的配置项...\r\n}\r\n\r\n/**\r\n * 获取组件库全局配置\r\n * 可以在组件内部使用此函数获取全局配置\r\n * @returns 全局配置对象\r\n */\r\nexport const useGlobalConfig = (): TouchVueUIOptions => {\r\n const instance = getCurrentInstance();\r\n if (!instance) {\r\n console.warn('useGlobalConfig() 只能在setup()或生命周期钩子中调用');\r\n return {} as TouchVueUIOptions;\r\n }\r\n\r\n // 从应用实例中获取全局配置\r\n return instance.appContext.config.globalProperties.$TOUCHVUE_CONFIG || {};\r\n};\r\n\r\n/**\r\n * 获取组件配置\r\n * 合并全局配置和组件自身的props配置\r\n * @param props 组件props\r\n * @param key 配置键名(必须是TouchVueUIOptions中存在的属性)\r\n * @returns 合并后的配置值\r\n */\r\nexport const getComponentConfig = <T extends keyof TouchVueUIOptions>(\r\n props: Record<string, any>,\r\n key: T\r\n): TouchVueUIOptions[T] => {\r\n const globalConfig = useGlobalConfig();\r\n\r\n // 优先使用组件自身的props配置,如果没有则使用全局配置\r\n return (props[key] ?? globalConfig[key]) as TouchVueUIOptions[T];\r\n};\r\n"],"names":[],"mappings":";;AAcO,MAAM,kBAAkB,MAAyB;AACtD,EAAA,MAAM,WAAW,kBAAmB,EAAA,CAAA;AACpC,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,OAAA,CAAQ,KAAK,yGAAwC,CAAA,CAAA;AACrD,IAAA,OAAO,EAAC,CAAA;AAAA,GACV;AAGA,EAAA,OAAO,QAAS,CAAA,UAAA,CAAW,MAAO,CAAA,gBAAA,CAAiB,oBAAoB,EAAC,CAAA;AAC1E,EAAA;AASa,MAAA,kBAAA,GAAqB,CAChC,KAAA,EACA,GACyB,KAAA;AAnC3B,EAAA,IAAA,EAAA,CAAA;AAoCE,EAAA,MAAM,eAAe,eAAgB,EAAA,CAAA;AAGrC,EAAA,OAAA,CAAQ,EAAM,GAAA,KAAA,CAAA,GAAG,CAAT,KAAA,IAAA,GAAA,EAAA,GAAc,aAAa,GAAG,CAAA,CAAA;AACxC;;;;"}
1
+ {"version":3,"file":"config.mjs","sources":["../../../../packages/utils/config.ts"],"sourcesContent":["import { getCurrentInstance } from 'vue';\n\n// 定义全局配置选项类型\nexport interface TouchVueUIOptions {\n size?: 'small' | 'medium' | 'large';\n zIndex?: number;\n // 其他可能的配置项...\n}\n\n/**\n * 获取组件库全局配置\n * 可以在组件内部使用此函数获取全局配置\n * @returns 全局配置对象\n */\nexport const useGlobalConfig = (): TouchVueUIOptions => {\n const instance = getCurrentInstance();\n if (!instance) {\n console.warn('useGlobalConfig() 只能在setup()或生命周期钩子中调用');\n return {} as TouchVueUIOptions;\n }\n\n // 从应用实例中获取全局配置\n return instance.appContext.config.globalProperties.$TOUCHVUE_CONFIG || {};\n};\n\n/**\n * 获取组件配置\n * 合并全局配置和组件自身的props配置\n * @param props 组件props\n * @param key 配置键名(必须是TouchVueUIOptions中存在的属性)\n * @returns 合并后的配置值\n */\nexport const getComponentConfig = <T extends keyof TouchVueUIOptions>(\n props: Record<string, any>,\n key: T\n): TouchVueUIOptions[T] => {\n const globalConfig = useGlobalConfig();\n\n // 优先使用组件自身的props配置,如果没有则使用全局配置\n return (props[key] ?? globalConfig[key]) as TouchVueUIOptions[T];\n};\n"],"names":[],"mappings":";;AAcO,MAAM,kBAAkB,MAAyB;AACtD,EAAA,MAAM,WAAW,kBAAmB,EAAA,CAAA;AACpC,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,OAAA,CAAQ,KAAK,yGAAwC,CAAA,CAAA;AACrD,IAAA,OAAO,EAAC,CAAA;AAAA,GACV;AAGA,EAAA,OAAO,QAAS,CAAA,UAAA,CAAW,MAAO,CAAA,gBAAA,CAAiB,oBAAoB,EAAC,CAAA;AAC1E,EAAA;AASa,MAAA,kBAAA,GAAqB,CAChC,KAAA,EACA,GACyB,KAAA;AAnC3B,EAAA,IAAA,EAAA,CAAA;AAoCE,EAAA,MAAM,eAAe,eAAgB,EAAA,CAAA;AAGrC,EAAA,OAAA,CAAQ,EAAM,GAAA,KAAA,CAAA,GAAG,CAAT,KAAA,IAAA,GAAA,EAAA,GAAc,aAAa,GAAG,CAAA,CAAA;AACxC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","sources":["../../../../packages/utils/types.ts"],"sourcesContent":["import type { App, Plugin } from 'vue';\r\n\r\n/* 生成install函数 */\r\n\r\nexport type SFCWithInstall<T> = T & Plugin;\r\n\r\nexport type SFCInstallWithContext<T> = SFCWithInstall<T> & {\r\n _context: App | null;\r\n};\r\n\r\nexport const withInstall = <T, E extends Record<string, any>>(main: T, extra?: E) => {\r\n (main as SFCWithInstall<T>).install = (app: App): void => {\r\n for (const comp of [main, ...Object.values(extra ?? {})]) {\r\n app.component(comp.name, comp);\r\n }\r\n };\r\n\r\n if (extra) {\r\n for (const [key, comp] of Object.entries(extra)) {\r\n (main as any)[key] = comp;\r\n }\r\n }\r\n return main as SFCWithInstall<T> & E;\r\n};\r\n\r\nexport const withInstallFunction = <T>(fn: T, name: string) => {\r\n (fn as SFCWithInstall<T>).install = (app: App) => {\r\n (fn as SFCInstallWithContext<T>)._context = app;\r\n app.config.globalProperties[name] = fn;\r\n };\r\n\r\n return fn as SFCInstallWithContext<T>;\r\n};\r\n"],"names":[],"mappings":"AAUa,MAAA,WAAA,GAAc,CAAmC,IAAA,EAAS,KAAc,KAAA;AACnF,EAAC,IAAA,CAA2B,OAAU,GAAA,CAAC,GAAmB,KAAA;AACxD,IAAW,KAAA,MAAA,IAAA,IAAQ,CAAC,IAAA,EAAM,GAAG,MAAA,CAAO,OAAO,KAAS,IAAA,IAAA,GAAA,KAAA,GAAA,EAAE,CAAC,CAAG,EAAA;AACxD,MAAI,GAAA,CAAA,SAAA,CAAU,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,KAC/B;AAAA,GACF,CAAA;AAEA,EAAA,IAAI,KAAO,EAAA;AACT,IAAA,KAAA,MAAW,CAAC,GAAK,EAAA,IAAI,KAAK,MAAO,CAAA,OAAA,CAAQ,KAAK,CAAG,EAAA;AAC/C,MAAC,IAAA,CAAa,GAAG,CAAI,GAAA,IAAA,CAAA;AAAA,KACvB;AAAA,GACF;AACA,EAAO,OAAA,IAAA,CAAA;AACT,EAAA;AAEa,MAAA,mBAAA,GAAsB,CAAI,EAAA,EAAO,IAAiB,KAAA;AAC7D,EAAC,EAAA,CAAyB,OAAU,GAAA,CAAC,GAAa,KAAA;AAChD,IAAC,GAAgC,QAAW,GAAA,GAAA,CAAA;AAC5C,IAAI,GAAA,CAAA,MAAA,CAAO,gBAAiB,CAAA,IAAI,CAAI,GAAA,EAAA,CAAA;AAAA,GACtC,CAAA;AAEA,EAAO,OAAA,EAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"types.mjs","sources":["../../../../packages/utils/types.ts"],"sourcesContent":["import type { App, Plugin } from 'vue';\n\n/* 生成install函数 */\n\nexport type SFCWithInstall<T> = T & Plugin;\n\nexport type SFCInstallWithContext<T> = SFCWithInstall<T> & {\n _context: App | null;\n};\n\nexport const withInstall = <T, E extends Record<string, any>>(main: T, extra?: E) => {\n (main as SFCWithInstall<T>).install = (app: App): void => {\n for (const comp of [main, ...Object.values(extra ?? {})]) {\n app.component(comp.name, comp);\n }\n };\n\n if (extra) {\n for (const [key, comp] of Object.entries(extra)) {\n (main as any)[key] = comp;\n }\n }\n return main as SFCWithInstall<T> & E;\n};\n\nexport const withInstallFunction = <T>(fn: T, name: string) => {\n (fn as SFCWithInstall<T>).install = (app: App) => {\n (fn as SFCInstallWithContext<T>)._context = app;\n app.config.globalProperties[name] = fn;\n };\n\n return fn as SFCInstallWithContext<T>;\n};\n"],"names":[],"mappings":"AAUa,MAAA,WAAA,GAAc,CAAmC,IAAA,EAAS,KAAc,KAAA;AACnF,EAAC,IAAA,CAA2B,OAAU,GAAA,CAAC,GAAmB,KAAA;AACxD,IAAW,KAAA,MAAA,IAAA,IAAQ,CAAC,IAAA,EAAM,GAAG,MAAA,CAAO,OAAO,KAAS,IAAA,IAAA,GAAA,KAAA,GAAA,EAAE,CAAC,CAAG,EAAA;AACxD,MAAI,GAAA,CAAA,SAAA,CAAU,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,KAC/B;AAAA,GACF,CAAA;AAEA,EAAA,IAAI,KAAO,EAAA;AACT,IAAA,KAAA,MAAW,CAAC,GAAK,EAAA,IAAI,KAAK,MAAO,CAAA,OAAA,CAAQ,KAAK,CAAG,EAAA;AAC/C,MAAC,IAAA,CAAa,GAAG,CAAI,GAAA,IAAA,CAAA;AAAA,KACvB;AAAA,GACF;AACA,EAAO,OAAA,IAAA,CAAA;AACT,EAAA;AAEa,MAAA,mBAAA,GAAsB,CAAI,EAAA,EAAO,IAAiB,KAAA;AAC7D,EAAC,EAAA,CAAyB,OAAU,GAAA,CAAC,GAAa,KAAA;AAChD,IAAC,GAAgC,QAAW,GAAA,GAAA,CAAA;AAC5C,IAAI,GAAA,CAAA,MAAA,CAAO,gBAAiB,CAAA,IAAI,CAAI,GAAA,EAAA,CAAA;AAAA,GACtC,CAAA;AAEA,EAAO,OAAA,EAAA,CAAA;AACT;;;;"}
package/global.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  // 自动生成的全局类型声明文件
2
2
  declare module 'vue' {
3
3
  export interface GlobalComponents {
4
- ToTouchChat: typeof import('@touchvue/chat')['ToTouchChat']
5
- ToTouchLetter: typeof import('@touchvue/chat')['ToTouchLetter']
4
+ Touchchat: typeof import('@touchvue/chat')['Touchchat']
5
+ Touchletter: typeof import('@touchvue/chat')['Touchletter']
6
6
  }
7
7
  }
8
8
 
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _export_sfc = (sfc, props) => {
6
+ const target = sfc.__vccOpts || sfc;
7
+ for (const [key, val] of props) {
8
+ target[key] = val;
9
+ }
10
+ return target;
11
+ };
12
+
13
+ exports.default = _export_sfc;
14
+ //# sourceMappingURL=_plugin-vue_export-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_plugin-vue_export-helper.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../packages/chat/index.ts"],"sourcesContent":["import type { App } from 'vue';\r\nimport * as TouchVueComponents from '@touchvue/components';\r\n\r\n// 重新定义Vue组件插件类型,不使用extends避免TS错误\r\ntype VueComponentPlugin = {\r\n install: (app: App, ...options: any[]) => void;\r\n [key: string]: any;\r\n};\r\n\r\n// 定义配置项接口\r\nexport interface TouchVueUIOptions {\r\n // 主题配置\r\n theme?: string;\r\n // 尺寸配置\r\n size?: 'small' | 'default' | 'large';\r\n // 国际化配置\r\n locale?: string;\r\n // 其他自定义配置\r\n [key: string]: any;\r\n}\r\n\r\n// 全局默认配置\r\nexport const defaultOptions: TouchVueUIOptions = {\r\n theme: 'default',\r\n size: 'default',\r\n locale: 'zh-CN',\r\n};\r\n\r\n// 全局配置\r\nexport let globalOptions = { ...defaultOptions };\r\n\r\n// 获取全局配置\r\nexport const getGlobalOptions = (): TouchVueUIOptions => {\r\n return globalOptions;\r\n};\r\n\r\nconst install = (app: App, options: TouchVueUIOptions = {}) => {\r\n // 合并配置项\r\n globalOptions = {\r\n ...defaultOptions,\r\n ...options,\r\n };\r\n\r\n // 将配置注入到应用实例中\r\n app.config.globalProperties.$TOUCHVUE_CONFIG = globalOptions;\r\n\r\n // 注册所有组件,使用正确的类型断言\r\n const components = Object.values(TouchVueComponents) as unknown as VueComponentPlugin[];\r\n\r\n components.forEach(component => {\r\n // 确保是有效的Vue组件插件\r\n if (\r\n component &&\r\n typeof component === 'object' &&\r\n 'install' in component &&\r\n typeof component.install === 'function'\r\n ) {\r\n app.use(component);\r\n }\r\n });\r\n};\r\n\r\nexport default {\r\n install,\r\n};\r\n"],"names":["globalOptions","TouchVueComponents"],"mappings":";;;;;;AAsBO,MAAM,cAAoC,GAAA;AAAA,EAC/C,KAAO,EAAA,SAAA;AAAA,EACP,IAAM,EAAA,SAAA;AAAA,EACN,MAAQ,EAAA,OAAA;AACV,EAAA;AAGWA,qBAAA,GAAgB,EAAE,GAAG,cAAe,GAAA;AAGxC,MAAM,mBAAmB,MAAyB;AACvD,EAAO,OAAAA,qBAAA,CAAA;AACT,EAAA;AAEA,MAAM,OAAU,GAAA,CAAC,GAAU,EAAA,OAAA,GAA6B,EAAO,KAAA;AAE7D,EAAgBA,qBAAA,GAAA;AAAA,IACd,GAAG,cAAA;AAAA,IACH,GAAG,OAAA;AAAA,GACL,CAAA;AAGA,EAAI,GAAA,CAAA,MAAA,CAAO,iBAAiB,gBAAmB,GAAAA,qBAAA,CAAA;AAG/C,EAAM,MAAA,UAAA,GAAa,MAAO,CAAA,MAAA,CAAOC,OAAkB,CAAA,CAAA;AAEnD,EAAA,UAAA,CAAW,QAAQ,CAAa,SAAA,KAAA;AAE9B,IACE,IAAA,SAAA,IACA,OAAO,SAAc,KAAA,QAAA,IACrB,aAAa,SACb,IAAA,OAAO,SAAU,CAAA,OAAA,KAAY,UAC7B,EAAA;AACA,MAAA,GAAA,CAAI,IAAI,SAAS,CAAA,CAAA;AAAA,KACnB;AAAA,GACD,CAAA,CAAA;AACH,CAAA,CAAA;AAEA,YAAe;AAAA,EACb,OAAA;AACF,CAAA;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../packages/chat/index.ts"],"sourcesContent":["import type { App } from 'vue';\nimport * as TouchVueComponents from '@touchvue/components';\n\n// 重新定义Vue组件插件类型,不使用extends避免TS错误\ntype VueComponentPlugin = {\n install: (app: App, ...options: any[]) => void;\n [key: string]: any;\n};\n\n// 定义配置项接口\nexport interface TouchVueUIOptions {\n // 主题配置\n theme?: string;\n // 尺寸配置\n size?: 'small' | 'default' | 'large';\n // 国际化配置\n locale?: string;\n // 其他自定义配置\n [key: string]: any;\n}\n\n// 全局默认配置\nexport const defaultOptions: TouchVueUIOptions = {\n theme: 'default',\n size: 'default',\n locale: 'zh-CN',\n};\n\n// 全局配置\nexport let globalOptions = { ...defaultOptions };\n\n// 获取全局配置\nexport const getGlobalOptions = (): TouchVueUIOptions => {\n return globalOptions;\n};\n\nconst install = (app: App, options: TouchVueUIOptions = {}) => {\n // 合并配置项\n globalOptions = {\n ...defaultOptions,\n ...options,\n };\n\n // 将配置注入到应用实例中\n app.config.globalProperties.$TOUCHVUE_CONFIG = globalOptions;\n\n // 注册所有组件,使用正确的类型断言\n const components = Object.values(TouchVueComponents) as unknown as VueComponentPlugin[];\n\n components.forEach(component => {\n // 确保是有效的Vue组件插件\n if (\n component &&\n typeof component === 'object' &&\n 'install' in component &&\n typeof component.install === 'function'\n ) {\n app.use(component);\n }\n });\n};\n\nexport default {\n install,\n};\n"],"names":["globalOptions","TouchVueComponents"],"mappings":";;;;;;AAsBO,MAAM,cAAoC,GAAA;AAAA,EAC/C,KAAO,EAAA,SAAA;AAAA,EACP,IAAM,EAAA,SAAA;AAAA,EACN,MAAQ,EAAA,OAAA;AACV,EAAA;AAGWA,qBAAA,GAAgB,EAAE,GAAG,cAAe,GAAA;AAGxC,MAAM,mBAAmB,MAAyB;AACvD,EAAO,OAAAA,qBAAA,CAAA;AACT,EAAA;AAEA,MAAM,OAAU,GAAA,CAAC,GAAU,EAAA,OAAA,GAA6B,EAAO,KAAA;AAE7D,EAAgBA,qBAAA,GAAA;AAAA,IACd,GAAG,cAAA;AAAA,IACH,GAAG,OAAA;AAAA,GACL,CAAA;AAGA,EAAI,GAAA,CAAA,MAAA,CAAO,iBAAiB,gBAAmB,GAAAA,qBAAA,CAAA;AAG/C,EAAM,MAAA,UAAA,GAAa,MAAO,CAAA,MAAA,CAAOC,OAAkB,CAAA,CAAA;AAEnD,EAAA,UAAA,CAAW,QAAQ,CAAa,SAAA,KAAA;AAE9B,IACE,IAAA,SAAA,IACA,OAAO,SAAc,KAAA,QAAA,IACrB,aAAa,SACb,IAAA,OAAO,SAAU,CAAA,OAAA,KAAY,UAC7B,EAAA;AACA,MAAA,GAAA,CAAI,IAAI,SAAS,CAAA,CAAA;AAAA,KACnB;AAAA,GACD,CAAA,CAAA;AACH,CAAA,CAAA;AAEA,YAAe;AAAA,EACb,OAAA;AACF,CAAA;;;;;;"}