@ai-group/chat-sdk 0.2.5 → 0.2.8
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.
- package/README.md +93 -214
- package/dist/cjs/assets/arrow-down.png +0 -0
- package/dist/cjs/assets/arrow-up.png +0 -0
- package/dist/cjs/assets/chatKnowledge.png +0 -0
- package/dist/cjs/assets/completed-black.png +0 -0
- package/dist/cjs/assets/completed.png +0 -0
- package/dist/cjs/assets/document-black.png +0 -0
- package/dist/cjs/assets/document.png +0 -0
- package/dist/cjs/assets/document.svg +16 -0
- package/dist/cjs/assets/empty.png +0 -0
- package/dist/cjs/assets/group.png +0 -0
- package/dist/cjs/assets/qa-black.png +0 -0
- package/dist/cjs/assets/qa.png +0 -0
- package/dist/cjs/assets/skillNo-black.png +0 -0
- package/dist/cjs/assets/skillNo.png +0 -0
- package/dist/cjs/assets/tools-black.png +0 -0
- package/dist/cjs/assets/tools.png +0 -0
- package/dist/cjs/assets/user.png +0 -0
- package/dist/cjs/client/base.d.ts +9 -0
- package/dist/cjs/client/base.js +18 -0
- package/dist/cjs/client/base.js.map +7 -0
- package/dist/cjs/client/restClient.d.ts +0 -0
- package/dist/cjs/client/restClient.js +1 -0
- package/dist/cjs/client/restClient.js.map +7 -0
- package/dist/cjs/client/wsClient.d.ts +0 -0
- package/dist/cjs/client/wsClient.js +1 -0
- package/dist/cjs/client/wsClient.js.map +7 -0
- package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.d.ts +10 -0
- package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js +484 -0
- package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js.map +7 -0
- package/dist/cjs/components/XAiChatbot/index.d.ts +12 -0
- package/dist/cjs/components/XAiChatbot/index.js +365 -0
- package/dist/cjs/components/XAiChatbot/index.js.map +7 -0
- package/dist/cjs/components/XAiChatbot/styles.d.ts +72 -0
- package/dist/cjs/components/XAiChatbot/styles.js +426 -0
- package/dist/cjs/components/XAiChatbot/styles.js.map +7 -0
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.d.ts +7 -0
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +127 -0
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +7 -0
- package/dist/cjs/components/XAiProvider/index.d.ts +4 -0
- package/dist/cjs/components/XAiProvider/index.js +115 -0
- package/dist/cjs/components/XAiProvider/index.js.map +7 -0
- package/dist/cjs/components/XAiSDK.d.ts +10 -0
- package/dist/cjs/components/XAiSDK.js +53 -0
- package/dist/cjs/components/XAiSDK.js.map +7 -0
- package/dist/cjs/components/XAiWebSDKWrapper.d.ts +9 -0
- package/dist/cjs/components/XAiWebSDKWrapper.js +70 -0
- package/dist/cjs/components/XAiWebSDKWrapper.js.map +7 -0
- package/dist/cjs/context/AiProviderContext.d.ts +12 -0
- package/dist/cjs/context/AiProviderContext.js +74 -0
- package/dist/cjs/context/AiProviderContext.js.map +7 -0
- package/dist/cjs/context/ThemeContext.d.ts +20 -0
- package/dist/cjs/context/ThemeContext.js +37 -0
- package/dist/cjs/context/ThemeContext.js.map +7 -0
- package/dist/cjs/hooks/useAgentGenerator.d.ts +72 -0
- package/dist/cjs/hooks/useAgentGenerator.js +487 -0
- package/dist/cjs/hooks/useAgentGenerator.js.map +7 -0
- package/dist/cjs/hooks/useEventStreamRequest.d.ts +30 -0
- package/dist/cjs/hooks/useEventStreamRequest.js +188 -0
- package/dist/cjs/hooks/useEventStreamRequest.js.map +7 -0
- package/dist/cjs/hooks/useProviderContext.d.ts +33 -0
- package/dist/cjs/hooks/useProviderContext.js +105 -0
- package/dist/cjs/hooks/useProviderContext.js.map +7 -0
- package/dist/cjs/hooks/useXAiSDK.d.ts +14 -0
- package/dist/cjs/hooks/useXAiSDK.js +75 -0
- package/dist/cjs/hooks/useXAiSDK.js.map +7 -0
- package/dist/cjs/index.d.ts +9 -0
- package/dist/cjs/index.js +61 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/services/api.d.ts +69 -0
- package/dist/cjs/services/api.js +49 -0
- package/dist/cjs/services/api.js.map +7 -0
- package/dist/cjs/styles/common.d.ts +64 -0
- package/dist/cjs/styles/common.js +144 -0
- package/dist/cjs/styles/common.js.map +7 -0
- package/dist/cjs/styles/markdown.d.ts +3 -0
- package/dist/cjs/styles/markdown.js +193 -0
- package/dist/cjs/styles/markdown.js.map +7 -0
- package/dist/cjs/types/XAiChatbot.d.ts +159 -0
- package/dist/cjs/types/XAiChatbot.js +18 -0
- package/dist/cjs/types/XAiChatbot.js.map +7 -0
- package/dist/cjs/types/XAiMessage.d.ts +121 -0
- package/dist/cjs/types/XAiMessage.js +55 -0
- package/dist/cjs/types/XAiMessage.js.map +7 -0
- package/dist/cjs/types/XAiProvider.d.ts +46 -0
- package/dist/cjs/types/XAiProvider.js +50 -0
- package/dist/cjs/types/XAiProvider.js.map +7 -0
- package/dist/cjs/types/index.d.ts +3 -0
- package/dist/cjs/types/index.js +28 -0
- package/dist/cjs/types/index.js.map +7 -0
- package/dist/cjs/types/mdx.d.ts +18 -0
- package/dist/cjs/utils/chat.d.ts +34 -0
- package/dist/cjs/utils/chat.js +1 -0
- package/dist/cjs/utils/chat.js.map +7 -0
- package/dist/cjs/utils/index.d.ts +2 -0
- package/dist/cjs/utils/index.js +49 -0
- package/dist/cjs/utils/index.js.map +7 -0
- package/dist/cjs/utils/providerManager.d.ts +22 -0
- package/dist/cjs/utils/providerManager.js +73 -0
- package/dist/cjs/utils/providerManager.js.map +7 -0
- package/dist/cjs/utils/request.d.ts +78 -0
- package/dist/cjs/utils/request.example.d.ts +39 -0
- package/dist/cjs/utils/request.example.js +211 -0
- package/dist/cjs/utils/request.example.js.map +7 -0
- package/dist/cjs/utils/request.js +231 -0
- package/dist/cjs/utils/request.js.map +7 -0
- package/dist/cjs/utils/umdEntry.d.ts +14 -0
- package/dist/cjs/utils/umdEntry.js +97 -0
- package/dist/cjs/utils/umdEntry.js.map +7 -0
- package/dist/esm/assets/user.png +0 -0
- package/dist/esm/client/base.d.ts +9 -0
- package/dist/esm/client/restClient.d.ts +0 -0
- package/dist/esm/client/wsClient.d.ts +0 -0
- package/dist/esm/components/XAiChatbot/XAiChatbot.stories.d.ts +10 -0
- package/dist/esm/components/XAiChatbot/index.d.ts +12 -0
- package/dist/esm/components/XAiChatbot/index.js +17 -11
- package/dist/esm/components/XAiChatbot/index.js.map +1 -1
- package/dist/esm/components/XAiChatbot/styles.d.ts +72 -0
- package/dist/esm/components/XAiChatbot/styles.js +37 -38
- package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAiProvider/XAiProvider.stories.d.ts +7 -0
- package/dist/esm/components/XAiProvider/index.d.ts +4 -0
- package/dist/esm/components/XAiProvider/index.js +8 -1
- package/dist/esm/components/XAiProvider/index.js.map +1 -1
- package/dist/esm/components/XAiSDK.d.ts +10 -0
- package/dist/esm/components/XAiWebSDKWrapper.d.ts +9 -0
- package/dist/esm/components/XAiWebSDKWrapper.js +4 -1
- package/dist/esm/components/XAiWebSDKWrapper.js.map +1 -1
- package/dist/esm/context/AiProviderContext.d.ts +12 -0
- package/dist/esm/context/ThemeContext.d.ts +20 -0
- package/dist/esm/hooks/useAgentGenerator.d.ts +72 -0
- package/dist/esm/hooks/useAgentGenerator.js +113 -39
- package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
- package/dist/esm/hooks/useEventStreamRequest.d.ts +30 -0
- package/dist/esm/hooks/useProviderContext.d.ts +33 -0
- package/dist/esm/hooks/useXAiSDK.d.ts +14 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/services/api.d.ts +69 -0
- package/dist/esm/services/api.js.map +1 -1
- package/dist/esm/styles/common.d.ts +64 -0
- package/dist/esm/styles/markdown.d.ts +3 -0
- package/dist/esm/types/XAiChatbot.d.ts +159 -0
- package/dist/esm/types/XAiMessage.d.ts +121 -0
- package/dist/esm/types/XAiProvider.d.ts +46 -0
- package/dist/esm/types/XAiProvider.js +7 -0
- package/dist/esm/types/XAiProvider.js.map +1 -1
- package/dist/esm/types/index.d.ts +3 -0
- package/dist/esm/utils/chat.d.ts +34 -0
- package/dist/esm/utils/index.d.ts +2 -0
- package/dist/esm/utils/providerManager.d.ts +22 -0
- package/dist/esm/utils/request.d.ts +78 -0
- package/dist/esm/utils/request.example.d.ts +39 -0
- package/dist/esm/utils/umdEntry.d.ts +14 -0
- package/dist/esm/utils/umdEntry.js +22 -18
- package/dist/esm/utils/umdEntry.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/components/XAiChatbot/XAiChatbot.stories.tsx
|
|
30
|
+
var XAiChatbot_stories_exports = {};
|
|
31
|
+
__export(XAiChatbot_stories_exports, {
|
|
32
|
+
default: () => XAiChatbot_stories_default,
|
|
33
|
+
在Provider中使用: () => 在Provider中使用,
|
|
34
|
+
基础用法: () => 基础用法,
|
|
35
|
+
多个Provider实例: () => 多个Provider实例,
|
|
36
|
+
新架构演示: () => 新架构演示,
|
|
37
|
+
架构对比演示: () => 架构对比演示
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(XAiChatbot_stories_exports);
|
|
40
|
+
var import_react = __toESM(require("react"));
|
|
41
|
+
var import_antd = require("antd");
|
|
42
|
+
var import_XAiMessage = require("../../types/XAiMessage");
|
|
43
|
+
var import_document = __toESM(require("../../assets/document.svg"));
|
|
44
|
+
var import_XAiProvider = __toESM(require("../XAiProvider"));
|
|
45
|
+
var import__ = __toESM(require("."));
|
|
46
|
+
var import_useProviderContext = require("../../hooks/useProviderContext");
|
|
47
|
+
var meta = {
|
|
48
|
+
title: "AI组件/XAiChatbot",
|
|
49
|
+
component: import__.default,
|
|
50
|
+
parameters: {
|
|
51
|
+
layout: "centered"
|
|
52
|
+
},
|
|
53
|
+
tags: ["autodocs"],
|
|
54
|
+
argTypes: {
|
|
55
|
+
navbar: {
|
|
56
|
+
description: "导航栏配置"
|
|
57
|
+
},
|
|
58
|
+
messages: {
|
|
59
|
+
description: "消息列表"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
var XAiChatbot_stories_default = meta;
|
|
64
|
+
var mockMessages = [
|
|
65
|
+
{
|
|
66
|
+
id: "0",
|
|
67
|
+
type: "TextMessage",
|
|
68
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
69
|
+
status: import_XAiMessage.MessageStatus.done,
|
|
70
|
+
role: import_XAiMessage.MessageRole.assistant,
|
|
71
|
+
content: {
|
|
72
|
+
text: `
|
|
73
|
+
# 项目开发计划
|
|
74
|
+
|
|
75
|
+
本文档概述了 2025 年第三季度的产品开发计划,包括目标、里程碑、团队分工和风险预案。
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 🎯 核心目标
|
|
80
|
+
|
|
81
|
+
- 提升用户留存率至 **45%**
|
|
82
|
+
- 完成 Web 端新版上线
|
|
83
|
+
- 建立 AI 推荐模块 MVP
|
|
84
|
+
- 优化数据库访问性能
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 📅 关键时间节点
|
|
89
|
+
|
|
90
|
+
| 里程碑 | 截止日期 | 负责人 | 代理人 | 截止日期 | 负责人 |
|
|
91
|
+
|------------------|--------------|----------|------------------|--------------|----------|
|
|
92
|
+
| 产品需求冻结 | 2025-08-01 | Alice | 产品需求冻结 | 2025-08-01 | Alice |
|
|
93
|
+
| UI 设计定稿 | 2025-08-10 | Bob | 产品需求冻结 | 2025-08-01 | Alice |
|
|
94
|
+
| 开发完成(内测) | 2025-09-15 | Charlie | 产品需求冻结 | 2025-08-01 | Alice |
|
|
95
|
+
| 正式上线 | 2025-09-30 | Diana | 产品需求冻结 | 2025-08-01 | Alice |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 🛠️ 技术方案简述
|
|
100
|
+
|
|
101
|
+
我们将使用以下技术栈:
|
|
102
|
+
|
|
103
|
+
- 前端:React + Vite + Zustand
|
|
104
|
+
- 后端:Node.js + PostgreSQL
|
|
105
|
+
- 数据分析:Python + Pandas
|
|
106
|
+
- 部署环境:Kubernetes on AWS
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## 💡 示例代码片段
|
|
111
|
+
|
|
112
|
+
以下是一个用于生成唯一 ID 的函数示例:
|
|
113
|
+
|
|
114
|
+
~~~ts
|
|
115
|
+
import { nanoid } from 'nanoid'
|
|
116
|
+
|
|
117
|
+
export function generateSessionId() {
|
|
118
|
+
return \`sess-\${nanoid()}\`
|
|
119
|
+
}
|
|
120
|
+
~~~
|
|
121
|
+
`
|
|
122
|
+
},
|
|
123
|
+
extra: {
|
|
124
|
+
noFooter: true
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
id: "1",
|
|
129
|
+
type: "TextMessage",
|
|
130
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
131
|
+
status: import_XAiMessage.MessageStatus.done,
|
|
132
|
+
role: import_XAiMessage.MessageRole.assistant,
|
|
133
|
+
content: {
|
|
134
|
+
text: "你好,有什么我能帮助你的吗?"
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
id: "2",
|
|
139
|
+
type: "TextMessage",
|
|
140
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
141
|
+
status: import_XAiMessage.MessageStatus.done,
|
|
142
|
+
role: import_XAiMessage.MessageRole.user,
|
|
143
|
+
content: {
|
|
144
|
+
text: "我需要一点帮助"
|
|
145
|
+
},
|
|
146
|
+
parentMessageId: "1"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: "3",
|
|
150
|
+
type: "ImageMessage",
|
|
151
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
152
|
+
status: import_XAiMessage.MessageStatus.done,
|
|
153
|
+
role: import_XAiMessage.MessageRole.assistant,
|
|
154
|
+
extra: {
|
|
155
|
+
cost: 6.09,
|
|
156
|
+
token: 1999
|
|
157
|
+
},
|
|
158
|
+
content: {
|
|
159
|
+
format: "svg",
|
|
160
|
+
bytes: "https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg"
|
|
161
|
+
},
|
|
162
|
+
thinks: [
|
|
163
|
+
// 工具库调用(MCP_TOOL)
|
|
164
|
+
{
|
|
165
|
+
type: "ActionExecutionMessage",
|
|
166
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
167
|
+
id: "tool-1",
|
|
168
|
+
name: "已调用MCP智能工具",
|
|
169
|
+
arguments: { param1: "foo" },
|
|
170
|
+
extra: {
|
|
171
|
+
action: "INVOKE_AGENT_TOOL_START",
|
|
172
|
+
icon: import_document.default,
|
|
173
|
+
type: "MCP_TOOL",
|
|
174
|
+
cost: "3.9"
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
// // 工具库调用(PLUGIN_TOOL)
|
|
178
|
+
// {
|
|
179
|
+
// id: 'tool-2',
|
|
180
|
+
// arguments: { param2: 'bar' },
|
|
181
|
+
// extra: {
|
|
182
|
+
// action: 'INVOKE_AGENT_TOOL_START',
|
|
183
|
+
// type: 'AGENT_TOOL',
|
|
184
|
+
// toolType: 'PLUGIN_TOOL',
|
|
185
|
+
// agentToolName: '插件工具',
|
|
186
|
+
// },
|
|
187
|
+
// },
|
|
188
|
+
// // 工具库调用(SKILL)
|
|
189
|
+
// {
|
|
190
|
+
// action: 'INVOKE_AGENT_TOOL_START',
|
|
191
|
+
// id: 'tool-3',
|
|
192
|
+
// toolType: 'SKILL',
|
|
193
|
+
// agentToolName: '技能工具',
|
|
194
|
+
// args: { param3: 'baz' },
|
|
195
|
+
// },
|
|
196
|
+
// // 知识库调用(FAQ)
|
|
197
|
+
// {
|
|
198
|
+
// action: 'RECALL_KNOWLEDGE_START',
|
|
199
|
+
// uniqueId: 'kb-1',
|
|
200
|
+
// processStatus: 'START',
|
|
201
|
+
// args: { question: '什么是FAQ?' },
|
|
202
|
+
// knowledgeType: 'FAQ',
|
|
203
|
+
// },
|
|
204
|
+
// // 知识库调用(DOCUMENT)
|
|
205
|
+
// {
|
|
206
|
+
// action: 'RECALL_KNOWLEDGE_START',
|
|
207
|
+
// uniqueId: 'kb-2',
|
|
208
|
+
// processStatus: 'START',
|
|
209
|
+
// args: { question: '文档库介绍' },
|
|
210
|
+
// knowledgeType: 'DOCUMENT',
|
|
211
|
+
// },
|
|
212
|
+
// 运行完毕
|
|
213
|
+
{
|
|
214
|
+
id: "5",
|
|
215
|
+
type: "ActionExecutionMessage",
|
|
216
|
+
name: "运行完毕",
|
|
217
|
+
createdAt: /* @__PURE__ */ new Date()
|
|
218
|
+
}
|
|
219
|
+
],
|
|
220
|
+
parentMessageId: "2"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
id: "4",
|
|
224
|
+
type: "TextMessage",
|
|
225
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
226
|
+
status: import_XAiMessage.MessageStatus.done,
|
|
227
|
+
role: import_XAiMessage.MessageRole.user,
|
|
228
|
+
content: {
|
|
229
|
+
text: "能否生成一段明年的产品计划开发计划文档给我"
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
id: "11",
|
|
234
|
+
type: "SuggestionMessage",
|
|
235
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
236
|
+
status: import_XAiMessage.MessageStatus.done,
|
|
237
|
+
role: import_XAiMessage.MessageRole.suggestion,
|
|
238
|
+
content: [
|
|
239
|
+
{
|
|
240
|
+
key: "1",
|
|
241
|
+
description: "我要查看 AI 文档"
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
key: "2",
|
|
245
|
+
description: "我如何看待 AI"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
key: "3",
|
|
249
|
+
description: "你是谁?"
|
|
250
|
+
}
|
|
251
|
+
]
|
|
252
|
+
}
|
|
253
|
+
];
|
|
254
|
+
var BasicUsageStory = (args) => {
|
|
255
|
+
const [messages, setMessages] = (0, import_react.useState)(mockMessages);
|
|
256
|
+
const handleSendMessage = (_type, msg) => {
|
|
257
|
+
const userMsg = {
|
|
258
|
+
id: String(Date.now()),
|
|
259
|
+
type: "TextMessage",
|
|
260
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
261
|
+
status: import_XAiMessage.MessageStatus.done,
|
|
262
|
+
role: import_XAiMessage.MessageRole.user,
|
|
263
|
+
content: { text: msg }
|
|
264
|
+
};
|
|
265
|
+
setMessages((prev) => [
|
|
266
|
+
...prev,
|
|
267
|
+
userMsg
|
|
268
|
+
]);
|
|
269
|
+
let aiMsg = "";
|
|
270
|
+
const stream = ["好的,", "我正在为你查询", "相关信息..."];
|
|
271
|
+
stream.forEach((chunk, idx) => {
|
|
272
|
+
setTimeout(() => {
|
|
273
|
+
aiMsg += chunk;
|
|
274
|
+
setMessages((prev) => {
|
|
275
|
+
const aiIndex = prev.findIndex((m) => m.id === "stream-ai");
|
|
276
|
+
if (aiIndex > -1) {
|
|
277
|
+
const updated = [...prev];
|
|
278
|
+
const oldMsg = updated[aiIndex];
|
|
279
|
+
if (oldMsg.type === "TextMessage") {
|
|
280
|
+
updated[aiIndex] = {
|
|
281
|
+
...oldMsg,
|
|
282
|
+
content: { text: aiMsg }
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
return updated;
|
|
286
|
+
}
|
|
287
|
+
const aiMessage = {
|
|
288
|
+
id: "stream-ai",
|
|
289
|
+
type: "TextMessage",
|
|
290
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
291
|
+
status: import_XAiMessage.MessageStatus.pending,
|
|
292
|
+
role: import_XAiMessage.MessageRole.assistant,
|
|
293
|
+
content: { text: aiMsg }
|
|
294
|
+
};
|
|
295
|
+
return [
|
|
296
|
+
...prev,
|
|
297
|
+
aiMessage
|
|
298
|
+
];
|
|
299
|
+
});
|
|
300
|
+
if (idx === stream.length - 1) {
|
|
301
|
+
setTimeout(() => {
|
|
302
|
+
setMessages((prev) => prev.map((m) => {
|
|
303
|
+
if (m.id === "stream-ai") {
|
|
304
|
+
const doneMsg = { ...m, status: import_XAiMessage.MessageStatus.done };
|
|
305
|
+
return doneMsg;
|
|
306
|
+
}
|
|
307
|
+
return m;
|
|
308
|
+
}));
|
|
309
|
+
}, 500);
|
|
310
|
+
}
|
|
311
|
+
}, 800 * (idx + 1));
|
|
312
|
+
});
|
|
313
|
+
};
|
|
314
|
+
const handleClear = () => {
|
|
315
|
+
setMessages([]);
|
|
316
|
+
};
|
|
317
|
+
const handleActions = (index, data) => {
|
|
318
|
+
console.log(index, data);
|
|
319
|
+
};
|
|
320
|
+
const handleSuggestMessageClick = (_item, id) => {
|
|
321
|
+
setMessages((prev) => prev.filter((m) => m.id !== id));
|
|
322
|
+
};
|
|
323
|
+
const ToolTip = (data) => {
|
|
324
|
+
const { cost, token } = (data == null ? void 0 : data.extra) || {};
|
|
325
|
+
if (!cost && !token)
|
|
326
|
+
return null;
|
|
327
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", alignItems: "center", fontSize: "12px", color: "#949494", flex: 1, paddingRight: "40px" } }, cost && /* @__PURE__ */ import_react.default.createElement("div", null, cost, "s"), token && /* @__PURE__ */ import_react.default.createElement(import_antd.Divider, { type: "vertical" }), token && /* @__PURE__ */ import_react.default.createElement("div", null, token, " tokens"));
|
|
328
|
+
};
|
|
329
|
+
return /* @__PURE__ */ import_react.default.createElement("div", { style: { height: "600px", width: "400px", border: "1px solid #e7e7e7", borderRadius: "8px" } }, /* @__PURE__ */ import_react.default.createElement(
|
|
330
|
+
import__.default,
|
|
331
|
+
{
|
|
332
|
+
...args,
|
|
333
|
+
messages,
|
|
334
|
+
messageTooltip: ToolTip,
|
|
335
|
+
onClear: handleClear,
|
|
336
|
+
onSuggestMessageClick: handleSuggestMessageClick,
|
|
337
|
+
onSend: handleSendMessage,
|
|
338
|
+
onMessagesActionsCallback: handleActions
|
|
339
|
+
}
|
|
340
|
+
));
|
|
341
|
+
};
|
|
342
|
+
var 基础用法 = {
|
|
343
|
+
render: BasicUsageStory,
|
|
344
|
+
args: {
|
|
345
|
+
navbar: {
|
|
346
|
+
title: "智能助手"
|
|
347
|
+
},
|
|
348
|
+
// messages: mockMessages,
|
|
349
|
+
emptyStateText: "众安智能体"
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
var 在Provider中使用 = {
|
|
353
|
+
decorators: [
|
|
354
|
+
(Story) => /* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { token: "test-token", url: "https://api.example.com" }, /* @__PURE__ */ import_react.default.createElement(Story, null))
|
|
355
|
+
],
|
|
356
|
+
args: {
|
|
357
|
+
navbar: {
|
|
358
|
+
title: "智能助手"
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
var 多个Provider实例 = {
|
|
363
|
+
decorators: [
|
|
364
|
+
(Story) => /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", gap: "50px", height: "600px" } }, /* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { providerId: "chat1", token: "token1", url: "https://api1.example.com" }, /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "300px", marginRight: "40px" } }, /* @__PURE__ */ import_react.default.createElement(Story, null))), /* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { providerId: "chat2", token: "token2", url: "https://api2.example.com" }, /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "300px" } }, /* @__PURE__ */ import_react.default.createElement(Story, null))))
|
|
365
|
+
],
|
|
366
|
+
args: {
|
|
367
|
+
navbar: {
|
|
368
|
+
title: "智能助手"
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
};
|
|
372
|
+
var ArchitectureDemoComponent = ({ title }) => {
|
|
373
|
+
var _a;
|
|
374
|
+
const { mergedProps, isInProvider, getProviderValue } = (0, import_useProviderContext.useProviderContext)({
|
|
375
|
+
props: { title },
|
|
376
|
+
mergeLogic: (props, context) => {
|
|
377
|
+
var _a2;
|
|
378
|
+
if (!(context == null ? void 0 : context.isInProvider)) {
|
|
379
|
+
return props;
|
|
380
|
+
}
|
|
381
|
+
return {
|
|
382
|
+
...props,
|
|
383
|
+
messages: context.messages,
|
|
384
|
+
loading: context.loading,
|
|
385
|
+
customData: ((_a2 = context.messages) == null ? void 0 : _a2.length) || 0
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
const providerMethods = (0, import_useProviderContext.useProviderMethods)();
|
|
390
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
|
391
|
+
"div",
|
|
392
|
+
{
|
|
393
|
+
style: {
|
|
394
|
+
padding: "15px",
|
|
395
|
+
border: "1px solid #e7e7e7",
|
|
396
|
+
borderRadius: "8px",
|
|
397
|
+
marginBottom: "10px",
|
|
398
|
+
backgroundColor: "#fafafa"
|
|
399
|
+
}
|
|
400
|
+
},
|
|
401
|
+
/* @__PURE__ */ import_react.default.createElement("h4", { style: { margin: "0 0 10px 0" } }, mergedProps.title),
|
|
402
|
+
/* @__PURE__ */ import_react.default.createElement("div", { style: { fontSize: "12px", color: "#666" } }, /* @__PURE__ */ import_react.default.createElement("p", null, "Provider 状态: ", isInProvider ? "✅ 已连接" : "❌ 未连接"), /* @__PURE__ */ import_react.default.createElement("p", null, "消息数量: ", ((_a = getProviderValue("messages")) == null ? void 0 : _a.length) || 0), /* @__PURE__ */ import_react.default.createElement("p", null, "加载状态: ", getProviderValue("loading") ? "🔄 加载中" : "✅ 就绪"), /* @__PURE__ */ import_react.default.createElement(
|
|
403
|
+
"button",
|
|
404
|
+
{
|
|
405
|
+
onClick: () => {
|
|
406
|
+
var _a2;
|
|
407
|
+
return (_a2 = providerMethods.sendMessage) == null ? void 0 : _a2.call(providerMethods, "来自架构演示组件的消息");
|
|
408
|
+
},
|
|
409
|
+
disabled: !isInProvider,
|
|
410
|
+
style: {
|
|
411
|
+
fontSize: "12px",
|
|
412
|
+
padding: "4px 8px",
|
|
413
|
+
backgroundColor: isInProvider ? "#1890ff" : "#d9d9d9",
|
|
414
|
+
color: "white",
|
|
415
|
+
border: "none",
|
|
416
|
+
borderRadius: "4px",
|
|
417
|
+
cursor: isInProvider ? "pointer" : "not-allowed"
|
|
418
|
+
}
|
|
419
|
+
},
|
|
420
|
+
isInProvider ? "发送消息" : "需要 Provider"
|
|
421
|
+
))
|
|
422
|
+
);
|
|
423
|
+
};
|
|
424
|
+
var 新架构演示 = {
|
|
425
|
+
render: (args) => /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "500px", height: "700px" } }, /* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { token: "demo-token", url: "https://api.example.com", providerId: "architecture-demo" }, /* @__PURE__ */ import_react.default.createElement("div", { style: { padding: "20px" } }, /* @__PURE__ */ import_react.default.createElement("h3", { style: { marginBottom: "20px" } }, "新架构演示"), /* @__PURE__ */ import_react.default.createElement("p", { style: { marginBottom: "20px", color: "#666" } }, "展示如何使用 useProviderContext 和 useProviderMethods Hook"), /* @__PURE__ */ import_react.default.createElement("div", { style: { marginBottom: "20px" } }, /* @__PURE__ */ import_react.default.createElement(ArchitectureDemoComponent, { title: "演示组件 A" }), /* @__PURE__ */ import_react.default.createElement(ArchitectureDemoComponent, { title: "演示组件 B" }), /* @__PURE__ */ import_react.default.createElement(ArchitectureDemoComponent, { title: "演示组件 C" })), /* @__PURE__ */ import_react.default.createElement(
|
|
426
|
+
import__.default,
|
|
427
|
+
{
|
|
428
|
+
...args,
|
|
429
|
+
navbarShow: true,
|
|
430
|
+
navbar: {
|
|
431
|
+
title: "架构演示聊天机器人",
|
|
432
|
+
subtitle: "展示新 Hook 的使用"
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
)))),
|
|
436
|
+
args: {
|
|
437
|
+
navbar: {
|
|
438
|
+
title: "智能助手"
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
};
|
|
442
|
+
var 架构对比演示 = {
|
|
443
|
+
render: (args) => /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", gap: "20px", padding: "20px" } }, /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "300px" } }, /* @__PURE__ */ import_react.default.createElement("h4", null, "独立使用模式"), /* @__PURE__ */ import_react.default.createElement("div", { style: { border: "1px solid #e7e7e7", borderRadius: "8px", padding: "15px" } }, /* @__PURE__ */ import_react.default.createElement(ArchitectureDemoComponent, { title: "独立组件" }), /* @__PURE__ */ import_react.default.createElement(
|
|
444
|
+
import__.default,
|
|
445
|
+
{
|
|
446
|
+
...args,
|
|
447
|
+
navbarShow: true,
|
|
448
|
+
navbar: {
|
|
449
|
+
title: "独立聊天机器人",
|
|
450
|
+
subtitle: "不依赖 Provider"
|
|
451
|
+
},
|
|
452
|
+
onSend: (type, content) => {
|
|
453
|
+
console.log("独立模式发送:", type, content);
|
|
454
|
+
},
|
|
455
|
+
onClear: () => {
|
|
456
|
+
console.log("独立模式清空");
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
))), /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "300px" } }, /* @__PURE__ */ import_react.default.createElement("h4", null, "Provider 模式"), /* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { token: "demo-token", url: "https://api.example.com", providerId: "comparison-demo" }, /* @__PURE__ */ import_react.default.createElement("div", { style: { border: "1px solid #e7e7e7", borderRadius: "8px", padding: "15px" } }, /* @__PURE__ */ import_react.default.createElement(ArchitectureDemoComponent, { title: "Provider 组件" }), /* @__PURE__ */ import_react.default.createElement(
|
|
460
|
+
import__.default,
|
|
461
|
+
{
|
|
462
|
+
...args,
|
|
463
|
+
navbarShow: true,
|
|
464
|
+
navbar: {
|
|
465
|
+
title: "Provider 聊天机器人",
|
|
466
|
+
subtitle: "由 Provider 管理"
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
))))),
|
|
470
|
+
args: {
|
|
471
|
+
navbar: {
|
|
472
|
+
title: "智能助手"
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
};
|
|
476
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
477
|
+
0 && (module.exports = {
|
|
478
|
+
在Provider中使用,
|
|
479
|
+
基础用法,
|
|
480
|
+
多个Provider实例,
|
|
481
|
+
新架构演示,
|
|
482
|
+
架构对比演示
|
|
483
|
+
});
|
|
484
|
+
//# sourceMappingURL=XAiChatbot.stories.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/XAiChatbot/XAiChatbot.stories.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { useState } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Divider } from 'antd';\nimport { MessageRole, MessageStatus } from '@/types/XAiMessage';\nimport type { Messages } from '@/types/XAiMessage';\nimport documentIcon from '@/assets/document.svg';\nimport XAiProvider from '../XAiProvider';\nimport XAiChatbot from '.';\nimport { useProviderContext, useProviderMethods } from '@/hooks/useProviderContext';\n\nconst meta: Meta<typeof XAiChatbot> = {\n title: 'AI组件/XAiChatbot',\n component: XAiChatbot,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {\n navbar: {\n description: '导航栏配置',\n },\n messages: {\n description: '消息列表',\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// mock 消息数据,严格符合 Messages 类型\nconst mockMessages: Messages[] = [\n {\n id: '0',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: `\n# 项目开发计划\n\n本文档概述了 2025 年第三季度的产品开发计划,包括目标、里程碑、团队分工和风险预案。\n\n---\n\n## 🎯 核心目标\n\n- 提升用户留存率至 **45%**\n- 完成 Web 端新版上线\n- 建立 AI 推荐模块 MVP\n- 优化数据库访问性能\n\n---\n\n## 📅 关键时间节点\n\n| 里程碑 | 截止日期 | 负责人 | 代理人 | 截止日期 | 负责人 |\n|------------------|--------------|----------|------------------|--------------|----------|\n| 产品需求冻结 | 2025-08-01 | Alice | 产品需求冻结 | 2025-08-01 | Alice |\n| UI 设计定稿 | 2025-08-10 | Bob | 产品需求冻结 | 2025-08-01 | Alice |\n| 开发完成(内测) | 2025-09-15 | Charlie | 产品需求冻结 | 2025-08-01 | Alice |\n| 正式上线 | 2025-09-30 | Diana | 产品需求冻结 | 2025-08-01 | Alice |\n\n---\n\n## 🛠️ 技术方案简述\n\n我们将使用以下技术栈:\n\n- 前端:React + Vite + Zustand\n- 后端:Node.js + PostgreSQL\n- 数据分析:Python + Pandas\n- 部署环境:Kubernetes on AWS\n\n---\n\n## 💡 示例代码片段\n\n以下是一个用于生成唯一 ID 的函数示例:\n\n~~~ts\nimport { nanoid } from 'nanoid'\n\nexport function generateSessionId() {\n return \\`sess-\\${nanoid()}\\`\n}\n~~~\n`,\n },\n extra: {\n noFooter: true,\n },\n },\n {\n id: '1',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n content: {\n text: '你好,有什么我能帮助你的吗?',\n },\n },\n {\n id: '2',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '我需要一点帮助',\n },\n parentMessageId: '1',\n },\n {\n id: '3',\n type: 'ImageMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.assistant,\n extra: {\n cost: 6.09,\n token: 1999,\n },\n content: {\n format: 'svg',\n bytes: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n },\n thinks: [\n // 工具库调用(MCP_TOOL)\n {\n type: 'ActionExecutionMessage',\n createdAt: new Date(),\n id: 'tool-1',\n name: '已调用MCP智能工具',\n arguments: { param1: 'foo' },\n extra: {\n action: 'INVOKE_AGENT_TOOL_START',\n icon: documentIcon,\n type: 'MCP_TOOL',\n cost: '3.9',\n },\n },\n // // 工具库调用(PLUGIN_TOOL)\n // {\n // id: 'tool-2',\n // arguments: { param2: 'bar' },\n // extra: {\n // action: 'INVOKE_AGENT_TOOL_START',\n // type: 'AGENT_TOOL',\n\n // toolType: 'PLUGIN_TOOL',\n // agentToolName: '插件工具',\n // },\n // },\n // // 工具库调用(SKILL)\n // {\n // action: 'INVOKE_AGENT_TOOL_START',\n // id: 'tool-3',\n // toolType: 'SKILL',\n // agentToolName: '技能工具',\n // args: { param3: 'baz' },\n\n // },\n // // 知识库调用(FAQ)\n // {\n // action: 'RECALL_KNOWLEDGE_START',\n // uniqueId: 'kb-1',\n // processStatus: 'START',\n // args: { question: '什么是FAQ?' },\n // knowledgeType: 'FAQ',\n // },\n // // 知识库调用(DOCUMENT)\n // {\n // action: 'RECALL_KNOWLEDGE_START',\n // uniqueId: 'kb-2',\n // processStatus: 'START',\n // args: { question: '文档库介绍' },\n // knowledgeType: 'DOCUMENT',\n // },\n // 运行完毕\n {\n id: '5',\n type: 'ActionExecutionMessage',\n name: '运行完毕',\n createdAt: new Date(),\n },\n ],\n parentMessageId: '2',\n },\n {\n id: '4',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: {\n text: '能否生成一段明年的产品计划开发计划文档给我',\n },\n },\n {\n id: '11',\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [\n {\n key: '1',\n description: '我要查看 AI 文档',\n },\n {\n key: '2',\n description: '我如何看待 AI',\n },\n {\n key: '3',\n description: '你是谁?',\n },\n ],\n },\n];\n\n// 基础用法\nconst BasicUsageStory = (args: any) => {\n const [messages, setMessages] = useState<Messages[]>(mockMessages);\n\n // 模拟流式返回AI消息\n const handleSendMessage = (_type: string, msg: string) => {\n const userMsg: Messages = {\n id: String(Date.now()),\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.user,\n content: { text: msg },\n };\n setMessages((prev) => [\n ...prev,\n userMsg,\n ]);\n let aiMsg = '';\n const stream = ['好的,', '我正在为你查询', '相关信息...'];\n stream.forEach((chunk, idx) => {\n setTimeout(() => {\n aiMsg += chunk;\n setMessages((prev) => {\n const aiIndex = prev.findIndex((m) => m.id === 'stream-ai');\n if (aiIndex > -1) {\n const updated = [...prev];\n const oldMsg = updated[aiIndex];\n if (oldMsg.type === 'TextMessage') {\n updated[aiIndex] = {\n ...oldMsg,\n content: { text: aiMsg },\n };\n }\n return updated;\n }\n const aiMessage: Messages = {\n id: 'stream-ai',\n type: 'TextMessage',\n createdAt: new Date(),\n status: MessageStatus.pending,\n role: MessageRole.assistant,\n content: { text: aiMsg },\n };\n return [\n ...prev,\n aiMessage,\n ];\n });\n if (idx === stream.length - 1) {\n setTimeout(() => {\n setMessages((prev) => prev.map((m) => {\n if (m.id === 'stream-ai') {\n const doneMsg: Messages = { ...m, status: MessageStatus.done };\n return doneMsg;\n }\n return m;\n }));\n }, 500);\n }\n }, 800 * (idx + 1));\n });\n };\n\n // 模拟清空数据\n const handleClear = () => {\n setMessages([]);\n };\n\n // 模拟按钮\n const handleActions = (index: number, data: any) => {\n console.log(index, data);\n };\n\n // 模拟快捷短语点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev) => prev.filter((m) => m.id !== id));\n };\n\n const ToolTip = (data: any) => {\n const { cost, token } = data?.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { cost && <div>{ cost }s</div>}\n { token && <Divider type=\"vertical\" /> }\n { token && <div>{ token } tokens</div> }\n </div>\n );\n };\n\n return (\n <div style={{ height: '600px', width: '400px', border: '1px solid #e7e7e7', borderRadius: '8px' }}>\n <XAiChatbot\n {...args}\n messages={messages}\n messageTooltip={ToolTip}\n onClear={handleClear}\n onSuggestMessageClick={handleSuggestMessageClick}\n onSend={handleSendMessage}\n onMessagesActionsCallback={handleActions}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {\n navbar: {\n title: '智能助手',\n },\n // messages: mockMessages,\n emptyStateText: '众安智能体',\n },\n};\n\n// 在 Provider 中使用\nexport const 在Provider中使用: Story = {\n decorators: [\n (Story) => (\n <XAiProvider token=\"test-token\" url=\"https://api.example.com\">\n <Story />\n </XAiProvider>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 多个 Provider 实例\nexport const 多个Provider实例: Story = {\n decorators: [\n (Story) => (\n <div style={{ display: 'flex', gap: '50px', height: '600px' }}>\n <XAiProvider providerId=\"chat1\" token=\"token1\" url=\"https://api1.example.com\">\n <div style={{ width: '300px', marginRight: '40px' }}>\n <Story />\n </div>\n </XAiProvider>\n <XAiProvider providerId=\"chat2\" token=\"token2\" url=\"https://api2.example.com\">\n <div style={{ width: '300px' }}>\n <Story />\n </div>\n </XAiProvider>\n </div>\n ),\n ],\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 展示新架构的示例组件\nconst ArchitectureDemoComponent: React.FC<{ title: string }> = ({ title }) => {\n const { mergedProps, isInProvider, getProviderValue } = useProviderContext({\n props: { title },\n mergeLogic: (props, context) => {\n if (!context?.isInProvider) {\n return props;\n }\n\n return {\n ...props,\n messages: context.messages,\n loading: context.loading,\n customData: context.messages?.length || 0,\n };\n },\n });\n\n const providerMethods = useProviderMethods();\n\n return (\n <div style={{\n padding: '15px',\n border: '1px solid #e7e7e7',\n borderRadius: '8px',\n marginBottom: '10px',\n backgroundColor: '#fafafa',\n }}\n >\n <h4 style={{ margin: '0 0 10px 0' }}>{mergedProps.title}</h4>\n <div style={{ fontSize: '12px', color: '#666' }}>\n <p>Provider 状态: {isInProvider ? '✅ 已连接' : '❌ 未连接'}</p>\n <p>消息数量: {getProviderValue('messages')?.length || 0}</p>\n <p>加载状态: {getProviderValue('loading') ? '🔄 加载中' : '✅ 就绪'}</p>\n <button\n onClick={() => providerMethods.sendMessage?.('来自架构演示组件的消息')}\n disabled={!isInProvider}\n style={{\n fontSize: '12px',\n padding: '4px 8px',\n backgroundColor: isInProvider ? '#1890ff' : '#d9d9d9',\n color: 'white',\n border: 'none',\n borderRadius: '4px',\n cursor: isInProvider ? 'pointer' : 'not-allowed',\n }}\n >\n {isInProvider ? '发送消息' : '需要 Provider'}\n </button>\n </div>\n </div>\n );\n};\n\n// 展示新架构的示例\nexport const 新架构演示: Story = {\n render: (args) => (\n <div style={{ width: '500px', height: '700px' }}>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"architecture-demo\">\n <div style={{ padding: '20px' }}>\n <h3 style={{ marginBottom: '20px' }}>新架构演示</h3>\n <p style={{ marginBottom: '20px', color: '#666' }}>\n 展示如何使用 useProviderContext 和 useProviderMethods Hook\n </p>\n\n {/* 演示组件 */}\n <div style={{ marginBottom: '20px' }}>\n <ArchitectureDemoComponent title=\"演示组件 A\" />\n <ArchitectureDemoComponent title=\"演示组件 B\" />\n <ArchitectureDemoComponent title=\"演示组件 C\" />\n </div>\n\n {/* 聊天机器人 */}\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '架构演示聊天机器人',\n subtitle: '展示新 Hook 的使用',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n\n// 对比示例:独立使用 vs Provider 模式\nexport const 架构对比演示: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px', padding: '20px' }}>\n {/* 独立使用 */}\n <div style={{ width: '300px' }}>\n <h4>独立使用模式</h4>\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"独立组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: '独立聊天机器人',\n subtitle: '不依赖 Provider',\n }}\n onSend={(type, content) => {\n console.log('独立模式发送:', type, content);\n }}\n onClear={() => {\n console.log('独立模式清空');\n }}\n />\n </div>\n </div>\n\n {/* Provider 模式 */}\n <div style={{ width: '300px' }}>\n <h4>Provider 模式</h4>\n <XAiProvider token=\"demo-token\" url=\"https://api.example.com\" providerId=\"comparison-demo\">\n <div style={{ border: '1px solid #e7e7e7', borderRadius: '8px', padding: '15px' }}>\n <ArchitectureDemoComponent title=\"Provider 组件\" />\n <XAiChatbot\n {...args}\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n navbar: {\n title: '智能助手',\n },\n },\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["XAiChatbot", "documentIcon", "React", "XAiProvider", "_a"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { XAiChatbotProps } from "../../types/XAiChatbot";
|
|
3
|
+
export interface ActionHeaderProps {
|
|
4
|
+
thinks: any[];
|
|
5
|
+
renderActionHeader?: (params: {
|
|
6
|
+
thinks: any[];
|
|
7
|
+
expanded: boolean;
|
|
8
|
+
onToggle: () => void;
|
|
9
|
+
}) => React.ReactNode;
|
|
10
|
+
}
|
|
11
|
+
declare const XAiChatbot: React.FC<XAiChatbotProps>;
|
|
12
|
+
export default XAiChatbot;
|