@ai-group/chat-sdk 3.2.1 → 3.3.1

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 (105) hide show
  1. package/README.md +89 -60
  2. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +1 -6
  3. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js +19 -3
  4. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js.map +2 -2
  5. package/dist/cjs/components/XAdkChatbot/index.js +36 -8
  6. package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
  7. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.d.ts +5 -0
  8. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +9 -4
  9. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
  10. package/dist/cjs/components/XAdkProvider/compound/Messages.d.ts +7 -0
  11. package/dist/cjs/components/XAdkProvider/compound/Messages.js +10 -4
  12. package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +2 -2
  13. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.d.ts +3 -1
  14. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js.map +2 -2
  15. package/dist/cjs/components/XAdkProvider/index.js +27 -3
  16. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  17. package/dist/cjs/components/XAdkSender/index.js +19 -13
  18. package/dist/cjs/components/XAdkSender/index.js.map +2 -2
  19. package/dist/cjs/components/XAdkThoughtChain/index.js +29 -8
  20. package/dist/cjs/components/XAdkThoughtChain/index.js.map +3 -3
  21. package/dist/cjs/hooks/useADKChat.d.ts +1 -1
  22. package/dist/cjs/hooks/useADKChat.js +3 -1
  23. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  24. package/dist/cjs/index.d.ts +3 -2
  25. package/dist/cjs/index.js +20 -1
  26. package/dist/cjs/index.js.map +2 -2
  27. package/dist/cjs/presets/xGroupAdk.d.ts +20 -0
  28. package/dist/cjs/presets/xGroupAdk.js +131 -0
  29. package/dist/cjs/presets/xGroupAdk.js.map +7 -0
  30. package/dist/cjs/types/ChatStrategies.d.ts +45 -0
  31. package/dist/cjs/types/ChatStrategies.js +18 -0
  32. package/dist/cjs/types/ChatStrategies.js.map +7 -0
  33. package/dist/cjs/types/FunctionCallRender.d.ts +35 -0
  34. package/dist/cjs/types/FunctionCallRender.js +32 -0
  35. package/dist/cjs/types/FunctionCallRender.js.map +7 -0
  36. package/dist/cjs/types/XAdkChatbot.d.ts +32 -0
  37. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  38. package/dist/cjs/types/XAdkProvider.d.ts +19 -0
  39. package/dist/cjs/types/XAdkProvider.js.map +2 -2
  40. package/dist/cjs/types/XAdkSender.d.ts +20 -4
  41. package/dist/cjs/types/XAdkSender.js.map +1 -1
  42. package/dist/cjs/types/XAdkThoughtChain.d.ts +10 -2
  43. package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
  44. package/dist/cjs/types/XAiChatbot.d.ts +1 -1
  45. package/dist/cjs/types/XAiChatbot.js.map +1 -1
  46. package/dist/cjs/types/XAiProvider.d.ts +1 -1
  47. package/dist/cjs/types/XAiProvider.js.map +1 -1
  48. package/dist/cjs/types/index.d.ts +2 -0
  49. package/dist/cjs/types/index.js +5 -1
  50. package/dist/cjs/types/index.js.map +2 -2
  51. package/dist/cjs/utils/providerManager.d.ts +1 -1
  52. package/dist/cjs/utils/providerManager.js.map +1 -1
  53. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +1 -6
  54. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js +25 -5
  55. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js.map +1 -1
  56. package/dist/esm/components/XAdkChatbot/index.js +35 -8
  57. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  58. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +5 -0
  59. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +9 -4
  60. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
  61. package/dist/esm/components/XAdkProvider/compound/Messages.d.ts +7 -0
  62. package/dist/esm/components/XAdkProvider/compound/Messages.js +14 -9
  63. package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -1
  64. package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts +3 -1
  65. package/dist/esm/components/XAdkProvider/context/ChatStateContext.js.map +1 -1
  66. package/dist/esm/components/XAdkProvider/index.js +21 -4
  67. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  68. package/dist/esm/components/XAdkSender/index.js +26 -17
  69. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  70. package/dist/esm/components/XAdkThoughtChain/index.js +23 -7
  71. package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
  72. package/dist/esm/hooks/useADKChat.d.ts +1 -1
  73. package/dist/esm/hooks/useADKChat.js +3 -1
  74. package/dist/esm/hooks/useADKChat.js.map +1 -1
  75. package/dist/esm/index.d.ts +3 -2
  76. package/dist/esm/index.js +2 -1
  77. package/dist/esm/index.js.map +1 -1
  78. package/dist/esm/presets/xGroupAdk.d.ts +20 -0
  79. package/dist/esm/presets/xGroupAdk.js +123 -0
  80. package/dist/esm/presets/xGroupAdk.js.map +1 -0
  81. package/dist/esm/types/ChatStrategies.d.ts +45 -0
  82. package/dist/esm/types/ChatStrategies.js +2 -0
  83. package/dist/esm/types/ChatStrategies.js.map +1 -0
  84. package/dist/esm/types/FunctionCallRender.d.ts +35 -0
  85. package/dist/esm/types/FunctionCallRender.js +14 -0
  86. package/dist/esm/types/FunctionCallRender.js.map +1 -0
  87. package/dist/esm/types/XAdkChatbot.d.ts +32 -0
  88. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  89. package/dist/esm/types/XAdkProvider.d.ts +19 -0
  90. package/dist/esm/types/XAdkProvider.js.map +1 -1
  91. package/dist/esm/types/XAdkSender.d.ts +20 -4
  92. package/dist/esm/types/XAdkSender.js.map +1 -1
  93. package/dist/esm/types/XAdkThoughtChain.d.ts +10 -2
  94. package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
  95. package/dist/esm/types/XAiChatbot.d.ts +1 -1
  96. package/dist/esm/types/XAiChatbot.js.map +1 -1
  97. package/dist/esm/types/XAiProvider.d.ts +1 -1
  98. package/dist/esm/types/XAiProvider.js.map +1 -1
  99. package/dist/esm/types/index.d.ts +2 -0
  100. package/dist/esm/types/index.js +2 -0
  101. package/dist/esm/types/index.js.map +1 -1
  102. package/dist/esm/utils/providerManager.d.ts +1 -1
  103. package/dist/esm/utils/providerManager.js.map +1 -1
  104. package/dist/umd/chat-sdk.min.js +1 -1
  105. package/package.json +1 -1
