@huyooo/ai-chat-shared 0.2.3
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/dist/index.d.ts +144 -0
- package/dist/index.js +262 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +505 -0
- package/package.json +40 -0
- package/src/highlighter.ts +80 -0
- package/src/index.ts +46 -0
- package/src/markdown.ts +79 -0
- package/src/parser.ts +205 -0
- package/src/styles.css +505 -0
- package/src/types.ts +90 -0
package/src/styles.css
ADDED
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown 渲染样式
|
|
3
|
+
* 参考 VitePress 和 GitHub 风格,优化显示效果
|
|
4
|
+
* 统一的样式,供 React 和 Vue 版本使用
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/* Markdown 容器 - VitePress 风格 */
|
|
8
|
+
.markdown-content {
|
|
9
|
+
font-size: 15px;
|
|
10
|
+
line-height: 1.75;
|
|
11
|
+
color: var(--chat-text, #e4e4e7);
|
|
12
|
+
word-break: break-word;
|
|
13
|
+
overflow-wrap: break-word;
|
|
14
|
+
letter-spacing: 0.01em;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* 段落 - 优化间距 */
|
|
18
|
+
.markdown-content p {
|
|
19
|
+
margin: 1em 0;
|
|
20
|
+
line-height: 1.75;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.markdown-content p:first-child {
|
|
24
|
+
margin-top: 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.markdown-content p:last-child {
|
|
28
|
+
margin-bottom: 0;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* 标题 - 统一的间距规则 */
|
|
32
|
+
.markdown-content h1,
|
|
33
|
+
.markdown-content h2,
|
|
34
|
+
.markdown-content h3,
|
|
35
|
+
.markdown-content h4,
|
|
36
|
+
.markdown-content h5,
|
|
37
|
+
.markdown-content h6 {
|
|
38
|
+
margin-top: 1em;
|
|
39
|
+
margin-bottom: 0.5em;
|
|
40
|
+
font-weight: 600;
|
|
41
|
+
line-height: 1.4;
|
|
42
|
+
color: var(--chat-text, #e4e4e7);
|
|
43
|
+
letter-spacing: -0.01em;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* 第一个标题不需要上边距 */
|
|
47
|
+
.markdown-content h1:first-child,
|
|
48
|
+
.markdown-content h2:first-child,
|
|
49
|
+
.markdown-content h3:first-child,
|
|
50
|
+
.markdown-content h4:first-child,
|
|
51
|
+
.markdown-content h5:first-child,
|
|
52
|
+
.markdown-content h6:first-child {
|
|
53
|
+
margin-top: 0;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* 标题字体大小 */
|
|
57
|
+
.markdown-content h1 {
|
|
58
|
+
font-size: 2em;
|
|
59
|
+
font-weight: 700;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.markdown-content h2 {
|
|
63
|
+
font-size: 1.5em;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.markdown-content h3 {
|
|
67
|
+
font-size: 1.25em;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.markdown-content h4 {
|
|
71
|
+
font-size: 1.1em;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.markdown-content h5 {
|
|
75
|
+
font-size: 1em;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.markdown-content h6 {
|
|
79
|
+
font-size: 0.9em;
|
|
80
|
+
color: var(--chat-text-muted, #a1a1aa);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* 列表 - GitHub 风格,更好的缩进 */
|
|
84
|
+
.markdown-content ul,
|
|
85
|
+
.markdown-content ol {
|
|
86
|
+
margin: 1em 0;
|
|
87
|
+
padding-left: 2em;
|
|
88
|
+
line-height: 1.75;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.markdown-content li {
|
|
92
|
+
margin: 0.4em 0;
|
|
93
|
+
line-height: 1.75;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.markdown-content li > p {
|
|
97
|
+
margin: 0.4em 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.markdown-content ul {
|
|
101
|
+
list-style-type: disc;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.markdown-content ol {
|
|
105
|
+
list-style-type: decimal;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.markdown-content ul ul,
|
|
109
|
+
.markdown-content ol ol,
|
|
110
|
+
.markdown-content ul ol,
|
|
111
|
+
.markdown-content ol ul {
|
|
112
|
+
margin: 0.3em 0;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* 嵌套列表样式 */
|
|
116
|
+
.markdown-content ul ul {
|
|
117
|
+
list-style-type: circle;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.markdown-content ul ul ul {
|
|
121
|
+
list-style-type: square;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* 代码 - 更现代的样式 */
|
|
125
|
+
.markdown-content code {
|
|
126
|
+
background: var(--chat-muted, #2a2a2a);
|
|
127
|
+
padding: 0.2em 0.4em;
|
|
128
|
+
border-radius: 4px;
|
|
129
|
+
font-family: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, "Courier New", monospace;
|
|
130
|
+
font-size: 0.9em;
|
|
131
|
+
color: var(--chat-code-text, #f4f4f5);
|
|
132
|
+
font-weight: 500;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.markdown-content pre {
|
|
136
|
+
background: transparent;
|
|
137
|
+
border: 1px solid var(--chat-border, rgba(255, 255, 255, 0.1));
|
|
138
|
+
border-radius: 8px;
|
|
139
|
+
padding: 16px;
|
|
140
|
+
overflow-x: auto;
|
|
141
|
+
margin: 1em 0;
|
|
142
|
+
font-family: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, "Courier New", monospace;
|
|
143
|
+
font-size: 14px;
|
|
144
|
+
line-height: 1.6;
|
|
145
|
+
position: relative;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/* 统一滚动条样式 */
|
|
149
|
+
.markdown-content pre::-webkit-scrollbar {
|
|
150
|
+
width: 6px;
|
|
151
|
+
height: 6px;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.markdown-content pre::-webkit-scrollbar-track {
|
|
155
|
+
background: transparent;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.markdown-content pre::-webkit-scrollbar-thumb {
|
|
159
|
+
background: var(--chat-scrollbar, rgba(255, 255, 255, 0.2));
|
|
160
|
+
border-radius: 3px;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.markdown-content pre::-webkit-scrollbar-thumb:hover {
|
|
164
|
+
background: var(--chat-scrollbar-hover, rgba(255, 255, 255, 0.3));
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.markdown-content pre code {
|
|
168
|
+
background: transparent;
|
|
169
|
+
padding: 0;
|
|
170
|
+
border-radius: 0;
|
|
171
|
+
font-size: inherit;
|
|
172
|
+
color: inherit;
|
|
173
|
+
border: none;
|
|
174
|
+
font-weight: normal;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.markdown-code-block {
|
|
178
|
+
background: transparent;
|
|
179
|
+
border: 1px solid var(--chat-border, rgba(255, 255, 255, 0.1));
|
|
180
|
+
border-radius: 8px;
|
|
181
|
+
padding: 16px;
|
|
182
|
+
overflow-x: auto;
|
|
183
|
+
margin: 1em 0;
|
|
184
|
+
font-family: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, "Courier New", monospace;
|
|
185
|
+
font-size: 14px;
|
|
186
|
+
line-height: 1.6;
|
|
187
|
+
position: relative;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* 统一滚动条样式 */
|
|
191
|
+
.markdown-code-block::-webkit-scrollbar {
|
|
192
|
+
width: 6px;
|
|
193
|
+
height: 6px;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.markdown-code-block::-webkit-scrollbar-track {
|
|
197
|
+
background: transparent;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.markdown-code-block::-webkit-scrollbar-thumb {
|
|
201
|
+
background: var(--chat-scrollbar, rgba(255, 255, 255, 0.2));
|
|
202
|
+
border-radius: 3px;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.markdown-code-block::-webkit-scrollbar-thumb:hover {
|
|
206
|
+
background: var(--chat-scrollbar-hover, rgba(255, 255, 255, 0.3));
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.markdown-code-block code {
|
|
210
|
+
background: transparent;
|
|
211
|
+
padding: 0;
|
|
212
|
+
border-radius: 0;
|
|
213
|
+
font-size: inherit;
|
|
214
|
+
color: var(--chat-code-text, #f4f4f5);
|
|
215
|
+
border: none;
|
|
216
|
+
font-weight: normal;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* 代码高亮样式 - One Dark Pro 主题 */
|
|
220
|
+
.markdown-code-block .hljs-keyword {
|
|
221
|
+
color: #c678dd;
|
|
222
|
+
}
|
|
223
|
+
.markdown-code-block .hljs-string {
|
|
224
|
+
color: #98c379;
|
|
225
|
+
}
|
|
226
|
+
.markdown-code-block .hljs-number {
|
|
227
|
+
color: #d19a66;
|
|
228
|
+
}
|
|
229
|
+
.markdown-code-block .hljs-comment {
|
|
230
|
+
color: #5c6370;
|
|
231
|
+
font-style: italic;
|
|
232
|
+
}
|
|
233
|
+
.markdown-code-block .hljs-function {
|
|
234
|
+
color: #61afef;
|
|
235
|
+
}
|
|
236
|
+
.markdown-code-block .hljs-class {
|
|
237
|
+
color: #e5c07b;
|
|
238
|
+
}
|
|
239
|
+
.markdown-code-block .hljs-variable {
|
|
240
|
+
color: #e06c75;
|
|
241
|
+
}
|
|
242
|
+
.markdown-code-block .hljs-operator {
|
|
243
|
+
color: #56b6c2;
|
|
244
|
+
}
|
|
245
|
+
.markdown-code-block .hljs-punctuation {
|
|
246
|
+
color: #abb2bf;
|
|
247
|
+
}
|
|
248
|
+
.markdown-code-block .hljs-property {
|
|
249
|
+
color: #e06c75;
|
|
250
|
+
}
|
|
251
|
+
.markdown-code-block .hljs-attr {
|
|
252
|
+
color: #d19a66;
|
|
253
|
+
}
|
|
254
|
+
.markdown-code-block .hljs-built_in {
|
|
255
|
+
color: #e5c07b;
|
|
256
|
+
}
|
|
257
|
+
.markdown-code-block .hljs-title {
|
|
258
|
+
color: #61afef;
|
|
259
|
+
}
|
|
260
|
+
.markdown-code-block .hljs-params {
|
|
261
|
+
color: #abb2bf;
|
|
262
|
+
}
|
|
263
|
+
.markdown-code-block .hljs-literal {
|
|
264
|
+
color: #56b6c2;
|
|
265
|
+
}
|
|
266
|
+
.markdown-code-block .hljs-type {
|
|
267
|
+
color: #e5c07b;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/* 引用 - VitePress 风格,更明显的视觉区分 */
|
|
271
|
+
.markdown-content blockquote {
|
|
272
|
+
margin: 1em 0;
|
|
273
|
+
padding: 0.5em 1em;
|
|
274
|
+
border-left: 4px solid var(--chat-primary, #3b82f6);
|
|
275
|
+
background: var(--chat-muted, #2a2a2a);
|
|
276
|
+
border-radius: 0 4px 4px 0;
|
|
277
|
+
color: var(--chat-text, #e4e4e7);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.markdown-content blockquote p {
|
|
281
|
+
margin: 0.5em 0;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.markdown-content blockquote p:first-child {
|
|
285
|
+
margin-top: 0;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.markdown-content blockquote p:last-child {
|
|
289
|
+
margin-bottom: 0;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/* 表格容器 - 支持横向滚动 */
|
|
293
|
+
.markdown-content .markdown-table-wrapper {
|
|
294
|
+
width: 100%;
|
|
295
|
+
overflow-x: auto;
|
|
296
|
+
margin: 1em 0;
|
|
297
|
+
border-radius: 8px;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/* 统一滚动条样式 */
|
|
301
|
+
.markdown-content .markdown-table-wrapper::-webkit-scrollbar {
|
|
302
|
+
width: 6px;
|
|
303
|
+
height: 6px;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.markdown-content .markdown-table-wrapper::-webkit-scrollbar-track {
|
|
307
|
+
background: transparent;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.markdown-content .markdown-table-wrapper::-webkit-scrollbar-thumb {
|
|
311
|
+
background: var(--chat-scrollbar, rgba(255, 255, 255, 0.2));
|
|
312
|
+
border-radius: 3px;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.markdown-content .markdown-table-wrapper::-webkit-scrollbar-thumb:hover {
|
|
316
|
+
background: var(--chat-scrollbar-hover, rgba(255, 255, 255, 0.3));
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/* 表格 */
|
|
320
|
+
.markdown-table {
|
|
321
|
+
width: 100%;
|
|
322
|
+
border-collapse: separate;
|
|
323
|
+
border-spacing: 0;
|
|
324
|
+
margin: 0;
|
|
325
|
+
font-size: 0.95em;
|
|
326
|
+
border: 1px solid var(--chat-border, #333);
|
|
327
|
+
border-radius: 8px;
|
|
328
|
+
overflow: hidden;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/* 表头样式 */
|
|
332
|
+
.markdown-table thead {
|
|
333
|
+
display: table-header-group;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.markdown-table th {
|
|
337
|
+
padding: 0.875em 1em;
|
|
338
|
+
text-align: left;
|
|
339
|
+
font-weight: 600;
|
|
340
|
+
color: var(--chat-text, #ccc);
|
|
341
|
+
border-bottom: 1px solid var(--chat-border, #333);
|
|
342
|
+
border-right: 1px solid var(--chat-border, #333);
|
|
343
|
+
border-top: none;
|
|
344
|
+
background: transparent;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.markdown-table th:last-child {
|
|
348
|
+
border-right: none;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/* 表格内容样式 */
|
|
352
|
+
.markdown-table tbody {
|
|
353
|
+
display: table-row-group;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.markdown-table td {
|
|
357
|
+
padding: 0.875em 1em;
|
|
358
|
+
text-align: left;
|
|
359
|
+
color: var(--chat-text, #ccc);
|
|
360
|
+
border-bottom: 1px solid var(--chat-border, #333);
|
|
361
|
+
border-right: 1px solid var(--chat-border, #333);
|
|
362
|
+
border-top: none;
|
|
363
|
+
vertical-align: top;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.markdown-table td:last-child {
|
|
367
|
+
border-right: none;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.markdown-table tbody tr:last-child td {
|
|
371
|
+
border-bottom: none;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/* 表格行悬停效果(可选,保持简洁) */
|
|
375
|
+
.markdown-table tbody tr {
|
|
376
|
+
transition: opacity 0.15s ease;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/* 表格中的图标和特殊内容 */
|
|
380
|
+
.markdown-table td img,
|
|
381
|
+
.markdown-table td svg,
|
|
382
|
+
.markdown-table th img,
|
|
383
|
+
.markdown-table th svg {
|
|
384
|
+
vertical-align: middle;
|
|
385
|
+
margin-right: 0.5em;
|
|
386
|
+
display: inline-block;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/* 表格中的进度条、星级等 */
|
|
390
|
+
.markdown-table td .progress,
|
|
391
|
+
.markdown-table td .stars {
|
|
392
|
+
display: inline-flex;
|
|
393
|
+
align-items: center;
|
|
394
|
+
gap: 0.25em;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/* 表格中的代码块 */
|
|
398
|
+
.markdown-table td code,
|
|
399
|
+
.markdown-table th code {
|
|
400
|
+
font-size: 0.85em;
|
|
401
|
+
padding: 0.15em 0.35em;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/* 表格响应式 */
|
|
405
|
+
@media (max-width: 768px) {
|
|
406
|
+
.markdown-table {
|
|
407
|
+
font-size: 13px;
|
|
408
|
+
border-radius: 6px;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
.markdown-table th,
|
|
412
|
+
.markdown-table td {
|
|
413
|
+
padding: 0.6em 0.8em;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
/* 链接 - VitePress 风格 */
|
|
418
|
+
.markdown-link {
|
|
419
|
+
color: var(--chat-link, #60a5fa);
|
|
420
|
+
text-decoration: none;
|
|
421
|
+
border-bottom: 1px solid transparent;
|
|
422
|
+
transition: all 0.2s ease;
|
|
423
|
+
font-weight: 500;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
.markdown-link:hover {
|
|
427
|
+
color: var(--chat-link, #3b82f6);
|
|
428
|
+
border-bottom-color: var(--chat-link, #3b82f6);
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/* 图片 - 优化显示 */
|
|
432
|
+
.markdown-content img {
|
|
433
|
+
max-width: 100%;
|
|
434
|
+
height: auto;
|
|
435
|
+
border-radius: 6px;
|
|
436
|
+
margin: 1em 0;
|
|
437
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/* 水平线 - 更优雅 */
|
|
441
|
+
.markdown-content hr {
|
|
442
|
+
border: none;
|
|
443
|
+
border-top: 1px solid var(--chat-border, rgba(255, 255, 255, 0.1));
|
|
444
|
+
margin: 1em 0;
|
|
445
|
+
height: 0;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/* 强调 */
|
|
449
|
+
.markdown-content strong {
|
|
450
|
+
font-weight: 600;
|
|
451
|
+
color: var(--chat-text, #e4e4e7);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
.markdown-content em {
|
|
455
|
+
font-style: italic;
|
|
456
|
+
color: var(--chat-text, #e4e4e7);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
.markdown-content u {
|
|
460
|
+
text-decoration: underline;
|
|
461
|
+
text-decoration-color: var(--chat-text-muted, #a1a1aa);
|
|
462
|
+
text-underline-offset: 0.15em;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
.markdown-content s {
|
|
466
|
+
text-decoration: line-through;
|
|
467
|
+
opacity: 0.7;
|
|
468
|
+
color: var(--chat-text-muted, #a1a1aa);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
/* 任务列表 - checkbox 显示为文本 */
|
|
472
|
+
.markdown-content .markdown-task-item {
|
|
473
|
+
list-style-type: disc;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
.markdown-content .markdown-task-checkbox {
|
|
477
|
+
font-size: 1em;
|
|
478
|
+
color: var(--chat-text, #e4e4e7);
|
|
479
|
+
user-select: none;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/* 定义列表 */
|
|
483
|
+
.markdown-content dl {
|
|
484
|
+
margin: 1em 0;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
.markdown-content dt {
|
|
488
|
+
font-weight: 600;
|
|
489
|
+
margin-top: 0.8em;
|
|
490
|
+
color: var(--chat-text, #e4e4e7);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
.markdown-content dd {
|
|
494
|
+
margin: 0.4em 0 0.8em 2em;
|
|
495
|
+
color: var(--chat-text-muted, #a1a1aa);
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
/* 代码块中的行号(如果使用) */
|
|
499
|
+
.markdown-code-block .line-numbers {
|
|
500
|
+
padding-right: 1em;
|
|
501
|
+
border-right: 1px solid var(--chat-border, rgba(255, 255, 255, 0.1));
|
|
502
|
+
margin-right: 1em;
|
|
503
|
+
user-select: none;
|
|
504
|
+
opacity: 0.5;
|
|
505
|
+
}
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Chat 共享类型定义
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// ============ 内容块类型 ============
|
|
6
|
+
|
|
7
|
+
/** 内容块类型 */
|
|
8
|
+
export type ContentBlockType = 'text' | 'code'
|
|
9
|
+
|
|
10
|
+
/** 内容块基础接口 */
|
|
11
|
+
export interface ContentBlockBase {
|
|
12
|
+
id: string
|
|
13
|
+
type: ContentBlockType
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** 文本块 */
|
|
17
|
+
export interface TextBlock extends ContentBlockBase {
|
|
18
|
+
type: 'text'
|
|
19
|
+
content: string
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** 代码块 */
|
|
23
|
+
export interface CodeBlock extends ContentBlockBase {
|
|
24
|
+
type: 'code'
|
|
25
|
+
content: string
|
|
26
|
+
language?: string
|
|
27
|
+
filename?: string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** 内容块联合类型 */
|
|
31
|
+
export type ContentBlock = TextBlock | CodeBlock
|
|
32
|
+
|
|
33
|
+
// ============ 工具渲染器类型 ============
|
|
34
|
+
|
|
35
|
+
/** 工具渲染器 Props */
|
|
36
|
+
export interface ToolRendererProps {
|
|
37
|
+
/** 工具名称 */
|
|
38
|
+
toolName: string
|
|
39
|
+
/** 工具参数 */
|
|
40
|
+
toolArgs: Record<string, unknown>
|
|
41
|
+
/** 工具返回结果 */
|
|
42
|
+
toolResult: unknown
|
|
43
|
+
/** 执行状态 */
|
|
44
|
+
status: 'running' | 'completed' | 'error'
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// ============ 内置工具结果数据类型 ============
|
|
48
|
+
|
|
49
|
+
/** 天气数据 */
|
|
50
|
+
export interface WeatherData {
|
|
51
|
+
city: string
|
|
52
|
+
temperature: number
|
|
53
|
+
condition: string
|
|
54
|
+
humidity?: number
|
|
55
|
+
wind?: string
|
|
56
|
+
icon?: string
|
|
57
|
+
forecast?: WeatherForecastItem[]
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** 天气预报项 */
|
|
61
|
+
export interface WeatherForecastItem {
|
|
62
|
+
date: string
|
|
63
|
+
high: number
|
|
64
|
+
low: number
|
|
65
|
+
condition: string
|
|
66
|
+
icon?: string
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** 搜索结果项 */
|
|
70
|
+
export interface SearchResultItem {
|
|
71
|
+
title: string
|
|
72
|
+
url: string
|
|
73
|
+
snippet?: string
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** 代码执行结果 */
|
|
77
|
+
export interface CodeExecutionResult {
|
|
78
|
+
output: string
|
|
79
|
+
exitCode: number
|
|
80
|
+
error?: string
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** 文件操作结果 */
|
|
84
|
+
export interface FileOperationResult {
|
|
85
|
+
success: boolean
|
|
86
|
+
path: string
|
|
87
|
+
operation: 'read' | 'write' | 'delete' | 'create' | 'move'
|
|
88
|
+
content?: string
|
|
89
|
+
error?: string
|
|
90
|
+
}
|