@ai-group/chat-sdk 3.7.0 → 3.7.1-alpha10

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 (235) hide show
  1. package/README.md +22 -0
  2. package/dist/cjs/components/FileGallery/index.js +59 -40
  3. package/dist/cjs/components/FileGallery/index.js.map +2 -2
  4. package/dist/cjs/components/FileGallery/styles.d.ts +7 -0
  5. package/dist/cjs/components/FileGallery/styles.js +78 -0
  6. package/dist/cjs/components/FileGallery/styles.js.map +2 -2
  7. package/dist/cjs/components/Sources/components/CarouselCard.d.ts +12 -0
  8. package/dist/cjs/components/Sources/components/CarouselCard.js +130 -0
  9. package/dist/cjs/components/Sources/components/CarouselCard.js.map +7 -0
  10. package/dist/cjs/components/Sources/index.d.ts +5 -0
  11. package/dist/cjs/components/Sources/index.js +162 -0
  12. package/dist/cjs/components/Sources/index.js.map +7 -0
  13. package/dist/cjs/components/Sources/styles.d.ts +59 -0
  14. package/dist/cjs/components/Sources/styles.js +179 -0
  15. package/dist/cjs/components/Sources/styles.js.map +7 -0
  16. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
  17. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +232 -22
  18. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
  19. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
  20. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +83 -0
  21. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
  22. package/dist/cjs/components/XAdkChatbot/index.d.ts +2 -2
  23. package/dist/cjs/components/XAdkChatbot/index.js +75 -8
  24. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  25. package/dist/cjs/components/XAdkChatbot/styles.js +1 -1
  26. package/dist/cjs/components/XAdkChatbot/styles.js.map +1 -1
  27. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
  28. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +30 -12
  29. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
  30. package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +3 -1
  31. package/dist/cjs/components/XAdkProvider/compound/Sender.js +81 -4
  32. package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +3 -3
  33. package/dist/cjs/components/XAdkProvider/compound/styles.d.ts +1 -0
  34. package/dist/cjs/components/XAdkProvider/compound/styles.js +16 -0
  35. package/dist/cjs/components/XAdkProvider/compound/styles.js.map +2 -2
  36. package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
  37. package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.js.map +2 -2
  38. package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
  39. package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js +34 -0
  40. package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js.map +7 -0
  41. package/dist/cjs/components/XAdkProvider/context/index.d.ts +5 -4
  42. package/dist/cjs/components/XAdkProvider/context/index.js +3 -1
  43. package/dist/cjs/components/XAdkProvider/context/index.js.map +2 -2
  44. package/dist/cjs/components/XAdkProvider/index.js +11 -10
  45. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  46. package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +31 -0
  47. package/dist/cjs/components/XAdkSender/InlineTagInput.js +759 -0
  48. package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +7 -0
  49. package/dist/cjs/components/XAdkSender/InputTags.d.ts +8 -0
  50. package/dist/cjs/components/XAdkSender/InputTags.js +51 -0
  51. package/dist/cjs/components/XAdkSender/InputTags.js.map +7 -0
  52. package/dist/cjs/components/XAdkSender/QuickList.d.ts +16 -0
  53. package/dist/cjs/components/XAdkSender/QuickList.js +105 -0
  54. package/dist/cjs/components/XAdkSender/QuickList.js.map +7 -0
  55. package/dist/cjs/components/XAdkSender/index.d.ts +1 -6
  56. package/dist/cjs/components/XAdkSender/index.js +422 -150
  57. package/dist/cjs/components/XAdkSender/index.js.map +3 -3
  58. package/dist/cjs/components/XAdkSender/styles.d.ts +19 -0
  59. package/dist/cjs/components/XAdkSender/styles.js +225 -5
  60. package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
  61. package/dist/cjs/components/XAiConversations/styles.js +11 -1
  62. package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
  63. package/dist/cjs/hooks/useADKChat.js +5 -1
  64. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  65. package/dist/cjs/index.d.ts +8 -3
  66. package/dist/cjs/index.js +44 -10
  67. package/dist/cjs/index.js.map +3 -3
  68. package/dist/cjs/presets/base.d.ts +6 -0
  69. package/dist/cjs/presets/base.js +50 -0
  70. package/dist/cjs/presets/base.js.map +7 -0
  71. package/dist/cjs/presets/define.d.ts +11 -0
  72. package/dist/cjs/presets/define.js +58 -0
  73. package/dist/cjs/presets/define.js.map +7 -0
  74. package/dist/cjs/presets/index.d.ts +3 -0
  75. package/dist/cjs/presets/index.js +28 -0
  76. package/dist/cjs/presets/index.js.map +7 -0
  77. package/dist/cjs/presets/runtime.d.ts +22 -0
  78. package/dist/cjs/presets/runtime.js +75 -0
  79. package/dist/cjs/presets/runtime.js.map +7 -0
  80. package/dist/cjs/presets/xgroup/index.d.ts +5 -0
  81. package/dist/cjs/presets/xgroup/index.js +10 -0
  82. package/dist/cjs/presets/xgroup/index.js.map +2 -2
  83. package/dist/cjs/presets/xgroup/knowledgeReference.d.ts +17 -0
  84. package/dist/cjs/presets/xgroup/knowledgeReference.js +162 -0
  85. package/dist/cjs/presets/xgroup/knowledgeReference.js.map +7 -0
  86. package/dist/cjs/presets/xgroup/preset.d.ts +1 -13
  87. package/dist/cjs/presets/xgroup/preset.js +16 -37
  88. package/dist/cjs/presets/xgroup/preset.js.map +2 -2
  89. package/dist/cjs/presets/xgroup/strategies.d.ts +5 -4
  90. package/dist/cjs/presets/xgroup/strategies.js +11 -15
  91. package/dist/cjs/presets/xgroup/strategies.js.map +3 -3
  92. package/dist/cjs/presets/xgroup/webReference.d.ts +10 -0
  93. package/dist/cjs/presets/xgroup/webReference.js +85 -0
  94. package/dist/cjs/presets/xgroup/webReference.js.map +7 -0
  95. package/dist/cjs/types/ChatStrategies.d.ts +11 -2
  96. package/dist/cjs/types/ChatStrategies.js.map +1 -1
  97. package/dist/cjs/types/FileGallery.d.ts +3 -0
  98. package/dist/cjs/types/FileGallery.js.map +1 -1
  99. package/dist/cjs/types/Sources.d.ts +30 -0
  100. package/dist/cjs/types/Sources.js +18 -0
  101. package/dist/cjs/types/Sources.js.map +7 -0
  102. package/dist/cjs/types/XAdkChatbot.d.ts +33 -0
  103. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  104. package/dist/cjs/types/XAdkSender.d.ts +154 -8
  105. package/dist/cjs/types/XAdkSender.js.map +1 -1
  106. package/dist/cjs/types/index.d.ts +1 -0
  107. package/dist/cjs/types/index.js +3 -1
  108. package/dist/cjs/types/index.js.map +2 -2
  109. package/dist/cjs/utils/index.d.ts +1 -0
  110. package/dist/cjs/utils/index.js +3 -1
  111. package/dist/cjs/utils/index.js.map +2 -2
  112. package/dist/cjs/utils/markdownResource.d.ts +14 -0
  113. package/dist/cjs/utils/markdownResource.js +131 -0
  114. package/dist/cjs/utils/markdownResource.js.map +7 -0
  115. package/dist/esm/components/FileGallery/index.js +22 -16
  116. package/dist/esm/components/FileGallery/index.js.map +1 -1
  117. package/dist/esm/components/FileGallery/styles.d.ts +7 -0
  118. package/dist/esm/components/FileGallery/styles.js +24 -17
  119. package/dist/esm/components/FileGallery/styles.js.map +1 -1
  120. package/dist/esm/components/Sources/components/CarouselCard.d.ts +12 -0
  121. package/dist/esm/components/Sources/components/CarouselCard.js +107 -0
  122. package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -0
  123. package/dist/esm/components/Sources/index.d.ts +5 -0
  124. package/dist/esm/components/Sources/index.js +127 -0
  125. package/dist/esm/components/Sources/index.js.map +1 -0
  126. package/dist/esm/components/Sources/styles.d.ts +59 -0
  127. package/dist/esm/components/Sources/styles.js +34 -0
  128. package/dist/esm/components/Sources/styles.js.map +1 -0
  129. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
  130. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +190 -11
  131. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
  132. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
  133. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +5 -2
  134. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
  135. package/dist/esm/components/XAdkChatbot/index.d.ts +2 -2
  136. package/dist/esm/components/XAdkChatbot/index.js +55 -10
  137. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  138. package/dist/esm/components/XAdkChatbot/styles.js +1 -1
  139. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  140. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
  141. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +40 -17
  142. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
  143. package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +3 -1
  144. package/dist/esm/components/XAdkProvider/compound/Sender.js +70 -6
  145. package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
  146. package/dist/esm/components/XAdkProvider/compound/styles.d.ts +1 -0
  147. package/dist/esm/components/XAdkProvider/compound/styles.js +3 -2
  148. package/dist/esm/components/XAdkProvider/compound/styles.js.map +1 -1
  149. package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
  150. package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.js.map +1 -1
  151. package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
  152. package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js +9 -0
  153. package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js.map +1 -0
  154. package/dist/esm/components/XAdkProvider/context/index.d.ts +5 -4
  155. package/dist/esm/components/XAdkProvider/context/index.js +1 -0
  156. package/dist/esm/components/XAdkProvider/context/index.js.map +1 -1
  157. package/dist/esm/components/XAdkProvider/index.js +7 -3
  158. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  159. package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +31 -0
  160. package/dist/esm/components/XAdkSender/InlineTagInput.js +734 -0
  161. package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -0
  162. package/dist/esm/components/XAdkSender/InputTags.d.ts +8 -0
  163. package/dist/esm/components/XAdkSender/InputTags.js +37 -0
  164. package/dist/esm/components/XAdkSender/InputTags.js.map +1 -0
  165. package/dist/esm/components/XAdkSender/QuickList.d.ts +16 -0
  166. package/dist/esm/components/XAdkSender/QuickList.js +96 -0
  167. package/dist/esm/components/XAdkSender/QuickList.js.map +1 -0
  168. package/dist/esm/components/XAdkSender/index.d.ts +1 -6
  169. package/dist/esm/components/XAdkSender/index.js +476 -143
  170. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  171. package/dist/esm/components/XAdkSender/styles.d.ts +19 -0
  172. package/dist/esm/components/XAdkSender/styles.js +34 -12
  173. package/dist/esm/components/XAdkSender/styles.js.map +1 -1
  174. package/dist/esm/components/XAiConversations/styles.js +3 -3
  175. package/dist/esm/components/XAiConversations/styles.js.map +1 -1
  176. package/dist/esm/hooks/useADKChat.js +8 -2
  177. package/dist/esm/hooks/useADKChat.js.map +1 -1
  178. package/dist/esm/index.d.ts +8 -3
  179. package/dist/esm/index.js +7 -4
  180. package/dist/esm/index.js.map +1 -1
  181. package/dist/esm/presets/base.d.ts +6 -0
  182. package/dist/esm/presets/base.js +28 -0
  183. package/dist/esm/presets/base.js.map +1 -0
  184. package/dist/esm/presets/define.d.ts +11 -0
  185. package/dist/esm/presets/define.js +33 -0
  186. package/dist/esm/presets/define.js.map +1 -0
  187. package/dist/esm/presets/index.d.ts +3 -0
  188. package/dist/esm/presets/index.js +4 -0
  189. package/dist/esm/presets/index.js.map +1 -0
  190. package/dist/esm/presets/runtime.d.ts +22 -0
  191. package/dist/esm/presets/runtime.js +45 -0
  192. package/dist/esm/presets/runtime.js.map +1 -0
  193. package/dist/esm/presets/xgroup/index.d.ts +5 -0
  194. package/dist/esm/presets/xgroup/index.js +6 -0
  195. package/dist/esm/presets/xgroup/index.js.map +1 -1
  196. package/dist/esm/presets/xgroup/knowledgeReference.d.ts +17 -0
  197. package/dist/esm/presets/xgroup/knowledgeReference.js +95 -0
  198. package/dist/esm/presets/xgroup/knowledgeReference.js.map +1 -0
  199. package/dist/esm/presets/xgroup/preset.d.ts +1 -13
  200. package/dist/esm/presets/xgroup/preset.js +9 -29
  201. package/dist/esm/presets/xgroup/preset.js.map +1 -1
  202. package/dist/esm/presets/xgroup/strategies.d.ts +5 -4
  203. package/dist/esm/presets/xgroup/strategies.js +8 -20
  204. package/dist/esm/presets/xgroup/strategies.js.map +1 -1
  205. package/dist/esm/presets/xgroup/webReference.d.ts +10 -0
  206. package/dist/esm/presets/xgroup/webReference.js +46 -0
  207. package/dist/esm/presets/xgroup/webReference.js.map +1 -0
  208. package/dist/esm/types/ChatStrategies.d.ts +11 -2
  209. package/dist/esm/types/ChatStrategies.js.map +1 -1
  210. package/dist/esm/types/FileGallery.d.ts +3 -0
  211. package/dist/esm/types/FileGallery.js.map +1 -1
  212. package/dist/esm/types/Sources.d.ts +30 -0
  213. package/dist/esm/types/Sources.js +2 -0
  214. package/dist/esm/types/Sources.js.map +1 -0
  215. package/dist/esm/types/XAdkChatbot.d.ts +33 -0
  216. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  217. package/dist/esm/types/XAdkSender.d.ts +154 -8
  218. package/dist/esm/types/XAdkSender.js.map +1 -1
  219. package/dist/esm/types/index.d.ts +1 -0
  220. package/dist/esm/types/index.js +1 -0
  221. package/dist/esm/types/index.js.map +1 -1
  222. package/dist/esm/utils/index.d.ts +1 -0
  223. package/dist/esm/utils/index.js +1 -0
  224. package/dist/esm/utils/index.js.map +1 -1
  225. package/dist/esm/utils/markdownResource.d.ts +14 -0
  226. package/dist/esm/utils/markdownResource.js +101 -0
  227. package/dist/esm/utils/markdownResource.js.map +1 -0
  228. package/dist/umd/chat-sdk.min.js +1 -1
  229. package/package.json +6 -1
  230. package/dist/cjs/components/XAdkSender/Switch.d.ts +0 -16
  231. package/dist/cjs/components/XAdkSender/Switch.js +0 -95
  232. package/dist/cjs/components/XAdkSender/Switch.js.map +0 -7
  233. package/dist/esm/components/XAdkSender/Switch.d.ts +0 -16
  234. package/dist/esm/components/XAdkSender/Switch.js +0 -53
  235. package/dist/esm/components/XAdkSender/Switch.js.map +0 -1
