@ai-group/chat-sdk 0.2.5

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 (80) hide show
  1. package/README.md +239 -0
  2. package/dist/esm/assets/arrow-down.png +0 -0
  3. package/dist/esm/assets/arrow-up.png +0 -0
  4. package/dist/esm/assets/chatKnowledge.png +0 -0
  5. package/dist/esm/assets/completed-black.png +0 -0
  6. package/dist/esm/assets/completed.png +0 -0
  7. package/dist/esm/assets/document-black.png +0 -0
  8. package/dist/esm/assets/document.png +0 -0
  9. package/dist/esm/assets/document.svg +16 -0
  10. package/dist/esm/assets/empty.png +0 -0
  11. package/dist/esm/assets/group.png +0 -0
  12. package/dist/esm/assets/qa-black.png +0 -0
  13. package/dist/esm/assets/qa.png +0 -0
  14. package/dist/esm/assets/skillNo-black.png +0 -0
  15. package/dist/esm/assets/skillNo.png +0 -0
  16. package/dist/esm/assets/tools-black.png +0 -0
  17. package/dist/esm/assets/tools.png +0 -0
  18. package/dist/esm/client/base.js +2 -0
  19. package/dist/esm/client/base.js.map +1 -0
  20. package/dist/esm/client/restClient.js +2 -0
  21. package/dist/esm/client/restClient.js.map +1 -0
  22. package/dist/esm/client/wsClient.js +2 -0
  23. package/dist/esm/client/wsClient.js.map +1 -0
  24. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js +562 -0
  25. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.js.map +1 -0
  26. package/dist/esm/components/XAiChatbot/index.js +586 -0
  27. package/dist/esm/components/XAiChatbot/index.js.map +1 -0
  28. package/dist/esm/components/XAiChatbot/styles.js +62 -0
  29. package/dist/esm/components/XAiChatbot/styles.js.map +1 -0
  30. package/dist/esm/components/XAiProvider/XAiProvider.stories.js +297 -0
  31. package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -0
  32. package/dist/esm/components/XAiProvider/index.js +128 -0
  33. package/dist/esm/components/XAiProvider/index.js.map +1 -0
  34. package/dist/esm/components/XAiSDK.js +29 -0
  35. package/dist/esm/components/XAiSDK.js.map +1 -0
  36. package/dist/esm/components/XAiWebSDKWrapper.js +42 -0
  37. package/dist/esm/components/XAiWebSDKWrapper.js.map +1 -0
  38. package/dist/esm/context/AiProviderContext.js +62 -0
  39. package/dist/esm/context/AiProviderContext.js.map +1 -0
  40. package/dist/esm/context/ThemeContext.js +8 -0
  41. package/dist/esm/context/ThemeContext.js.map +1 -0
  42. package/dist/esm/hooks/useAgentGenerator.js +536 -0
  43. package/dist/esm/hooks/useAgentGenerator.js.map +1 -0
  44. package/dist/esm/hooks/useEventStreamRequest.js +229 -0
  45. package/dist/esm/hooks/useEventStreamRequest.js.map +1 -0
  46. package/dist/esm/hooks/useProviderContext.js +115 -0
  47. package/dist/esm/hooks/useProviderContext.js.map +1 -0
  48. package/dist/esm/hooks/useXAiSDK.js +49 -0
  49. package/dist/esm/hooks/useXAiSDK.js.map +1 -0
  50. package/dist/esm/index.js +11 -0
  51. package/dist/esm/index.js.map +1 -0
  52. package/dist/esm/services/api.js +73 -0
  53. package/dist/esm/services/api.js.map +1 -0
  54. package/dist/esm/styles/common.js +106 -0
  55. package/dist/esm/styles/common.js.map +1 -0
  56. package/dist/esm/styles/markdown.js +12 -0
  57. package/dist/esm/styles/markdown.js.map +1 -0
  58. package/dist/esm/types/XAiChatbot.js +2 -0
  59. package/dist/esm/types/XAiChatbot.js.map +1 -0
  60. package/dist/esm/types/XAiMessage.js +65 -0
  61. package/dist/esm/types/XAiMessage.js.map +1 -0
  62. package/dist/esm/types/XAiProvider.js +4 -0
  63. package/dist/esm/types/XAiProvider.js.map +1 -0
  64. package/dist/esm/types/index.js +4 -0
  65. package/dist/esm/types/index.js.map +1 -0
  66. package/dist/esm/types/mdx.d.ts +18 -0
  67. package/dist/esm/utils/chat.js +976 -0
  68. package/dist/esm/utils/chat.js.map +1 -0
  69. package/dist/esm/utils/index.js +19 -0
  70. package/dist/esm/utils/index.js.map +1 -0
  71. package/dist/esm/utils/providerManager.js +70 -0
  72. package/dist/esm/utils/providerManager.js.map +1 -0
  73. package/dist/esm/utils/request.example.js +379 -0
  74. package/dist/esm/utils/request.example.js.map +1 -0
  75. package/dist/esm/utils/request.js +491 -0
  76. package/dist/esm/utils/request.js.map +1 -0
  77. package/dist/esm/utils/umdEntry.js +109 -0
  78. package/dist/esm/utils/umdEntry.js.map +1 -0
  79. package/dist/umd/chat-sdk.min.js +1 -0
  80. package/package.json +71 -0