@@ -0,0 +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":""}
@@ -0,0 +1,35 @@
1
+ /// <reference types="react" />
2
+ import type { IMessage, FunctionCall } from "./";
3
+ /**
4
+ * 工具调用渲染类型
5
+ * - approval: 需要用户确认的调用(如危险操作确认)
6
+ * - handoff: 任务转交给其他 Agent
7
+ * - default: 普通工具调用
8
+ */
9
+ export type ToolRenderKind = "approval" | "handoff" | "default";
10
+ /**
11
+ * 默认的工具名 → 渲染类型推导策略
12
+ */
13
+ export declare const defaultToolKindResolver: (_name: string | undefined) => ToolRenderKind;
14
+ export interface FunctionCallRenderProps {
15
+ msg: IMessage;
16
+ showDetail?: boolean;
17
+ onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;
18
+ /**
19
+ * 工具渲染类型,不传则使用 toolKindResolver 自动推导
20
+ */
21
+ kind?: ToolRenderKind;
22
+ /**
23
+ * 工具名 → 渲染类型的解析策略,默认使用中立的 defaultToolKindResolver。
24
+ * 业务协议可通过 XAdkProvider preset/strategies 自动下发,或局部传入覆盖。
25
+ */
26
+ toolKindResolver?: (name: string | undefined) => ToolRenderKind;
27
+ /**
28
+ * 自定义 approval 场景渲染,返回 null 则使用默认渲染
29
+ */
30
+ renderApproval?: (msg: IMessage, onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void) => React.ReactNode | null;
31
+ /**
32
+ * 自定义 handoff 场景渲染,返回 null 则使用默认渲染
33
+ */
34
+ renderHandoff?: (msg: IMessage) => React.ReactNode | null;
35
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 工具调用渲染类型
3
+ * - approval: 需要用户确认的调用(如危险操作确认)
4
+ * - handoff: 任务转交给其他 Agent
5
+ * - default: 普通工具调用
6
+ */
7
+
8
+ /**
9
+ * 默认的工具名 → 渲染类型推导策略
10
+ */
11
+ export var defaultToolKindResolver = function defaultToolKindResolver(_name) {
12
+ return "default";
13
+ };
14
+ //# sourceMappingURL=FunctionCallRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["defaultToolKindResolver","_name"],"sources":["../../../src/types/FunctionCallRender.ts"],"sourcesContent":["import type { IMessage, FunctionCall } from \"@/types\";\n\n/**\n * 工具调用渲染类型\n * - approval: 需要用户确认的调用(如危险操作确认)\n * - handoff: 任务转交给其他 Agent\n * - default: 普通工具调用\n */\nexport type ToolRenderKind = \"approval\" | \"handoff\" | \"default\";\n\n/**\n * 默认的工具名 → 渲染类型推导策略\n */\nexport const defaultToolKindResolver = (\n _name: string | undefined,\n): ToolRenderKind => {\n return \"default\";\n};\n\nexport interface FunctionCallRenderProps {\n msg: IMessage;\n showDetail?: boolean;\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n /**\n * 工具渲染类型,不传则使用 toolKindResolver 自动推导\n */\n kind?: ToolRenderKind;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用中立的 defaultToolKindResolver。\n * 业务协议可通过 XAdkProvider preset/strategies 自动下发,或局部传入覆盖。\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\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"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA,OAAO,IAAMA,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAClCC,KAAyB,EACN;EACnB,OAAO,SAAS;AAClB,CAAC"}
@@ -2,6 +2,8 @@ import { JSX } from "react";
2
2
  import { type XAdkSenderProps } from "./XAdkSender";
3
3
  import { type SendContent } from "./XAiSender";
4
4
  import { type FileItem } from "./FileGallery";
5
+ import { type ToolRenderKind } from "./FunctionCallRender";
6
+ import { type ChatPresetInput, type ChatStrategies } from "./ChatStrategies";
5
7
  /**
6
8
  * 消息分组接口
7
9
  */
@@ -201,7 +203,37 @@ export type ActionProps = (data: {
201
203
  message: ChatGroup;
202
204
  isLastBotMsg: boolean;
203
205
  }) => JSX.Element | null;
206
+ /**
207
+ * 自定义工具调用渲染函数
208
+ * - 返回 ReactNode:使用自定义渲染
209
+ * - 返回 null:降级使用默认渲染
210
+ *
211
+ * @example
212
+ * renderFunctionCall={(msg) => {
213
+ * if (msg.functionCall?.name === 'my_tool') return <MyToolRender msg={msg} />;
214
+ * return null; // 其他工具使用默认渲染
215
+ * }}
216
+ */
217
+ export type RenderFunctionCall = (msg: IMessage) => React.ReactNode | null;
204
218
  export interface XAdkChatbotProps extends Partial<XAdkSenderProps> {
219
+ /**
220
+ * 自定义工具调用渲染函数
221
+ * 返回 null 则降级使用默认渲染
222
+ */
223
+ renderFunctionCall?: RenderFunctionCall;
224
+ /**
225
+ * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver
226
+ */
227
+ toolKindResolver?: (name: string | undefined) => ToolRenderKind;
228
+ /**
229
+ * 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。
230
+ */
231
+ strategies?: ChatStrategies;
232
+ /**
233
+ * 组件直用时的协议预设。默认沿用 xgroup-adk 以兼容既有业务接入;
234
+ * 需要中立行为时可传入 base。
235
+ */
236
+ preset?: ChatPresetInput;
205
237
  className?: string;
206
238
  style?: React.CSSProperties;
207
239
  loading?: boolean;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/XAdkChatbot.ts"],"sourcesContent":["import { JSX } from \"react\";\nimport { type XAdkSenderProps } from \"./XAdkSender\";\nimport { type SendContent } from \"./XAiSender\";\nimport { type FileItem } from \"./FileGallery\";\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 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 invocationId?: string;\n actions?: EventActions;\n longRunningToolIds?: string[];\n branch?: string;\n timestamp?: number;\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 // 下面暂时没有用到\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 interface XAdkChatbotProps extends Partial<XAdkSenderProps> {\n className?: string;\n style?: React.CSSProperties;\n // 加载状态\n loading?: boolean;\n /** 消息列表 */\n messages: IMessage[];\n /** 开场白 */\n prologue?: string;\n /** 建议回复 */\n suggestions?: string[];\n /** 欢迎页面 */\n welcome?: React.ReactNode;\n /** 显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 是否初始化完成,初始化完成后自动滚动到最新消息 */\n initialized?: boolean;\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\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"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../src/types/XAdkChatbot.ts"],"sourcesContent":["import { JSX } 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 * 消息分组接口\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 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 invocationId?: string;\n actions?: EventActions;\n longRunningToolIds?: string[];\n branch?: string;\n timestamp?: number;\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 // 下面暂时没有用到\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\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) => React.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?: React.CSSProperties;\n // 加载状态\n loading?: boolean;\n /** 消息列表 */\n messages: IMessage[];\n /** 开场白 */\n prologue?: string;\n /** 建议回复 */\n suggestions?: string[];\n /** 欢迎页面 */\n welcome?: React.ReactNode;\n /** 显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 是否初始化完成,初始化完成后自动滚动到最新消息 */\n initialized?: boolean;\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\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"],"mappings":""}
@@ -1,5 +1,6 @@
1
1
  import { ReactNode } from "react";
2
2
  import { IMessage, Success, Event, Error, SendContent, ThemeType, FileItem, UploadRequestFn } from "./";
3
+ import type { ChatPresetInput, ChatStrategies } from "./ChatStrategies";
3
4
  export interface DebugOptions {
4
5
  url: string;
5
6
  sessionId?: string;
@@ -12,6 +13,7 @@ export interface DebugOptions {
12
13
  * @default true
13
14
  */
14
15
  enabled?: boolean;
16
+ strategies?: ChatStrategies;
15
17
  onError?: (error: Error) => void;
16
18
  onSuccess?: (data: Success) => void;
17
19
  onStream?: (data: Event) => void;
@@ -125,6 +127,15 @@ export interface XAdkProviderConfig {
125
127
  * 自定义文件上传函数
126
128
  */
127
129
  uploadRequest?: UploadRequestFn;
130
+ /**
131
+ * 预设策略。默认 xgroup-adk,用于兼容众安信科现有 ADK 协议。
132
+ * 传入 base 可获得更中立的组件默认行为。
133
+ */
134
+ preset?: ChatPresetInput;
135
+ /**
136
+ * 覆盖或补充当前 preset 的局部策略。
137
+ */
138
+ strategies?: ChatStrategies;
128
139
  }
129
140
  /**
130
141
  * XAdkProvider Props
@@ -142,6 +153,14 @@ export interface XAdkProviderProps {
142
153
  * 组件功能配置
143
154
  */
144
155
  config?: XAdkProviderConfig;
156
+ /**
157
+ * Provider 级预设策略,优先级高于 config.preset。
158
+ */
159
+ preset?: ChatPresetInput;
160
+ /**
161
+ * Provider 级策略覆盖,优先级高于 config.strategies。
162
+ */
163
+ strategies?: ChatStrategies;
145
164
  /**
146
165
  * Provider 唯一标识
147
166
  */
@@ -1 +1 @@
1
- {"version":3,"names":["EventCode"],"sources":["../../../src/types/XAdkProvider.ts"],"sourcesContent":["import { ReactNode } from \"react\";\nimport {\n IMessage,\n Success,\n Event,\n Error,\n SendContent,\n ThemeType,\n FileItem,\n UploadRequestFn,\n} from \"@/types\";\n\nexport interface DebugOptions {\n url: string;\n sessionId?: string;\n config: any;\n token: string;\n type?: \"agentDebug\" | \"appDebug\";\n /**\n * 是否启用 Hook\n * 当使用自定义 chatData 时,应设置为 false 以避免内部 Hook 初始化\n * @default true\n */\n enabled?: boolean;\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onStream?: (data: Event) => void;\n onMessage?: (content: string, data: IMessage) => void;\n}\n\n/**\n * 事件状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum EventCode {\n /** 切换会话 */\n SESSION_SWITCH = \"SESSION_SWITCH\",\n /** 开启新会话 */\n SESSION_CREATE = \"SESSION_CREATE\",\n}\n\nexport type handleEvent = {\n code: EventCode;\n message: string;\n data?: any;\n};\n/**\n * renderFooter insert 参数说明\n */\nexport interface FooterRenderArgs {\n message: IMessage;\n isLastBotMsg: boolean;\n isLastMsg: boolean;\n}\n\n/**\n * Provider 可通过 ref 暴露的方法句柄\n */\nexport interface XAdkProviderHandle {\n startChat: (content: SendContent) => void;\n stopChat: () => void;\n reChat: () => void;\n clearChat: () => void;\n deleteSession: (id: string) => void;\n updateSession: (id: string, title: string) => void;\n getAppInfo: () => any;\n getMessages: () => IMessage[];\n getSessions: () => any[];\n setMessages: (msgs: IMessage[]) => void;\n setCurrentSession: (id: string) => void;\n /**\n * 设置自定义业务参数 (stateDelta)\n * 设置后每次发送消息时会自动携带该参数至后端\n * 传入 undefined 可清除已设置的参数\n *\n * @example\n * providerRef.current.setStateDelta({ userId: '123', bizType: 'order' });\n * // 之后发送消息,请求体会携带 stateDelta: { userId: '123', bizType: 'order' }\n *\n * @example\n * // 清除自定义参数\n * providerRef.current.setStateDelta(undefined);\n */\n setStateDelta: (delta: Record<string, any> | undefined) => void;\n}\n\n/**\n * config.chatProps 中的配置\n */\nexport interface ChatConfig {\n /**\n * 是否展示清空按钮\n * @type {boolean}\n * @default false\n */\n clearBtnShow?: boolean;\n /**\n * 是否展示输入框\n * @type {boolean}\n * @default true\n */\n inputShow?: boolean;\n /**\n * 打字机效果速度(单位:毫秒)\n * @type {number}\n * @default 60\n * @version 1.0.0\n */\n textSpeed?: number;\n}\n\n/**\n * Provider config 整体配置结构\n */\nexport interface XAdkProviderConfig {\n session?: {\n showSessionList?: boolean;\n };\n /**\n * 初始化后是否默认展示第一条会话内容\n * @type {boolean}\n * @default false\n */\n showFirstSession?: boolean;\n allowUpload?: boolean;\n appNo?: string;\n chatProps?: ChatConfig;\n debug?: boolean;\n /**\n * 是否展示点赞/点踩按钮\n * @default true\n */\n showFeedback?: boolean;\n /**\n * 点击对话中附件卡片的回调(非图片、非音视频文件)\n */\n onFileClick?: (file: FileItem) => void;\n /**\n * 自定义文件上传函数\n */\n uploadRequest?: UploadRequestFn;\n}\n\n/**\n * XAdkProvider Props\n */\nexport interface XAdkProviderProps {\n /**\n * AI 服务基础地址\n */\n url?: string;\n /**\n * 认证 token\n */\n token: string;\n /**\n * 组件功能配置\n */\n config?: XAdkProviderConfig;\n /**\n * Provider 唯一标识\n */\n providerId?: string;\n /**\n * 消息成功回调\n */\n onSuccess?: (success: any) => void;\n /**\n * 流式消息回调\n */\n onStream?: (data: Event) => void;\n /**\n * 错误回调\n */\n onError?: (err: any) => void;\n /**\n * 每条消息回调\n */\n onMessage?: (content: string, data: IMessage) => void;\n /**\n * 事件回调\n */\n onEvent?: (event: handleEvent) => void;\n /**\n * React 子元素 - 支持 Compound Components\n */\n children?: ReactNode;\n}\n\n// XAiSDKProps 继承 XAdkProviderProps\nexport interface XAdkSDKProps extends XAdkProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n"],"mappings":"AA8BA;AACA;AACA;AACA;AACA;AACA,WAAYA,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;;AAYrB;AACA;AACA;;AAOA;AACA;AACA;;AA6BA;AACA;AACA;;AAuBA;AACA;AACA;;AA8BA;AACA;AACA;;AA4CA"}
1
+ {"version":3,"names":["EventCode"],"sources":["../../../src/types/XAdkProvider.ts"],"sourcesContent":["import { ReactNode } from \"react\";\nimport {\n IMessage,\n Success,\n Event,\n Error,\n SendContent,\n ThemeType,\n FileItem,\n UploadRequestFn,\n} from \"@/types\";\nimport type { ChatPresetInput, ChatStrategies } from \"./ChatStrategies\";\n\nexport interface DebugOptions {\n url: string;\n sessionId?: string;\n config: any;\n token: string;\n type?: \"agentDebug\" | \"appDebug\";\n /**\n * 是否启用 Hook\n * 当使用自定义 chatData 时,应设置为 false 以避免内部 Hook 初始化\n * @default true\n */\n enabled?: boolean;\n strategies?: ChatStrategies;\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onStream?: (data: Event) => void;\n onMessage?: (content: string, data: IMessage) => void;\n}\n\n/**\n * 事件状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum EventCode {\n /** 切换会话 */\n SESSION_SWITCH = \"SESSION_SWITCH\",\n /** 开启新会话 */\n SESSION_CREATE = \"SESSION_CREATE\",\n}\n\nexport type handleEvent = {\n code: EventCode;\n message: string;\n data?: any;\n};\n/**\n * renderFooter insert 参数说明\n */\nexport interface FooterRenderArgs {\n message: IMessage;\n isLastBotMsg: boolean;\n isLastMsg: boolean;\n}\n\n/**\n * Provider 可通过 ref 暴露的方法句柄\n */\nexport interface XAdkProviderHandle {\n startChat: (content: SendContent) => void;\n stopChat: () => void;\n reChat: () => void;\n clearChat: () => void;\n deleteSession: (id: string) => void;\n updateSession: (id: string, title: string) => void;\n getAppInfo: () => any;\n getMessages: () => IMessage[];\n getSessions: () => any[];\n setMessages: (msgs: IMessage[]) => void;\n setCurrentSession: (id: string) => void;\n /**\n * 设置自定义业务参数 (stateDelta)\n * 设置后每次发送消息时会自动携带该参数至后端\n * 传入 undefined 可清除已设置的参数\n *\n * @example\n * providerRef.current.setStateDelta({ userId: '123', bizType: 'order' });\n * // 之后发送消息,请求体会携带 stateDelta: { userId: '123', bizType: 'order' }\n *\n * @example\n * // 清除自定义参数\n * providerRef.current.setStateDelta(undefined);\n */\n setStateDelta: (delta: Record<string, any> | undefined) => void;\n}\n\n/**\n * config.chatProps 中的配置\n */\nexport interface ChatConfig {\n /**\n * 是否展示清空按钮\n * @type {boolean}\n * @default false\n */\n clearBtnShow?: boolean;\n /**\n * 是否展示输入框\n * @type {boolean}\n * @default true\n */\n inputShow?: boolean;\n /**\n * 打字机效果速度(单位:毫秒)\n * @type {number}\n * @default 60\n * @version 1.0.0\n */\n textSpeed?: number;\n}\n\n/**\n * Provider config 整体配置结构\n */\nexport interface XAdkProviderConfig {\n session?: {\n showSessionList?: boolean;\n };\n /**\n * 初始化后是否默认展示第一条会话内容\n * @type {boolean}\n * @default false\n */\n showFirstSession?: boolean;\n allowUpload?: boolean;\n appNo?: string;\n chatProps?: ChatConfig;\n debug?: boolean;\n /**\n * 是否展示点赞/点踩按钮\n * @default true\n */\n showFeedback?: boolean;\n /**\n * 点击对话中附件卡片的回调(非图片、非音视频文件)\n */\n onFileClick?: (file: FileItem) => void;\n /**\n * 自定义文件上传函数\n */\n uploadRequest?: UploadRequestFn;\n /**\n * 预设策略。默认 xgroup-adk,用于兼容众安信科现有 ADK 协议。\n * 传入 base 可获得更中立的组件默认行为。\n */\n preset?: ChatPresetInput;\n /**\n * 覆盖或补充当前 preset 的局部策略。\n */\n strategies?: ChatStrategies;\n}\n\n/**\n * XAdkProvider Props\n */\nexport interface XAdkProviderProps {\n /**\n * AI 服务基础地址\n */\n url?: string;\n /**\n * 认证 token\n */\n token: string;\n /**\n * 组件功能配置\n */\n config?: XAdkProviderConfig;\n /**\n * Provider 级预设策略,优先级高于 config.preset。\n */\n preset?: ChatPresetInput;\n /**\n * Provider 级策略覆盖,优先级高于 config.strategies。\n */\n strategies?: ChatStrategies;\n /**\n * Provider 唯一标识\n */\n providerId?: string;\n /**\n * 消息成功回调\n */\n onSuccess?: (success: any) => void;\n /**\n * 流式消息回调\n */\n onStream?: (data: Event) => void;\n /**\n * 错误回调\n */\n onError?: (err: any) => void;\n /**\n * 每条消息回调\n */\n onMessage?: (content: string, data: IMessage) => void;\n /**\n * 事件回调\n */\n onEvent?: (event: handleEvent) => void;\n /**\n * React 子元素 - 支持 Compound Components\n */\n children?: ReactNode;\n}\n\n// XAiSDKProps 继承 XAdkProviderProps\nexport interface XAdkSDKProps extends XAdkProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n"],"mappings":"AAgCA;AACA;AACA;AACA;AACA;AACA,WAAYA,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;;AAYrB;AACA;AACA;;AAOA;AACA;AACA;;AA6BA;AACA;AACA;;AAuBA;AACA;AACA;;AAuCA;AACA;AACA;;AAoDA"}
@@ -1,22 +1,38 @@
1
1
  import React from "react";
2
+ export interface UploadFileResult {
3
+ fileName?: string;
4
+ fileId?: string | number;
5
+ tempUrl?: string;
6
+ url?: string;
7
+ fileUrl?: string;
8
+ fileType?: string;
9
+ fileSize?: number;
10
+ mimeType?: string;
11
+ [key: string]: any;
12
+ }
13
+ export interface UploadSuccessResponse {
14
+ data?: UploadFileResult | UploadFileResult[];
15
+ [key: string]: any;
16
+ }
2
17
  interface uploadRequestProps {
3
18
  (options: {
4
19
  file: File;
5
20
  onProgress?: (e: {
6
21
  percent: number;
7
22
  }) => void;
8
- onSuccess?: (response: any) => void;
23
+ onSuccess?: (response: UploadFileResult | UploadFileResult[] | UploadSuccessResponse) => void;
9
24
  onError?: (error: Error) => void;
10
25
  }): Promise<void> | void;
11
26
  }
12
27
  export type UploadRequestFn = uploadRequestProps;
13
28
  export interface ServerFile {
14
29
  fileName: string;
15
- fileId: number;
30
+ fileId: string | number;
16
31
  tempUrl: string;
17
32
  type: string;
18
- size: number;
33
+ size?: number;
19
34
  mimeType: string;
35
+ raw?: UploadFileResult;
20
36
  }
21
37
  export interface LocalFile {
22
38
  id: string;
@@ -27,7 +43,7 @@ export interface LocalFile {
27
43
  type: string;
28
44
  progress: number;
29
45
  status: "pending" | "uploading" | "success" | "error";
30
- fileId?: number;
46
+ fileId?: string | number;
31
47
  tempUrl?: string;
32
48
  response?: any;
33
49
  errorMessage?: string;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/XAdkSender.ts"],"sourcesContent":["// types/XAdkSender.ts\nimport React from \"react\";\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (response: any) => 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: number;\n tempUrl: string;\n type: string;\n size: number;\n mimeType: string;\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?: 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 loading?: boolean;\n disabled?: boolean; // 只读状态\n onClear?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (data: { text: string; files: ServerFile[] }) => void;\n onStop?: () => void;\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"],"mappings":""}
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 loading?: boolean;\n disabled?: boolean; // 只读状态\n onClear?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (data: { text: string; files: ServerFile[] }) => void;\n onStop?: () => void;\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"],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import React, { type ReactNode } from "react";
2
- import { IMessage } from "./XAdkChatbot";
2
+ import { IMessage, RenderFunctionCall, ToolRenderKind, ChatStrategies } from "./";
3
3
  export interface XAdkThoughtChainProps {
4
4
  defaultOpen?: boolean;
5
5
  loading?: boolean;
@@ -8,6 +8,14 @@ export interface XAdkThoughtChainProps {
8
8
  showFnCallDetail?: boolean;
9
9
  onConfirm?: (fnCall: any, confirmed: boolean) => void;
10
10
  blink?: boolean;
11
+ /** 自定义工具调用渲染函数,返回 null 则使用默认渲染 */
12
+ renderFunctionCall?: RenderFunctionCall;
13
+ /**
14
+ * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver
15
+ */
16
+ toolKindResolver?: (name: string | undefined) => ToolRenderKind;
17
+ /** 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。 */
18
+ strategies?: ChatStrategies;
11
19
  }
12
20
  export interface TimelineItemProps {
13
21
  icon: React.ReactNode;
@@ -21,7 +29,7 @@ export interface ThoughtChainItemType {
21
29
  type: "tool" | "text";
22
30
  key: string;
23
31
  content: string;
24
- title?: React.ReactNode;
32
+ title?: ReactNode;
25
33
  collapsible?: boolean;
26
34
  msg?: IMessage;
27
35
  }
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/XAdkThoughtChain.ts"],"sourcesContent":["import React, { type ReactNode } from \"react\";\nimport { IMessage } from \"./XAdkChatbot\";\n\nexport interface XAdkThoughtChainProps {\n defaultOpen?: boolean;\n loading?: boolean;\n title?: ReactNode;\n items: ThoughtChainItemType[];\n showFnCallDetail?: boolean; // 是否可查看调用方法入参\n onConfirm?: (fnCall: any, confirmed: boolean) => void;\n blink?: boolean; // 加载中是否开启闪动效果,默认 false\n}\n\nexport interface TimelineItemProps {\n icon: React.ReactNode;\n title: React.ReactNode;\n children: React.ReactNode;\n collapsible?: boolean; // 是否可展示\n defaultOpen?: boolean; // 是否默认展开\n blink?: boolean; // 是否开启闪动效果\n}\n\nexport interface ThoughtChainItemType {\n type: \"tool\" | \"text\"; // 思维节点类型,目前仅支持 tool | text\n key: string; // 思维节点唯一标识符\n content: string; // 思维节点内容\n title?: React.ReactNode; // 思维节点标题\n collapsible?: boolean; // 思维节点是否可折叠\n msg?: IMessage; // 思维节点信息,tool 类型必传\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../src/types/XAdkThoughtChain.ts"],"sourcesContent":["import React, { type ReactNode } from \"react\";\nimport {\n IMessage,\n RenderFunctionCall,\n ToolRenderKind,\n ChatStrategies,\n} from \"@/types\";\n\nexport interface XAdkThoughtChainProps {\n defaultOpen?: boolean;\n loading?: boolean;\n title?: ReactNode;\n items: ThoughtChainItemType[];\n showFnCallDetail?: boolean;\n onConfirm?: (fnCall: any, confirmed: boolean) => void;\n blink?: boolean;\n /** 自定义工具调用渲染函数,返回 null 则使用默认渲染 */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /** 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。 */\n strategies?: ChatStrategies;\n}\n\nexport interface TimelineItemProps {\n icon: React.ReactNode;\n title: React.ReactNode;\n children: React.ReactNode;\n collapsible?: boolean;\n defaultOpen?: boolean;\n blink?: boolean;\n}\n\nexport interface ThoughtChainItemType {\n type: \"tool\" | \"text\";\n key: string;\n content: string;\n title?: ReactNode;\n collapsible?: boolean;\n msg?: IMessage;\n}\n"],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  import React, { ReactNode, RefObject, MouseEvent, ReactElement } from 'react';
2
2
  import type { PromptsItemType } from '@ant-design/x';
3
- import type { MessageType } from 'src/client/base';
3
+ import type { MessageType } from '../client/base';
4
4
  import type { UploadProps } from 'antd';
5
5
  import type { Messages } from './XAiMessage';
6
6
  import type { SendContent } from './XAiSender';
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/XAiChatbot.ts"],"sourcesContent":["import React, { ReactNode, RefObject, MouseEvent, ReactElement } from 'react';\nimport type { PromptsItemType } from '@ant-design/x';\nimport type { MessageType } from 'src/client/base';\nimport type { UploadProps } from 'antd';\nimport type { Messages } from './XAiMessage';\nimport type { SendContent } from './XAiSender';\n\n// 类型定义\nexport interface User {\n id: string;\n name: string;\n avatar?: string;\n }\n\nexport interface MessageProps {\n _id: string;\n type: string;\n content: Record<string, any>;\n createdAt: number;\n user: User;\n position?: 'left' | 'right' | 'center' | 'pop';\n hasTime?: boolean;\n status?: 'pending' | 'sent' | 'fail';\n }\n\nexport interface QuickReplyItemProps {\n name: string;\n code: string;\n icon?: string;\n img?: string;\n isNew?: boolean;\n isHighlight?: boolean;\n }\n\nexport interface ComposerHandle {\n setText: (text: string) => void;\n }\n\nexport interface ScrollToEndOptions {\n animated?: boolean;\n force?: boolean;\n }\n\nexport interface MessageContainerHandle {\n scrollToEnd: (options?: ScrollToEndOptions) => void;\n }\n\nexport interface NavbarProps {\n title?: string;\n subtitle?: string;\n avatar?: string;\n}\n\nexport interface ToolbarItemProps {\n id: string;\n icon: string;\n label: string;\n disabled?: boolean;\n }\n\nexport interface IconButtonProps {\n icon: string;\n onClick: () => void;\n disabled?: boolean;\n }\n\nexport interface RecorderProps {\n onStart?: () => void;\n onStop?: (audioBlob: Blob) => void;\n onError?: (error: Error) => void;\n }\n\nexport type InputType = 'text' | 'voice';\n\n// chatbot 会话字段\nexport interface ChatbotMessageFields {\n messages?: MessageType[];\n setMessages?: React.Dispatch<React.SetStateAction<MessageType[]>>;\n /** 发送消息回调 */\n onSend?: (content: SendContent) => void;\n /** 清空消息回调 */\n onClear?: () => void;\n /** 停止生成回调 */\n onStop?: () => void;\n}\n\nexport interface ActionItem {\n key?: string;\n icon?: React.ReactNode;\n render?: (index: number, msg: any) => React.ReactNode;\n tooltip?: string;\n}\n\n/**\n * AI 聊天机器人组件\n */\nexport interface XAiChatbotProps extends ChatbotMessageFields {\n /** 宽屏断点 */\n wideBreakpoint?: string;\n /** 导航栏展示 */\n navbarShow?: boolean;\n /** 导航栏配置 */\n navbar?: NavbarProps;\n /** 导航栏渲染函数,会覆盖 navbar */\n renderNavbar?: () => ReactNode;\n /** 是否加载中 */\n loading?: boolean;\n /** 加载更多文案 */\n loadMoreText?: string;\n /** 在消息列表上面的渲染函数 */\n renderBeforeMessageList?: () => ReactNode;\n /** 消息列表 ref */\n messagesRef?: RefObject<MessageContainerHandle>;\n /** 下拉加载回调 */\n onRefresh?: () => Promise<any>;\n /** 滚动消息列表回调 */\n onScroll?: (event: React.UIEvent<HTMLDivElement, UIEvent>) => void;\n /** 消息内容渲染函数 */\n renderMessageContent?: (message: MessageProps) => ReactNode;\n /** 快捷短语列表 */\n quickReplies?: QuickReplyItemProps[];\n /** 快捷短语是否可见 */\n quickRepliesVisible?: boolean;\n // /** 点击快速回复回调 */\n // onQuickReplyClick?: (item: QuickReplyItemProps, index: number) => void;\n // /** 快捷短语的滚动回调 */\n // onQuickReplyScroll?: () => void;\n // /** 快捷短语渲染函数,会覆盖 quickReplies */\n // renderQuickReplies?: () => ReactNode;\n /** 输入框初始内容 */\n text?: string;\n /** 空状态渲染插槽 */\n empty?: ReactElement;\n /** 空状态图片 */\n emptyStateImage?: string;\n /** 空状态文案 */\n emptyStateText?: string;\n /** 输入框占位符 */\n placeholder?: string;\n /** 输入方式 */\n inputType?: InputType;\n // /** 输入方式切换回调 */\n // onInputTypeChange?: (inputType: InputType) => void;\n /** 语音输入配置 */\n recorder?: RecorderProps;\n /** 工具栏配置 */\n toolbar?: ToolbarItemProps[];\n /** AI头像 */\n avatar?: ReactNode;\n /** 用户头像 */\n userAvatar?: ReactNode;\n /** 发送按钮 */\n sendBtn?: ReactNode;\n /** 是否展示清空按钮 */\n clearBtnShow? : boolean;\n /** 工具栏点击回调 */\n onToolbarClick?: (item: ToolbarItemProps, event: MouseEvent) => void;\n /** 工具栏打开/关闭回调 */\n onAccessoryToggle?: (isAccessoryOpen: boolean) => void;\n /** 输入框右边图标按钮配置 */\n rightAction?: IconButtonProps;\n /** 底部文案 */\n footerTips?: string;\n /** 帮助消息点击回调 */\n onSuggestMessageClick?: (item: PromptsItemType, id: string) => void;\n /** 消息左下角展示字段 */\n messageTooltip?: (msg: Messages) => React.ReactNode;\n /** 消息右下角功能区 */\n messageActions?: ActionItem[];\n /** 消息右下角功能区点击回调 */\n onMessagesActionsCallback?: (index: number, data: Messages) => void; // 点击回调\n /** 输入组件 */\n Composer?: React.ElementType;\n /** 是否展示输入框 */\n inputShow?: boolean;\n /** 多个chatbot唯一键 */\n providerId?: string;\n /** 消息顶部 */\n messageTop?: ReactNode;\n enableUpload?: boolean;\n uploadRequest?: UploadProps['customRequest'];\n }\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../src/types/XAiChatbot.ts"],"sourcesContent":["import React, { ReactNode, RefObject, MouseEvent, ReactElement } from 'react';\nimport type { PromptsItemType } from '@ant-design/x';\nimport type { MessageType } from '../client/base';\nimport type { UploadProps } from 'antd';\nimport type { Messages } from './XAiMessage';\nimport type { SendContent } from './XAiSender';\n\n// 类型定义\nexport interface User {\n id: string;\n name: string;\n avatar?: string;\n }\n\nexport interface MessageProps {\n _id: string;\n type: string;\n content: Record<string, any>;\n createdAt: number;\n user: User;\n position?: 'left' | 'right' | 'center' | 'pop';\n hasTime?: boolean;\n status?: 'pending' | 'sent' | 'fail';\n }\n\nexport interface QuickReplyItemProps {\n name: string;\n code: string;\n icon?: string;\n img?: string;\n isNew?: boolean;\n isHighlight?: boolean;\n }\n\nexport interface ComposerHandle {\n setText: (text: string) => void;\n }\n\nexport interface ScrollToEndOptions {\n animated?: boolean;\n force?: boolean;\n }\n\nexport interface MessageContainerHandle {\n scrollToEnd: (options?: ScrollToEndOptions) => void;\n }\n\nexport interface NavbarProps {\n title?: string;\n subtitle?: string;\n avatar?: string;\n}\n\nexport interface ToolbarItemProps {\n id: string;\n icon: string;\n label: string;\n disabled?: boolean;\n }\n\nexport interface IconButtonProps {\n icon: string;\n onClick: () => void;\n disabled?: boolean;\n }\n\nexport interface RecorderProps {\n onStart?: () => void;\n onStop?: (audioBlob: Blob) => void;\n onError?: (error: Error) => void;\n }\n\nexport type InputType = 'text' | 'voice';\n\n// chatbot 会话字段\nexport interface ChatbotMessageFields {\n messages?: MessageType[];\n setMessages?: React.Dispatch<React.SetStateAction<MessageType[]>>;\n /** 发送消息回调 */\n onSend?: (content: SendContent) => void;\n /** 清空消息回调 */\n onClear?: () => void;\n /** 停止生成回调 */\n onStop?: () => void;\n}\n\nexport interface ActionItem {\n key?: string;\n icon?: React.ReactNode;\n render?: (index: number, msg: any) => React.ReactNode;\n tooltip?: string;\n}\n\n/**\n * AI 聊天机器人组件\n */\nexport interface XAiChatbotProps extends ChatbotMessageFields {\n /** 宽屏断点 */\n wideBreakpoint?: string;\n /** 导航栏展示 */\n navbarShow?: boolean;\n /** 导航栏配置 */\n navbar?: NavbarProps;\n /** 导航栏渲染函数,会覆盖 navbar */\n renderNavbar?: () => ReactNode;\n /** 是否加载中 */\n loading?: boolean;\n /** 加载更多文案 */\n loadMoreText?: string;\n /** 在消息列表上面的渲染函数 */\n renderBeforeMessageList?: () => ReactNode;\n /** 消息列表 ref */\n messagesRef?: RefObject<MessageContainerHandle>;\n /** 下拉加载回调 */\n onRefresh?: () => Promise<any>;\n /** 滚动消息列表回调 */\n onScroll?: (event: React.UIEvent<HTMLDivElement, UIEvent>) => void;\n /** 消息内容渲染函数 */\n renderMessageContent?: (message: MessageProps) => ReactNode;\n /** 快捷短语列表 */\n quickReplies?: QuickReplyItemProps[];\n /** 快捷短语是否可见 */\n quickRepliesVisible?: boolean;\n // /** 点击快速回复回调 */\n // onQuickReplyClick?: (item: QuickReplyItemProps, index: number) => void;\n // /** 快捷短语的滚动回调 */\n // onQuickReplyScroll?: () => void;\n // /** 快捷短语渲染函数,会覆盖 quickReplies */\n // renderQuickReplies?: () => ReactNode;\n /** 输入框初始内容 */\n text?: string;\n /** 空状态渲染插槽 */\n empty?: ReactElement;\n /** 空状态图片 */\n emptyStateImage?: string;\n /** 空状态文案 */\n emptyStateText?: string;\n /** 输入框占位符 */\n placeholder?: string;\n /** 输入方式 */\n inputType?: InputType;\n // /** 输入方式切换回调 */\n // onInputTypeChange?: (inputType: InputType) => void;\n /** 语音输入配置 */\n recorder?: RecorderProps;\n /** 工具栏配置 */\n toolbar?: ToolbarItemProps[];\n /** AI头像 */\n avatar?: ReactNode;\n /** 用户头像 */\n userAvatar?: ReactNode;\n /** 发送按钮 */\n sendBtn?: ReactNode;\n /** 是否展示清空按钮 */\n clearBtnShow? : boolean;\n /** 工具栏点击回调 */\n onToolbarClick?: (item: ToolbarItemProps, event: MouseEvent) => void;\n /** 工具栏打开/关闭回调 */\n onAccessoryToggle?: (isAccessoryOpen: boolean) => void;\n /** 输入框右边图标按钮配置 */\n rightAction?: IconButtonProps;\n /** 底部文案 */\n footerTips?: string;\n /** 帮助消息点击回调 */\n onSuggestMessageClick?: (item: PromptsItemType, id: string) => void;\n /** 消息左下角展示字段 */\n messageTooltip?: (msg: Messages) => React.ReactNode;\n /** 消息右下角功能区 */\n messageActions?: ActionItem[];\n /** 消息右下角功能区点击回调 */\n onMessagesActionsCallback?: (index: number, data: Messages) => void; // 点击回调\n /** 输入组件 */\n Composer?: React.ElementType;\n /** 是否展示输入框 */\n inputShow?: boolean;\n /** 多个chatbot唯一键 */\n providerId?: string;\n /** 消息顶部 */\n messageTop?: ReactNode;\n enableUpload?: boolean;\n uploadRequest?: UploadProps['customRequest'];\n }\n"],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import React, { ReactNode } from 'react';
2
- import { AiClient } from 'src/client/base';
2
+ import { AiClient } from '../client/base';
3
3
  import type { ChatbotMessageFields } from './XAiChatbot';
4
4
  import type { Messages, SendContent, SessionData, ChatConfig, ThemeType } from "./";
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["React","ErrorCodeNum","ErrorCode","ErrorCodeMap","client_50017","code","APP_NOT_ENABLE","message","client_50054","API_ERROR","SuccessCode","XAiContext","createContext"],"sources":["../../../src/types/XAiProvider.ts"],"sourcesContent":["// context/ProviderContext.ts\nimport React, { ReactNode } from 'react';\nimport { AiClient } from 'src/client/base';\nimport type { ChatbotMessageFields } from './XAiChatbot';\nimport type { Messages, SendContent, SessionData, ChatConfig, ThemeType } from '@/types';\n\n/**\n * 错误码枚举(数字格式)\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCodeNum {\n /** 应用下架 */\n APP_NOT_ENABLE = 'client_50017',\n /** 应用删除 */\n APP_DELETED = 'client_50017',\n /** 无该应用 */\n APP_NOT_FOUND = 'client_59999',\n /** 接口报错 */\n API_ERROR = 'client_50054',\n}\n\n/**\n * 错误码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCode {\n /** 应用未启用 */\n APP_NOT_ENABLE = 'APP_NOT_ENABLE',\n /** 应用已删除 */\n APP_DELETED = 'APP_DELETED',\n /** 应用未找到 */\n APP_NOT_FOUND = 'APP_NOT_FOUND',\n /** API 错误 */\n API_ERROR = 'API_ERROR',\n}\n\n/**\n * 错误码映射表\n * @type {Record<string, {code: ErrorCode, message: string}>}\n * @version 1.0.0\n */\nexport const ErrorCodeMap = {\n client_50017: {\n code: ErrorCode.APP_NOT_ENABLE,\n message: '该应用已删除或已下架',\n },\n client_50054: {\n code: ErrorCode.API_ERROR,\n message: '应用服务端出错',\n },\n};\n\n/**\n * 成功状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum SuccessCode {\n /** 应用配置初始化成功 */\n APP_CONFIG_INIT_SUCCESS = 'APP_CONFIG_INIT_SUCCESS',\n /** 应用消息初始化成功 */\n APP_MESSAGES_INIT_SUCCESS = 'APP_MESSAGES_INIT_SUCCESS',\n}\n\n/**\n * 错误信息接口\n * @interface Error\n * @version 1.0.0\n */\nexport interface Error {\n /** 错误码 */\n code: ErrorCode;\n /** 错误信息 */\n message: string;\n}\n\n/**\n * 成功信息接口\n * @interface Success\n * @version 1.0.0\n */\nexport interface Success {\n /** 成功状态码 */\n code: SuccessCode;\n /** 成功信息 */\n message: string;\n /** 成功数据 */\n data?: any;\n}\n\n/**\n * XAiProvider 操作句柄接口\n * @interface XAiProviderHandle\n * @version 1.0.0\n */\nexport interface XAiProviderHandle {\n /**\n * 发送聊天消息\n * @param content - 消息内容\n * @type {(content: string) => void}\n * @version 1.0.0\n */\n chat: (content: SendContent) => void;\n\n /**\n * 停止聊天\n * @type {() => void}\n * @version 1.0.0\n */\n stopChat: () => void;\n\n /**\n * 重新发送聊天\n * @type {() => void}\n * @version 1.0.0\n */\n reChat: () => void;\n\n /**\n * 获取应用信息\n * @returns {any} 应用信息对象\n * @type {() => any}\n * @version 1.0.0\n */\n getAppInfo: () => any;\n\n /**\n * 获取消息列表\n * @returns {Messages[]} 消息数组\n * @type {() => Messages[]}\n * @version 1.0.0\n */\n getMessages: () => Messages[];\n\n /**\n * 获取会话列表\n * @returns {}\n */\n getSessions: () => SessionData[];\n\n /**\n * 重新设置当前会话\n * @param id - 会话ID\n * @type {(id: string) => void}\n * @version 1.0.0\n */\n setCurrentSession: (id: string) => void;\n}\n\nexport interface sessionConfig {\n /**\n * 是否展示会话列表\n * @type {boolean}\n * @default false\n */\n showSessionList?: boolean;\n}\n\n\n/**\n * XAiProvider 配置接口\n * @interface XAiProviderConfig\n * @version 1.0.0\n */\nexport interface XAiProviderConfig {\n /**\n * 应用唯一编号\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n appNo?: string;\n\n /**\n * 会话配置\n * @type {sessionConfig}\n */\n session?: sessionConfig;\n\n /**\n * 对话框配置\n * @type {ChatConfig}\n */\n chatProps?: ChatConfig;\n\n /**\n * 是否启用调试模式\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n debug?: boolean;\n}\n\n/**\n * XAiProvider 组件属性接口\n * @interface XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiProviderProps {\n /**\n * AI 服务地址\n * @type {string}\n * @version 1.0.0\n */\n url: string;\n\n /**\n * 认证 token\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n\n /**\n * 配置信息\n * @type {XAiProviderConfig}\n * @default undefined\n * @version 1.0.0\n */\n config?: XAiProviderConfig;\n\n /**\n * Provider 唯一标识,用于区分多个 Provider 实例\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n providerId?: string;\n\n /**\n * Token 刷新回调\n * @type {() => Promise<string>}\n * @default undefined\n * @version 1.0.0\n */\n onRefreshToken?: () => Promise<string>;\n\n /**\n * 应用无法正常渲染回调\n * @type {(error: Error) => void}\n * @default undefined\n * @version 1.0.0\n */\n onError?: (error: Error) => void;\n\n /**\n * 应用正常渲染回调\n * @type {(success: Success) => void}\n * @default undefined\n * @version 1.0.0\n */\n onSuccess?: (success: Success) => void;\n\n /**\n * 消息返回回调\n * @type {(data: Messages) => void}\n * @default undefined\n * @version 1.0.0\n */\n onMessage?: (content: string, data: Messages) => void;\n\n /**\n * 子组件\n * @type {ReactNode}\n * @version 1.0.0\n */\n children: ReactNode;\n}\n\n/**\n * XAiSDK 组件属性接口\n * @interface XAiSDKProps\n * @extends XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiSDKProps extends XAiProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n\n/**\n * XAi 上下文类型接口\n * @interface XAiContextType\n * @extends Required<ChatbotMessageFields>\n * @version 1.0.0\n */\nexport interface XAiContextType extends Required<ChatbotMessageFields> {\n /**\n * AI 客户端实例\n * @type {AiClient | null}\n * @default null\n * @version 1.0.0\n */\n client: AiClient | null;\n\n /**\n * 认证令牌\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n\n /**\n * 加载状态\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n loading: boolean;\n\n /**\n * 错误信息\n * @type {string | null}\n * @default null\n * @version 1.0.0\n */\n error: string | null;\n}\n\n/**\n * XAi 上下文对象\n * @type {React.Context<XAiContextType | null>}\n * @version 1.0.0\n */\nexport const XAiContext = React.createContext<XAiContextType | null>(null);\n"],"mappings":"AAAA;AACA,OAAOA,KAAK,MAAqB,OAAO;AAKxC;AACA;AACA;AACA;AACA;AACA,WAAYC,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;;AAWxB;AACA;AACA;AACA;AACA;AACA,WAAYC,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;;AAWrB;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,YAAY,GAAG;EAC1BC,YAAY,EAAE;IACZC,IAAI,EAAEH,SAAS,CAACI,cAAc;IAC9BC,OAAO,EAAE;EACX,CAAC;EACDC,YAAY,EAAE;IACZH,IAAI,EAAEH,SAAS,CAACO,SAAS;IACzBF,OAAO,EAAE;EACX;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAYG,WAAW,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;;AAOvB;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;;AAiEA;AACA;AACA;AACA;AACA;;AA+BA;AACA;AACA;AACA;AACA;;AAwEA;AACA;AACA;AACA;AACA;AACA;;AA6BA;AACA;AACA;AACA;AACA;AACA;;AAkCA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,UAAU,gBAAGX,KAAK,CAACY,aAAa,CAAwB,IAAI,CAAC"}
1
+ {"version":3,"names":["React","ErrorCodeNum","ErrorCode","ErrorCodeMap","client_50017","code","APP_NOT_ENABLE","message","client_50054","API_ERROR","SuccessCode","XAiContext","createContext"],"sources":["../../../src/types/XAiProvider.ts"],"sourcesContent":["// context/ProviderContext.ts\nimport React, { ReactNode } from 'react';\nimport { AiClient } from '../client/base';\nimport type { ChatbotMessageFields } from './XAiChatbot';\nimport type { Messages, SendContent, SessionData, ChatConfig, ThemeType } from '@/types';\n\n/**\n * 错误码枚举(数字格式)\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCodeNum {\n /** 应用下架 */\n APP_NOT_ENABLE = 'client_50017',\n /** 应用删除 */\n APP_DELETED = 'client_50017',\n /** 无该应用 */\n APP_NOT_FOUND = 'client_59999',\n /** 接口报错 */\n API_ERROR = 'client_50054',\n}\n\n/**\n * 错误码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCode {\n /** 应用未启用 */\n APP_NOT_ENABLE = 'APP_NOT_ENABLE',\n /** 应用已删除 */\n APP_DELETED = 'APP_DELETED',\n /** 应用未找到 */\n APP_NOT_FOUND = 'APP_NOT_FOUND',\n /** API 错误 */\n API_ERROR = 'API_ERROR',\n}\n\n/**\n * 错误码映射表\n * @type {Record<string, {code: ErrorCode, message: string}>}\n * @version 1.0.0\n */\nexport const ErrorCodeMap = {\n client_50017: {\n code: ErrorCode.APP_NOT_ENABLE,\n message: '该应用已删除或已下架',\n },\n client_50054: {\n code: ErrorCode.API_ERROR,\n message: '应用服务端出错',\n },\n};\n\n/**\n * 成功状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum SuccessCode {\n /** 应用配置初始化成功 */\n APP_CONFIG_INIT_SUCCESS = 'APP_CONFIG_INIT_SUCCESS',\n /** 应用消息初始化成功 */\n APP_MESSAGES_INIT_SUCCESS = 'APP_MESSAGES_INIT_SUCCESS',\n}\n\n/**\n * 错误信息接口\n * @interface Error\n * @version 1.0.0\n */\nexport interface Error {\n /** 错误码 */\n code: ErrorCode;\n /** 错误信息 */\n message: string;\n}\n\n/**\n * 成功信息接口\n * @interface Success\n * @version 1.0.0\n */\nexport interface Success {\n /** 成功状态码 */\n code: SuccessCode;\n /** 成功信息 */\n message: string;\n /** 成功数据 */\n data?: any;\n}\n\n/**\n * XAiProvider 操作句柄接口\n * @interface XAiProviderHandle\n * @version 1.0.0\n */\nexport interface XAiProviderHandle {\n /**\n * 发送聊天消息\n * @param content - 消息内容\n * @type {(content: string) => void}\n * @version 1.0.0\n */\n chat: (content: SendContent) => void;\n\n /**\n * 停止聊天\n * @type {() => void}\n * @version 1.0.0\n */\n stopChat: () => void;\n\n /**\n * 重新发送聊天\n * @type {() => void}\n * @version 1.0.0\n */\n reChat: () => void;\n\n /**\n * 获取应用信息\n * @returns {any} 应用信息对象\n * @type {() => any}\n * @version 1.0.0\n */\n getAppInfo: () => any;\n\n /**\n * 获取消息列表\n * @returns {Messages[]} 消息数组\n * @type {() => Messages[]}\n * @version 1.0.0\n */\n getMessages: () => Messages[];\n\n /**\n * 获取会话列表\n * @returns {}\n */\n getSessions: () => SessionData[];\n\n /**\n * 重新设置当前会话\n * @param id - 会话ID\n * @type {(id: string) => void}\n * @version 1.0.0\n */\n setCurrentSession: (id: string) => void;\n}\n\nexport interface sessionConfig {\n /**\n * 是否展示会话列表\n * @type {boolean}\n * @default false\n */\n showSessionList?: boolean;\n}\n\n\n/**\n * XAiProvider 配置接口\n * @interface XAiProviderConfig\n * @version 1.0.0\n */\nexport interface XAiProviderConfig {\n /**\n * 应用唯一编号\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n appNo?: string;\n\n /**\n * 会话配置\n * @type {sessionConfig}\n */\n session?: sessionConfig;\n\n /**\n * 对话框配置\n * @type {ChatConfig}\n */\n chatProps?: ChatConfig;\n\n /**\n * 是否启用调试模式\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n debug?: boolean;\n}\n\n/**\n * XAiProvider 组件属性接口\n * @interface XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiProviderProps {\n /**\n * AI 服务地址\n * @type {string}\n * @version 1.0.0\n */\n url: string;\n\n /**\n * 认证 token\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n\n /**\n * 配置信息\n * @type {XAiProviderConfig}\n * @default undefined\n * @version 1.0.0\n */\n config?: XAiProviderConfig;\n\n /**\n * Provider 唯一标识,用于区分多个 Provider 实例\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n providerId?: string;\n\n /**\n * Token 刷新回调\n * @type {() => Promise<string>}\n * @default undefined\n * @version 1.0.0\n */\n onRefreshToken?: () => Promise<string>;\n\n /**\n * 应用无法正常渲染回调\n * @type {(error: Error) => void}\n * @default undefined\n * @version 1.0.0\n */\n onError?: (error: Error) => void;\n\n /**\n * 应用正常渲染回调\n * @type {(success: Success) => void}\n * @default undefined\n * @version 1.0.0\n */\n onSuccess?: (success: Success) => void;\n\n /**\n * 消息返回回调\n * @type {(data: Messages) => void}\n * @default undefined\n * @version 1.0.0\n */\n onMessage?: (content: string, data: Messages) => void;\n\n /**\n * 子组件\n * @type {ReactNode}\n * @version 1.0.0\n */\n children: ReactNode;\n}\n\n/**\n * XAiSDK 组件属性接口\n * @interface XAiSDKProps\n * @extends XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiSDKProps extends XAiProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n\n/**\n * XAi 上下文类型接口\n * @interface XAiContextType\n * @extends Required<ChatbotMessageFields>\n * @version 1.0.0\n */\nexport interface XAiContextType extends Required<ChatbotMessageFields> {\n /**\n * AI 客户端实例\n * @type {AiClient | null}\n * @default null\n * @version 1.0.0\n */\n client: AiClient | null;\n\n /**\n * 认证令牌\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n\n /**\n * 加载状态\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n loading: boolean;\n\n /**\n * 错误信息\n * @type {string | null}\n * @default null\n * @version 1.0.0\n */\n error: string | null;\n}\n\n/**\n * XAi 上下文对象\n * @type {React.Context<XAiContextType | null>}\n * @version 1.0.0\n */\nexport const XAiContext = React.createContext<XAiContextType | null>(null);\n"],"mappings":"AAAA;AACA,OAAOA,KAAK,MAAqB,OAAO;AAKxC;AACA;AACA;AACA;AACA;AACA,WAAYC,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;;AAWxB;AACA;AACA;AACA;AACA;AACA,WAAYC,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;;AAWrB;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,YAAY,GAAG;EAC1BC,YAAY,EAAE;IACZC,IAAI,EAAEH,SAAS,CAACI,cAAc;IAC9BC,OAAO,EAAE;EACX,CAAC;EACDC,YAAY,EAAE;IACZH,IAAI,EAAEH,SAAS,CAACO,SAAS;IACzBF,OAAO,EAAE;EACX;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,WAAYG,WAAW,0BAAXA,WAAW;EAAXA,WAAW;EAAXA,WAAW;EAAA,OAAXA,WAAW;AAAA;;AAOvB;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;;AAiEA;AACA;AACA;AACA;AACA;;AA+BA;AACA;AACA;AACA;AACA;;AAwEA;AACA;AACA;AACA;AACA;AACA;;AA6BA;AACA;AACA;AACA;AACA;AACA;;AAkCA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMC,UAAU,gBAAGX,KAAK,CAACY,aAAa,CAAwB,IAAI,CAAC"}
@@ -9,3 +9,5 @@ export * from "./XAdkSender";
9
9
  export * from "./XAdkThoughtChain";
10
10
  export * from "./FileGallery";
11
11
  export * from "./common";
12
+ export * from "./FunctionCallRender";
13
+ export * from "./ChatStrategies";
@@ -9,4 +9,6 @@ export * from "./XAdkSender";
9
9
  export * from "./XAdkThoughtChain";
10
10
  export * from "./FileGallery";
11
11
  export * from "./common";
12
+ export * from "./FunctionCallRender";
13
+ export * from "./ChatStrategies";
12
14
  //# 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\";\n"],"mappings":"AAAA;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\";\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -1,4 +1,4 @@
1
- import { MessageType } from 'src/client/base';
1
+ import { MessageType } from '../client/base';
2
2
  export interface ProviderState {
3
3
  client: any;
4
4
  messages: MessageType[];
@@ -1 +1 @@
1
- {"version":3,"names":["ProviderManager","_classCallCheck","_defineProperty","Map","_createClass","key","value","register","providerId","data","providers","set","_objectSpread","messages","unregister","delete","getProvider","get","addMessage","message","provider","push","clearMessages","getProviderIds","Array","from","keys","providerManager","useProviderManager"],"sources":["../../../src/utils/providerManager.ts"],"sourcesContent":["import { MessageType } from 'src/client/base';\nexport interface ProviderState {\n client: any;\n messages: MessageType[];\n token: string;\n url: string;\n}\n// Provider 实例管理\nclass ProviderManager {\n private providers = new Map<string, ProviderState>();\n\n // 注册 Provider\n register(providerId: string, data: {\n client: any;\n token: string;\n url: string;\n }) {\n this.providers.set(providerId, {\n ...data,\n messages: [],\n });\n }\n\n // 注销 Provider\n unregister(providerId: string) {\n this.providers.delete(providerId);\n }\n\n // 获取 Provider 数据\n getProvider(providerId: string): ProviderState | undefined {\n return this.providers.get(providerId);\n }\n\n // 添加消息到指定 Provider\n addMessage(providerId: string, message: MessageType) {\n const provider = this.providers.get(providerId);\n if (provider) {\n provider.messages.push(message);\n }\n }\n\n // 清空指定 Provider 的消息\n clearMessages(providerId: string) {\n const provider = this.providers.get(providerId);\n if (provider) {\n provider.messages = [];\n }\n }\n\n // 获取所有 Provider ID\n getProviderIds() {\n return Array.from(this.providers.keys());\n }\n}\n\n// 全局单例\nexport const providerManager = new ProviderManager();\n\n// Hook 用于在组件中使用\nexport const useProviderManager = () => {\n return providerManager;\n};\n"],"mappings":";;;;AAOA;AAAA,IACMA,eAAe;EAAA,SAAAA,gBAAA;IAAAC,eAAA,OAAAD,eAAA;IAAAE,eAAA,oBACC,IAAIC,GAAG,CAAwB,CAAC;EAAA;EAAAC,YAAA,CAAAJ,eAAA;IAAAK,GAAA;IAAAC,KAAA;IAEpD;IACA,SAAAC,SAASC,UAAkB,EAAEC,IAI5B,EAAE;MACD,IAAI,CAACC,SAAS,CAACC,GAAG,CAACH,UAAU,EAAAI,aAAA,CAAAA,aAAA,KACxBH,IAAI;QACPI,QAAQ,EAAE;MAAE,EACb,CAAC;IACJ;;IAEA;EAAA;IAAAR,GAAA;IAAAC,KAAA,EACA,SAAAQ,WAAWN,UAAkB,EAAE;MAC7B,IAAI,CAACE,SAAS,CAACK,MAAM,CAACP,UAAU,CAAC;IACnC;;IAEA;EAAA;IAAAH,GAAA;IAAAC,KAAA,EACA,SAAAU,YAAYR,UAAkB,EAA6B;MACzD,OAAO,IAAI,CAACE,SAAS,CAACO,GAAG,CAACT,UAAU,CAAC;IACvC;;IAEA;EAAA;IAAAH,GAAA;IAAAC,KAAA,EACA,SAAAY,WAAWV,UAAkB,EAAEW,OAAoB,EAAE;MACnD,IAAMC,QAAQ,GAAG,IAAI,CAACV,SAAS,CAACO,GAAG,CAACT,UAAU,CAAC;MAC/C,IAAIY,QAAQ,EAAE;QACZA,QAAQ,CAACP,QAAQ,CAACQ,IAAI,CAACF,OAAO,CAAC;MACjC;IACF;;IAEA;EAAA;IAAAd,GAAA;IAAAC,KAAA,EACA,SAAAgB,cAAcd,UAAkB,EAAE;MAChC,IAAMY,QAAQ,GAAG,IAAI,CAACV,SAAS,CAACO,GAAG,CAACT,UAAU,CAAC;MAC/C,IAAIY,QAAQ,EAAE;QACZA,QAAQ,CAACP,QAAQ,GAAG,EAAE;MACxB;IACF;;IAEA;EAAA;IAAAR,GAAA;IAAAC,KAAA,EACA,SAAAiB,eAAA,EAAiB;MACf,OAAOC,KAAK,CAACC,IAAI,CAAC,IAAI,CAACf,SAAS,CAACgB,IAAI,CAAC,CAAC,CAAC;IAC1C;EAAC;EAAA,OAAA1B,eAAA;AAAA,KAGH;AACA,OAAO,IAAM2B,eAAe,GAAG,IAAI3B,eAAe,CAAC,CAAC;;AAEpD;AACA,OAAO,IAAM4B,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAA,EAAS;EACtC,OAAOD,eAAe;AACxB,CAAC"}
1
+ {"version":3,"names":["ProviderManager","_classCallCheck","_defineProperty","Map","_createClass","key","value","register","providerId","data","providers","set","_objectSpread","messages","unregister","delete","getProvider","get","addMessage","message","provider","push","clearMessages","getProviderIds","Array","from","keys","providerManager","useProviderManager"],"sources":["../../../src/utils/providerManager.ts"],"sourcesContent":["import { MessageType } from '../client/base';\nexport interface ProviderState {\n client: any;\n messages: MessageType[];\n token: string;\n url: string;\n}\n// Provider 实例管理\nclass ProviderManager {\n private providers = new Map<string, ProviderState>();\n\n // 注册 Provider\n register(providerId: string, data: {\n client: any;\n token: string;\n url: string;\n }) {\n this.providers.set(providerId, {\n ...data,\n messages: [],\n });\n }\n\n // 注销 Provider\n unregister(providerId: string) {\n this.providers.delete(providerId);\n }\n\n // 获取 Provider 数据\n getProvider(providerId: string): ProviderState | undefined {\n return this.providers.get(providerId);\n }\n\n // 添加消息到指定 Provider\n addMessage(providerId: string, message: MessageType) {\n const provider = this.providers.get(providerId);\n if (provider) {\n provider.messages.push(message);\n }\n }\n\n // 清空指定 Provider 的消息\n clearMessages(providerId: string) {\n const provider = this.providers.get(providerId);\n if (provider) {\n provider.messages = [];\n }\n }\n\n // 获取所有 Provider ID\n getProviderIds() {\n return Array.from(this.providers.keys());\n }\n}\n\n// 全局单例\nexport const providerManager = new ProviderManager();\n\n// Hook 用于在组件中使用\nexport const useProviderManager = () => {\n return providerManager;\n};\n"],"mappings":";;;;AAOA;AAAA,IACMA,eAAe;EAAA,SAAAA,gBAAA;IAAAC,eAAA,OAAAD,eAAA;IAAAE,eAAA,oBACC,IAAIC,GAAG,CAAwB,CAAC;EAAA;EAAAC,YAAA,CAAAJ,eAAA;IAAAK,GAAA;IAAAC,KAAA;IAEpD;IACA,SAAAC,SAASC,UAAkB,EAAEC,IAI5B,EAAE;MACD,IAAI,CAACC,SAAS,CAACC,GAAG,CAACH,UAAU,EAAAI,aAAA,CAAAA,aAAA,KACxBH,IAAI;QACPI,QAAQ,EAAE;MAAE,EACb,CAAC;IACJ;;IAEA;EAAA;IAAAR,GAAA;IAAAC,KAAA,EACA,SAAAQ,WAAWN,UAAkB,EAAE;MAC7B,IAAI,CAACE,SAAS,CAACK,MAAM,CAACP,UAAU,CAAC;IACnC;;IAEA;EAAA;IAAAH,GAAA;IAAAC,KAAA,EACA,SAAAU,YAAYR,UAAkB,EAA6B;MACzD,OAAO,IAAI,CAACE,SAAS,CAACO,GAAG,CAACT,UAAU,CAAC;IACvC;;IAEA;EAAA;IAAAH,GAAA;IAAAC,KAAA,EACA,SAAAY,WAAWV,UAAkB,EAAEW,OAAoB,EAAE;MACnD,IAAMC,QAAQ,GAAG,IAAI,CAACV,SAAS,CAACO,GAAG,CAACT,UAAU,CAAC;MAC/C,IAAIY,QAAQ,EAAE;QACZA,QAAQ,CAACP,QAAQ,CAACQ,IAAI,CAACF,OAAO,CAAC;MACjC;IACF;;IAEA;EAAA;IAAAd,GAAA;IAAAC,KAAA,EACA,SAAAgB,cAAcd,UAAkB,EAAE;MAChC,IAAMY,QAAQ,GAAG,IAAI,CAACV,SAAS,CAACO,GAAG,CAACT,UAAU,CAAC;MAC/C,IAAIY,QAAQ,EAAE;QACZA,QAAQ,CAACP,QAAQ,GAAG,EAAE;MACxB;IACF;;IAEA;EAAA;IAAAR,GAAA;IAAAC,KAAA,EACA,SAAAiB,eAAA,EAAiB;MACf,OAAOC,KAAK,CAACC,IAAI,CAAC,IAAI,CAACf,SAAS,CAACgB,IAAI,CAAC,CAAC,CAAC;IAC1C;EAAC;EAAA,OAAA1B,eAAA;AAAA,KAGH;AACA,OAAO,IAAM2B,eAAe,GAAG,IAAI3B,eAAe,CAAC,CAAC;;AAEpD;AACA,OAAO,IAAM4B,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAA,EAAS;EACtC,OAAOD,eAAe;AACxB,CAAC"}