@huyooo/ai-chat-frontend-vue 0.1.3 → 0.1.4
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/adapter.d.ts +3 -35
- package/dist/adapter.d.ts.map +1 -1
- package/dist/components/ChatInput.vue.d.ts +2 -2
- package/dist/composables/useChat.d.ts +6 -2
- package/dist/composables/useChat.d.ts.map +1 -1
- package/dist/index.d.ts +15 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +678 -569
- package/dist/types/index.d.ts +9 -40
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/adapter.ts +40 -70
- package/src/composables/useChat.ts +6 -7
- package/src/index.ts +27 -17
- package/src/types/index.ts +21 -43
package/dist/types/index.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { ChatMode as ChatModeType, ModelConfig as ModelConfigType, ModelProvider as ModelProviderType, ThinkingMode as ThinkingModeType, SessionRecord as SessionRecordType, MessageRecord as MessageRecordType } from '@huyooo/ai-chat-bridge-electron/renderer';
|
|
2
|
+
export type ChatMode = ChatModeType;
|
|
3
|
+
export type ModelConfig = ModelConfigType;
|
|
4
|
+
export type ModelProvider = ModelProviderType;
|
|
5
|
+
export type ThinkingMode = ThinkingModeType;
|
|
6
|
+
export type SessionRecord = SessionRecordType;
|
|
7
|
+
export type MessageRecord = MessageRecordType;
|
|
4
8
|
/** 搜索结果 */
|
|
5
9
|
export interface SearchResult {
|
|
6
10
|
title: string;
|
|
@@ -14,22 +18,7 @@ export interface ToolCall {
|
|
|
14
18
|
result?: string;
|
|
15
19
|
status: 'running' | 'success' | 'error';
|
|
16
20
|
}
|
|
17
|
-
/**
|
|
18
|
-
export type ModelProvider = 'openrouter' | 'doubao' | 'deepseek' | 'qwen' | 'gemini' | 'ark';
|
|
19
|
-
/** 模型配置 */
|
|
20
|
-
export interface ModelConfig {
|
|
21
|
-
provider: ModelProvider;
|
|
22
|
-
model: string;
|
|
23
|
-
displayName: string;
|
|
24
|
-
supportsTools: boolean;
|
|
25
|
-
supportsWebSearch: boolean;
|
|
26
|
-
supportedThinkingModes: ThinkingMode[];
|
|
27
|
-
}
|
|
28
|
-
/** 思考模式 */
|
|
29
|
-
export type ThinkingMode = 'enabled' | 'disabled';
|
|
30
|
-
/** 聊天模式 */
|
|
31
|
-
export type ChatMode = 'agent' | 'ask';
|
|
32
|
-
/** 聊天消息 */
|
|
21
|
+
/** 聊天消息(前端显示用) */
|
|
33
22
|
export interface ChatMessage {
|
|
34
23
|
id: string;
|
|
35
24
|
role: 'user' | 'assistant';
|
|
@@ -44,28 +33,8 @@ export interface ChatMessage {
|
|
|
44
33
|
loading?: boolean;
|
|
45
34
|
timestamp?: Date;
|
|
46
35
|
}
|
|
47
|
-
/** 会话记录 */
|
|
48
|
-
export interface SessionRecord {
|
|
49
|
-
id: string;
|
|
50
|
-
title: string;
|
|
51
|
-
model: string;
|
|
52
|
-
mode: ChatMode;
|
|
53
|
-
createdAt: Date;
|
|
54
|
-
updatedAt: Date;
|
|
55
|
-
}
|
|
56
|
-
/** 消息记录 */
|
|
57
|
-
export interface MessageRecord {
|
|
58
|
-
id: string;
|
|
59
|
-
sessionId: string;
|
|
60
|
-
role: 'user' | 'assistant';
|
|
61
|
-
content: string;
|
|
62
|
-
thinking?: string;
|
|
63
|
-
toolCalls?: string;
|
|
64
|
-
searchResults?: string;
|
|
65
|
-
timestamp: Date;
|
|
66
|
-
}
|
|
67
36
|
/** 默认模型列表 */
|
|
68
|
-
export declare const DEFAULT_MODELS:
|
|
37
|
+
export declare const DEFAULT_MODELS: ModelConfigType[];
|
|
69
38
|
/** @deprecated 使用 SessionRecord */
|
|
70
39
|
export interface ChatSession {
|
|
71
40
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@huyooo/ai-chat-frontend-vue",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "AI Chat Frontend - Vue components with adapter pattern",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"vue": "^3.4.0"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
+
"@huyooo/ai-chat-bridge-electron": "^0.1.4",
|
|
32
33
|
"lucide-vue-next": "^0.460.0",
|
|
33
34
|
"vscode-uri": "^3.1.0"
|
|
34
35
|
},
|
package/src/adapter.ts
CHANGED
|
@@ -1,21 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Chat Adapter
|
|
3
|
-
*
|
|
2
|
+
* Chat Adapter 辅助类型和工具
|
|
3
|
+
* 核心 ChatAdapter 接口从 bridge-electron 导入
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type {
|
|
6
|
+
import type { ChatAdapter as ChatAdapterType, ChatMode, ThinkingMode } from '@huyooo/ai-chat-bridge-electron/renderer'
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
export type
|
|
10
|
-
|
|
11
|
-
| 'search_start'
|
|
12
|
-
| 'search_result'
|
|
13
|
-
| 'tool_call'
|
|
14
|
-
| 'tool_result'
|
|
15
|
-
| 'text_delta'
|
|
16
|
-
| 'text'
|
|
17
|
-
| 'done'
|
|
18
|
-
| 'error'
|
|
8
|
+
// 重新导出 ChatAdapter 类型供内部组件使用
|
|
9
|
+
export type ChatAdapter = ChatAdapterType
|
|
10
|
+
import type { SearchResult } from './types'
|
|
19
11
|
|
|
20
12
|
/** 思考数据 */
|
|
21
13
|
export interface ThinkingData {
|
|
@@ -41,12 +33,6 @@ export interface ImageData {
|
|
|
41
33
|
mimeType: string
|
|
42
34
|
}
|
|
43
35
|
|
|
44
|
-
/** 聊天进度事件 */
|
|
45
|
-
export interface ChatProgress {
|
|
46
|
-
type: ChatProgressType
|
|
47
|
-
data: string | ThinkingData | ToolCallData | ToolResultData | { results: SearchResult[] }
|
|
48
|
-
}
|
|
49
|
-
|
|
50
36
|
/** 发送消息选项 */
|
|
51
37
|
export interface SendMessageOptions {
|
|
52
38
|
mode: ChatMode
|
|
@@ -79,78 +65,62 @@ export interface SaveMessageOptions {
|
|
|
79
65
|
searchResults?: string
|
|
80
66
|
}
|
|
81
67
|
|
|
82
|
-
/**
|
|
83
|
-
* Chat Adapter 接口
|
|
84
|
-
* 所有后端通信实现都需要实现此接口
|
|
85
|
-
*/
|
|
86
|
-
export interface ChatAdapter {
|
|
87
|
-
/** 获取所有会话 */
|
|
88
|
-
getSessions(): Promise<SessionRecord[]>
|
|
89
|
-
|
|
90
|
-
/** 创建新会话 */
|
|
91
|
-
createSession(options: CreateSessionOptions): Promise<SessionRecord>
|
|
92
|
-
|
|
93
|
-
/** 更新会话 */
|
|
94
|
-
updateSession(sessionId: string, options: UpdateSessionOptions): Promise<void>
|
|
95
|
-
|
|
96
|
-
/** 删除会话 */
|
|
97
|
-
deleteSession(sessionId: string): Promise<void>
|
|
98
|
-
|
|
99
|
-
/** 获取会话消息 */
|
|
100
|
-
getMessages(sessionId: string): Promise<MessageRecord[]>
|
|
101
|
-
|
|
102
|
-
/** 保存消息 */
|
|
103
|
-
saveMessage(options: SaveMessageOptions): Promise<MessageRecord>
|
|
104
|
-
|
|
105
|
-
/** 发送消息并获取流式响应 */
|
|
106
|
-
sendMessage(
|
|
107
|
-
content: string,
|
|
108
|
-
options: SendMessageOptions,
|
|
109
|
-
images?: string[]
|
|
110
|
-
): AsyncGenerator<ChatProgress, void, unknown>
|
|
111
|
-
|
|
112
|
-
/** 取消当前请求 */
|
|
113
|
-
cancel(): void
|
|
114
|
-
|
|
115
|
-
/** 设置工作目录 */
|
|
116
|
-
setWorkingDir?(dir: string): void
|
|
117
|
-
}
|
|
118
|
-
|
|
119
68
|
/**
|
|
120
69
|
* 创建空 Adapter(用于测试或无后端场景)
|
|
121
70
|
*/
|
|
122
|
-
export function createNullAdapter():
|
|
71
|
+
export function createNullAdapter(): ChatAdapterType {
|
|
123
72
|
return {
|
|
73
|
+
async getModels() {
|
|
74
|
+
return []
|
|
75
|
+
},
|
|
124
76
|
async getSessions() {
|
|
125
77
|
return []
|
|
126
78
|
},
|
|
127
|
-
async
|
|
79
|
+
async getSession() {
|
|
80
|
+
return null
|
|
81
|
+
},
|
|
82
|
+
async createSession(params) {
|
|
128
83
|
return {
|
|
129
84
|
id: Date.now().toString(),
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
85
|
+
appId: null,
|
|
86
|
+
userId: null,
|
|
87
|
+
title: params?.title || '新对话',
|
|
88
|
+
model: params?.model || '',
|
|
89
|
+
mode: (params?.mode || 'agent') as ChatMode,
|
|
133
90
|
createdAt: new Date(),
|
|
134
91
|
updatedAt: new Date(),
|
|
135
92
|
}
|
|
136
93
|
},
|
|
137
|
-
async updateSession() {
|
|
94
|
+
async updateSession() {
|
|
95
|
+
return null
|
|
96
|
+
},
|
|
138
97
|
async deleteSession() {},
|
|
139
98
|
async getMessages() {
|
|
140
99
|
return []
|
|
141
100
|
},
|
|
142
|
-
async saveMessage(
|
|
101
|
+
async saveMessage(params) {
|
|
143
102
|
return {
|
|
144
103
|
id: Date.now().toString(),
|
|
145
|
-
sessionId:
|
|
146
|
-
role:
|
|
147
|
-
content:
|
|
148
|
-
thinking:
|
|
149
|
-
toolCalls:
|
|
150
|
-
searchResults:
|
|
104
|
+
sessionId: params.sessionId,
|
|
105
|
+
role: params.role,
|
|
106
|
+
content: params.content,
|
|
107
|
+
thinking: params.thinking || null,
|
|
108
|
+
toolCalls: params.toolCalls || null,
|
|
109
|
+
searchResults: params.searchResults || null,
|
|
110
|
+
operationIds: null,
|
|
151
111
|
timestamp: new Date(),
|
|
152
112
|
}
|
|
153
113
|
},
|
|
114
|
+
async deleteMessagesAfter() {},
|
|
115
|
+
async getOperations() {
|
|
116
|
+
return []
|
|
117
|
+
},
|
|
118
|
+
async getTrashItems() {
|
|
119
|
+
return []
|
|
120
|
+
},
|
|
121
|
+
async restoreFromTrash() {
|
|
122
|
+
return undefined
|
|
123
|
+
},
|
|
154
124
|
async *sendMessage() {
|
|
155
125
|
yield { type: 'text', data: '无可用的 Adapter' }
|
|
156
126
|
yield { type: 'done', data: '' }
|
|
@@ -4,17 +4,16 @@
|
|
|
4
4
|
* 使用 Adapter 模式解耦后端通信
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { ref,
|
|
8
|
-
import type { ChatAdapter, ChatProgress } from '../adapter'
|
|
9
|
-
import { createNullAdapter } from '../adapter'
|
|
7
|
+
import { ref, shallowRef } from 'vue'
|
|
10
8
|
import type {
|
|
11
|
-
|
|
9
|
+
ChatAdapter,
|
|
10
|
+
ChatProgress,
|
|
12
11
|
ChatMode,
|
|
13
12
|
SessionRecord,
|
|
14
13
|
MessageRecord,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} from '../types'
|
|
14
|
+
} from '@huyooo/ai-chat-bridge-electron/renderer'
|
|
15
|
+
import { createNullAdapter } from '../adapter'
|
|
16
|
+
import type { ChatMessage, SearchResult, ToolCall } from '../types'
|
|
18
17
|
|
|
19
18
|
/** 生成唯一 ID */
|
|
20
19
|
function generateId(): string {
|
package/src/index.ts
CHANGED
|
@@ -1,16 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @huyooo/ai-chat-frontend
|
|
2
|
+
* @huyooo/ai-chat-frontend-vue
|
|
3
3
|
*
|
|
4
|
-
* AI Chat 前端组件库
|
|
4
|
+
* AI Chat 前端组件库 - Vue 版本
|
|
5
5
|
*
|
|
6
6
|
* 使用 adapter 模式,与后端通信方式解耦
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
//
|
|
9
|
+
// 从 bridge-electron 重新导出核心类型,确保类型一致性
|
|
10
10
|
export type {
|
|
11
11
|
ChatAdapter,
|
|
12
12
|
ChatProgress,
|
|
13
13
|
ChatProgressType,
|
|
14
|
+
ChatOptions,
|
|
15
|
+
ChatMode,
|
|
16
|
+
ModelConfig,
|
|
17
|
+
ModelProvider,
|
|
18
|
+
ThinkingMode,
|
|
19
|
+
SessionRecord,
|
|
20
|
+
MessageRecord,
|
|
21
|
+
} from '@huyooo/ai-chat-bridge-electron/renderer'
|
|
22
|
+
|
|
23
|
+
// 导出 createElectronAdapter 便于使用
|
|
24
|
+
export { createElectronAdapter } from '@huyooo/ai-chat-bridge-electron/renderer'
|
|
25
|
+
|
|
26
|
+
// 导出本地定义的辅助类型
|
|
27
|
+
export type {
|
|
14
28
|
ThinkingData,
|
|
15
29
|
ToolCallData,
|
|
16
30
|
ToolResultData,
|
|
@@ -47,15 +61,9 @@ export { default as ThinkingBlock } from './components/chat/ThinkingBlock.vue';
|
|
|
47
61
|
export { default as ToolCallBlock } from './components/chat/ToolCallBlock.vue';
|
|
48
62
|
export { default as SearchResultBlock } from './components/chat/SearchResultBlock.vue';
|
|
49
63
|
|
|
50
|
-
//
|
|
64
|
+
// 导出前端特有类型(不与 bridge-electron 重复)
|
|
51
65
|
export type {
|
|
52
66
|
ChatMessage,
|
|
53
|
-
ChatMode,
|
|
54
|
-
ModelConfig,
|
|
55
|
-
ModelProvider,
|
|
56
|
-
ThinkingMode,
|
|
57
|
-
SessionRecord,
|
|
58
|
-
MessageRecord,
|
|
59
67
|
SearchResult,
|
|
60
68
|
ToolCall,
|
|
61
69
|
// 向后兼容
|
|
@@ -69,14 +77,16 @@ export { DEFAULT_MODELS, FileType } from './types';
|
|
|
69
77
|
/**
|
|
70
78
|
* 使用说明:
|
|
71
79
|
*
|
|
72
|
-
* 1.
|
|
73
|
-
* import
|
|
74
|
-
* const adapter = createElectronAdapter();
|
|
80
|
+
* 1. 导入样式:
|
|
81
|
+
* import '@huyooo/ai-chat-frontend-vue/style.css'
|
|
75
82
|
*
|
|
76
|
-
* 2.
|
|
83
|
+
* 2. 创建 adapter 和使用组件(一行导入):
|
|
84
|
+
* import { ChatPanel, createElectronAdapter } from '@huyooo/ai-chat-frontend-vue'
|
|
85
|
+
* const adapter = createElectronAdapter()
|
|
77
86
|
* <ChatPanel :adapter="adapter" />
|
|
78
87
|
*
|
|
79
|
-
* 3. 或使用 useChat composable:
|
|
80
|
-
*
|
|
81
|
-
*
|
|
88
|
+
* 3. 或使用 useChat composable 自定义 UI:
|
|
89
|
+
* import { useChat, createElectronAdapter } from '@huyooo/ai-chat-frontend-vue'
|
|
90
|
+
* const adapter = createElectronAdapter()
|
|
91
|
+
* const chat = useChat({ adapter })
|
|
82
92
|
*/
|
package/src/types/index.ts
CHANGED
|
@@ -1,7 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AI Chat 前端类型定义
|
|
3
|
+
* 核心类型从 bridge-electron 导出,保持类型一致性
|
|
3
4
|
*/
|
|
4
5
|
|
|
6
|
+
// 从 bridge-electron 导入类型
|
|
7
|
+
import type {
|
|
8
|
+
ChatMode as ChatModeType,
|
|
9
|
+
ModelConfig as ModelConfigType,
|
|
10
|
+
ModelProvider as ModelProviderType,
|
|
11
|
+
ThinkingMode as ThinkingModeType,
|
|
12
|
+
SessionRecord as SessionRecordType,
|
|
13
|
+
MessageRecord as MessageRecordType,
|
|
14
|
+
} from '@huyooo/ai-chat-bridge-electron/renderer'
|
|
15
|
+
|
|
16
|
+
// 重新导出核心类型
|
|
17
|
+
export type ChatMode = ChatModeType
|
|
18
|
+
export type ModelConfig = ModelConfigType
|
|
19
|
+
export type ModelProvider = ModelProviderType
|
|
20
|
+
export type ThinkingMode = ThinkingModeType
|
|
21
|
+
export type SessionRecord = SessionRecordType
|
|
22
|
+
export type MessageRecord = MessageRecordType
|
|
23
|
+
|
|
5
24
|
/** 搜索结果 */
|
|
6
25
|
export interface SearchResult {
|
|
7
26
|
title: string
|
|
@@ -17,26 +36,7 @@ export interface ToolCall {
|
|
|
17
36
|
status: 'running' | 'success' | 'error'
|
|
18
37
|
}
|
|
19
38
|
|
|
20
|
-
/**
|
|
21
|
-
export type ModelProvider = 'openrouter' | 'doubao' | 'deepseek' | 'qwen' | 'gemini' | 'ark'
|
|
22
|
-
|
|
23
|
-
/** 模型配置 */
|
|
24
|
-
export interface ModelConfig {
|
|
25
|
-
provider: ModelProvider
|
|
26
|
-
model: string
|
|
27
|
-
displayName: string
|
|
28
|
-
supportsTools: boolean
|
|
29
|
-
supportsWebSearch: boolean
|
|
30
|
-
supportedThinkingModes: ThinkingMode[]
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/** 思考模式 */
|
|
34
|
-
export type ThinkingMode = 'enabled' | 'disabled'
|
|
35
|
-
|
|
36
|
-
/** 聊天模式 */
|
|
37
|
-
export type ChatMode = 'agent' | 'ask'
|
|
38
|
-
|
|
39
|
-
/** 聊天消息 */
|
|
39
|
+
/** 聊天消息(前端显示用) */
|
|
40
40
|
export interface ChatMessage {
|
|
41
41
|
id: string
|
|
42
42
|
role: 'user' | 'assistant'
|
|
@@ -52,30 +52,8 @@ export interface ChatMessage {
|
|
|
52
52
|
timestamp?: Date
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
/** 会话记录 */
|
|
56
|
-
export interface SessionRecord {
|
|
57
|
-
id: string
|
|
58
|
-
title: string
|
|
59
|
-
model: string
|
|
60
|
-
mode: ChatMode
|
|
61
|
-
createdAt: Date
|
|
62
|
-
updatedAt: Date
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/** 消息记录 */
|
|
66
|
-
export interface MessageRecord {
|
|
67
|
-
id: string
|
|
68
|
-
sessionId: string
|
|
69
|
-
role: 'user' | 'assistant'
|
|
70
|
-
content: string
|
|
71
|
-
thinking?: string
|
|
72
|
-
toolCalls?: string
|
|
73
|
-
searchResults?: string
|
|
74
|
-
timestamp: Date
|
|
75
|
-
}
|
|
76
|
-
|
|
77
55
|
/** 默认模型列表 */
|
|
78
|
-
export const DEFAULT_MODELS:
|
|
56
|
+
export const DEFAULT_MODELS: ModelConfigType[] = [
|
|
79
57
|
{
|
|
80
58
|
provider: 'openrouter',
|
|
81
59
|
model: 'anthropic/claude-opus-4.5',
|