package/README.md ADDED
@@ -0,0 +1,239 @@
1
+ # X-Group AI SDK
2
+
3
+ 面向 AI 中台平台的前端集成 SDK,支持 OAuth2 安全认证、聊天机器人、智能编辑器、多模态对话,适配 SaaS / 私有化双场景。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm install @ai-group/chat-sdk
9
+ ```
10
+
11
+ ## 使用方法
12
+
13
+ ### 1. 独立使用 XAiChatbot
14
+
15
+ XAiChatbot 可以独立使用,不依赖 Provider:
16
+
17
+ ```tsx
18
+ import { XAiChatbot } from '@ai-group/chat-sdk';
19
+
20
+ function App() {
21
+ const [messages, setMessages] = useState([]);
22
+
23
+ return (
24
+ <XAiChatbot
25
+ messages={messages}
26
+ onSend={(type, content) => {
27
+ console.log('发送消息:', type, content);
28
+ // 处理消息发送
29
+ }}
30
+ onClear={() => {
31
+ console.log('清空消息');
32
+ setMessages([]);
33
+ }}
34
+ onStop={() => {
35
+ console.log('停止生成');
36
+ }}
37
+ navbarShow={true}
38
+ navbar={{
39
+ title: '独立聊天机器人',
40
+ subtitle: '不依赖 Provider',
41
+ avatar: 'https://example.com/avatar.png',
42
+ }}
43
+ />
44
+ );
45
+ }
46
+ ```
47
+
48
+ ### 2. 使用 XAiProvider 管理消息
49
+
50
+ XAiProvider 可以全面接管 XAiChatbot 的消息管理、AI 交互等功能:
51
+
52
+ ```tsx
53
+ import { XAiProvider, XAiChatbot } from '@ai-group/chat-sdk';
54
+
55
+ function App() {
56
+ return (
57
+ <XAiProvider
58
+ url="https://api.example.com/ai"
59
+ token="your-token-here"
60
+ providerId="demo-provider"
61
+ >
62
+ <XAiChatbot
63
+ navbarShow={true}
64
+ navbar={{
65
+ title: 'Provider 聊天机器人',
66
+ subtitle: '由 Provider 管理消息',
67
+ avatar: 'https://example.com/avatar.png',
68
+ }}
69
+ />
70
+ </XAiProvider>
71
+ );
72
+ }
73
+ ```
74
+
75
+ ### 3. 多个 Provider 实例
76
+
77
+ 你可以在同一个应用中创建多个 Provider 实例:
78
+
79
+ ```tsx
80
+ import { XAiProvider, XAiChatbot } from '@ai-group/chat-sdk';
81
+
82
+ function App() {
83
+ return (
84
+ <div style={{ display: 'flex', gap: '20px' }}>
85
+ {/* 第一个聊天机器人 */}
86
+ <XAiProvider
87
+ url="https://api.example.com/ai"
88
+ token="token-1"
89
+ providerId="provider-1"
90
+ >
91
+ <XAiChatbot
92
+ navbarShow={true}
93
+ navbar={{
94
+ title: 'Provider 1',
95
+ subtitle: '第一个聊天机器人',
96
+ }}
97
+ />
98
+ </XAiProvider>
99
+
100
+ {/* 第二个聊天机器人 */}
101
+ <XAiProvider
102
+ url="https://api.example.com/ai"
103
+ token="token-2"
104
+ providerId="provider-2"
105
+ >
106
+ <XAiChatbot
107
+ navbarShow={true}
108
+ navbar={{
109
+ title: 'Provider 2',
110
+ subtitle: '第二个聊天机器人',
111
+ }}
112
+ />
113
+ </XAiProvider>
114
+ </div>
115
+ );
116
+ }
117
+ ```
118
+
119
+ ### 4. 自定义消息处理
120
+
121
+ Provider 模式支持自定义消息处理逻辑:
122
+
123
+ ```tsx
124
+ import { XAiProvider, XAiChatbot } from '@ai-group/chat-sdk';
125
+
126
+ function App() {
127
+ return (
128
+ <XAiProvider
129
+ url="https://api.example.com/ai"
130
+ token="your-token-here"
131
+ providerId="custom-provider"
132
+ >
133
+ <XAiChatbot
134
+ navbarShow={true}
135
+ navbar={{
136
+ title: '自定义处理',
137
+ subtitle: '自定义消息处理逻辑',
138
+ }}
139
+ messageActions={[
140
+ {
141
+ key: 'custom',
142
+ icon: <span>🔧</span>,
143
+ tooltip: '自定义操作',
144
+ },
145
+ ]}
146
+ onMessagesActionsCallback={(index, data) => {
147
+ console.log('自定义操作:', index, data);
148
+ }}
149
+ />
150
+ </XAiProvider>
151
+ );
152
+ }
153
+ ```
154
+
155
+ ## Provider 模式的优势
156
+
157
+ ### 1. 自动消息管理
158
+ - Provider 自动处理消息的发送、接收、状态更新
159
+ - 支持流式响应和实时更新
160
+ - 自动处理错误状态和重试机制
161
+
162
+ ### 2. 统一的状态管理
163
+ - 所有聊天机器人的状态都在 Provider 中统一管理
164
+ - 支持消息历史记录、清空、重新生成等功能
165
+ - 提供 loading 状态和错误处理
166
+
167
+ ### 3. 灵活的配置
168
+ - 支持多个 Provider 实例,每个实例可以有不同的配置
169
+ - 支持 Token 刷新机制
170
+ - 支持自定义 AI 客户端配置
171
+
172
+ ### 4. 向后兼容
173
+ - XAiChatbot 可以独立使用,不依赖 Provider
174
+ - 现有的回调函数(onSend、onClear、onStop)仍然有效
175
+ - 可以平滑迁移到 Provider 模式
176
+
177
+ ## API 参考
178
+
179
+ ### XAiProvider Props
180
+
181
+ | 属性 | 类型 | 必填 | 说明 |
182
+ |------|------|------|------|
183
+ | url | string | 是 | AI 服务地址 |
184
+ | token | string | 是 | 认证 token |
185
+ | providerId | string | 否 | Provider 唯一标识 |
186
+ | onRefreshToken | () => Promise<string> | 否 | Token 刷新回调 |
187
+ | children | ReactNode | 是 | 子组件 |
188
+
189
+ ### XAiChatbot Props
190
+
191
+ XAiChatbot 支持所有原有的 props,同时在使用 Provider 时会自动使用 Provider 的状态和方法。
192
+
193
+ ## 样式覆盖
194
+
195
+ ### 覆盖 .ant-sender 样式
196
+
197
+ 你可以通过以下方式覆盖 Sender 组件的样式:
198
+
199
+ ```tsx
200
+ // 在 GlobalStyle 中添加
201
+ export const GlobalStyle: React.FC = () => (
202
+ <Global
203
+ styles={globalCss`
204
+ .ant-sender {
205
+ /* 在这里添加你想要覆盖的样式 */
206
+ border-radius: 8px !important;
207
+ background-color: #f5f5f5 !important;
208
+ border: 1px solid #d9d9d9 !important;
209
+ }
210
+
211
+ /* 如果需要覆盖 Sender 组件内部的特定元素 */
212
+ .ant-sender .ant-input {
213
+ /* 输入框样式覆盖 */
214
+ }
215
+
216
+ .ant-sender .ant-btn {
217
+ /* 按钮样式覆盖 */
218
+ }
219
+ `}
220
+ />
221
+ );
222
+ ```
223
+
224
+ ## 开发
225
+
226
+ ```bash
227
+ # 安装依赖
228
+ pnpm install
229
+
230
+ # 启动开发服务器
231
+ pnpm dev
232
+
233
+ # 构建
234
+ pnpm build
235
+ ```
236
+
237
+ ## 许可证
238
+
239
+ MIT
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <title>编组 5备份</title>
4
+ <g id="自主规划智能体25.7" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
5
+ <g id="预览调试" transform="translate(-100, -109)" stroke="#3961F2">
6
+ <g id="编组" transform="translate(84, 96)">
7
+ <g id="编组-5备份" transform="translate(16, 13)">
8
+ <path d="M9.63770387,0.5 L13.5,4.3563963 L13.5,12 C13.5,12.4142136 13.3321068,12.7892136 13.0606602,13.0606602 C12.7892136,13.3321068 12.4142136,13.5 12,13.5 L2,13.5 C1.58578644,13.5 1.21078644,13.3321068 0.939339828,13.0606602 C0.667893219,12.7892136 0.5,12.4142136 0.5,12 L0.5,2 C0.5,1.58578644 0.667893219,1.21078644 0.939339828,0.939339828 C1.21078644,0.667893219 1.58578644,0.5 2,0.5 L9.63770387,0.5 Z" id="矩形"></path>
9
+ <line x1="3.5" y1="5.5" x2="7.5" y2="5.5" id="直线" stroke-linecap="round" stroke-linejoin="round"></line>
10
+ <path d="M9.59276104,1.42542483 L9.59276104,3.42542483 C9.59276104,3.97770958 10.0404763,4.42542483 10.592761,4.42542483 L13.0804805,4.42542483 L13.0804805,4.42542483" id="直线备份-2" stroke-linecap="square"></path>
11
+ <line x1="3.5" y1="8.5" x2="9.5" y2="8.5" id="直线备份" stroke-linecap="round" stroke-linejoin="round"></line>
12
+ </g>
13
+ </g>
14
+ </g>
15
+ </g>
16
+ </svg>
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../../src/client/base.ts"],"sourcesContent":["// baseClient.ts\nimport { BubbleDataType } from '@ant-design/x/es/bubble/BubbleList';\n\nexport interface AiClient {\n appName: string;\n icon: string;\n send(message: string): Promise<any>;\n stream?(message: string, onMessage: (msg: any) => void): void;\n close?(): void;\n}\n\nexport type MessageType = BubbleDataType;\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=restClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../../src/client/restClient.ts"],"sourcesContent":[""],"mappings":""}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=wsClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../../src/client/wsClient.ts"],"sourcesContent":[""],"mappings":""}