@@ -0,0 +1,46 @@
1
+ import React from "react";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ export var XGROUP_WEB_REFERENCE_ATTRIBUTES = ["url", "title", "snippet"];
4
+ export var parseXGroupWebReference = function parseXGroupWebReference(_ref) {
5
+ var _attributes$url, _attributes$title, _attributes$snippet;
6
+ var attributes = _ref.attributes,
7
+ text = _ref.text;
8
+ return {
9
+ url: ((_attributes$url = attributes.url) === null || _attributes$url === void 0 ? void 0 : _attributes$url.trim()) || "",
10
+ title: ((_attributes$title = attributes.title) === null || _attributes$title === void 0 ? void 0 : _attributes$title.trim()) || "",
11
+ snippet: ((_attributes$snippet = attributes.snippet) === null || _attributes$snippet === void 0 ? void 0 : _attributes$snippet.trim()) || "",
12
+ label: text.trim()
13
+ };
14
+ };
15
+ var renderStaticWebReference = function renderStaticWebReference(node) {
16
+ var reference = parseXGroupWebReference(node);
17
+ return /*#__PURE__*/_jsx("span", {
18
+ "aria-label": "\u5916\u90E8\u641C\u7D22\u5F15\u7528 ".concat(reference.label || "引"),
19
+ "data-xadk-web-reference": "true",
20
+ style: {
21
+ boxSizing: "border-box",
22
+ display: "inline-flex",
23
+ alignItems: "center",
24
+ justifyContent: "center",
25
+ minWidth: 18,
26
+ height: 18,
27
+ margin: "0 3px",
28
+ padding: "0 5px",
29
+ border: "1px solid #e4e6eb",
30
+ borderRadius: 9,
31
+ background: "#f1f2f4",
32
+ color: "#8a8f99",
33
+ fontSize: 12,
34
+ fontWeight: 500,
35
+ lineHeight: "18px",
36
+ verticalAlign: "1px"
37
+ },
38
+ children: reference.label || "引"
39
+ });
40
+ };
41
+ export var xGroupWebReferenceMarkdownExtension = {
42
+ tagName: "ai-web-ref",
43
+ allowedAttributes: XGROUP_WEB_REFERENCE_ATTRIBUTES,
44
+ render: renderStaticWebReference
45
+ };
46
+ //# sourceMappingURL=webReference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","jsx","_jsx","XGROUP_WEB_REFERENCE_ATTRIBUTES","parseXGroupWebReference","_ref","_attributes$url","_attributes$title","_attributes$snippet","attributes","text","url","trim","title","snippet","label","renderStaticWebReference","node","reference","concat","style","boxSizing","display","alignItems","justifyContent","minWidth","height","margin","padding","border","borderRadius","background","color","fontSize","fontWeight","lineHeight","verticalAlign","children","xGroupWebReferenceMarkdownExtension","tagName","allowedAttributes","render"],"sources":["../../../../src/presets/xgroup/webReference.tsx"],"sourcesContent":["import React from \"react\";\n\nimport type { MarkdownExtension, MarkdownExtensionNode } from \"@/types\";\n\nexport interface XGroupWebReference {\n url: string;\n title: string;\n snippet: string;\n label: string;\n}\n\nexport const XGROUP_WEB_REFERENCE_ATTRIBUTES = [\n \"url\",\n \"title\",\n \"snippet\",\n] as const;\n\nexport const parseXGroupWebReference = ({\n attributes,\n text,\n}: Pick<MarkdownExtensionNode, \"attributes\" | \"text\">): XGroupWebReference => ({\n url: attributes.url?.trim() || \"\",\n title: attributes.title?.trim() || \"\",\n snippet: attributes.snippet?.trim() || \"\",\n label: text.trim(),\n});\n\nconst renderStaticWebReference = (node: MarkdownExtensionNode) => {\n const reference = parseXGroupWebReference(node);\n return (\n <span\n aria-label={`外部搜索引用 ${reference.label || \"引\"}`}\n data-xadk-web-reference=\"true\"\n style={{\n boxSizing: \"border-box\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n minWidth: 18,\n height: 18,\n margin: \"0 3px\",\n padding: \"0 5px\",\n border: \"1px solid #e4e6eb\",\n borderRadius: 9,\n background: \"#f1f2f4\",\n color: \"#8a8f99\",\n fontSize: 12,\n fontWeight: 500,\n lineHeight: \"18px\",\n verticalAlign: \"1px\",\n }}\n >\n {reference.label || \"引\"}\n </span>\n );\n};\n\nexport const xGroupWebReferenceMarkdownExtension: MarkdownExtension = {\n tagName: \"ai-web-ref\",\n allowedAttributes: XGROUP_WEB_REFERENCE_ATTRIBUTES,\n render: renderStaticWebReference,\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAW1B,OAAO,IAAMC,+BAA+B,GAAG,CAC7C,KAAK,EACL,OAAO,EACP,SAAS,CACD;AAEV,OAAO,IAAMC,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAAAC,IAAA;EAAA,IAAAC,eAAA,EAAAC,iBAAA,EAAAC,mBAAA;EAAA,IAClCC,UAAU,GAAAJ,IAAA,CAAVI,UAAU;IACVC,IAAI,GAAAL,IAAA,CAAJK,IAAI;EAAA,OACyE;IAC7EC,GAAG,EAAE,EAAAL,eAAA,GAAAG,UAAU,CAACE,GAAG,cAAAL,eAAA,uBAAdA,eAAA,CAAgBM,IAAI,CAAC,CAAC,KAAI,EAAE;IACjCC,KAAK,EAAE,EAAAN,iBAAA,GAAAE,UAAU,CAACI,KAAK,cAAAN,iBAAA,uBAAhBA,iBAAA,CAAkBK,IAAI,CAAC,CAAC,KAAI,EAAE;IACrCE,OAAO,EAAE,EAAAN,mBAAA,GAAAC,UAAU,CAACK,OAAO,cAAAN,mBAAA,uBAAlBA,mBAAA,CAAoBI,IAAI,CAAC,CAAC,KAAI,EAAE;IACzCG,KAAK,EAAEL,IAAI,CAACE,IAAI,CAAC;EACnB,CAAC;AAAA,CAAC;AAEF,IAAMI,wBAAwB,GAAG,SAA3BA,wBAAwBA,CAAIC,IAA2B,EAAK;EAChE,IAAMC,SAAS,GAAGd,uBAAuB,CAACa,IAAI,CAAC;EAC/C,oBACEf,IAAA;IACE,sDAAAiB,MAAA,CAAsBD,SAAS,CAACH,KAAK,IAAI,GAAG,CAAG;IAC/C,2BAAwB,MAAM;IAC9BK,KAAK,EAAE;MACLC,SAAS,EAAE,YAAY;MACvBC,OAAO,EAAE,aAAa;MACtBC,UAAU,EAAE,QAAQ;MACpBC,cAAc,EAAE,QAAQ;MACxBC,QAAQ,EAAE,EAAE;MACZC,MAAM,EAAE,EAAE;MACVC,MAAM,EAAE,OAAO;MACfC,OAAO,EAAE,OAAO;MAChBC,MAAM,EAAE,mBAAmB;MAC3BC,YAAY,EAAE,CAAC;MACfC,UAAU,EAAE,SAAS;MACrBC,KAAK,EAAE,SAAS;MAChBC,QAAQ,EAAE,EAAE;MACZC,UAAU,EAAE,GAAG;MACfC,UAAU,EAAE,MAAM;MAClBC,aAAa,EAAE;IACjB,CAAE;IAAAC,QAAA,EAEDnB,SAAS,CAACH,KAAK,IAAI;EAAG,CACnB,CAAC;AAEX,CAAC;AAED,OAAO,IAAMuB,mCAAsD,GAAG;EACpEC,OAAO,EAAE,YAAY;EACrBC,iBAAiB,EAAErC,+BAA+B;EAClDsC,MAAM,EAAEzB;AACV,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import type React from "react";
2
2
  import type { ParseAgentMessageOptions, ParsedPart } from "../utils";
3
- import type { IMessage, FunctionCall, FunctionResponse } from "./XAdkChatbot";
3
+ import type { IMessage, FunctionCall, FunctionResponse, MarkdownExtension } from "./XAdkChatbot";
4
4
  import type { ToolRenderKind } from "./FunctionCallRender";
5
5
  import type { UploadRequestFn } from "./XAdkSender";
