@huyooo/ai-chat-types 0.2.22
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 +389 -0
- package/dist/index.js +1 -0
- package/package.json +41 -0
- package/src/index.ts +486 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
export { AbortEvent, ChatEvent, ChatEventType, DoneEvent, ErrorCategory, ErrorDetails, ErrorEvent, PlanStep, PlanStepStatus, SearchEndEvent, SearchEvent, SearchResult, SearchResultEvent, SearchStartEvent, SideEffect, StatusEvent, StepEndEvent, StepEvent, StepStartEvent, TextDeltaEvent, TextEvent, ThinkingDeltaEvent, ThinkingEndEvent, ThinkingEvent, ThinkingStartEvent, TokenUsage, ToolApprovalRequestEvent, ToolCallInfo, ToolCallOutputEvent, ToolCallResultEvent, ToolCallStartEvent, ToolCallStatus, ToolEvent, createAbort, createApiError, createDone, createError, createParseError, createRateLimitError, createSearchEnd, createSearchResult, createSearchStart, createStepEnd, createStepStart, createTextDelta, createThinkingDelta, createThinkingEnd, createThinkingStart, createTimeoutError, createToolCallOutput, createToolCallResult, createToolCallStart, createToolError, isAbortEvent, isErrorEvent, isRetryableError, isSearchEvent, isStatusEvent, isStepEvent, isTextEvent, isThinkingEvent, isToolEvent } from '@huyooo/ai-chat-core/events';
|
|
2
|
+
import { ModelOption, ChatEvent } from '@huyooo/ai-chat-core';
|
|
3
|
+
export { AutoRunConfig, AutoRunMode, McpConnectionInfo, McpConnectionStatus, McpServerConfig, ModelOption, ProviderType, ThinkingMode } from '@huyooo/ai-chat-core';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @huyooo/ai-chat-types
|
|
7
|
+
*
|
|
8
|
+
* AI Chat 公共类型定义
|
|
9
|
+
*
|
|
10
|
+
* 架构层级:
|
|
11
|
+
* 1. ai-chat-core - 核心引擎(定义事件、工具等核心类型)
|
|
12
|
+
* 2. ai-chat-types - 公共接口(导出 ChatAdapter、重新导出 ChatEvent)
|
|
13
|
+
* 3. 各适配器包 - 实现 ChatAdapter 接口
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/** 对话模式(扩展支持 'plan',兼容旧数据) */
|
|
17
|
+
type ChatMode = 'agent' | 'ask' | 'plan';
|
|
18
|
+
/** 聊天历史消息(无状态架构传入) */
|
|
19
|
+
interface ChatHistoryMessage {
|
|
20
|
+
role: 'user' | 'assistant' | 'system' | 'tool';
|
|
21
|
+
content: string;
|
|
22
|
+
}
|
|
23
|
+
/** 聊天选项(使用本地 ChatMode) */
|
|
24
|
+
interface ChatOptions {
|
|
25
|
+
mode?: ChatMode;
|
|
26
|
+
model?: string;
|
|
27
|
+
provider?: string;
|
|
28
|
+
enableWebSearch?: boolean;
|
|
29
|
+
thinkingMode?: 'enabled' | 'disabled';
|
|
30
|
+
enabledTools?: string[];
|
|
31
|
+
autoRunConfig?: {
|
|
32
|
+
mode?: 'run-everything' | 'manual';
|
|
33
|
+
};
|
|
34
|
+
history?: ChatHistoryMessage[];
|
|
35
|
+
/** Skills 内容(启用的 Skills 的 content 数组,前端拼好传入) */
|
|
36
|
+
skillContents?: string[];
|
|
37
|
+
}
|
|
38
|
+
/** 会话记录 */
|
|
39
|
+
interface SessionRecord {
|
|
40
|
+
id: string;
|
|
41
|
+
appId: string | null;
|
|
42
|
+
userId: string | null;
|
|
43
|
+
title: string;
|
|
44
|
+
model: string;
|
|
45
|
+
mode: ChatMode;
|
|
46
|
+
webSearchEnabled: boolean;
|
|
47
|
+
thinkingEnabled: boolean;
|
|
48
|
+
/** 是否在 tab 栏隐藏(关闭但不删除) */
|
|
49
|
+
hidden: boolean;
|
|
50
|
+
createdAt: Date;
|
|
51
|
+
updatedAt: Date;
|
|
52
|
+
}
|
|
53
|
+
/** 消息记录 */
|
|
54
|
+
interface MessageRecord {
|
|
55
|
+
id: string;
|
|
56
|
+
/** 前端关联 ID(本地模式与 id 相同,云端模式为前端生成的 UUID) */
|
|
57
|
+
clientId?: string | null;
|
|
58
|
+
sessionId: string;
|
|
59
|
+
role: 'user' | 'assistant';
|
|
60
|
+
content: string;
|
|
61
|
+
/** 用户消息附带的图片(data URL 或 base64) */
|
|
62
|
+
images: string[];
|
|
63
|
+
/** 生成此消息时使用的模型 */
|
|
64
|
+
model?: string | null;
|
|
65
|
+
/** 生成此消息时使用的模式 (ask/agent) */
|
|
66
|
+
mode?: string | null;
|
|
67
|
+
/** 生成此消息时是否启用 web 搜索 */
|
|
68
|
+
webSearchEnabled?: boolean | null;
|
|
69
|
+
/** 生成此消息时是否启用深度思考 */
|
|
70
|
+
thinkingEnabled?: boolean | null;
|
|
71
|
+
/** 执行步骤列表 JSON */
|
|
72
|
+
steps?: string | null;
|
|
73
|
+
operationIds?: string | null;
|
|
74
|
+
/** Token 使用统计(JSON 字符串) */
|
|
75
|
+
usage?: string | null;
|
|
76
|
+
/** 响应耗时(毫秒) */
|
|
77
|
+
duration?: number | null;
|
|
78
|
+
/** 消息序号(会话内递增,用于分叉删除) */
|
|
79
|
+
sequence: number;
|
|
80
|
+
/** 时间戳(毫秒,Unix 时间戳) */
|
|
81
|
+
timestamp: number;
|
|
82
|
+
}
|
|
83
|
+
/** 操作记录 */
|
|
84
|
+
interface OperationRecord {
|
|
85
|
+
id: string;
|
|
86
|
+
sessionId: string;
|
|
87
|
+
messageId?: string | null;
|
|
88
|
+
command: string;
|
|
89
|
+
operationType: string;
|
|
90
|
+
affectedFiles: string;
|
|
91
|
+
status: string;
|
|
92
|
+
timestamp: Date;
|
|
93
|
+
}
|
|
94
|
+
/** 回收站记录 */
|
|
95
|
+
interface TrashRecord {
|
|
96
|
+
id: string;
|
|
97
|
+
sessionId: string;
|
|
98
|
+
originalPath: string;
|
|
99
|
+
trashPath: string;
|
|
100
|
+
deletedAt: Date;
|
|
101
|
+
autoDeleteAt: Date;
|
|
102
|
+
}
|
|
103
|
+
/** Skill 记录(云端管理的 system prompt 片段) */
|
|
104
|
+
interface SkillRecord {
|
|
105
|
+
id: string;
|
|
106
|
+
name: string;
|
|
107
|
+
description: string;
|
|
108
|
+
content: string;
|
|
109
|
+
icon: string;
|
|
110
|
+
enabled: boolean;
|
|
111
|
+
builtIn: boolean;
|
|
112
|
+
createdAt: Date;
|
|
113
|
+
updatedAt: Date;
|
|
114
|
+
}
|
|
115
|
+
/** 文件信息 */
|
|
116
|
+
interface FileInfo {
|
|
117
|
+
name: string;
|
|
118
|
+
path: string;
|
|
119
|
+
isDirectory: boolean;
|
|
120
|
+
size: number;
|
|
121
|
+
modifiedAt: Date;
|
|
122
|
+
extension: string;
|
|
123
|
+
}
|
|
124
|
+
/** 工具信息 */
|
|
125
|
+
interface ToolInfo {
|
|
126
|
+
name: string;
|
|
127
|
+
description: string;
|
|
128
|
+
}
|
|
129
|
+
/** 工具批准请求 */
|
|
130
|
+
interface ToolApprovalRequest {
|
|
131
|
+
id: string;
|
|
132
|
+
name: string;
|
|
133
|
+
args: Record<string, unknown>;
|
|
134
|
+
}
|
|
135
|
+
/** ASR 会话配置 */
|
|
136
|
+
interface AsrSessionConfig {
|
|
137
|
+
/** 音频格式 */
|
|
138
|
+
format?: 'pcm' | 'wav';
|
|
139
|
+
/** 采样率 */
|
|
140
|
+
sampleRate?: number;
|
|
141
|
+
/** 启用标点 */
|
|
142
|
+
enablePunc?: boolean;
|
|
143
|
+
/** 启用 ITN(数字规整) */
|
|
144
|
+
enableItn?: boolean;
|
|
145
|
+
/** 启用语义顺滑 */
|
|
146
|
+
enableDdc?: boolean;
|
|
147
|
+
/** 输出分句信息 */
|
|
148
|
+
showUtterances?: boolean;
|
|
149
|
+
}
|
|
150
|
+
/** ASR 识别结果 */
|
|
151
|
+
interface AsrResultData {
|
|
152
|
+
result?: {
|
|
153
|
+
text: string;
|
|
154
|
+
utterances?: Array<{
|
|
155
|
+
text: string;
|
|
156
|
+
start_time: number;
|
|
157
|
+
end_time: number;
|
|
158
|
+
definite: boolean;
|
|
159
|
+
}>;
|
|
160
|
+
};
|
|
161
|
+
audio_info?: {
|
|
162
|
+
duration: number;
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* ChatAdapter 接口
|
|
168
|
+
*
|
|
169
|
+
* 统一的聊天适配器接口,支持多种实现:
|
|
170
|
+
* - Electron IPC(ai-chat-bridge-electron)
|
|
171
|
+
* - HTTP/SSE(ai-chat-adapter-http)
|
|
172
|
+
* - 直连(ai-chat-adapter-direct,CLI 用)
|
|
173
|
+
*
|
|
174
|
+
* 行为统一保证:无论使用哪种实现(本地直连 / HTTP / 混合),对调用方接口一致——
|
|
175
|
+
* getModels()、sendMessage()、getSessions() 等语义相同,sendMessage 产出的事件均为
|
|
176
|
+
* ChatEvent 类型集(见 ai-chat-core/events),事件 type 与 data 形状由类型定义约束,
|
|
177
|
+
* 不因适配器或模型而异。core 层通过契约测试(CHAT_EVENT_TYPES)保证 Orchestrator
|
|
178
|
+
* 产出合法事件。
|
|
179
|
+
*/
|
|
180
|
+
interface ChatAdapter {
|
|
181
|
+
/** 获取可用模型 */
|
|
182
|
+
getModels(): Promise<ModelOption[]>;
|
|
183
|
+
/** 获取所有工具列表(用于设置面板) */
|
|
184
|
+
getAllTools?(): Promise<ToolInfo[]>;
|
|
185
|
+
/** 发送消息,返回异步迭代器 */
|
|
186
|
+
sendMessage(message: string, options?: ChatOptions, images?: string[], sessionId?: string): AsyncIterable<ChatEvent>;
|
|
187
|
+
/** 取消当前请求 */
|
|
188
|
+
cancel(): void;
|
|
189
|
+
/** 设置当前工作目录 */
|
|
190
|
+
setCwd?(dir: string): void;
|
|
191
|
+
/** 获取会话列表 */
|
|
192
|
+
getSessions(): Promise<SessionRecord[]>;
|
|
193
|
+
/** 获取单个会话 */
|
|
194
|
+
getSession(id: string): Promise<SessionRecord | null>;
|
|
195
|
+
/** 创建会话 */
|
|
196
|
+
createSession(params?: CreateSessionParams): Promise<SessionRecord>;
|
|
197
|
+
/** 更新会话 */
|
|
198
|
+
updateSession(id: string, data: UpdateSessionParams): Promise<SessionRecord | null>;
|
|
199
|
+
/** 删除会话 */
|
|
200
|
+
deleteSession(id: string): Promise<void>;
|
|
201
|
+
/** 获取会话消息 */
|
|
202
|
+
getMessages(sessionId: string): Promise<MessageRecord[]>;
|
|
203
|
+
/** 保存消息 */
|
|
204
|
+
saveMessage(params: SaveMessageParams): Promise<MessageRecord>;
|
|
205
|
+
/** 更新消息(增量保存) */
|
|
206
|
+
updateMessage(params: UpdateMessageParams): Promise<void>;
|
|
207
|
+
/** 删除指定时间之后的消息(用于分叉) */
|
|
208
|
+
deleteMessagesAfter(sessionId: string, timestamp: number): Promise<void>;
|
|
209
|
+
/** 删除指定消息之后的所有消息(用于分叉) */
|
|
210
|
+
deleteMessagesAfterMessageId(sessionId: string, messageId: string): Promise<void>;
|
|
211
|
+
/** 获取操作日志 */
|
|
212
|
+
getOperations(sessionId: string): Promise<OperationRecord[]>;
|
|
213
|
+
/** 获取回收站 */
|
|
214
|
+
getTrashItems(): Promise<TrashRecord[]>;
|
|
215
|
+
/** 恢复回收站项目 */
|
|
216
|
+
restoreFromTrash(id: string): Promise<TrashRecord | undefined>;
|
|
217
|
+
listDir?(dirPath: string): Promise<FileInfo[]>;
|
|
218
|
+
exists?(filePath: string): Promise<boolean>;
|
|
219
|
+
stat?(filePath: string): Promise<FileInfo | null>;
|
|
220
|
+
readFile?(filePath: string): Promise<string | null>;
|
|
221
|
+
readFileBase64?(filePath: string): Promise<string | null>;
|
|
222
|
+
homeDir?(): Promise<string>;
|
|
223
|
+
resolvePath?(inputPath: string): Promise<string>;
|
|
224
|
+
parentDir?(dirPath: string): Promise<string>;
|
|
225
|
+
watchDir?(dirPath: string): Promise<boolean>;
|
|
226
|
+
unwatchDir?(dirPath: string): Promise<void>;
|
|
227
|
+
onDirChange?(callback: (data: {
|
|
228
|
+
dirPath: string;
|
|
229
|
+
eventType: string;
|
|
230
|
+
filename: string | null;
|
|
231
|
+
}) => void): () => void;
|
|
232
|
+
getSetting?(key: string): Promise<string | null>;
|
|
233
|
+
setSetting?(key: string, value: string): Promise<void>;
|
|
234
|
+
getAllSettings?(): Promise<Record<string, string>>;
|
|
235
|
+
deleteSetting?(key: string): Promise<void>;
|
|
236
|
+
getIndexStats?(): Promise<{
|
|
237
|
+
totalDocuments: number;
|
|
238
|
+
indexSize: number;
|
|
239
|
+
lastUpdated: string | null;
|
|
240
|
+
}>;
|
|
241
|
+
getIndexStatus?(): Promise<{
|
|
242
|
+
isIndexing: boolean;
|
|
243
|
+
lastProgress: {
|
|
244
|
+
indexed: number;
|
|
245
|
+
total: number;
|
|
246
|
+
currentFile?: string;
|
|
247
|
+
stage: string;
|
|
248
|
+
} | null;
|
|
249
|
+
}>;
|
|
250
|
+
syncIndex?(): Promise<{
|
|
251
|
+
success: boolean;
|
|
252
|
+
}>;
|
|
253
|
+
cancelIndex?(): Promise<{
|
|
254
|
+
success: boolean;
|
|
255
|
+
}>;
|
|
256
|
+
deleteIndex?(): Promise<{
|
|
257
|
+
success: boolean;
|
|
258
|
+
}>;
|
|
259
|
+
registerIndexListener?(): Promise<{
|
|
260
|
+
success: boolean;
|
|
261
|
+
}>;
|
|
262
|
+
unregisterIndexListener?(): Promise<{
|
|
263
|
+
success: boolean;
|
|
264
|
+
}>;
|
|
265
|
+
onIndexProgress?(callback: (progress: {
|
|
266
|
+
indexed: number;
|
|
267
|
+
total: number;
|
|
268
|
+
currentFile?: string;
|
|
269
|
+
stage: string;
|
|
270
|
+
error?: string;
|
|
271
|
+
}) => void): () => void;
|
|
272
|
+
/** 获取 Skills 列表 */
|
|
273
|
+
getSkills?(): Promise<SkillRecord[]>;
|
|
274
|
+
/** 创建 Skill */
|
|
275
|
+
createSkill?(data: {
|
|
276
|
+
name: string;
|
|
277
|
+
description?: string;
|
|
278
|
+
content: string;
|
|
279
|
+
icon?: string;
|
|
280
|
+
}): Promise<SkillRecord>;
|
|
281
|
+
/** 更新 Skill */
|
|
282
|
+
updateSkill?(id: string, data: {
|
|
283
|
+
name?: string;
|
|
284
|
+
description?: string;
|
|
285
|
+
content?: string;
|
|
286
|
+
icon?: string;
|
|
287
|
+
enabled?: boolean;
|
|
288
|
+
}): Promise<void>;
|
|
289
|
+
/** 删除 Skill */
|
|
290
|
+
deleteSkill?(id: string): Promise<void>;
|
|
291
|
+
/** 切换 Skill 启用状态 */
|
|
292
|
+
toggleSkill?(id: string): Promise<{
|
|
293
|
+
enabled: boolean;
|
|
294
|
+
}>;
|
|
295
|
+
onToolApprovalRequest?(callback: (request: ToolApprovalRequest) => void): () => void;
|
|
296
|
+
respondToolApproval?(id: string, approved: boolean): Promise<void>;
|
|
297
|
+
asrStart?(config?: AsrSessionConfig): Promise<{
|
|
298
|
+
success: boolean;
|
|
299
|
+
error?: string;
|
|
300
|
+
}>;
|
|
301
|
+
asrSendAudio?(audioData: ArrayBufferLike): Promise<{
|
|
302
|
+
success: boolean;
|
|
303
|
+
error?: string;
|
|
304
|
+
}>;
|
|
305
|
+
asrFinish?(): Promise<{
|
|
306
|
+
success: boolean;
|
|
307
|
+
error?: string;
|
|
308
|
+
}>;
|
|
309
|
+
asrStop?(): Promise<{
|
|
310
|
+
success: boolean;
|
|
311
|
+
}>;
|
|
312
|
+
asrStatus?(): Promise<{
|
|
313
|
+
connected: boolean;
|
|
314
|
+
}>;
|
|
315
|
+
asrWarmup?(config?: AsrSessionConfig): Promise<{
|
|
316
|
+
success: boolean;
|
|
317
|
+
error?: string;
|
|
318
|
+
}>;
|
|
319
|
+
onAsrConnected?(callback: () => void): () => void;
|
|
320
|
+
onAsrResult?(callback: (data: {
|
|
321
|
+
result: AsrResultData;
|
|
322
|
+
isLast: boolean;
|
|
323
|
+
}) => void): () => void;
|
|
324
|
+
onAsrError?(callback: (error: {
|
|
325
|
+
message: string;
|
|
326
|
+
}) => void): () => void;
|
|
327
|
+
onAsrClosed?(callback: () => void): () => void;
|
|
328
|
+
openExternal?(url: string): Promise<void>;
|
|
329
|
+
}
|
|
330
|
+
/** 创建会话参数 */
|
|
331
|
+
interface CreateSessionParams {
|
|
332
|
+
title?: string;
|
|
333
|
+
model?: string;
|
|
334
|
+
mode?: string;
|
|
335
|
+
webSearchEnabled?: boolean;
|
|
336
|
+
thinkingEnabled?: boolean;
|
|
337
|
+
hidden?: boolean;
|
|
338
|
+
}
|
|
339
|
+
/** 更新会话参数 */
|
|
340
|
+
interface UpdateSessionParams {
|
|
341
|
+
title?: string;
|
|
342
|
+
model?: string;
|
|
343
|
+
mode?: string;
|
|
344
|
+
webSearchEnabled?: boolean;
|
|
345
|
+
thinkingEnabled?: boolean;
|
|
346
|
+
hidden?: boolean;
|
|
347
|
+
}
|
|
348
|
+
/** 保存消息参数 */
|
|
349
|
+
interface SaveMessageParams {
|
|
350
|
+
id?: string;
|
|
351
|
+
sessionId: string;
|
|
352
|
+
role: 'user' | 'assistant';
|
|
353
|
+
content: string;
|
|
354
|
+
images?: string[];
|
|
355
|
+
model?: string;
|
|
356
|
+
mode?: string;
|
|
357
|
+
webSearchEnabled?: boolean;
|
|
358
|
+
thinkingEnabled?: boolean;
|
|
359
|
+
steps?: string;
|
|
360
|
+
operationIds?: string;
|
|
361
|
+
}
|
|
362
|
+
/** 更新消息参数 */
|
|
363
|
+
interface UpdateMessageParams {
|
|
364
|
+
id: string;
|
|
365
|
+
content?: string;
|
|
366
|
+
steps?: string;
|
|
367
|
+
operationIds?: string;
|
|
368
|
+
/** Token 使用统计(JSON 字符串) */
|
|
369
|
+
usage?: string;
|
|
370
|
+
/** 响应耗时(毫秒) */
|
|
371
|
+
duration?: number;
|
|
372
|
+
}
|
|
373
|
+
/** 发送消息参数 */
|
|
374
|
+
interface SendMessageParams {
|
|
375
|
+
message: string;
|
|
376
|
+
images?: string[];
|
|
377
|
+
sessionId?: string;
|
|
378
|
+
options?: {
|
|
379
|
+
mode?: string;
|
|
380
|
+
model?: string;
|
|
381
|
+
provider?: string;
|
|
382
|
+
enableWebSearch?: boolean;
|
|
383
|
+
thinkingMode?: string;
|
|
384
|
+
thinkingBudget?: number;
|
|
385
|
+
history?: ChatHistoryMessage[];
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
export type { AsrResultData, AsrSessionConfig, ChatAdapter, ChatHistoryMessage, ChatMode, ChatOptions, CreateSessionParams, FileInfo, MessageRecord, OperationRecord, SaveMessageParams, SendMessageParams, SessionRecord, SkillRecord, ToolApprovalRequest, ToolInfo, TrashRecord, UpdateMessageParams, UpdateSessionParams };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createThinkingStart as o,createThinkingDelta as e,createThinkingEnd as r,createSearchStart as t,createSearchResult as a,createSearchEnd as c,createToolCallStart as h,createToolCallResult as i,createToolCallOutput as m,createTextDelta as p,createDone as f,createError as n,createApiError as s,createRateLimitError as u,createToolError as v,createTimeoutError as x,createParseError as y,createAbort as b,createStepStart as d,createStepEnd as g,isThinkingEvent as j,isSearchEvent as k,isToolEvent as l,isTextEvent as q,isStatusEvent as w,isErrorEvent as z,isAbortEvent as A,isStepEvent as B,isRetryableError as C}from"@huyooo/ai-chat-core/events";export{b as createAbort,s as createApiError,f as createDone,n as createError,y as createParseError,u as createRateLimitError,c as createSearchEnd,a as createSearchResult,t as createSearchStart,g as createStepEnd,d as createStepStart,p as createTextDelta,e as createThinkingDelta,r as createThinkingEnd,o as createThinkingStart,x as createTimeoutError,m as createToolCallOutput,i as createToolCallResult,h as createToolCallStart,v as createToolError,A as isAbortEvent,z as isErrorEvent,C as isRetryableError,k as isSearchEvent,w as isStatusEvent,B as isStepEvent,q as isTextEvent,j as isThinkingEvent,l as isToolEvent};
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@huyooo/ai-chat-types",
|
|
3
|
+
"version": "0.2.22",
|
|
4
|
+
"description": "AI Chat 通用类型定义 - 支持 Electron/Web/CLI 多端",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"development": "./src/index.ts",
|
|
13
|
+
"import": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"src"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsup",
|
|
22
|
+
"dev": "tsup --watch",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"test:watch": "vitest"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@huyooo/ai-chat-core": "^0.2.22"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"tsup": "^8.0.0",
|
|
31
|
+
"typescript": "^5.9.0",
|
|
32
|
+
"vitest": "^4.0.18"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"ai",
|
|
36
|
+
"chat",
|
|
37
|
+
"types",
|
|
38
|
+
"typescript"
|
|
39
|
+
],
|
|
40
|
+
"license": "MIT"
|
|
41
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @huyooo/ai-chat-types
|
|
3
|
+
*
|
|
4
|
+
* AI Chat 公共类型定义
|
|
5
|
+
*
|
|
6
|
+
* 架构层级:
|
|
7
|
+
* 1. ai-chat-core - 核心引擎(定义事件、工具等核心类型)
|
|
8
|
+
* 2. ai-chat-types - 公共接口(导出 ChatAdapter、重新导出 ChatEvent)
|
|
9
|
+
* 3. 各适配器包 - 实现 ChatAdapter 接口
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
// ==================== 从 ai-chat-core/events 重新导出事件类型 ====================
|
|
13
|
+
// 使用子路径导出,避免在 renderer 中拉入 ai-chat-core 整个模块图
|
|
14
|
+
// (ai-chat-core 主入口包含 HybridAgent → MCP SDK 等 Node.js 依赖)
|
|
15
|
+
|
|
16
|
+
export type {
|
|
17
|
+
// 聚合类型
|
|
18
|
+
ChatEvent,
|
|
19
|
+
ChatEventType,
|
|
20
|
+
|
|
21
|
+
// 基础类型
|
|
22
|
+
SearchResult,
|
|
23
|
+
ToolCallStatus,
|
|
24
|
+
ToolCallInfo,
|
|
25
|
+
TokenUsage,
|
|
26
|
+
ErrorCategory,
|
|
27
|
+
ErrorDetails,
|
|
28
|
+
SideEffect,
|
|
29
|
+
|
|
30
|
+
// 思考事件
|
|
31
|
+
ThinkingStartEvent,
|
|
32
|
+
ThinkingDeltaEvent,
|
|
33
|
+
ThinkingEndEvent,
|
|
34
|
+
ThinkingEvent,
|
|
35
|
+
|
|
36
|
+
// 搜索事件
|
|
37
|
+
SearchStartEvent,
|
|
38
|
+
SearchResultEvent,
|
|
39
|
+
SearchEndEvent,
|
|
40
|
+
SearchEvent,
|
|
41
|
+
|
|
42
|
+
// 工具事件
|
|
43
|
+
ToolCallStartEvent,
|
|
44
|
+
ToolCallResultEvent,
|
|
45
|
+
ToolCallOutputEvent,
|
|
46
|
+
ToolApprovalRequestEvent,
|
|
47
|
+
ToolEvent,
|
|
48
|
+
|
|
49
|
+
// 文本事件
|
|
50
|
+
TextDeltaEvent,
|
|
51
|
+
TextEvent,
|
|
52
|
+
|
|
53
|
+
// 计划类型
|
|
54
|
+
PlanStep,
|
|
55
|
+
PlanStepStatus,
|
|
56
|
+
|
|
57
|
+
// 状态事件
|
|
58
|
+
DoneEvent,
|
|
59
|
+
ErrorEvent,
|
|
60
|
+
AbortEvent,
|
|
61
|
+
StatusEvent,
|
|
62
|
+
|
|
63
|
+
// 步骤事件
|
|
64
|
+
StepStartEvent,
|
|
65
|
+
StepEndEvent,
|
|
66
|
+
StepEvent,
|
|
67
|
+
} from '@huyooo/ai-chat-core/events'
|
|
68
|
+
|
|
69
|
+
// 重新导出事件创建函数和类型守卫(从子路径导入,renderer 安全)
|
|
70
|
+
export {
|
|
71
|
+
createThinkingStart,
|
|
72
|
+
createThinkingDelta,
|
|
73
|
+
createThinkingEnd,
|
|
74
|
+
createSearchStart,
|
|
75
|
+
createSearchResult,
|
|
76
|
+
createSearchEnd,
|
|
77
|
+
createToolCallStart,
|
|
78
|
+
createToolCallResult,
|
|
79
|
+
createToolCallOutput,
|
|
80
|
+
createTextDelta,
|
|
81
|
+
createDone,
|
|
82
|
+
createError,
|
|
83
|
+
createApiError,
|
|
84
|
+
createRateLimitError,
|
|
85
|
+
createToolError,
|
|
86
|
+
createTimeoutError,
|
|
87
|
+
createParseError,
|
|
88
|
+
createAbort,
|
|
89
|
+
createStepStart,
|
|
90
|
+
createStepEnd,
|
|
91
|
+
isThinkingEvent,
|
|
92
|
+
isSearchEvent,
|
|
93
|
+
isToolEvent,
|
|
94
|
+
isTextEvent,
|
|
95
|
+
isStatusEvent,
|
|
96
|
+
isErrorEvent,
|
|
97
|
+
isAbortEvent,
|
|
98
|
+
isStepEvent,
|
|
99
|
+
isRetryableError,
|
|
100
|
+
} from '@huyooo/ai-chat-core/events'
|
|
101
|
+
|
|
102
|
+
// ==================== 从 ai-chat-core 重新导出配置类型 ====================
|
|
103
|
+
|
|
104
|
+
export type {
|
|
105
|
+
// 模式类型(ChatMode 本地定义以支持更多值)
|
|
106
|
+
ThinkingMode,
|
|
107
|
+
AutoRunMode,
|
|
108
|
+
AutoRunConfig,
|
|
109
|
+
|
|
110
|
+
// 模型类型
|
|
111
|
+
ModelOption,
|
|
112
|
+
ProviderType,
|
|
113
|
+
|
|
114
|
+
// 聊天选项(使用本地 ChatOptions)
|
|
115
|
+
|
|
116
|
+
// MCP 类型
|
|
117
|
+
McpServerConfig,
|
|
118
|
+
McpConnectionStatus,
|
|
119
|
+
McpConnectionInfo,
|
|
120
|
+
} from '@huyooo/ai-chat-core'
|
|
121
|
+
|
|
122
|
+
/** 对话模式(扩展支持 'plan',兼容旧数据) */
|
|
123
|
+
export type ChatMode = 'agent' | 'ask' | 'plan'
|
|
124
|
+
|
|
125
|
+
// ==================== 适配器专用类型(本包定义)====================
|
|
126
|
+
|
|
127
|
+
/** 聊天历史消息(无状态架构传入) */
|
|
128
|
+
export interface ChatHistoryMessage {
|
|
129
|
+
role: 'user' | 'assistant' | 'system' | 'tool'
|
|
130
|
+
content: string
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** 聊天选项(使用本地 ChatMode) */
|
|
134
|
+
export interface ChatOptions {
|
|
135
|
+
mode?: ChatMode
|
|
136
|
+
model?: string
|
|
137
|
+
provider?: string
|
|
138
|
+
enableWebSearch?: boolean
|
|
139
|
+
thinkingMode?: 'enabled' | 'disabled'
|
|
140
|
+
enabledTools?: string[]
|
|
141
|
+
autoRunConfig?: {
|
|
142
|
+
mode?: 'run-everything' | 'manual'
|
|
143
|
+
}
|
|
144
|
+
history?: ChatHistoryMessage[]
|
|
145
|
+
/** Skills 内容(启用的 Skills 的 content 数组,前端拼好传入) */
|
|
146
|
+
skillContents?: string[]
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** 会话记录 */
|
|
150
|
+
export interface SessionRecord {
|
|
151
|
+
id: string
|
|
152
|
+
appId: string | null
|
|
153
|
+
userId: string | null
|
|
154
|
+
title: string
|
|
155
|
+
model: string
|
|
156
|
+
mode: ChatMode
|
|
157
|
+
webSearchEnabled: boolean
|
|
158
|
+
thinkingEnabled: boolean
|
|
159
|
+
/** 是否在 tab 栏隐藏(关闭但不删除) */
|
|
160
|
+
hidden: boolean
|
|
161
|
+
createdAt: Date
|
|
162
|
+
updatedAt: Date
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/** 消息记录 */
|
|
166
|
+
export interface MessageRecord {
|
|
167
|
+
id: string
|
|
168
|
+
/** 前端关联 ID(本地模式与 id 相同,云端模式为前端生成的 UUID) */
|
|
169
|
+
clientId?: string | null
|
|
170
|
+
sessionId: string
|
|
171
|
+
role: 'user' | 'assistant'
|
|
172
|
+
content: string
|
|
173
|
+
/** 用户消息附带的图片(data URL 或 base64) */
|
|
174
|
+
images: string[]
|
|
175
|
+
/** 生成此消息时使用的模型 */
|
|
176
|
+
model?: string | null
|
|
177
|
+
/** 生成此消息时使用的模式 (ask/agent) */
|
|
178
|
+
mode?: string | null
|
|
179
|
+
/** 生成此消息时是否启用 web 搜索 */
|
|
180
|
+
webSearchEnabled?: boolean | null
|
|
181
|
+
/** 生成此消息时是否启用深度思考 */
|
|
182
|
+
thinkingEnabled?: boolean | null
|
|
183
|
+
/** 执行步骤列表 JSON */
|
|
184
|
+
steps?: string | null
|
|
185
|
+
operationIds?: string | null
|
|
186
|
+
/** Token 使用统计(JSON 字符串) */
|
|
187
|
+
usage?: string | null
|
|
188
|
+
/** 响应耗时(毫秒) */
|
|
189
|
+
duration?: number | null
|
|
190
|
+
/** 消息序号(会话内递增,用于分叉删除) */
|
|
191
|
+
sequence: number
|
|
192
|
+
/** 时间戳(毫秒,Unix 时间戳) */
|
|
193
|
+
timestamp: number
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/** 操作记录 */
|
|
197
|
+
export interface OperationRecord {
|
|
198
|
+
id: string
|
|
199
|
+
sessionId: string
|
|
200
|
+
messageId?: string | null
|
|
201
|
+
command: string
|
|
202
|
+
operationType: string
|
|
203
|
+
affectedFiles: string
|
|
204
|
+
status: string
|
|
205
|
+
timestamp: Date
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/** 回收站记录 */
|
|
209
|
+
export interface TrashRecord {
|
|
210
|
+
id: string
|
|
211
|
+
sessionId: string
|
|
212
|
+
originalPath: string
|
|
213
|
+
trashPath: string
|
|
214
|
+
deletedAt: Date
|
|
215
|
+
autoDeleteAt: Date
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/** Skill 记录(云端管理的 system prompt 片段) */
|
|
219
|
+
export interface SkillRecord {
|
|
220
|
+
id: string
|
|
221
|
+
name: string
|
|
222
|
+
description: string
|
|
223
|
+
content: string
|
|
224
|
+
icon: string
|
|
225
|
+
enabled: boolean
|
|
226
|
+
builtIn: boolean
|
|
227
|
+
createdAt: Date
|
|
228
|
+
updatedAt: Date
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/** 文件信息 */
|
|
232
|
+
export interface FileInfo {
|
|
233
|
+
name: string
|
|
234
|
+
path: string
|
|
235
|
+
isDirectory: boolean
|
|
236
|
+
size: number
|
|
237
|
+
modifiedAt: Date
|
|
238
|
+
extension: string
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/** 工具信息 */
|
|
242
|
+
export interface ToolInfo {
|
|
243
|
+
name: string
|
|
244
|
+
description: string
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/** 工具批准请求 */
|
|
248
|
+
export interface ToolApprovalRequest {
|
|
249
|
+
id: string
|
|
250
|
+
name: string
|
|
251
|
+
args: Record<string, unknown>
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// ==================== ASR 语音识别 ====================
|
|
255
|
+
|
|
256
|
+
/** ASR 会话配置 */
|
|
257
|
+
export interface AsrSessionConfig {
|
|
258
|
+
/** 音频格式 */
|
|
259
|
+
format?: 'pcm' | 'wav'
|
|
260
|
+
/** 采样率 */
|
|
261
|
+
sampleRate?: number
|
|
262
|
+
/** 启用标点 */
|
|
263
|
+
enablePunc?: boolean
|
|
264
|
+
/** 启用 ITN(数字规整) */
|
|
265
|
+
enableItn?: boolean
|
|
266
|
+
/** 启用语义顺滑 */
|
|
267
|
+
enableDdc?: boolean
|
|
268
|
+
/** 输出分句信息 */
|
|
269
|
+
showUtterances?: boolean
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/** ASR 识别结果 */
|
|
273
|
+
export interface AsrResultData {
|
|
274
|
+
result?: {
|
|
275
|
+
text: string
|
|
276
|
+
utterances?: Array<{
|
|
277
|
+
text: string
|
|
278
|
+
start_time: number
|
|
279
|
+
end_time: number
|
|
280
|
+
definite: boolean
|
|
281
|
+
}>
|
|
282
|
+
}
|
|
283
|
+
audio_info?: {
|
|
284
|
+
duration: number
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// ==================== ChatAdapter 接口 ====================
|
|
289
|
+
|
|
290
|
+
// 导入 ChatEvent 和 ModelOption 用于 ChatAdapter 接口
|
|
291
|
+
// ChatOptions 使用本地定义(支持 'plan' 模式)
|
|
292
|
+
import type { ChatEvent, ModelOption } from '@huyooo/ai-chat-core'
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* ChatAdapter 接口
|
|
296
|
+
*
|
|
297
|
+
* 统一的聊天适配器接口,支持多种实现:
|
|
298
|
+
* - Electron IPC(ai-chat-bridge-electron)
|
|
299
|
+
* - HTTP/SSE(ai-chat-adapter-http)
|
|
300
|
+
* - 直连(ai-chat-adapter-direct,CLI 用)
|
|
301
|
+
*
|
|
302
|
+
* 行为统一保证:无论使用哪种实现(本地直连 / HTTP / 混合),对调用方接口一致——
|
|
303
|
+
* getModels()、sendMessage()、getSessions() 等语义相同,sendMessage 产出的事件均为
|
|
304
|
+
* ChatEvent 类型集(见 ai-chat-core/events),事件 type 与 data 形状由类型定义约束,
|
|
305
|
+
* 不因适配器或模型而异。core 层通过契约测试(CHAT_EVENT_TYPES)保证 Orchestrator
|
|
306
|
+
* 产出合法事件。
|
|
307
|
+
*/
|
|
308
|
+
export interface ChatAdapter {
|
|
309
|
+
// ============ Chat API ============
|
|
310
|
+
/** 获取可用模型 */
|
|
311
|
+
getModels(): Promise<ModelOption[]>
|
|
312
|
+
/** 获取所有工具列表(用于设置面板) */
|
|
313
|
+
getAllTools?(): Promise<ToolInfo[]>
|
|
314
|
+
/** 发送消息,返回异步迭代器 */
|
|
315
|
+
sendMessage(
|
|
316
|
+
message: string,
|
|
317
|
+
options?: ChatOptions,
|
|
318
|
+
images?: string[],
|
|
319
|
+
sessionId?: string
|
|
320
|
+
): AsyncIterable<ChatEvent>
|
|
321
|
+
/** 取消当前请求 */
|
|
322
|
+
cancel(): void
|
|
323
|
+
/** 设置当前工作目录 */
|
|
324
|
+
setCwd?(dir: string): void
|
|
325
|
+
|
|
326
|
+
// ============ Sessions API ============
|
|
327
|
+
/** 获取会话列表 */
|
|
328
|
+
getSessions(): Promise<SessionRecord[]>
|
|
329
|
+
/** 获取单个会话 */
|
|
330
|
+
getSession(id: string): Promise<SessionRecord | null>
|
|
331
|
+
/** 创建会话 */
|
|
332
|
+
createSession(params?: CreateSessionParams): Promise<SessionRecord>
|
|
333
|
+
/** 更新会话 */
|
|
334
|
+
updateSession(id: string, data: UpdateSessionParams): Promise<SessionRecord | null>
|
|
335
|
+
/** 删除会话 */
|
|
336
|
+
deleteSession(id: string): Promise<void>
|
|
337
|
+
|
|
338
|
+
// ============ Messages API ============
|
|
339
|
+
/** 获取会话消息 */
|
|
340
|
+
getMessages(sessionId: string): Promise<MessageRecord[]>
|
|
341
|
+
/** 保存消息 */
|
|
342
|
+
saveMessage(params: SaveMessageParams): Promise<MessageRecord>
|
|
343
|
+
/** 更新消息(增量保存) */
|
|
344
|
+
updateMessage(params: UpdateMessageParams): Promise<void>
|
|
345
|
+
/** 删除指定时间之后的消息(用于分叉) */
|
|
346
|
+
deleteMessagesAfter(sessionId: string, timestamp: number): Promise<void>
|
|
347
|
+
/** 删除指定消息之后的所有消息(用于分叉) */
|
|
348
|
+
deleteMessagesAfterMessageId(sessionId: string, messageId: string): Promise<void>
|
|
349
|
+
|
|
350
|
+
// ============ Operations API ============
|
|
351
|
+
/** 获取操作日志 */
|
|
352
|
+
getOperations(sessionId: string): Promise<OperationRecord[]>
|
|
353
|
+
|
|
354
|
+
// ============ Trash API ============
|
|
355
|
+
/** 获取回收站 */
|
|
356
|
+
getTrashItems(): Promise<TrashRecord[]>
|
|
357
|
+
/** 恢复回收站项目 */
|
|
358
|
+
restoreFromTrash(id: string): Promise<TrashRecord | undefined>
|
|
359
|
+
|
|
360
|
+
// ============ File System API(可选,Electron/CLI 特有)============
|
|
361
|
+
listDir?(dirPath: string): Promise<FileInfo[]>
|
|
362
|
+
exists?(filePath: string): Promise<boolean>
|
|
363
|
+
stat?(filePath: string): Promise<FileInfo | null>
|
|
364
|
+
readFile?(filePath: string): Promise<string | null>
|
|
365
|
+
readFileBase64?(filePath: string): Promise<string | null>
|
|
366
|
+
homeDir?(): Promise<string>
|
|
367
|
+
resolvePath?(inputPath: string): Promise<string>
|
|
368
|
+
parentDir?(dirPath: string): Promise<string>
|
|
369
|
+
watchDir?(dirPath: string): Promise<boolean>
|
|
370
|
+
unwatchDir?(dirPath: string): Promise<void>
|
|
371
|
+
onDirChange?(callback: (data: { dirPath: string; eventType: string; filename: string | null }) => void): () => void
|
|
372
|
+
|
|
373
|
+
// ============ Settings API ============
|
|
374
|
+
getSetting?(key: string): Promise<string | null>
|
|
375
|
+
setSetting?(key: string, value: string): Promise<void>
|
|
376
|
+
getAllSettings?(): Promise<Record<string, string>>
|
|
377
|
+
deleteSetting?(key: string): Promise<void>
|
|
378
|
+
|
|
379
|
+
// ============ Index API(可选,文档索引)============
|
|
380
|
+
getIndexStats?(): Promise<{ totalDocuments: number; indexSize: number; lastUpdated: string | null }>
|
|
381
|
+
getIndexStatus?(): Promise<{ isIndexing: boolean; lastProgress: { indexed: number; total: number; currentFile?: string; stage: string } | null }>
|
|
382
|
+
syncIndex?(): Promise<{ success: boolean }>
|
|
383
|
+
cancelIndex?(): Promise<{ success: boolean }>
|
|
384
|
+
deleteIndex?(): Promise<{ success: boolean }>
|
|
385
|
+
registerIndexListener?(): Promise<{ success: boolean }>
|
|
386
|
+
unregisterIndexListener?(): Promise<{ success: boolean }>
|
|
387
|
+
onIndexProgress?(callback: (progress: { indexed: number; total: number; currentFile?: string; stage: string; error?: string }) => void): () => void
|
|
388
|
+
|
|
389
|
+
// ============ Skills API(可选,云端管理)============
|
|
390
|
+
/** 获取 Skills 列表 */
|
|
391
|
+
getSkills?(): Promise<SkillRecord[]>
|
|
392
|
+
/** 创建 Skill */
|
|
393
|
+
createSkill?(data: { name: string; description?: string; content: string; icon?: string }): Promise<SkillRecord>
|
|
394
|
+
/** 更新 Skill */
|
|
395
|
+
updateSkill?(id: string, data: { name?: string; description?: string; content?: string; icon?: string; enabled?: boolean }): Promise<void>
|
|
396
|
+
/** 删除 Skill */
|
|
397
|
+
deleteSkill?(id: string): Promise<void>
|
|
398
|
+
/** 切换 Skill 启用状态 */
|
|
399
|
+
toggleSkill?(id: string): Promise<{ enabled: boolean }>
|
|
400
|
+
|
|
401
|
+
// ============ Tool Approval API ============
|
|
402
|
+
onToolApprovalRequest?(callback: (request: ToolApprovalRequest) => void): () => void
|
|
403
|
+
respondToolApproval?(id: string, approved: boolean): Promise<void>
|
|
404
|
+
|
|
405
|
+
// ============ ASR API(可选)============
|
|
406
|
+
asrStart?(config?: AsrSessionConfig): Promise<{ success: boolean; error?: string }>
|
|
407
|
+
asrSendAudio?(audioData: ArrayBufferLike): Promise<{ success: boolean; error?: string }>
|
|
408
|
+
asrFinish?(): Promise<{ success: boolean; error?: string }>
|
|
409
|
+
asrStop?(): Promise<{ success: boolean }>
|
|
410
|
+
asrStatus?(): Promise<{ connected: boolean }>
|
|
411
|
+
asrWarmup?(config?: AsrSessionConfig): Promise<{ success: boolean; error?: string }>
|
|
412
|
+
onAsrConnected?(callback: () => void): () => void
|
|
413
|
+
onAsrResult?(callback: (data: { result: AsrResultData; isLast: boolean }) => void): () => void
|
|
414
|
+
onAsrError?(callback: (error: { message: string }) => void): () => void
|
|
415
|
+
onAsrClosed?(callback: () => void): () => void
|
|
416
|
+
|
|
417
|
+
// ============ System API(可选)============
|
|
418
|
+
openExternal?(url: string): Promise<void>
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
// ==================== 辅助参数类型 ====================
|
|
422
|
+
|
|
423
|
+
/** 创建会话参数 */
|
|
424
|
+
export interface CreateSessionParams {
|
|
425
|
+
title?: string
|
|
426
|
+
model?: string
|
|
427
|
+
mode?: string
|
|
428
|
+
webSearchEnabled?: boolean
|
|
429
|
+
thinkingEnabled?: boolean
|
|
430
|
+
hidden?: boolean
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
/** 更新会话参数 */
|
|
434
|
+
export interface UpdateSessionParams {
|
|
435
|
+
title?: string
|
|
436
|
+
model?: string
|
|
437
|
+
mode?: string
|
|
438
|
+
webSearchEnabled?: boolean
|
|
439
|
+
thinkingEnabled?: boolean
|
|
440
|
+
hidden?: boolean
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/** 保存消息参数 */
|
|
444
|
+
export interface SaveMessageParams {
|
|
445
|
+
id?: string
|
|
446
|
+
sessionId: string
|
|
447
|
+
role: 'user' | 'assistant'
|
|
448
|
+
content: string
|
|
449
|
+
images?: string[]
|
|
450
|
+
model?: string
|
|
451
|
+
mode?: string
|
|
452
|
+
webSearchEnabled?: boolean
|
|
453
|
+
thinkingEnabled?: boolean
|
|
454
|
+
steps?: string
|
|
455
|
+
operationIds?: string
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/** 更新消息参数 */
|
|
459
|
+
export interface UpdateMessageParams {
|
|
460
|
+
id: string
|
|
461
|
+
content?: string
|
|
462
|
+
steps?: string
|
|
463
|
+
operationIds?: string
|
|
464
|
+
/** Token 使用统计(JSON 字符串) */
|
|
465
|
+
usage?: string
|
|
466
|
+
/** 响应耗时(毫秒) */
|
|
467
|
+
duration?: number
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// ==================== 发送消息参数(用于 IPC)====================
|
|
471
|
+
|
|
472
|
+
/** 发送消息参数 */
|
|
473
|
+
export interface SendMessageParams {
|
|
474
|
+
message: string
|
|
475
|
+
images?: string[]
|
|
476
|
+
sessionId?: string
|
|
477
|
+
options?: {
|
|
478
|
+
mode?: string
|
|
479
|
+
model?: string
|
|
480
|
+
provider?: string
|
|
481
|
+
enableWebSearch?: boolean
|
|
482
|
+
thinkingMode?: string
|
|
483
|
+
thinkingBudget?: number
|
|
484
|
+
history?: ChatHistoryMessage[]
|
|
485
|
+
}
|
|
486
|
+
}
|