@huyooo/ai-chat-frontend-vue 0.1.2
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 +87 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/components/ChatInput.vue.d.ts +54 -0
- package/dist/components/ChatInput.vue.d.ts.map +1 -0
- package/dist/components/ChatPanel.vue.d.ts +38 -0
- package/dist/components/ChatPanel.vue.d.ts.map +1 -0
- package/dist/components/chat/SearchResultBlock.vue.d.ts +8 -0
- package/dist/components/chat/SearchResultBlock.vue.d.ts.map +1 -0
- package/dist/components/chat/ThinkingBlock.vue.d.ts +7 -0
- package/dist/components/chat/ThinkingBlock.vue.d.ts.map +1 -0
- package/dist/components/chat/ToolCallBlock.vue.d.ts +9 -0
- package/dist/components/chat/ToolCallBlock.vue.d.ts.map +1 -0
- package/dist/components/chat/messages/ExecutionSteps.vue.d.ts +13 -0
- package/dist/components/chat/messages/ExecutionSteps.vue.d.ts.map +1 -0
- package/dist/components/chat/messages/MessageBubble.vue.d.ts +28 -0
- package/dist/components/chat/messages/MessageBubble.vue.d.ts.map +1 -0
- package/dist/components/chat/ui/ChatHeader.vue.d.ts +34 -0
- package/dist/components/chat/ui/ChatHeader.vue.d.ts.map +1 -0
- package/dist/components/chat/ui/WelcomeMessage.vue.d.ts +7 -0
- package/dist/components/chat/ui/WelcomeMessage.vue.d.ts.map +1 -0
- package/dist/composables/useChat.d.ts +96 -0
- package/dist/composables/useChat.d.ts.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1497 -0
- package/dist/preload/preload.d.ts +6 -0
- package/dist/preload/preload.d.ts.map +1 -0
- package/dist/style.css +1 -0
- package/dist/types/index.d.ts +107 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +59 -0
- package/src/adapter.ts +160 -0
- package/src/components/ChatInput.vue +649 -0
- package/src/components/ChatPanel.vue +309 -0
- package/src/components/chat/SearchResultBlock.vue +155 -0
- package/src/components/chat/ThinkingBlock.vue +109 -0
- package/src/components/chat/ToolCallBlock.vue +213 -0
- package/src/components/chat/messages/ExecutionSteps.vue +281 -0
- package/src/components/chat/messages/MessageBubble.vue +272 -0
- package/src/components/chat/ui/ChatHeader.vue +535 -0
- package/src/components/chat/ui/WelcomeMessage.vue +135 -0
- package/src/composables/useChat.ts +423 -0
- package/src/index.ts +82 -0
- package/src/preload/preload.ts +79 -0
- package/src/types/index.ts +164 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { SessionRecord, MessageRecord, ChatMode, ThinkingMode, SearchResult } from './types';
|
|
2
|
+
/** 聊天进度类型 */
|
|
3
|
+
export type ChatProgressType = 'thinking' | 'search_start' | 'search_result' | 'tool_call' | 'tool_result' | 'text_delta' | 'text' | 'done' | 'error';
|
|
4
|
+
/** 思考数据 */
|
|
5
|
+
export interface ThinkingData {
|
|
6
|
+
content: string;
|
|
7
|
+
isComplete: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** 工具调用数据 */
|
|
10
|
+
export interface ToolCallData {
|
|
11
|
+
name: string;
|
|
12
|
+
args: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
/** 工具结果数据 */
|
|
15
|
+
export interface ToolResultData {
|
|
16
|
+
name: string;
|
|
17
|
+
result: string;
|
|
18
|
+
}
|
|
19
|
+
/** 图片数据 */
|
|
20
|
+
export interface ImageData {
|
|
21
|
+
base64: string;
|
|
22
|
+
mimeType: string;
|
|
23
|
+
}
|
|
24
|
+
/** 聊天进度事件 */
|
|
25
|
+
export interface ChatProgress {
|
|
26
|
+
type: ChatProgressType;
|
|
27
|
+
data: string | ThinkingData | ToolCallData | ToolResultData | {
|
|
28
|
+
results: SearchResult[];
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** 发送消息选项 */
|
|
32
|
+
export interface SendMessageOptions {
|
|
33
|
+
mode: ChatMode;
|
|
34
|
+
model: string;
|
|
35
|
+
enableWebSearch: boolean;
|
|
36
|
+
thinkingMode: ThinkingMode;
|
|
37
|
+
}
|
|
38
|
+
/** 创建会话选项 */
|
|
39
|
+
export interface CreateSessionOptions {
|
|
40
|
+
title: string;
|
|
41
|
+
model: string;
|
|
42
|
+
mode: ChatMode;
|
|
43
|
+
}
|
|
44
|
+
/** 更新会话选项 */
|
|
45
|
+
export interface UpdateSessionOptions {
|
|
46
|
+
title?: string;
|
|
47
|
+
model?: string;
|
|
48
|
+
mode?: ChatMode;
|
|
49
|
+
}
|
|
50
|
+
/** 保存消息选项 */
|
|
51
|
+
export interface SaveMessageOptions {
|
|
52
|
+
sessionId: string;
|
|
53
|
+
role: 'user' | 'assistant';
|
|
54
|
+
content: string;
|
|
55
|
+
thinking?: string;
|
|
56
|
+
toolCalls?: string;
|
|
57
|
+
searchResults?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Chat Adapter 接口
|
|
61
|
+
* 所有后端通信实现都需要实现此接口
|
|
62
|
+
*/
|
|
63
|
+
export interface ChatAdapter {
|
|
64
|
+
/** 获取所有会话 */
|
|
65
|
+
getSessions(): Promise<SessionRecord[]>;
|
|
66
|
+
/** 创建新会话 */
|
|
67
|
+
createSession(options: CreateSessionOptions): Promise<SessionRecord>;
|
|
68
|
+
/** 更新会话 */
|
|
69
|
+
updateSession(sessionId: string, options: UpdateSessionOptions): Promise<void>;
|
|
70
|
+
/** 删除会话 */
|
|
71
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
72
|
+
/** 获取会话消息 */
|
|
73
|
+
getMessages(sessionId: string): Promise<MessageRecord[]>;
|
|
74
|
+
/** 保存消息 */
|
|
75
|
+
saveMessage(options: SaveMessageOptions): Promise<MessageRecord>;
|
|
76
|
+
/** 发送消息并获取流式响应 */
|
|
77
|
+
sendMessage(content: string, options: SendMessageOptions, images?: string[]): AsyncGenerator<ChatProgress, void, unknown>;
|
|
78
|
+
/** 取消当前请求 */
|
|
79
|
+
cancel(): void;
|
|
80
|
+
/** 设置工作目录 */
|
|
81
|
+
setWorkingDir?(dir: string): void;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 创建空 Adapter(用于测试或无后端场景)
|
|
85
|
+
*/
|
|
86
|
+
export declare function createNullAdapter(): ChatAdapter;
|
|
87
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ChatMode, ModelConfig } from '../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
/** 变体模式:input-底部输入框,message-历史消息 */
|
|
4
|
+
variant?: 'input' | 'message';
|
|
5
|
+
/** 受控值(用于历史消息编辑) */
|
|
6
|
+
value?: string;
|
|
7
|
+
selectedImages?: string[];
|
|
8
|
+
isLoading?: boolean;
|
|
9
|
+
mode?: ChatMode;
|
|
10
|
+
model?: string;
|
|
11
|
+
models?: ModelConfig[];
|
|
12
|
+
webSearchEnabled?: boolean;
|
|
13
|
+
thinkingEnabled?: boolean;
|
|
14
|
+
};
|
|
15
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {
|
|
16
|
+
focus: () => void | undefined;
|
|
17
|
+
setText: (text: string) => void;
|
|
18
|
+
clear: () => void;
|
|
19
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
20
|
+
cancel: () => any;
|
|
21
|
+
send: (text: string) => any;
|
|
22
|
+
"remove-image": (index: number) => any;
|
|
23
|
+
"upload-image": () => any;
|
|
24
|
+
"at-context": () => any;
|
|
25
|
+
"update:mode": (mode: ChatMode) => any;
|
|
26
|
+
"update:model": (model: string) => any;
|
|
27
|
+
"update:webSearch": (enabled: boolean) => any;
|
|
28
|
+
"update:thinking": (enabled: boolean) => any;
|
|
29
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
30
|
+
onCancel?: (() => any) | undefined;
|
|
31
|
+
onSend?: ((text: string) => any) | undefined;
|
|
32
|
+
"onRemove-image"?: ((index: number) => any) | undefined;
|
|
33
|
+
"onUpload-image"?: (() => any) | undefined;
|
|
34
|
+
"onAt-context"?: (() => any) | undefined;
|
|
35
|
+
"onUpdate:mode"?: ((mode: ChatMode) => any) | undefined;
|
|
36
|
+
"onUpdate:model"?: ((model: string) => any) | undefined;
|
|
37
|
+
"onUpdate:webSearch"?: ((enabled: boolean) => any) | undefined;
|
|
38
|
+
"onUpdate:thinking"?: ((enabled: boolean) => any) | undefined;
|
|
39
|
+
}>, {
|
|
40
|
+
model: string;
|
|
41
|
+
mode: ChatMode;
|
|
42
|
+
variant: "input" | "message";
|
|
43
|
+
value: string;
|
|
44
|
+
selectedImages: string[];
|
|
45
|
+
isLoading: boolean;
|
|
46
|
+
models: ModelConfig[];
|
|
47
|
+
webSearchEnabled: boolean;
|
|
48
|
+
thinkingEnabled: boolean;
|
|
49
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
50
|
+
containerRef: HTMLDivElement;
|
|
51
|
+
inputRef: HTMLTextAreaElement;
|
|
52
|
+
}, HTMLDivElement>;
|
|
53
|
+
export default _default;
|
|
54
|
+
//# sourceMappingURL=ChatInput.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatInput.vue.d.ts","sourceRoot":"","sources":["../../src/components/ChatInput.vue"],"names":[],"mappings":"AAiJA;AA0pBA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGtD,KAAK,WAAW,GAAG;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;;;oBAuMc,MAAM;;;;;;;;;;;;;;;;;;;;;;;WA3MZ,MAAM;UADP,QAAQ;aALL,OAAO,GAAG,SAAS;WAErB,MAAM;oBACG,MAAM,EAAE;eACb,OAAO;YAGV,WAAW,EAAE;sBACH,OAAO;qBACR,OAAO;;;;;AA+nB7B,wBAWG"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ChatAdapter } from '../adapter';
|
|
2
|
+
import { ModelConfig, ChatMode } from '../types';
|
|
3
|
+
interface Props {
|
|
4
|
+
/** Adapter 实例 */
|
|
5
|
+
adapter?: ChatAdapter;
|
|
6
|
+
/** 工作目录 */
|
|
7
|
+
workingDir?: string;
|
|
8
|
+
/** 默认模型 */
|
|
9
|
+
defaultModel?: string;
|
|
10
|
+
/** 默认模式 */
|
|
11
|
+
defaultMode?: ChatMode;
|
|
12
|
+
/** 可用模型列表 */
|
|
13
|
+
models?: ModelConfig[];
|
|
14
|
+
/** 隐藏标题栏 */
|
|
15
|
+
hideHeader?: boolean;
|
|
16
|
+
/** 关闭回调(有此属性时显示关闭按钮) */
|
|
17
|
+
onClose?: () => void;
|
|
18
|
+
/** 自定义类名 */
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
22
|
+
close: () => any;
|
|
23
|
+
}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
|
|
24
|
+
onClose?: (() => any) | undefined;
|
|
25
|
+
}>, {
|
|
26
|
+
adapter: ChatAdapter;
|
|
27
|
+
defaultModel: string;
|
|
28
|
+
defaultMode: ChatMode;
|
|
29
|
+
onClose: () => void;
|
|
30
|
+
models: ModelConfig[];
|
|
31
|
+
workingDir: string;
|
|
32
|
+
hideHeader: boolean;
|
|
33
|
+
className: string;
|
|
34
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
35
|
+
messagesRef: HTMLDivElement;
|
|
36
|
+
}, HTMLDivElement>;
|
|
37
|
+
export default _default;
|
|
38
|
+
//# sourceMappingURL=ChatPanel.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatPanel.vue.d.ts","sourceRoot":"","sources":["../../src/components/ChatPanel.vue"],"names":[],"mappings":"AAoEA;AAyTA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAOtD,UAAU,KAAK;IACb,iBAAiB;IACjB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW;IACX,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,aAAa;IACb,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,YAAY;IACZ,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;;;;;;aAfW,WAAW;kBAIN,MAAM;iBAEP,QAAQ;aAMZ,MAAM,IAAI;YAJX,WAAW,EAAE;gBANT,MAAM;gBAQN,OAAO;eAIR,MAAM;;;;AAmdpB,wBAUG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SearchResult } from '../../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
results: SearchResult[];
|
|
4
|
+
searching: boolean;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=SearchResultBlock.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchResultBlock.vue.d.ts","sourceRoot":"","sources":["../../../src/components/chat/SearchResultBlock.vue"],"names":[],"mappings":"AAgCA;AA+JA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;;AA4IF,wBAOG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
content: string;
|
|
3
|
+
isComplete: boolean;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
6
|
+
export default _default;
|
|
7
|
+
//# sourceMappingURL=ThinkingBlock.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThinkingBlock.vue.d.ts","sourceRoot":"","sources":["../../../src/components/chat/ThinkingBlock.vue"],"names":[],"mappings":"AAgBA;AAkHA,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;;AAmHF,wBAOG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
name: string;
|
|
3
|
+
args?: Record<string, unknown>;
|
|
4
|
+
result?: string;
|
|
5
|
+
status: 'running' | 'success' | 'error';
|
|
6
|
+
};
|
|
7
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
8
|
+
export default _default;
|
|
9
|
+
//# sourceMappingURL=ToolCallBlock.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolCallBlock.vue.d.ts","sourceRoot":"","sources":["../../../src/components/chat/ToolCallBlock.vue"],"names":[],"mappings":"AA+BA;AAoOA,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;CACzC,CAAC;;AA6MF,wBAOG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ToolCall, SearchResult } from '../../../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
loading?: boolean;
|
|
4
|
+
hasContent?: boolean;
|
|
5
|
+
thinking?: string;
|
|
6
|
+
thinkingComplete?: boolean;
|
|
7
|
+
searching?: boolean;
|
|
8
|
+
searchResults?: SearchResult[];
|
|
9
|
+
toolCalls?: ToolCall[];
|
|
10
|
+
};
|
|
11
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
12
|
+
export default _default;
|
|
13
|
+
//# sourceMappingURL=ExecutionSteps.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExecutionSteps.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/messages/ExecutionSteps.vue"],"names":[],"mappings":"AA8EA;AA6RA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7D,KAAK,WAAW,GAAG;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CACxB,CAAC;;AA8VF,wBAMG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ToolCall, SearchResult } from '../../../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
role: 'user' | 'assistant';
|
|
4
|
+
content: string;
|
|
5
|
+
images?: string[];
|
|
6
|
+
thinking?: string;
|
|
7
|
+
thinkingComplete?: boolean;
|
|
8
|
+
searchResults?: SearchResult[];
|
|
9
|
+
searching?: boolean;
|
|
10
|
+
toolCalls?: ToolCall[];
|
|
11
|
+
loading?: boolean;
|
|
12
|
+
copied?: boolean;
|
|
13
|
+
/** 是否支持重新发送(仅用户消息) */
|
|
14
|
+
onSend?: (text: string) => void;
|
|
15
|
+
};
|
|
16
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
17
|
+
copy: () => any;
|
|
18
|
+
send: (text: string) => any;
|
|
19
|
+
regenerate: () => any;
|
|
20
|
+
"view-image": (url: string) => any;
|
|
21
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
22
|
+
onCopy?: (() => any) | undefined;
|
|
23
|
+
onSend?: ((text: string) => any) | undefined;
|
|
24
|
+
onRegenerate?: (() => any) | undefined;
|
|
25
|
+
"onView-image"?: ((url: string) => any) | undefined;
|
|
26
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
27
|
+
export default _default;
|
|
28
|
+
//# sourceMappingURL=MessageBubble.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageBubble.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/messages/MessageBubble.vue"],"names":[],"mappings":"AA8DA;AAsRA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7D,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;;;;;;;;;;;;AAyOF,wBAQG"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SessionRecord } from '../../../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
sessions: SessionRecord[];
|
|
4
|
+
currentSessionId?: string | null;
|
|
5
|
+
showClose?: boolean;
|
|
6
|
+
};
|
|
7
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
8
|
+
"new-session": () => any;
|
|
9
|
+
"switch-session": (sessionId: string) => any;
|
|
10
|
+
"delete-session": (sessionId: string) => any;
|
|
11
|
+
close: () => any;
|
|
12
|
+
"clear-all": () => any;
|
|
13
|
+
"close-others": () => any;
|
|
14
|
+
export: () => any;
|
|
15
|
+
"copy-id": () => any;
|
|
16
|
+
feedback: () => any;
|
|
17
|
+
settings: () => any;
|
|
18
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
19
|
+
"onNew-session"?: (() => any) | undefined;
|
|
20
|
+
"onSwitch-session"?: ((sessionId: string) => any) | undefined;
|
|
21
|
+
"onDelete-session"?: ((sessionId: string) => any) | undefined;
|
|
22
|
+
onClose?: (() => any) | undefined;
|
|
23
|
+
"onClear-all"?: (() => any) | undefined;
|
|
24
|
+
"onClose-others"?: (() => any) | undefined;
|
|
25
|
+
onExport?: (() => any) | undefined;
|
|
26
|
+
"onCopy-id"?: (() => any) | undefined;
|
|
27
|
+
onFeedback?: (() => any) | undefined;
|
|
28
|
+
onSettings?: (() => any) | undefined;
|
|
29
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
30
|
+
historyRef: HTMLDivElement;
|
|
31
|
+
moreRef: HTMLDivElement;
|
|
32
|
+
}, HTMLDivElement>;
|
|
33
|
+
export default _default;
|
|
34
|
+
//# sourceMappingURL=ChatHeader.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatHeader.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/ui/ChatHeader.vue"],"names":[],"mappings":"AAqIA;AAsiBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkhBF,wBASG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
2
|
+
"quick-action": (prompt: string) => any;
|
|
3
|
+
}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{
|
|
4
|
+
"onQuick-action"?: ((prompt: string) => any) | undefined;
|
|
5
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLDivElement>;
|
|
6
|
+
export default _default;
|
|
7
|
+
//# sourceMappingURL=WelcomeMessage.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WelcomeMessage.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/ui/WelcomeMessage.vue"],"names":[],"mappings":"AAqBA;;;;;;AA8QA,wBAOG"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { ChatAdapter } from '../adapter';
|
|
2
|
+
import { ChatMessage, ChatMode, SessionRecord } from '../types';
|
|
3
|
+
export interface UseChatOptions {
|
|
4
|
+
/** Adapter 实例 */
|
|
5
|
+
adapter?: ChatAdapter;
|
|
6
|
+
/** 默认模型 */
|
|
7
|
+
defaultModel?: string;
|
|
8
|
+
/** 默认模式 */
|
|
9
|
+
defaultMode?: ChatMode;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 聊天状态管理 Composable
|
|
13
|
+
*/
|
|
14
|
+
export declare function useChat(options?: UseChatOptions): {
|
|
15
|
+
sessions: import('vue').Ref<{
|
|
16
|
+
id: string;
|
|
17
|
+
title: string;
|
|
18
|
+
model: string;
|
|
19
|
+
mode: ChatMode;
|
|
20
|
+
createdAt: Date;
|
|
21
|
+
updatedAt: Date;
|
|
22
|
+
}[], SessionRecord[] | {
|
|
23
|
+
id: string;
|
|
24
|
+
title: string;
|
|
25
|
+
model: string;
|
|
26
|
+
mode: ChatMode;
|
|
27
|
+
createdAt: Date;
|
|
28
|
+
updatedAt: Date;
|
|
29
|
+
}[]>;
|
|
30
|
+
currentSessionId: import('vue').Ref<string | null, string | null>;
|
|
31
|
+
messages: import('vue').Ref<{
|
|
32
|
+
id: string;
|
|
33
|
+
role: "user" | "assistant";
|
|
34
|
+
content: string;
|
|
35
|
+
images?: string[] | undefined;
|
|
36
|
+
thinking?: string | undefined;
|
|
37
|
+
thinkingComplete?: boolean | undefined;
|
|
38
|
+
searchResults?: {
|
|
39
|
+
title: string;
|
|
40
|
+
url: string;
|
|
41
|
+
snippet: string;
|
|
42
|
+
}[] | undefined;
|
|
43
|
+
searching?: boolean | undefined;
|
|
44
|
+
toolCalls?: {
|
|
45
|
+
name: string;
|
|
46
|
+
args?: Record<string, unknown> | undefined;
|
|
47
|
+
result?: string | undefined;
|
|
48
|
+
status: "running" | "success" | "error";
|
|
49
|
+
}[] | undefined;
|
|
50
|
+
copied?: boolean | undefined;
|
|
51
|
+
loading?: boolean | undefined;
|
|
52
|
+
timestamp?: Date | undefined;
|
|
53
|
+
}[], ChatMessage[] | {
|
|
54
|
+
id: string;
|
|
55
|
+
role: "user" | "assistant";
|
|
56
|
+
content: string;
|
|
57
|
+
images?: string[] | undefined;
|
|
58
|
+
thinking?: string | undefined;
|
|
59
|
+
thinkingComplete?: boolean | undefined;
|
|
60
|
+
searchResults?: {
|
|
61
|
+
title: string;
|
|
62
|
+
url: string;
|
|
63
|
+
snippet: string;
|
|
64
|
+
}[] | undefined;
|
|
65
|
+
searching?: boolean | undefined;
|
|
66
|
+
toolCalls?: {
|
|
67
|
+
name: string;
|
|
68
|
+
args?: Record<string, unknown> | undefined;
|
|
69
|
+
result?: string | undefined;
|
|
70
|
+
status: "running" | "success" | "error";
|
|
71
|
+
}[] | undefined;
|
|
72
|
+
copied?: boolean | undefined;
|
|
73
|
+
loading?: boolean | undefined;
|
|
74
|
+
timestamp?: Date | undefined;
|
|
75
|
+
}[]>;
|
|
76
|
+
isLoading: import('vue').Ref<boolean, boolean>;
|
|
77
|
+
mode: import('vue').Ref<ChatMode, ChatMode>;
|
|
78
|
+
model: import('vue').Ref<string, string>;
|
|
79
|
+
webSearch: import('vue').Ref<boolean, boolean>;
|
|
80
|
+
thinking: import('vue').Ref<boolean, boolean>;
|
|
81
|
+
loadSessions: () => Promise<void>;
|
|
82
|
+
switchSession: (sessionId: string) => Promise<void>;
|
|
83
|
+
createNewSession: () => Promise<void>;
|
|
84
|
+
deleteSession: (sessionId: string) => Promise<void>;
|
|
85
|
+
deleteCurrentSession: () => Promise<void>;
|
|
86
|
+
sendMessage: (text: string, images?: string[]) => Promise<void>;
|
|
87
|
+
cancelRequest: () => void;
|
|
88
|
+
copyMessage: (messageId: string) => Promise<void>;
|
|
89
|
+
regenerateMessage: (messageIndex: number) => void;
|
|
90
|
+
setMode: (value: ChatMode) => void;
|
|
91
|
+
setModel: (value: string) => void;
|
|
92
|
+
setWebSearch: (value: boolean) => void;
|
|
93
|
+
setThinking: (value: boolean) => void;
|
|
94
|
+
setWorkingDirectory: (dir: string) => void;
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=useChat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/composables/useChat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAA;AAE3D,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,aAAa,EAId,MAAM,UAAU,CAAA;AAsBjB,MAAM,WAAW,cAAc;IAC7B,iBAAiB;IACjB,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,WAAW;IACX,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW;IACX,WAAW,CAAC,EAAE,QAAQ,CAAA;CACvB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAuCV,MAAM;;+BAsCN,MAAM;;wBAgGb,MAAM,WAAW,MAAM,EAAE;;6BAmIpB,MAAM;sCAoBH,MAAM;qBAwC5B,QAAQ;sBACP,MAAM;0BACF,OAAO;yBACR,OAAO;+BAlCI,MAAM;EAuCzC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @huyooo/ai-chat-frontend
|
|
3
|
+
*
|
|
4
|
+
* AI Chat 前端组件库
|
|
5
|
+
*
|
|
6
|
+
* 使用 adapter 模式,与后端通信方式解耦
|
|
7
|
+
*/
|
|
8
|
+
export type { ChatAdapter, ChatProgress, ChatProgressType, ThinkingData, ToolCallData, ToolResultData, ImageData, SendMessageOptions, CreateSessionOptions, UpdateSessionOptions, SaveMessageOptions, } from './adapter';
|
|
9
|
+
export { createNullAdapter } from './adapter';
|
|
10
|
+
export { useChat } from './composables/useChat';
|
|
11
|
+
export type { UseChatOptions } from './composables/useChat';
|
|
12
|
+
export { default as ChatPanel } from './components/ChatPanel.vue';
|
|
13
|
+
export { default as ChatInput } from './components/ChatInput.vue';
|
|
14
|
+
export { default as ChatHeader } from './components/chat/ui/ChatHeader.vue';
|
|
15
|
+
export { default as WelcomeMessage } from './components/chat/ui/WelcomeMessage.vue';
|
|
16
|
+
export { default as MessageBubble } from './components/chat/messages/MessageBubble.vue';
|
|
17
|
+
export { default as ExecutionSteps } from './components/chat/messages/ExecutionSteps.vue';
|
|
18
|
+
export { default as ThinkingBlock } from './components/chat/ThinkingBlock.vue';
|
|
19
|
+
export { default as ToolCallBlock } from './components/chat/ToolCallBlock.vue';
|
|
20
|
+
export { default as SearchResultBlock } from './components/chat/SearchResultBlock.vue';
|
|
21
|
+
export type { ChatMessage, ChatMode, ModelConfig, ModelProvider, ThinkingMode, SessionRecord, MessageRecord, SearchResult, ToolCall, ChatSession, MediaOperation, AiModel, DiffStat, } from './types';
|
|
22
|
+
export { DEFAULT_MODELS, FileType } from './types';
|
|
23
|
+
/**
|
|
24
|
+
* 使用说明:
|
|
25
|
+
*
|
|
26
|
+
* 1. 创建 adapter(使用桥接包):
|
|
27
|
+
* import { createElectronAdapter } from '@huyooo/ai-chat-bridge-electron/renderer';
|
|
28
|
+
* const adapter = createElectronAdapter();
|
|
29
|
+
*
|
|
30
|
+
* 2. 在 Vue 组件中使用:
|
|
31
|
+
* <ChatPanel :adapter="adapter" />
|
|
32
|
+
*
|
|
33
|
+
* 3. 或使用 useChat composable:
|
|
34
|
+
* const chat = useChat({ adapter });
|
|
35
|
+
* // 然后自定义 UI
|
|
36
|
+
*/
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAG5E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAGpF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAG1F,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAGvF,YAAY,EACV,WAAW,EACX,QAAQ,EACR,WAAW,EACX,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,QAAQ,EAER,WAAW,EACX,cAAc,EACd,OAAO,EACP,QAAQ,GACT,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnD;;;;;;;;;;;;;GAaG"}
|