6
6
  export interface ToolKindResolveContext {
@@ -20,6 +20,11 @@ export interface ChatStrategies {
20
20
  * 将模型文本拆分为过程节点和最终答案。
21
21
  */
22
22
  parseProcessMessage?: (text: string, options?: ParseAgentMessageOptions) => ParsedPart[];
23
+ /**
24
+ * Markdown 资源链接协议白名单,如 skill://、plugin://。
25
+ * 业务预设可在这里追加私有协议,例如 xgroup-adk 的 kb://。
26
+ */
27
+ markdownResourceLinkSchemes?: readonly string[];
23
28
  /**
24
29
  * 自定义 approval 场景渲染,返回 null 则使用默认渲染。
25
30
  */
@@ -32,6 +37,8 @@ export interface ChatStrategies {
32
37
  export interface ChatPreset {
33
38
  name: string;
34
39
  strategies?: ChatStrategies;
40
+ /** 当前协议预设提供的默认 Markdown/XML 标签扩展。 */
41
+ markdownExtensions?: readonly MarkdownExtension[];
35
42
  /**
36
43
  * 基于当前协议预设创建默认文件上传函数。
37
44
  * 用户显式传入 config.uploadRequest 时优先使用用户配置。
@@ -42,4 +49,6 @@ export interface ChatPreset {
42
49
  appNo?: string;
43
50
  }) => UploadRequestFn | undefined;
44
51
  }
45
- export type ChatPresetInput = "base" | "xgroup-adk" | ChatPreset;
52
+ /** SDK 为兼容现有接入提供的内建预设名称。自定义预设建议直接传 ChatPreset 对象。 */
53
+ export type BuiltinChatPresetName = "base" | "xgroup-adk";
54
+ export type ChatPresetInput = BuiltinChatPresetName | ChatPreset;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/ChatStrategies.ts"],"sourcesContent":["import type React from \"react\";\nimport type { ParseAgentMessageOptions, ParsedPart } from \"@/utils\";\nimport type { IMessage, FunctionCall, FunctionResponse } from \"./XAdkChatbot\";\nimport type { ToolRenderKind } from \"./FunctionCallRender\";\nimport type { UploadRequestFn } from \"./XAdkSender\";\n\nexport interface ToolKindResolveContext {\n name?: string;\n msg?: IMessage;\n}\n\nexport interface ChatStrategies {\n /**\n * 工具名/消息 -> 渲染类型解析策略。\n */\n resolveToolKind?: (ctx: ToolKindResolveContext) => ToolRenderKind;\n /**\n * 函数调用确认场景中,基于工具调用和用户选择生成 functionResponse。\n */\n createFunctionResponse?: (\n fnCall: FunctionCall,\n confirmed: boolean,\n ) => FunctionResponse;\n /**\n * 将模型文本拆分为过程节点和最终答案。\n */\n parseProcessMessage?: (\n text: string,\n options?: ParseAgentMessageOptions,\n ) => ParsedPart[];\n /**\n * 自定义 approval 场景渲染,返回 null 则使用默认渲染。\n */\n renderApproval?: (\n msg: IMessage,\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void,\n ) => React.ReactNode | null;\n /**\n * 自定义 handoff 场景渲染,返回 null 则使用默认渲染。\n */\n renderHandoff?: (msg: IMessage) => React.ReactNode | null;\n}\n\nexport interface ChatPreset {\n name: string;\n strategies?: ChatStrategies;\n /**\n * 基于当前协议预设创建默认文件上传函数。\n * 用户显式传入 config.uploadRequest 时优先使用用户配置。\n */\n createUploadRequest?: (context: {\n url: string;\n token?: string;\n appNo?: string;\n }) => UploadRequestFn | undefined;\n}\n\nexport type ChatPresetInput = \"base\" | \"xgroup-adk\" | ChatPreset;\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../src/types/ChatStrategies.ts"],"sourcesContent":["import type React from \"react\";\nimport type { ParseAgentMessageOptions, ParsedPart } from \"@/utils\";\nimport type {\n IMessage,\n FunctionCall,\n FunctionResponse,\n MarkdownExtension,\n} from \"./XAdkChatbot\";\nimport type { ToolRenderKind } from \"./FunctionCallRender\";\nimport type { UploadRequestFn } from \"./XAdkSender\";\n\nexport interface ToolKindResolveContext {\n name?: string;\n msg?: IMessage;\n}\n\nexport interface ChatStrategies {\n /**\n * 工具名/消息 -> 渲染类型解析策略。\n */\n resolveToolKind?: (ctx: ToolKindResolveContext) => ToolRenderKind;\n /**\n * 函数调用确认场景中,基于工具调用和用户选择生成 functionResponse。\n */\n createFunctionResponse?: (\n fnCall: FunctionCall,\n confirmed: boolean,\n ) => FunctionResponse;\n /**\n * 将模型文本拆分为过程节点和最终答案。\n */\n parseProcessMessage?: (\n text: string,\n options?: ParseAgentMessageOptions,\n ) => ParsedPart[];\n /**\n * Markdown 资源链接协议白名单,如 skill://、plugin://。\n * 业务预设可在这里追加私有协议,例如 xgroup-adk 的 kb://。\n */\n markdownResourceLinkSchemes?: readonly string[];\n /**\n * 自定义 approval 场景渲染,返回 null 则使用默认渲染。\n */\n renderApproval?: (\n msg: IMessage,\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void,\n ) => React.ReactNode | null;\n /**\n * 自定义 handoff 场景渲染,返回 null 则使用默认渲染。\n */\n renderHandoff?: (msg: IMessage) => React.ReactNode | null;\n}\n\nexport interface ChatPreset {\n name: string;\n strategies?: ChatStrategies;\n /** 当前协议预设提供的默认 Markdown/XML 标签扩展。 */\n markdownExtensions?: readonly MarkdownExtension[];\n /**\n * 基于当前协议预设创建默认文件上传函数。\n * 用户显式传入 config.uploadRequest 时优先使用用户配置。\n */\n createUploadRequest?: (context: {\n url: string;\n token?: string;\n appNo?: string;\n }) => UploadRequestFn | undefined;\n}\n\n/** SDK 为兼容现有接入提供的内建预设名称。自定义预设建议直接传 ChatPreset 对象。 */\nexport type BuiltinChatPresetName = \"base\" | \"xgroup-adk\";\n\nexport type ChatPresetInput = BuiltinChatPresetName | ChatPreset;\n"],"mappings":""}
@@ -27,9 +27,12 @@ export type ImageDisplayMode = "thumbnail" | "preview" | "full";
27
27
  export type MediaDisplayMode = "inline" | "card";
28
28
  /** 文件卡片类型:不传则自动推断(图片/音频/视频用原生渲染),传 'file' 强制附件卡片展示 */
29
29
  export type FileCardType = "file" | "image" | "audio" | "video";
30
+ /** 文件卡片尺寸:default 适合消息区,small 适合输入框上下文区 */
31
+ export type FileGallerySize = "default" | "small";
30
32
  export interface FileGalleryProps {
31
33
  file: FileItem;
32
34
  align?: "left" | "right";
35
+ size?: FileGallerySize;
33
36
  removable?: boolean;
34
37
  onRemove?: (id: string) => void;
35
38
  className?: string;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/FileGallery.ts"],"sourcesContent":["/**\n * 统一的文件数据接口\n * 兼容 LocalFile (XAdkSender) 和 FileData (XadkChatbot)\n */\nexport interface FileItem {\n // 基础字段\n id?: string;\n uid?: string;\n name?: string;\n displayName?: string;\n size?: number;\n type?: string;\n mimeType?: string;\n\n // 本地文件对象 (XAdkSender)\n file?: File;\n\n // 上传状态 (XAdkSender)\n status?: \"pending\" | \"uploading\" | \"success\" | \"error\";\n progress?: number;\n errorMessage?: string;\n\n // URL 字段\n fileUri?: string; // XadkChatbot\n tempUrl?: string; // XAdkSender\n response?: any;\n}\n\n/** 文件图标类型 */\nexport type FileIconType =\n | \"pdf\"\n | \"word\"\n | \"excel\"\n | \"ppt\"\n | \"audio\"\n | \"video\"\n | \"zip\"\n | \"markdown\"\n | \"image\"\n | \"default\";\n\n/** 图片展示模式 */\nexport type ImageDisplayMode = \"thumbnail\" | \"preview\" | \"full\";\n\n/** 音视频展示模式 */\nexport type MediaDisplayMode = \"inline\" | \"card\";\n\n/** 文件卡片类型:不传则自动推断(图片/音频/视频用原生渲染),传 'file' 强制附件卡片展示 */\nexport type FileCardType = \"file\" | \"image\" | \"audio\" | \"video\";\n\nexport interface FileGalleryProps {\n file: FileItem;\n align?: \"left\" | \"right\"; // 卡片内部布局:图标在左(默认)或右\n removable?: boolean;\n onRemove?: (id: string) => void;\n className?: string;\n style?: React.CSSProperties;\n /** 点击文件卡片回调(非图片、非音视频文件) */\n onClick?: (file: FileItem) => void;\n\n /**\n * 文件卡片类型\n * - 不传:自动根据文件扩展名/MIME推断,图片/音频/视频使用原生渲染\n * - 'file':强制以附件卡片展示(音视频不可播放)\n * - 'image' / 'audio' / 'video':强制指定类型\n */\n type?: FileCardType;\n\n // ========== 图片相关 ==========\n /** 图片展示模式: thumbnail(缩略图) | preview(中等预览) | full(全宽) */\n imageDisplayMode?: ImageDisplayMode;\n /** 图片自定义宽度 */\n imageWidth?: number | string;\n /** 图片自定义高度 */\n imageHeight?: number | string;\n /** 图片加载策略 */\n imageLoading?: \"lazy\" | \"eager\";\n /** 图片 alt 文本 */\n imageAlt?: string;\n\n // ========== 音视频相关 ==========\n /** 自动播放(仅音频) */\n mediaAutoPlay?: boolean;\n /** 循环播放 */\n mediaLoop?: boolean;\n /** 静音 */\n mediaMuted?: boolean;\n /** 视频封面图 URL */\n mediaPoster?: string;\n /** 透传给原生 video 标签的属性 */\n videoProps?: Partial<React.JSX.IntrinsicElements[\"video\"]>;\n /** 透传给原生 audio 标签的属性 */\n audioProps?: Partial<React.JSX.IntrinsicElements[\"audio\"]>;\n\n // ========== 自定义图标 ==========\n /** 按文件类型自定义图标映射 */\n iconMap?: Partial<Record<FileIconType, React.ReactNode>>;\n /** 完全自定义图标(优先级最高,覆盖所有类型) */\n customIcon?: React.ReactNode;\n}\n\nexport interface FileItemComponentProps {\n file: FileItem;\n removable: boolean;\n onRemove: (id: string) => void;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../src/types/FileGallery.ts"],"sourcesContent":["/**\n * 统一的文件数据接口\n * 兼容 LocalFile (XAdkSender) 和 FileData (XadkChatbot)\n */\nexport interface FileItem {\n // 基础字段\n id?: string;\n uid?: string;\n name?: string;\n displayName?: string;\n size?: number;\n type?: string;\n mimeType?: string;\n\n // 本地文件对象 (XAdkSender)\n file?: File;\n\n // 上传状态 (XAdkSender)\n status?: \"pending\" | \"uploading\" | \"success\" | \"error\";\n progress?: number;\n errorMessage?: string;\n\n // URL 字段\n fileUri?: string; // XadkChatbot\n tempUrl?: string; // XAdkSender\n response?: any;\n}\n\n/** 文件图标类型 */\nexport type FileIconType =\n | \"pdf\"\n | \"word\"\n | \"excel\"\n | \"ppt\"\n | \"audio\"\n | \"video\"\n | \"zip\"\n | \"markdown\"\n | \"image\"\n | \"default\";\n\n/** 图片展示模式 */\nexport type ImageDisplayMode = \"thumbnail\" | \"preview\" | \"full\";\n\n/** 音视频展示模式 */\nexport type MediaDisplayMode = \"inline\" | \"card\";\n\n/** 文件卡片类型:不传则自动推断(图片/音频/视频用原生渲染),传 'file' 强制附件卡片展示 */\nexport type FileCardType = \"file\" | \"image\" | \"audio\" | \"video\";\n\n/** 文件卡片尺寸:default 适合消息区,small 适合输入框上下文区 */\nexport type FileGallerySize = \"default\" | \"small\";\n\nexport interface FileGalleryProps {\n file: FileItem;\n align?: \"left\" | \"right\"; // 卡片内部布局:图标在左(默认)或右\n size?: FileGallerySize;\n removable?: boolean;\n onRemove?: (id: string) => void;\n className?: string;\n style?: React.CSSProperties;\n /** 点击文件卡片回调(非图片、非音视频文件) */\n onClick?: (file: FileItem) => void;\n\n /**\n * 文件卡片类型\n * - 不传:自动根据文件扩展名/MIME推断,图片/音频/视频使用原生渲染\n * - 'file':强制以附件卡片展示(音视频不可播放)\n * - 'image' / 'audio' / 'video':强制指定类型\n */\n type?: FileCardType;\n\n // ========== 图片相关 ==========\n /** 图片展示模式: thumbnail(缩略图) | preview(中等预览) | full(全宽) */\n imageDisplayMode?: ImageDisplayMode;\n /** 图片自定义宽度 */\n imageWidth?: number | string;\n /** 图片自定义高度 */\n imageHeight?: number | string;\n /** 图片加载策略 */\n imageLoading?: \"lazy\" | \"eager\";\n /** 图片 alt 文本 */\n imageAlt?: string;\n\n // ========== 音视频相关 ==========\n /** 自动播放(仅音频) */\n mediaAutoPlay?: boolean;\n /** 循环播放 */\n mediaLoop?: boolean;\n /** 静音 */\n mediaMuted?: boolean;\n /** 视频封面图 URL */\n mediaPoster?: string;\n /** 透传给原生 video 标签的属性 */\n videoProps?: Partial<React.JSX.IntrinsicElements[\"video\"]>;\n /** 透传给原生 audio 标签的属性 */\n audioProps?: Partial<React.JSX.IntrinsicElements[\"audio\"]>;\n\n // ========== 自定义图标 ==========\n /** 按文件类型自定义图标映射 */\n iconMap?: Partial<Record<FileIconType, React.ReactNode>>;\n /** 完全自定义图标(优先级最高,覆盖所有类型) */\n customIcon?: React.ReactNode;\n}\n\nexport interface FileItemComponentProps {\n file: FileItem;\n removable: boolean;\n onRemove: (id: string) => void;\n}\n"],"mappings":""}
@@ -0,0 +1,30 @@
1
+ /// <reference types="react" />
2
+ export type SemanticType = 'root' | 'title' | 'content';
3
+ export interface SourcesItem {
4
+ key?: React.Key;
5
+ title: React.ReactNode;
6
+ url?: string;
7
+ icon?: React.ReactNode;
8
+ description?: React.ReactNode;
9
+ }
10
+ export interface SourcesProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'onClick'> {
11
+ prefixCls?: string;
12
+ style?: React.CSSProperties;
13
+ styles?: Partial<Record<SemanticType, React.CSSProperties>>;
14
+ className?: string;
15
+ classNames?: Partial<Record<SemanticType, string>>;
16
+ rootClassName?: string;
17
+ inline?: boolean;
18
+ items?: Array<SourcesItem>;
19
+ title?: React.ReactNode;
20
+ expandIconPosition?: 'start' | 'end';
21
+ onClick?: (item: SourcesItem) => void;
22
+ popoverOverlayWidth?: number | string;
23
+ activeKey?: React.Key;
24
+ expanded?: boolean;
25
+ onExpand?: (expand: boolean) => void;
26
+ defaultExpanded?: boolean;
27
+ }
28
+ export type SourcesRef = {
29
+ nativeElement: HTMLElement;
30
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../../src/types/Sources.ts"],"sourcesContent":["export type SemanticType = 'root' | 'title' | 'content';\n\nexport interface SourcesItem {\n key?: React.Key;\n title: React.ReactNode;\n url?: string;\n icon?: React.ReactNode;\n description?: React.ReactNode;\n}\n\nexport interface SourcesProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title' | 'onClick'> {\n prefixCls?: string;\n style?: React.CSSProperties;\n styles?: Partial<Record<SemanticType, React.CSSProperties>>;\n className?: string;\n classNames?: Partial<Record<SemanticType, string>>;\n rootClassName?: string;\n inline?: boolean;\n items?: Array<SourcesItem>;\n title?: React.ReactNode;\n expandIconPosition?: 'start' | 'end';\n onClick?: (item: SourcesItem) => void;\n popoverOverlayWidth?: number | string;\n activeKey?: React.Key;\n expanded?: boolean;\n onExpand?: (expand: boolean) => void;\n defaultExpanded?: boolean;\n}\n\nexport type SourcesRef = {\n nativeElement: HTMLElement;\n};"],"mappings":""}
@@ -229,6 +229,17 @@ export type ActionExtraProps = (data: {
229
229
  message: ChatGroup;
230
230
  isLastBotMsg: boolean;
231
231
  }) => ReactNode;
232
+ export interface MarkdownResourceLink {
233
+ /** 完整链接,如 skill://InnerSkill01 */
234
+ href: string;
235
+ /** Markdown 链接文字,如 @skill-creator */
236
+ label: string;
237
+ /** 协议类型,如 skill/plugin/knowledge */
238
+ type: string;
239
+ /** 协议值,如 InnerSkill01 */
240
+ value: string;
241
+ }
242
+ export type RenderMarkdownResourceLink = (link: MarkdownResourceLink) => ReactNode | null;
232
243
  /**
233
244
  * 自定义工具调用渲染函数
234
245
  * - 返回 ReactNode:使用自定义渲染
@@ -241,6 +252,22 @@ export type ActionExtraProps = (data: {
241
252
  * }}
242
253
  */
243
254
  export type RenderFunctionCall = (msg: IMessage) => ReactNode | null;
255
+ /** Markdown 自定义标签经过安全过滤后的结构化节点。 */
256
+ export interface MarkdownExtensionNode {
257
+ tagName: string;
258
+ attributes: Readonly<Record<string, string>>;
259
+ text: string;
260
+ children: ReactNode;
261
+ }
262
+ /**
263
+ * Markdown 自定义标签扩展。
264
+ * 标签及属性只有显式注册后才会交给渲染函数,业务协议无需进入 SDK 核心。
265
+ */
266
+ export interface MarkdownExtension {
267
+ tagName: string;
268
+ allowedAttributes?: readonly string[];
269
+ render: (node: MarkdownExtensionNode) => ReactNode | null;
270
+ }
244
271
  export interface XAdkChatbotProps extends Partial<XAdkSenderProps> {
245
272
  /**
246
273
  * 自定义工具调用渲染函数
@@ -349,6 +376,12 @@ export interface XAdkChatbotProps extends Partial<XAdkSenderProps> {
349
376
  stream?: boolean;
350
377
  /** 点击对话中附件卡片的回调(非图片、非音视频文件) */
351
378
  onFileClick?: (file: FileItem) => void;
379
+ /** 点击 Markdown 资源链接标签的回调,如 [@skill](skill://xxx) */
380
+ onResourceLinkClick?: (link: MarkdownResourceLink) => void;
381
+ /** 自定义 Markdown 资源链接渲染,返回 null 则降级使用默认标签样式 */
382
+ renderResourceLink?: RenderMarkdownResourceLink;
383
+ /** Markdown/XML 自定义标签扩展 */
384
+ markdownExtensions?: readonly MarkdownExtension[];
352
385
  /** 消息列表为空时展示的自定义空状态组件 */
353
386
  empty?: ReactNode | (() => ReactNode);
354
387
  }
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/XAdkChatbot.ts"],"sourcesContent":["import type { CSSProperties, JSX, ReactNode } from \"react\";\nimport { type XAdkSenderProps } from \"./XAdkSender\";\nimport { type SendContent } from \"./XAiSender\";\nimport { type FileItem } from \"./FileGallery\";\nimport { type ToolRenderKind } from \"./FunctionCallRender\";\nimport { type ChatPresetInput, type ChatStrategies } from \"./ChatStrategies\";\n\n/**\n * XAdkChatbot 命令式 API\n */\nexport interface XAdkChatbotHandle {\n /** 手动滚动到底部 */\n scrollToBottom: (behavior?: ScrollBehavior) => void;\n}\n\n/**\n * 消息分组接口\n */\nexport interface ChatGroup {\n id: string;\n role: \"user\" | \"bot\";\n msgs: IMessage[];\n invocationId?: string;\n allFiles: any[];\n /** 点赞状态: 1=赞, -1=踩, 0=未反馈 */\n isLike?: number;\n}\n\nexport interface IInvocation {\n id: string;\n name: string;\n spanId: string;\n traceId: string;\n parentSpanId: string;\n startTime: number;\n endTime: number;\n sessionId: string;\n invocationId: string;\n duration: number;\n attributes: Record<string, string>;\n botName: string;\n workspaceNo: string;\n status: number;\n agentName: string;\n agentNo: string;\n agentVersionNo: string;\n userId: string;\n}\n\nexport interface AgentRunRequest {\n stream?: boolean;\n sessionId: string | undefined;\n content: {\n parts: Array<{\n text?: string;\n functionResponse?: {\n id?: string;\n name?: string;\n response?: any;\n };\n }>;\n role: string;\n };\n files?: Array<{\n fileName: string;\n fileId?: string;\n tempUrl: string;\n type?: string;\n mimeType: string;\n }>;\n stateDelta?: any;\n}\nexport interface Blob {\n displayName?: string;\n mimeType?: string;\n data: string;\n}\n\nexport interface FunctionCall {\n id?: string;\n name: string;\n args: { [key: string]: any };\n}\n\nexport interface FunctionResponse {\n id?: string;\n name: string;\n response: { [key: string]: any };\n}\n\nexport interface FileData {\n displayName: string;\n mimeType: string;\n fileUri: string;\n}\n\nexport interface ExecutableCode {\n language: \"UNKNOWN\" | \"PYTHON\";\n code: string;\n}\n\nexport interface CodeExecutionResult {\n outcome: \"UNKNOWN\" | \"OK\" | \"FAILED\" | \"DEADLINE_EXCEEDED\";\n output: string;\n}\n\nexport interface Part {\n text?: string;\n inlineData?: Blob;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n thought?: boolean;\n fileData?: FileData;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n errorMessage?: string;\n}\n\nexport interface GenAiContent {\n role: string;\n parts: Part[];\n}\n\nexport interface LlmRequest {\n contents: GenAiContent[];\n}\n\nexport interface LlmResponse {\n partial?: boolean;\n content: GenAiContent;\n error?: string;\n errorMessage?: string;\n errorCode?: string;\n longRunningToolIds?: string[];\n}\n\nexport interface UsageMetadata {\n candidatesTokenCount?: number;\n promptTokenCount?: number;\n totalTokenCount?: number;\n [key: string]: any;\n}\n\nexport interface EventActions {\n message?: string;\n artifactDelta?: any;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n finishReason?: string;\n}\n\nexport interface Event extends LlmResponse {\n id?: string;\n author?: string;\n modelCode?: string;\n invocationId?: string;\n actions?: EventActions;\n longRunningToolIds?: string[];\n branch?: string;\n timestamp?: number;\n finishReason?: string;\n usageMetadata?: UsageMetadata;\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n groundingMetadata?: {\n searchEntryPoint?: {\n renderedContent?: any;\n };\n };\n isLike?: number;\n sessionId?: string;\n}\n\nexport interface SessionState {\n [key: string]: unknown;\n}\n\nexport interface Session {\n id?: string;\n appName?: string;\n userId?: string;\n state?: SessionState;\n events?: Event[];\n lastUpdateTime?: number;\n}\n\nexport interface TimeTick {\n position: number;\n label: string;\n}\n\nexport interface IMessage {\n /** 前端生成的唯一标识 */\n id: string;\n /** 单次请求的唯一标识 */\n invocationId?: string;\n /** 单个Event的唯一标识,一个event里有可能有多个parts的消息 */\n eventId?: string;\n /** 消息发起人:智能体名称、user */\n author?: string;\n role: \"bot\" | \"user\";\n /** 时间戳 */\n timestamp?: number;\n isLoading?: boolean;\n /** 函数调用 */\n functionCall?: FunctionCall;\n /** 函数调用结果 */\n functionResponse?: FunctionResponse;\n /** 文件上传 */\n inlineData?: Blob;\n /** 文本消息 */\n text?: string;\n /** 文件信息 */\n fileData?: FileData[];\n /** 思考 */\n thought?: boolean;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n renderedContent?: any;\n /** 原始数据 */\n raw?: any;\n /** 模型编码,通常来自 stream 事件或历史消息 */\n modelCode?: string;\n /** 事件级 token 使用量等模型调用元数据 */\n usageMetadata?: UsageMetadata;\n /** 结束原因,通常来自最后一条 stream 事件 */\n finishReason?: string;\n // 下面暂时没有用到\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n invocationIndex?: any;\n finalResponsePartIndex?: any;\n toolUseIndex?: any;\n /** 是否赞/踩 */\n isLike?: number;\n}\n\nexport type ActionProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => JSX.Element | null;\n\nexport type ActionExtraProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => ReactNode;\n\n/**\n * 自定义工具调用渲染函数\n * - 返回 ReactNode:使用自定义渲染\n * - 返回 null:降级使用默认渲染\n *\n * @example\n * renderFunctionCall={(msg) => {\n * if (msg.functionCall?.name === 'my_tool') return <MyToolRender msg={msg} />;\n * return null; // 其他工具使用默认渲染\n * }}\n */\nexport type RenderFunctionCall = (msg: IMessage) => ReactNode | null;\n\nexport interface XAdkChatbotProps extends Partial<XAdkSenderProps> {\n /**\n * 自定义工具调用渲染函数\n * 返回 null 则降级使用默认渲染\n */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /**\n * 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。\n */\n strategies?: ChatStrategies;\n /**\n * 组件直用时的协议预设。默认沿用 xgroup-adk 以兼容既有业务接入;\n * 需要中立行为时可传入 base。\n */\n preset?: ChatPresetInput;\n className?: string;\n style?: CSSProperties;\n // 加载状态\n loading?: boolean;\n /** 消息列表 */\n messages: IMessage[];\n /** 开场白 */\n prologue?: string;\n /** 建议回复 */\n suggestions?: string[];\n /** 欢迎页面 */\n welcome?: ReactNode;\n /** 显示函数调用详情 */\n showFnCallDetail?: boolean;\n /**\n * 数据是否就绪,就绪后触发首次自动滚底。默认 true。\n * 仅在需要等待异步加载历史消息的场景(如 XAdkProvider 内)才需设为 false,\n * 待数据加载完成后再切换为 true;独立使用时无需关心此属性。\n */\n initialized?: boolean;\n /**\n * 当前会话 ID,切换时自动重置滚动状态并置底。\n * 不传则退化为仅依赖 initialized 的单次置底行为。\n */\n sessionId?: string;\n /** 提交回调 */\n onSubmit?: ({ text, files }: SendContent) => void;\n /** 函数调用确认回调 */\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n /** 停止回调 */\n onStop?: () => void;\n /** 清除回调 */\n onClear?: () => void;\n /** 建议回复回调 */\n onSuggest?: (text: string) => void;\n\n // ========== 新增功能 ==========\n\n /** Agent 名称 (欢迎页面) */\n agentName?: string;\n /** Agent 图标 (欢迎页面) */\n agentIcon?: string;\n /** Agent 描述 (欢迎页面) */\n description?: string;\n\n /** 是否显示重试按钮 */\n showRetry?: boolean;\n /** 是否显示复制按钮 */\n showCopy?: boolean;\n /** 是否显示日志按钮 */\n showLog?: boolean;\n\n /** 重试回调 */\n onRetry?: () => void;\n /** 复制回调 */\n onCopy?: (text: string) => void;\n /** 查看日志回调 */\n onShowLog?: (invocationId: string, timestamp?: number) => void;\n\n /** 是否启用消息分组 (默认 true) */\n enableGrouping?: boolean;\n\n /** 是否自动解析 process 内容并展示思维链 (默认 true) */\n enableProcessParsing?: boolean;\n\n /** 消息功能区 */\n actions?: ActionProps;\n /** 追加在消息功能区之后的内容,适合展示 token 消耗等业务扩展信息 */\n actionsExtra?: ActionExtraProps;\n\n /**\n * Process 解析选项\n * @example\n * // 业务项目格式 (注释模式)\n * parseOptions={{ mode: 'comment' }}\n *\n * @example\n * // 自定义格式\n * parseOptions={{\n * mode: 'custom',\n * customPatterns: [\n * { regex: /\\[REASONING\\]([\\s\\S]*?)\\[\\/REASONING\\]/g, type: 'reasoning' }\n * ]\n * }}\n */\n parseOptions?: {\n mode?: \"xml\" | \"comment\" | \"custom\";\n customPatterns?: Array<{ regex: RegExp; type: string }>;\n finalMarker?: string;\n };\n\n /** 是否禁用输入 */\n disabled?: boolean;\n\n /** 是否流式响应 */\n stream?: boolean;\n\n /** 点击对话中附件卡片的回调(非图片、非音视频文件) */\n onFileClick?: (file: FileItem) => void;\n\n /** 消息列表为空时展示的自定义空状态组件 */\n empty?: ReactNode | (() => ReactNode);\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../src/types/XAdkChatbot.ts"],"sourcesContent":["import type { CSSProperties, JSX, ReactNode } from \"react\";\nimport { type XAdkSenderProps } from \"./XAdkSender\";\nimport { type SendContent } from \"./XAiSender\";\nimport { type FileItem } from \"./FileGallery\";\nimport { type ToolRenderKind } from \"./FunctionCallRender\";\nimport { type ChatPresetInput, type ChatStrategies } from \"./ChatStrategies\";\n\n/**\n * XAdkChatbot 命令式 API\n */\nexport interface XAdkChatbotHandle {\n /** 手动滚动到底部 */\n scrollToBottom: (behavior?: ScrollBehavior) => void;\n}\n\n/**\n * 消息分组接口\n */\nexport interface ChatGroup {\n id: string;\n role: \"user\" | \"bot\";\n msgs: IMessage[];\n invocationId?: string;\n allFiles: any[];\n /** 点赞状态: 1=赞, -1=踩, 0=未反馈 */\n isLike?: number;\n}\n\nexport interface IInvocation {\n id: string;\n name: string;\n spanId: string;\n traceId: string;\n parentSpanId: string;\n startTime: number;\n endTime: number;\n sessionId: string;\n invocationId: string;\n duration: number;\n attributes: Record<string, string>;\n botName: string;\n workspaceNo: string;\n status: number;\n agentName: string;\n agentNo: string;\n agentVersionNo: string;\n userId: string;\n}\n\nexport interface AgentRunRequest {\n stream?: boolean;\n sessionId: string | undefined;\n content: {\n parts: Array<{\n text?: string;\n functionResponse?: {\n id?: string;\n name?: string;\n response?: any;\n };\n }>;\n role: string;\n };\n files?: Array<{\n fileName: string;\n fileId?: string;\n tempUrl: string;\n type?: string;\n mimeType: string;\n }>;\n stateDelta?: any;\n}\nexport interface Blob {\n displayName?: string;\n mimeType?: string;\n data: string;\n}\n\nexport interface FunctionCall {\n id?: string;\n name: string;\n args: { [key: string]: any };\n}\n\nexport interface FunctionResponse {\n id?: string;\n name: string;\n response: { [key: string]: any };\n}\n\nexport interface FileData {\n displayName: string;\n mimeType: string;\n fileUri: string;\n}\n\nexport interface ExecutableCode {\n language: \"UNKNOWN\" | \"PYTHON\";\n code: string;\n}\n\nexport interface CodeExecutionResult {\n outcome: \"UNKNOWN\" | \"OK\" | \"FAILED\" | \"DEADLINE_EXCEEDED\";\n output: string;\n}\n\nexport interface Part {\n text?: string;\n inlineData?: Blob;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n thought?: boolean;\n fileData?: FileData;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n errorMessage?: string;\n}\n\nexport interface GenAiContent {\n role: string;\n parts: Part[];\n}\n\nexport interface LlmRequest {\n contents: GenAiContent[];\n}\n\nexport interface LlmResponse {\n partial?: boolean;\n content: GenAiContent;\n error?: string;\n errorMessage?: string;\n errorCode?: string;\n longRunningToolIds?: string[];\n}\n\nexport interface UsageMetadata {\n candidatesTokenCount?: number;\n promptTokenCount?: number;\n totalTokenCount?: number;\n [key: string]: any;\n}\n\nexport interface EventActions {\n message?: string;\n artifactDelta?: any;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n finishReason?: string;\n}\n\nexport interface Event extends LlmResponse {\n id?: string;\n author?: string;\n modelCode?: string;\n invocationId?: string;\n actions?: EventActions;\n longRunningToolIds?: string[];\n branch?: string;\n timestamp?: number;\n finishReason?: string;\n usageMetadata?: UsageMetadata;\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n groundingMetadata?: {\n searchEntryPoint?: {\n renderedContent?: any;\n };\n };\n isLike?: number;\n sessionId?: string;\n}\n\nexport interface SessionState {\n [key: string]: unknown;\n}\n\nexport interface Session {\n id?: string;\n appName?: string;\n userId?: string;\n state?: SessionState;\n events?: Event[];\n lastUpdateTime?: number;\n}\n\nexport interface TimeTick {\n position: number;\n label: string;\n}\n\nexport interface IMessage {\n /** 前端生成的唯一标识 */\n id: string;\n /** 单次请求的唯一标识 */\n invocationId?: string;\n /** 单个Event的唯一标识,一个event里有可能有多个parts的消息 */\n eventId?: string;\n /** 消息发起人:智能体名称、user */\n author?: string;\n role: \"bot\" | \"user\";\n /** 时间戳 */\n timestamp?: number;\n isLoading?: boolean;\n /** 函数调用 */\n functionCall?: FunctionCall;\n /** 函数调用结果 */\n functionResponse?: FunctionResponse;\n /** 文件上传 */\n inlineData?: Blob;\n /** 文本消息 */\n text?: string;\n /** 文件信息 */\n fileData?: FileData[];\n /** 思考 */\n thought?: boolean;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n renderedContent?: any;\n /** 原始数据 */\n raw?: any;\n /** 模型编码,通常来自 stream 事件或历史消息 */\n modelCode?: string;\n /** 事件级 token 使用量等模型调用元数据 */\n usageMetadata?: UsageMetadata;\n /** 结束原因,通常来自最后一条 stream 事件 */\n finishReason?: string;\n // 下面暂时没有用到\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n invocationIndex?: any;\n finalResponsePartIndex?: any;\n toolUseIndex?: any;\n /** 是否赞/踩 */\n isLike?: number;\n}\n\nexport type ActionProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => JSX.Element | null;\n\nexport type ActionExtraProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => ReactNode;\n\nexport interface MarkdownResourceLink {\n /** 完整链接,如 skill://InnerSkill01 */\n href: string;\n /** Markdown 链接文字,如 @skill-creator */\n label: string;\n /** 协议类型,如 skill/plugin/knowledge */\n type: string;\n /** 协议值,如 InnerSkill01 */\n value: string;\n}\n\nexport type RenderMarkdownResourceLink = (\n link: MarkdownResourceLink,\n) => ReactNode | null;\n\n/**\n * 自定义工具调用渲染函数\n * - 返回 ReactNode:使用自定义渲染\n * - 返回 null:降级使用默认渲染\n *\n * @example\n * renderFunctionCall={(msg) => {\n * if (msg.functionCall?.name === 'my_tool') return <MyToolRender msg={msg} />;\n * return null; // 其他工具使用默认渲染\n * }}\n */\nexport type RenderFunctionCall = (msg: IMessage) => ReactNode | null;\n\n/** Markdown 自定义标签经过安全过滤后的结构化节点。 */\nexport interface MarkdownExtensionNode {\n tagName: string;\n attributes: Readonly<Record<string, string>>;\n text: string;\n children: ReactNode;\n}\n\n/**\n * Markdown 自定义标签扩展。\n * 标签及属性只有显式注册后才会交给渲染函数,业务协议无需进入 SDK 核心。\n */\nexport interface MarkdownExtension {\n tagName: string;\n allowedAttributes?: readonly string[];\n render: (node: MarkdownExtensionNode) => ReactNode | null;\n}\n\nexport interface XAdkChatbotProps extends Partial<XAdkSenderProps> {\n /**\n * 自定义工具调用渲染函数\n * 返回 null 则降级使用默认渲染\n */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /**\n * 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。\n */\n strategies?: ChatStrategies;\n /**\n * 组件直用时的协议预设。默认沿用 xgroup-adk 以兼容既有业务接入;\n * 需要中立行为时可传入 base。\n */\n preset?: ChatPresetInput;\n className?: string;\n style?: CSSProperties;\n // 加载状态\n loading?: boolean;\n /** 消息列表 */\n messages: IMessage[];\n /** 开场白 */\n prologue?: string;\n /** 建议回复 */\n suggestions?: string[];\n /** 欢迎页面 */\n welcome?: ReactNode;\n /** 显示函数调用详情 */\n showFnCallDetail?: boolean;\n /**\n * 数据是否就绪,就绪后触发首次自动滚底。默认 true。\n * 仅在需要等待异步加载历史消息的场景(如 XAdkProvider 内)才需设为 false,\n * 待数据加载完成后再切换为 true;独立使用时无需关心此属性。\n */\n initialized?: boolean;\n /**\n * 当前会话 ID,切换时自动重置滚动状态并置底。\n * 不传则退化为仅依赖 initialized 的单次置底行为。\n */\n sessionId?: string;\n /** 提交回调 */\n onSubmit?: ({ text, files }: SendContent) => void;\n /** 函数调用确认回调 */\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n /** 停止回调 */\n onStop?: () => void;\n /** 清除回调 */\n onClear?: () => void;\n /** 建议回复回调 */\n onSuggest?: (text: string) => void;\n\n // ========== 新增功能 ==========\n\n /** Agent 名称 (欢迎页面) */\n agentName?: string;\n /** Agent 图标 (欢迎页面) */\n agentIcon?: string;\n /** Agent 描述 (欢迎页面) */\n description?: string;\n\n /** 是否显示重试按钮 */\n showRetry?: boolean;\n /** 是否显示复制按钮 */\n showCopy?: boolean;\n /** 是否显示日志按钮 */\n showLog?: boolean;\n\n /** 重试回调 */\n onRetry?: () => void;\n /** 复制回调 */\n onCopy?: (text: string) => void;\n /** 查看日志回调 */\n onShowLog?: (invocationId: string, timestamp?: number) => void;\n\n /** 是否启用消息分组 (默认 true) */\n enableGrouping?: boolean;\n\n /** 是否自动解析 process 内容并展示思维链 (默认 true) */\n enableProcessParsing?: boolean;\n\n /** 消息功能区 */\n actions?: ActionProps;\n /** 追加在消息功能区之后的内容,适合展示 token 消耗等业务扩展信息 */\n actionsExtra?: ActionExtraProps;\n\n /**\n * Process 解析选项\n * @example\n * // 业务项目格式 (注释模式)\n * parseOptions={{ mode: 'comment' }}\n *\n * @example\n * // 自定义格式\n * parseOptions={{\n * mode: 'custom',\n * customPatterns: [\n * { regex: /\\[REASONING\\]([\\s\\S]*?)\\[\\/REASONING\\]/g, type: 'reasoning' }\n * ]\n * }}\n */\n parseOptions?: {\n mode?: \"xml\" | \"comment\" | \"custom\";\n customPatterns?: Array<{ regex: RegExp; type: string }>;\n finalMarker?: string;\n };\n\n /** 是否禁用输入 */\n disabled?: boolean;\n\n /** 是否流式响应 */\n stream?: boolean;\n\n /** 点击对话中附件卡片的回调(非图片、非音视频文件) */\n onFileClick?: (file: FileItem) => void;\n\n /** 点击 Markdown 资源链接标签的回调,如 [@skill](skill://xxx) */\n onResourceLinkClick?: (link: MarkdownResourceLink) => void;\n\n /** 自定义 Markdown 资源链接渲染,返回 null 则降级使用默认标签样式 */\n renderResourceLink?: RenderMarkdownResourceLink;\n\n /** Markdown/XML 自定义标签扩展 */\n markdownExtensions?: readonly MarkdownExtension[];\n\n /** 消息列表为空时展示的自定义空状态组件 */\n empty?: ReactNode | (() => ReactNode);\n}\n"],"mappings":""}
@@ -1,4 +1,97 @@
1
1
  import React from "react";
2
+ /** 快捷键触发的列表项 */
3
+ export interface QuickListOption {
4
+ id: string;
5
+ label: string;
6
+ description?: string;
7
+ icon?: React.ReactNode;
8
+ /** 分组名(用于聚合列表,子分组通过下划线分割) */
9
+ group?: string;
10
+ [key: string]: any;
11
+ }
12
+ /** 快捷键配置 */
13
+ export interface QuickKeyConfig {
14
+ /** 触发字符,如 '@', '#', '$' */
15
+ key: string;
16
+ /** 选中后写入 MentionTag.type 的语义类型,不传时回退为 key */
17
+ mentionType?: string;
18
+ /** @deprecated 请使用 mentionType。 */
19
+ tagType?: string;
20
+ /** 列表标题 */
21
+ title?: string;
22
+ /** 列表数据 */
23
+ options: QuickListOption[];
24
+ /** 自定义列表项渲染 */
25
+ renderItem?: (option: QuickListOption) => React.ReactNode;
26
+ /** 选中回调 */
27
+ onSelect?: (option: QuickListOption) => void;
28
+ }
29
+ /** 输入框内的资源引用。SDK 只理解通用 Mention,业务语义可放入 data 或可选语义字段。 */
30
+ export interface MentionTag {
31
+ id: string;
32
+ label: string;
33
+ /** Mention 类型,如 'knowledge', 'skill', 'plugin', 'agent' */
34
+ type: string;
35
+ /** 资源 URI,如 skill://skillNo、kb://kb/knNo/dir/docs/2024 */
36
+ uri?: string;
37
+ /** 业务资源 ID,如 skillNo、knowledgeNo */
38
+ targetId?: string;
39
+ /** 展示名;不传时回退 label */
40
+ displayName?: string;
41
+ /** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 uri/targetId/label */
42
+ value?: string;
43
+ /** 触发字符,如 '@', '#', '$',用于业务方区分来源 */
44
+ trigger?: string;
45
+ color?: string;
46
+ icon?: React.ReactNode;
47
+ /** 业务扩展上下文,例如知识库目录 scope */
48
+ scope?: any;
49
+ /** 原始数据 */
50
+ data?: any;
51
+ }
52
+ /** @deprecated 请使用 MentionTag。 */
53
+ export type InputTag = MentionTag;
54
+ export interface InlineTagRenderInfo {
55
+ onRemove: () => void;
56
+ }
57
+ export type XAdkSenderSubmitFormat = "text" | "structured" | "markdown" | "xml";
58
+ export type XAdkSenderSubmitPart = {
59
+ type: "text";
60
+ text: string;
61
+ } | {
62
+ type: "mention";
63
+ mention: MentionTag;
64
+ };
65
+ /** @deprecated 旧 tag part,仅用于兼容 defaultInputParts 历史传入。 */
66
+ export type XAdkSenderLegacyTagPart = {
67
+ type: "tag";
68
+ tag: MentionTag;
69
+ };
70
+ /** 输入框文本/Mention 有序片段,表示用户正在编辑的输入内容 */
71
+ export type XAdkSenderInputPart = XAdkSenderSubmitPart | XAdkSenderLegacyTagPart;
72
+ export interface XAdkSenderFormatMentionContext {
73
+ format: Exclude<XAdkSenderSubmitFormat, "structured">;
74
+ index: number;
75
+ }
76
+ /** @deprecated 请使用 XAdkSenderFormatMentionContext。 */
77
+ export type XAdkSenderFormatTagContext = XAdkSenderFormatMentionContext;
78
+ export interface XAdkSenderSubmitData<TPayload = unknown> {
79
+ /** 根据 submitFormat 生成的最终内容,默认是纯文本 */
80
+ text: string;
81
+ /** 去掉标签后的用户原始输入文本 */
82
+ rawText: string;
83
+ /** 当前提交格式 */
84
+ format: XAdkSenderSubmitFormat;
85
+ /** 文本与 Mention 的有序片段,inlineTags 模式下可还原资源引用在输入框中的位置 */
86
+ parts: XAdkSenderSubmitPart[];
87
+ files: ServerFile[];
88
+ /** 当前 Mention 列表 */
89
+ mentions?: MentionTag[];
90
+ /** @deprecated 请使用 mentions。 */
91
+ tags?: MentionTag[];
92
+ /** 业务方通过 transformSubmitData 派生出的自定义提交结构 */
93
+ payload?: TPayload;
94
+ }
2
95
  export interface UploadFileResult {
3
96
  fileName?: string;
4
97
  fileId?: string | number;
@@ -53,7 +146,6 @@ export type FileValidator = (file: File, context: {
53
146
  }) => string | null;
54
147
  export interface ActionsComponents {
55
148
  SendButton: React.ComponentType<any>;
56
- UploadButton: React.ComponentType<any>;
57
149
  ClearButton: React.ComponentType<any>;
58
150
  }
59
151
  export type SlotRenderFunction = (oriNode: React.ReactNode, info: {
@@ -71,21 +163,27 @@ export interface UploaderCoreProps {
71
163
  }
72
164
  export interface SenderUIProps {
73
165
  clearBtnShow?: boolean;
74
- allowUpload?: boolean;
75
- /** 是否启用 Sender 自身的拖拽上传,设为 false 时由外层(如 DefaultLayout)管理拖拽 */
166
+ /**
167
+ * 是否启用 Sender 自身的拖拽上传。
168
+ * 拖拽产生的文件通过 onFileSelect 回调交给业务/外层处理;
169
+ * 默认 false,由外层(如 DefaultLayout)管理拖拽时无需开启。
170
+ */
76
171
  draggable?: boolean;
172
+ /**
173
+ * 拖拽文件回调:当 draggable 为 true 且用户向输入区拖拽文件时触发。
174
+ * 业务/外层在此回调中决定如何处理文件(通常调用 senderRef.addFiles 注入)。
175
+ */
176
+ onFileSelect?: (files: File[]) => void;
77
177
  loading?: boolean;
78
178
  disabled?: boolean;
179
+ placeholder?: string;
79
180
  /** 受控:输入框的值 */
80
181
  value?: string;
81
182
  /** 非受控:输入框默认值 */
82
183
  defaultValue?: string;
83
184
  onClear?: () => void;
84
185
  onChange?: (value: string) => void;
85
- onSubmit?: (data: {
86
- text: string;
87
- files: ServerFile[];
88
- }) => void;
186
+ onSubmit?: (data: XAdkSenderSubmitData) => void;
89
187
  onStop?: () => void;
90
188
  /** 自定义发送按钮渲染 */
91
189
  sendButtonRender?: (info: {
@@ -98,15 +196,63 @@ export interface SenderUIProps {
98
196
  }) => React.ReactNode;
99
197
  /** 后缀内容,默认展示操作按钮,设为 false 时不显示 */
100
198
  suffix?: React.ReactNode | false | SlotRenderFunction;
101
- /** 头部面板 */
199
+ /** 输入主体内部的头部内容 */
102
200
  header?: React.ReactNode | false | SlotRenderFunction;
103
201
  /** 前缀内容 */
104
202
  prefix?: React.ReactNode | false | SlotRenderFunction;
105
203
  /** 底部内容 */
106
204
  footer?: React.ReactNode | false | SlotRenderFunction;
205
+ /** 底部左侧拓展区域,不传时 footer 保持原有居中布局 */
206
+ footerLeft?: React.ReactNode | false | SlotRenderFunction;
207
+ /** 快捷键配置列表 */
208
+ quickKeys?: QuickKeyConfig[];
209
+ /** 是否把 Mention 以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */
210
+ inlineTags?: boolean;
211
+ /** 自定义内联 Mention 渲染 */
212
+ renderMention?: (mention: MentionTag, info: InlineTagRenderInfo) => React.ReactNode;
213
+ /** @deprecated 请使用 renderMention。 */
214
+ renderTag?: (mention: MentionTag, info: InlineTagRenderInfo) => React.ReactNode;
215
+ /** 受控:Mention 列表 */
216
+ mentions?: MentionTag[];
217
+ /** @deprecated 请使用 mentions。 */
218
+ tags?: MentionTag[];
219
+ /** 非受控:默认 Mention 列表 */
220
+ defaultMentions?: MentionTag[];
221
+ /** @deprecated 请使用 defaultMentions。 */
222
+ defaultTags?: MentionTag[];
223
+ /** 非受控:默认输入内容片段,用于初始化内联 Mention 输入区 */
224
+ defaultInputParts?: XAdkSenderInputPart[];
225
+ /** Mention 变化回调 */
226
+ onMentionsChange?: (mentions: MentionTag[]) => void;
227
+ /** @deprecated 请使用 onMentionsChange。 */
228
+ onTagsChange?: (mentions: MentionTag[]) => void;
229
+ /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */
230
+ onQuickKeyTrigger?: (key: string, keyword: string) => void;
231
+ /**
232
+ * 提交内容格式:
233
+ * - text: 默认,输出文字 + Mention 文本(如 @生图技能)
234
+ * - structured: 保留 parts/mentions/files 结构化数据,text 为 rawText
235
+ * - markdown/xml: 输出对应标记文本
236
+ */
237
+ submitFormat?: XAdkSenderSubmitFormat;
238
+ /** 自定义 Mention 在 text/markdown/xml 格式中的序列化结果 */
239
+ formatMention?: (mention: MentionTag, context: XAdkSenderFormatMentionContext) => string;
240
+ /** @deprecated 请使用 formatMention。 */
241
+ formatTag?: (mention: MentionTag, context: XAdkSenderFormatMentionContext) => string;
242
+ /**
243
+ * 基于 SDK 标准提交结构派生业务 payload。
244
+ * SDK 不理解 knowledge/skill/agent 等业务字段,只负责把 payload 原样放入 onSubmit 数据中。
245
+ */
246
+ transformSubmitData?: (data: Omit<XAdkSenderSubmitData, "payload">) => unknown;
107
247
  }
108
248
  export type XAdkSenderProps = SenderUIProps & UploaderCoreProps;
109
249
  export interface XAdkSenderHandle {
110
250
  addFiles: (files: File[]) => void;
251
+ /** 向当前光标位置插入一个内联 Mention;未启用 inlineTags 时会退化为追加 Mention。 */
252
+ insertMention: (mention: MentionTag) => void;
253
+ /** @deprecated 请使用 insertMention。 */
254
+ insertTag: (mention: MentionTag) => void;
255
+ /** 聚焦输入区 */
256
+ focus: () => void;
111
257
  }
112
258
  export {};
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/XAdkSender.ts"],"sourcesContent":["// types/XAdkSender.ts\nimport React from \"react\";\n\nexport interface UploadFileResult {\n fileName?: string;\n fileId?: string | number;\n tempUrl?: string;\n url?: string;\n fileUrl?: string;\n fileType?: string;\n fileSize?: number;\n mimeType?: string;\n [key: string]: any;\n}\n\nexport interface UploadSuccessResponse {\n data?: UploadFileResult | UploadFileResult[];\n [key: string]: any;\n}\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (\n response: UploadFileResult | UploadFileResult[] | UploadSuccessResponse,\n ) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport type UploadRequestFn = uploadRequestProps;\n\nexport interface ServerFile {\n fileName: string;\n fileId: string | number;\n tempUrl: string;\n type: string;\n size?: number;\n mimeType: string;\n raw?: UploadFileResult;\n}\n\nexport interface LocalFile {\n id: string;\n uid: string;\n name: string;\n file: File;\n size: number;\n type: string;\n progress: number;\n status: \"pending\" | \"uploading\" | \"success\" | \"error\";\n // 服务器返回字段\n fileId?: string | number;\n tempUrl?: string;\n response?: any;\n errorMessage?: string; // 上传错误信息\n}\n\nexport type FileValidator = (\n file: File,\n context: { files: LocalFile[] },\n) => string | null;\n\nexport interface ActionsComponents {\n SendButton: React.ComponentType<any>;\n UploadButton: React.ComponentType<any>;\n ClearButton: React.ComponentType<any>;\n}\n\nexport type SlotRenderFunction = (\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n) => React.ReactNode | false;\n\n// 上传相关\nexport interface UploaderCoreProps {\n uploadRequest?: uploadRequestProps;\n\n maxFileSize?: number;\n allowedFileTypes?: string[];\n maxFiles?: number;\n\n validators?: FileValidator[];\n\n // 数据层回调\n onFilesChange?: (files: LocalFile[]) => void;\n onUploadSuccess?: (file: LocalFile) => void;\n onUploadError?: (file: LocalFile, error: Error) => void;\n}\n\n// UI 相关\nexport interface SenderUIProps {\n clearBtnShow?: boolean;\n allowUpload?: boolean;\n /** 是否启用 Sender 自身的拖拽上传,设为 false 时由外层(如 DefaultLayout)管理拖拽 */\n draggable?: boolean;\n loading?: boolean;\n disabled?: boolean; // 只读状态\n /** 受控:输入框的值 */\n value?: string;\n /** 非受控:输入框默认值 */\n defaultValue?: string;\n onClear?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (data: { text: string; files: ServerFile[] }) => void;\n onStop?: () => void;\n\n /** 自定义发送按钮渲染 */\n sendButtonRender?: (info: {\n loading: boolean;\n disabled: boolean;\n /** 当前是否可以发送(文本非空或有已上传的文件) */\n canSend: boolean;\n onSend: () => void;\n onStop?: () => void;\n }) => React.ReactNode;\n\n // UI插槽功能\n /** 后缀内容,默认展示操作按钮,设为 false 时不显示 */\n suffix?: React.ReactNode | false | SlotRenderFunction;\n /** 头部面板 */\n header?: React.ReactNode | false | SlotRenderFunction;\n /** 前缀内容 */\n prefix?: React.ReactNode | false | SlotRenderFunction;\n /** 底部内容 */\n footer?: React.ReactNode | false | SlotRenderFunction;\n}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n\nexport interface XAdkSenderHandle {\n addFiles: (files: File[]) => void;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../src/types/XAdkSender.ts"],"sourcesContent":["// types/XAdkSender.ts\nimport React from \"react\";\n\n// ===================== 快捷键/Mention 相关类型 =====================\n\n/** 快捷键触发的列表项 */\nexport interface QuickListOption {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n /** 分组名(用于聚合列表,子分组通过下划线分割) */\n group?: string;\n [key: string]: any;\n}\n\n/** 快捷键配置 */\nexport interface QuickKeyConfig {\n /** 触发字符,如 '@', '#', '$' */\n key: string;\n /** 选中后写入 MentionTag.type 的语义类型,不传时回退为 key */\n mentionType?: string;\n /** @deprecated 请使用 mentionType。 */\n tagType?: string;\n /** 列表标题 */\n title?: string;\n /** 列表数据 */\n options: QuickListOption[];\n /** 自定义列表项渲染 */\n renderItem?: (option: QuickListOption) => React.ReactNode;\n /** 选中回调 */\n onSelect?: (option: QuickListOption) => void;\n}\n\n/** 输入框内的资源引用。SDK 只理解通用 Mention,业务语义可放入 data 或可选语义字段。 */\nexport interface MentionTag {\n id: string;\n label: string;\n /** Mention 类型,如 'knowledge', 'skill', 'plugin', 'agent' */\n type: string;\n /** 资源 URI,如 skill://skillNo、kb://kb/knNo/dir/docs/2024 */\n uri?: string;\n /** 业务资源 ID,如 skillNo、knowledgeNo */\n targetId?: string;\n /** 展示名;不传时回退 label */\n displayName?: string;\n /** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 uri/targetId/label */\n value?: string;\n /** 触发字符,如 '@', '#', '$',用于业务方区分来源 */\n trigger?: string;\n color?: string;\n icon?: React.ReactNode;\n /** 业务扩展上下文,例如知识库目录 scope */\n scope?: any;\n /** 原始数据 */\n data?: any;\n}\n\n/** @deprecated 请使用 MentionTag。 */\nexport type InputTag = MentionTag;\n\nexport interface InlineTagRenderInfo {\n onRemove: () => void;\n}\n\nexport type XAdkSenderSubmitFormat = \"text\" | \"structured\" | \"markdown\" | \"xml\";\n\nexport type XAdkSenderSubmitPart =\n | { type: \"text\"; text: string }\n | { type: \"mention\"; mention: MentionTag };\n\n/** @deprecated 旧 tag part,仅用于兼容 defaultInputParts 历史传入。 */\nexport type XAdkSenderLegacyTagPart = { type: \"tag\"; tag: MentionTag };\n\n/** 输入框文本/Mention 有序片段,表示用户正在编辑的输入内容 */\nexport type XAdkSenderInputPart =\n | XAdkSenderSubmitPart\n | XAdkSenderLegacyTagPart;\n\nexport interface XAdkSenderFormatMentionContext {\n format: Exclude<XAdkSenderSubmitFormat, \"structured\">;\n index: number;\n}\n\n/** @deprecated 请使用 XAdkSenderFormatMentionContext。 */\nexport type XAdkSenderFormatTagContext = XAdkSenderFormatMentionContext;\n\nexport interface XAdkSenderSubmitData<TPayload = unknown> {\n /** 根据 submitFormat 生成的最终内容,默认是纯文本 */\n text: string;\n /** 去掉标签后的用户原始输入文本 */\n rawText: string;\n /** 当前提交格式 */\n format: XAdkSenderSubmitFormat;\n /** 文本与 Mention 的有序片段,inlineTags 模式下可还原资源引用在输入框中的位置 */\n parts: XAdkSenderSubmitPart[];\n files: ServerFile[];\n /** 当前 Mention 列表 */\n mentions?: MentionTag[];\n /** @deprecated 请使用 mentions。 */\n tags?: MentionTag[];\n /** 业务方通过 transformSubmitData 派生出的自定义提交结构 */\n payload?: TPayload;\n}\n\n// ===================== 上传相关类型 =====================\n\nexport interface UploadFileResult {\n fileName?: string;\n fileId?: string | number;\n tempUrl?: string;\n url?: string;\n fileUrl?: string;\n fileType?: string;\n fileSize?: number;\n mimeType?: string;\n [key: string]: any;\n}\n\nexport interface UploadSuccessResponse {\n data?: UploadFileResult | UploadFileResult[];\n [key: string]: any;\n}\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (\n response: UploadFileResult | UploadFileResult[] | UploadSuccessResponse,\n ) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport type UploadRequestFn = uploadRequestProps;\n\nexport interface ServerFile {\n fileName: string;\n fileId: string | number;\n tempUrl: string;\n type: string;\n size?: number;\n mimeType: string;\n raw?: UploadFileResult;\n}\n\nexport interface LocalFile {\n id: string;\n uid: string;\n name: string;\n file: File;\n size: number;\n type: string;\n progress: number;\n status: \"pending\" | \"uploading\" | \"success\" | \"error\";\n // 服务器返回字段\n fileId?: string | number;\n tempUrl?: string;\n response?: any;\n errorMessage?: string; // 上传错误信息\n}\n\nexport type FileValidator = (\n file: File,\n context: { files: LocalFile[] },\n) => string | null;\n\nexport interface ActionsComponents {\n SendButton: React.ComponentType<any>;\n ClearButton: React.ComponentType<any>;\n}\n\nexport type SlotRenderFunction = (\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n) => React.ReactNode | false;\n\n// 上传相关\nexport interface UploaderCoreProps {\n uploadRequest?: uploadRequestProps;\n\n maxFileSize?: number;\n allowedFileTypes?: string[];\n maxFiles?: number;\n\n validators?: FileValidator[];\n\n // 数据层回调\n onFilesChange?: (files: LocalFile[]) => void;\n onUploadSuccess?: (file: LocalFile) => void;\n onUploadError?: (file: LocalFile, error: Error) => void;\n}\n\n// UI 相关\nexport interface SenderUIProps {\n clearBtnShow?: boolean;\n /**\n * 是否启用 Sender 自身的拖拽上传。\n * 拖拽产生的文件通过 onFileSelect 回调交给业务/外层处理;\n * 默认 false,由外层(如 DefaultLayout)管理拖拽时无需开启。\n */\n draggable?: boolean;\n /**\n * 拖拽文件回调:当 draggable 为 true 且用户向输入区拖拽文件时触发。\n * 业务/外层在此回调中决定如何处理文件(通常调用 senderRef.addFiles 注入)。\n */\n onFileSelect?: (files: File[]) => void;\n loading?: boolean;\n disabled?: boolean; // 只读状态\n placeholder?: string;\n /** 受控:输入框的值 */\n value?: string;\n /** 非受控:输入框默认值 */\n defaultValue?: string;\n onClear?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (data: XAdkSenderSubmitData) => void;\n onStop?: () => void;\n\n /** 自定义发送按钮渲染 */\n sendButtonRender?: (info: {\n loading: boolean;\n disabled: boolean;\n /** 当前是否可以发送(文本非空或有已上传的文件) */\n canSend: boolean;\n onSend: () => void;\n onStop?: () => void;\n }) => React.ReactNode;\n\n // UI插槽功能\n /** 后缀内容,默认展示操作按钮,设为 false 时不显示 */\n suffix?: React.ReactNode | false | SlotRenderFunction;\n /** 输入主体内部的头部内容 */\n header?: React.ReactNode | false | SlotRenderFunction;\n /** 前缀内容 */\n prefix?: React.ReactNode | false | SlotRenderFunction;\n /** 底部内容 */\n footer?: React.ReactNode | false | SlotRenderFunction;\n /** 底部左侧拓展区域,不传时 footer 保持原有居中布局 */\n footerLeft?: React.ReactNode | false | SlotRenderFunction;\n\n // 快捷键/Mention 功能\n /** 快捷键配置列表 */\n quickKeys?: QuickKeyConfig[];\n /** 是否把 Mention 以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */\n inlineTags?: boolean;\n /** 自定义内联 Mention 渲染 */\n renderMention?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** @deprecated 请使用 renderMention。 */\n renderTag?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** 受控:Mention 列表 */\n mentions?: MentionTag[];\n /** @deprecated 请使用 mentions。 */\n tags?: MentionTag[];\n /** 非受控:默认 Mention 列表 */\n defaultMentions?: MentionTag[];\n /** @deprecated 请使用 defaultMentions。 */\n defaultTags?: MentionTag[];\n /** 非受控:默认输入内容片段,用于初始化内联 Mention 输入区 */\n defaultInputParts?: XAdkSenderInputPart[];\n /** Mention 变化回调 */\n onMentionsChange?: (mentions: MentionTag[]) => void;\n /** @deprecated 请使用 onMentionsChange。 */\n onTagsChange?: (mentions: MentionTag[]) => void;\n /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */\n onQuickKeyTrigger?: (key: string, keyword: string) => void;\n /**\n * 提交内容格式:\n * - text: 默认,输出文字 + Mention 文本(如 @生图技能)\n * - structured: 保留 parts/mentions/files 结构化数据,text 为 rawText\n * - markdown/xml: 输出对应标记文本\n */\n submitFormat?: XAdkSenderSubmitFormat;\n /** 自定义 Mention 在 text/markdown/xml 格式中的序列化结果 */\n formatMention?: (\n mention: MentionTag,\n context: XAdkSenderFormatMentionContext,\n ) => string;\n /** @deprecated 请使用 formatMention。 */\n formatTag?: (\n mention: MentionTag,\n context: XAdkSenderFormatMentionContext,\n ) => string;\n /**\n * 基于 SDK 标准提交结构派生业务 payload。\n * SDK 不理解 knowledge/skill/agent 等业务字段,只负责把 payload 原样放入 onSubmit 数据中。\n */\n transformSubmitData?: (\n data: Omit<XAdkSenderSubmitData, \"payload\">,\n ) => unknown;\n}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n\nexport interface XAdkSenderHandle {\n addFiles: (files: File[]) => void;\n /** 向当前光标位置插入一个内联 Mention;未启用 inlineTags 时会退化为追加 Mention。 */\n insertMention: (mention: MentionTag) => void;\n /** @deprecated 请使用 insertMention。 */\n insertTag: (mention: MentionTag) => void;\n /** 聚焦输入区 */\n focus: () => void;\n}\n"],"mappings":""}
@@ -11,3 +11,4 @@ export * from "./FileGallery";
11
11
  export * from "./common";
12
12
  export * from "./FunctionCallRender";
13
13
  export * from "./ChatStrategies";
14
+ export * from "./Sources";
@@ -11,4 +11,5 @@ export * from "./FileGallery";
11
11
  export * from "./common";
12
12
  export * from "./FunctionCallRender";
13
13
  export * from "./ChatStrategies";
14
+ export * from "./Sources";
14
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/index.ts"],"sourcesContent":["export * from \"./XAiChatbot\";\nexport * from \"./XAiMessage\";\nexport * from \"./XAiProvider\";\nexport * from \"./XAiSender\";\nexport * from \"./XAiConversations\";\nexport * from \"./XAdkProvider\";\nexport * from \"./XAdkChatbot\";\nexport * from \"./XAdkSender\";\nexport * from \"./XAdkThoughtChain\";\nexport * from \"./FileGallery\";\nexport * from \"./common\";\nexport * from \"./FunctionCallRender\";\nexport * from \"./ChatStrategies\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
1
+ {"version":3,"names":[],"sources":["../../../src/types/index.ts"],"sourcesContent":["export * from \"./XAiChatbot\";\nexport * from \"./XAiMessage\";\nexport * from \"./XAiProvider\";\nexport * from \"./XAiSender\";\nexport * from \"./XAiConversations\";\nexport * from \"./XAdkProvider\";\nexport * from \"./XAdkChatbot\";\nexport * from \"./XAdkSender\";\nexport * from \"./XAdkThoughtChain\";\nexport * from \"./FileGallery\";\nexport * from \"./common\";\nexport * from \"./FunctionCallRender\";\nexport * from \"./ChatStrategies\";\nexport * from \"./Sources\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -2,3 +2,4 @@ export declare const safeJsonParse: <T = any>(str?: string, defaultValue?: any)
2
2
  export declare const safeJsonStringify: <T = any>(obj?: T, defaultValue?: any) => string;
3
3
  export declare function cleanProcessText(text: string): string;
4
4
  export * from './parseAgentMessage';
5
+ export * from './markdownResource';
@@ -23,4 +23,5 @@ export function cleanProcessText(text) {
23
23
 
24
24
  // 导出新的解析工具
25
25
  export * from "./parseAgentMessage";
26
+ export * from "./markdownResource";
26
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["safeJsonParse","str","defaultValue","arguments","length","undefined","JSON","parse","error","safeJsonStringify","obj","stringify","cleanProcessText","text","replace","trim"],"sources":["../../../src/utils/index.ts"],"sourcesContent":["export const safeJsonParse = <T = any>(\n str?: string,\n defaultValue: any = {},\n): T => {\n if (!str) return defaultValue as T;\n try {\n return JSON.parse(str) || defaultValue;\n } catch (error) {\n return defaultValue as T;\n }\n};\n\nexport const safeJsonStringify = <T = any>(\n obj?: T,\n defaultValue: any = {},\n): string => {\n if (!obj) return defaultValue as string;\n try {\n return JSON.stringify(obj) || defaultValue;\n } catch (error) {\n return defaultValue as string;\n }\n};\n\nexport function cleanProcessText(text: string): string {\n if (!text) return \"\";\n return text\n .replace(/\\/\\*(PLANNING|REPLANNING|REASONING|ACTION|FINAL_ANSWER)\\*\\//g, \"\")\n .trim();\n}\n\n// 导出新的解析工具\nexport * from './parseAgentMessage';\n"],"mappings":"AAAA,OAAO,IAAMA,aAAa,GAAG,SAAhBA,aAAaA,CACxBC,GAAY,EAEN;EAAA,IADNC,YAAiB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAEtB,IAAI,CAACF,GAAG,EAAE,OAAOC,YAAY;EAC7B,IAAI;IACF,OAAOI,IAAI,CAACC,KAAK,CAACN,GAAG,CAAC,IAAIC,YAAY;EACxC,CAAC,CAAC,OAAOM,KAAK,EAAE;IACd,OAAON,YAAY;EACrB;AACF,CAAC;AAED,OAAO,IAAMO,iBAAiB,GAAG,SAApBA,iBAAiBA,CAC5BC,GAAO,EAEI;EAAA,IADXR,YAAiB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAEtB,IAAI,CAACO,GAAG,EAAE,OAAOR,YAAY;EAC7B,IAAI;IACF,OAAOI,IAAI,CAACK,SAAS,CAACD,GAAG,CAAC,IAAIR,YAAY;EAC5C,CAAC,CAAC,OAAOM,KAAK,EAAE;IACd,OAAON,YAAY;EACrB;AACF,CAAC;AAED,OAAO,SAASU,gBAAgBA,CAACC,IAAY,EAAU;EACrD,IAAI,CAACA,IAAI,EAAE,OAAO,EAAE;EACpB,OAAOA,IAAI,CACRC,OAAO,CAAC,8DAA8D,EAAE,EAAE,CAAC,CAC3EC,IAAI,CAAC,CAAC;AACX;;AAEA;AACA"}
1
+ {"version":3,"names":["safeJsonParse","str","defaultValue","arguments","length","undefined","JSON","parse","error","safeJsonStringify","obj","stringify","cleanProcessText","text","replace","trim"],"sources":["../../../src/utils/index.ts"],"sourcesContent":["export const safeJsonParse = <T = any>(\n str?: string,\n defaultValue: any = {},\n): T => {\n if (!str) return defaultValue as T;\n try {\n return JSON.parse(str) || defaultValue;\n } catch (error) {\n return defaultValue as T;\n }\n};\n\nexport const safeJsonStringify = <T = any>(\n obj?: T,\n defaultValue: any = {},\n): string => {\n if (!obj) return defaultValue as string;\n try {\n return JSON.stringify(obj) || defaultValue;\n } catch (error) {\n return defaultValue as string;\n }\n};\n\nexport function cleanProcessText(text: string): string {\n if (!text) return \"\";\n return text\n .replace(/\\/\\*(PLANNING|REPLANNING|REASONING|ACTION|FINAL_ANSWER)\\*\\//g, \"\")\n .trim();\n}\n\n// 导出新的解析工具\nexport * from './parseAgentMessage';\nexport * from './markdownResource';\n"],"mappings":"AAAA,OAAO,IAAMA,aAAa,GAAG,SAAhBA,aAAaA,CACxBC,GAAY,EAEN;EAAA,IADNC,YAAiB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAEtB,IAAI,CAACF,GAAG,EAAE,OAAOC,YAAY;EAC7B,IAAI;IACF,OAAOI,IAAI,CAACC,KAAK,CAACN,GAAG,CAAC,IAAIC,YAAY;EACxC,CAAC,CAAC,OAAOM,KAAK,EAAE;IACd,OAAON,YAAY;EACrB;AACF,CAAC;AAED,OAAO,IAAMO,iBAAiB,GAAG,SAApBA,iBAAiBA,CAC5BC,GAAO,EAEI;EAAA,IADXR,YAAiB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAEtB,IAAI,CAACO,GAAG,EAAE,OAAOR,YAAY;EAC7B,IAAI;IACF,OAAOI,IAAI,CAACK,SAAS,CAACD,GAAG,CAAC,IAAIR,YAAY;EAC5C,CAAC,CAAC,OAAOM,KAAK,EAAE;IACd,OAAON,YAAY;EACrB;AACF,CAAC;AAED,OAAO,SAASU,gBAAgBA,CAACC,IAAY,EAAU;EACrD,IAAI,CAACA,IAAI,EAAE,OAAO,EAAE;EACpB,OAAOA,IAAI,CACRC,OAAO,CAAC,8DAA8D,EAAE,EAAE,CAAC,CAC3EC,IAAI,CAAC,CAAC;AACX;;AAEA;AACA;AACA"}
@@ -0,0 +1,14 @@
1
+ import type { MarkdownResourceLink, XAdkSenderSubmitPart } from "../types";
2
+ export declare const MARKDOWN_RESOURCE_LINK_SCHEMES: readonly ["skill", "kb"];
3
+ export type MarkdownResourceLinkScheme = (typeof MARKDOWN_RESOURCE_LINK_SCHEMES)[number] | (string & {});
4
+ export interface MarkdownResourceLinkOptions {
5
+ schemes?: readonly MarkdownResourceLinkScheme[];
6
+ }
7
+ export declare const getMarkdownResourceDisplayLabel: (label: string) => string;
8
+ /** 将包含资源链接的 Markdown 还原成 Sender 可编辑的有序片段。 */
9
+ export declare const parseMarkdownResourceLinksAsParts: (text: string, options?: MarkdownResourceLinkOptions) => XAdkSenderSubmitPart[];
10
+ export declare const parseMarkdownResourceHref: (href: string, label?: string, options?: MarkdownResourceLinkOptions) => MarkdownResourceLink | null;
11
+ export declare const replaceMarkdownResourceLinks: (text: string, replacer: (link: MarkdownResourceLink) => string, options?: MarkdownResourceLinkOptions) => string;
12
+ export declare const formatMarkdownResourceLinksAsText: (text: string, options?: MarkdownResourceLinkOptions & {
13
+ stripTrigger?: boolean;
14
+ }) => string;