agent-tool-chat 0.1.1 → 1.0.0
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/README.md +126 -7
- package/dist/agent-core/agent.d.ts +29 -0
- package/dist/agent-core/index.d.ts +7 -0
- package/dist/agent-core/provider.d.ts +12 -0
- package/dist/agent-core/storage.d.ts +6 -0
- package/dist/agent-core/tool-registry.d.ts +12 -0
- package/dist/agent-core/types.d.ts +72 -0
- package/dist/agent-tool-chat.css +1 -0
- package/dist/api/deepseek.d.ts +2 -0
- package/dist/api/proxy.d.ts +2 -0
- package/dist/components/ChatInput.vue.d.ts +14 -0
- package/dist/components/ChatMessage.vue.d.ts +15 -0
- package/dist/components/ChatPanel.vue.d.ts +28 -0
- package/dist/components/ChatSettings.vue.d.ts +14 -0
- package/dist/components/RenderBlock.vue.d.ts +12 -0
- package/dist/components/SuggestedNext.vue.d.ts +9 -0
- package/dist/composables/useAgentChat.d.ts +120 -0
- package/dist/config.d.ts +4 -0
- package/dist/core/context-builder.d.ts +2 -0
- package/dist/core/event-bus.d.ts +14 -0
- package/dist/core/event-engine.d.ts +20 -0
- package/dist/core/render-resolver.d.ts +9 -0
- package/dist/index.cjs +22 -21
- package/dist/index.d.ts +18 -0
- package/dist/index.js +1377 -896
- package/dist/types.d.ts +121 -0
- package/dist/utils/parseUtils.d.ts +6 -0
- package/package.json +13 -7
- package/dist/style.css +0 -1
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { Component } from 'vue';
|
|
2
|
+
import { CoreMessage, ToolCall, StreamResult, ToolDefinition as CoreToolDefinition, LLMProviderConfig } from './agent-core';
|
|
3
|
+
export type { CoreMessage, ToolCall, StreamResult, LLMProviderConfig };
|
|
4
|
+
export interface ToolDefinition {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
parameters: Record<string, any>;
|
|
8
|
+
displayHints?: {
|
|
9
|
+
suggestComponent?: string;
|
|
10
|
+
resultFormat?: 'table' | 'card' | 'list' | 'text' | 'map';
|
|
11
|
+
previewFields?: string[];
|
|
12
|
+
summaryTemplate?: string;
|
|
13
|
+
suggestedNext?: string;
|
|
14
|
+
selectable?: boolean;
|
|
15
|
+
labelField?: string;
|
|
16
|
+
suggestedNextEvent?: string;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export interface ToolPackage {
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
components?: Record<string, Component>;
|
|
24
|
+
tools: ToolDefinition[];
|
|
25
|
+
}
|
|
26
|
+
export interface ToolCallEvent {
|
|
27
|
+
toolCallId: string;
|
|
28
|
+
packageId: string;
|
|
29
|
+
toolName: string;
|
|
30
|
+
args: Record<string, any>;
|
|
31
|
+
}
|
|
32
|
+
export interface RenderBlock {
|
|
33
|
+
type: 'component' | 'table' | 'card' | 'list';
|
|
34
|
+
packageId?: string;
|
|
35
|
+
componentName?: string;
|
|
36
|
+
title?: string;
|
|
37
|
+
data: any;
|
|
38
|
+
fields?: string[];
|
|
39
|
+
labelField?: string;
|
|
40
|
+
selectable?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface RenderDisplayArgs {
|
|
43
|
+
text: string;
|
|
44
|
+
blocks?: RenderBlock[];
|
|
45
|
+
suggestedNext?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface FileAttachment {
|
|
48
|
+
id: string;
|
|
49
|
+
name: string;
|
|
50
|
+
size: number;
|
|
51
|
+
type: string;
|
|
52
|
+
data: string;
|
|
53
|
+
}
|
|
54
|
+
export type MessageRole = 'system' | 'user' | 'assistant' | 'tool';
|
|
55
|
+
export interface ChatMessage {
|
|
56
|
+
id: string;
|
|
57
|
+
role: MessageRole;
|
|
58
|
+
content: string;
|
|
59
|
+
reasoning?: string;
|
|
60
|
+
tool_calls?: ToolCall[];
|
|
61
|
+
tool_call_id?: string;
|
|
62
|
+
status: 'pending' | 'streaming' | 'done' | 'error';
|
|
63
|
+
timestamp: number;
|
|
64
|
+
error?: string;
|
|
65
|
+
/** render_display 解析后的渲染块 */
|
|
66
|
+
renderBlocks?: RenderBlock[];
|
|
67
|
+
/** 后续建议 */
|
|
68
|
+
suggestedNext?: string;
|
|
69
|
+
/** 上传的文件附件 */
|
|
70
|
+
files?: FileAttachment[];
|
|
71
|
+
/** 工具调用结果 */
|
|
72
|
+
toolResults?: ToolResult[];
|
|
73
|
+
}
|
|
74
|
+
export interface ToolResult {
|
|
75
|
+
callId: string;
|
|
76
|
+
name: string;
|
|
77
|
+
arguments: string;
|
|
78
|
+
result: string;
|
|
79
|
+
success: boolean;
|
|
80
|
+
status: 'running' | 'success' | 'error';
|
|
81
|
+
}
|
|
82
|
+
export interface ChatSettings {
|
|
83
|
+
apiKey: string;
|
|
84
|
+
baseUrl: string;
|
|
85
|
+
model: string;
|
|
86
|
+
temperature: number;
|
|
87
|
+
useTools?: boolean;
|
|
88
|
+
providerMode: 'direct' | 'proxy';
|
|
89
|
+
proxyUrl: string;
|
|
90
|
+
}
|
|
91
|
+
export declare const DEFAULT_SETTINGS: ChatSettings;
|
|
92
|
+
export interface AgentChatOptions {
|
|
93
|
+
toolPackages: ToolPackage[];
|
|
94
|
+
onToolCall: (call: ToolCallEvent) => Promise<any>;
|
|
95
|
+
provider?: any;
|
|
96
|
+
providerConfig?: Partial<LLMProviderConfig>;
|
|
97
|
+
systemPrompt?: string;
|
|
98
|
+
storagePrefix?: string;
|
|
99
|
+
/** 上传的文件数据是否发给 LLM,默认 false(仅前端展示) */
|
|
100
|
+
sendFileToLLM?: boolean;
|
|
101
|
+
/** 业务事件驱动配置 */
|
|
102
|
+
businessEvents?: BusinessEventsConfig;
|
|
103
|
+
}
|
|
104
|
+
export interface BusinessEvent {
|
|
105
|
+
type: string;
|
|
106
|
+
source?: string;
|
|
107
|
+
timestamp: number;
|
|
108
|
+
payload: Record<string, any>;
|
|
109
|
+
}
|
|
110
|
+
export interface EventRule {
|
|
111
|
+
event: string | RegExp;
|
|
112
|
+
action: 'respond' | 'suggest' | 'notify' | 'silent';
|
|
113
|
+
prompt?: string;
|
|
114
|
+
autoPopup?: boolean;
|
|
115
|
+
cooldown?: number;
|
|
116
|
+
}
|
|
117
|
+
export interface BusinessEventsConfig {
|
|
118
|
+
bus?: import('./core/event-bus').EventBus;
|
|
119
|
+
rules: EventRule[];
|
|
120
|
+
}
|
|
121
|
+
export declare function toCoreToolDefinition(tool: ToolDefinition): CoreToolDefinition;
|
package/package.json
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
"name": "agent-tool-chat",
|
|
3
3
|
"description": "An agent-driven chat plugin with ToolPackage architecture and host-controlled execution",
|
|
4
4
|
"author": "kangjinrui <1092014304@qq.com>",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"license": "MIT",
|
|
6
7
|
"private": false,
|
|
7
8
|
"type": "module",
|
|
8
9
|
"main": "./dist/index.cjs",
|
|
@@ -14,25 +15,30 @@
|
|
|
14
15
|
"import": "./dist/index.js",
|
|
15
16
|
"require": "./dist/index.cjs"
|
|
16
17
|
},
|
|
17
|
-
"./dist/style.css": "./dist/
|
|
18
|
+
"./dist/style.css": "./dist/agent-tool-chat.css",
|
|
18
19
|
"./package.json": "./package.json"
|
|
19
20
|
},
|
|
21
|
+
"sideEffects": [
|
|
22
|
+
"**/*.css"
|
|
23
|
+
],
|
|
20
24
|
"files": [
|
|
21
25
|
"dist"
|
|
22
26
|
],
|
|
23
27
|
"scripts": {
|
|
24
28
|
"build": "vite build",
|
|
25
|
-
"dev": "vite build --watch"
|
|
29
|
+
"dev": "vite build --watch",
|
|
30
|
+
"prepublishOnly": "npm run build"
|
|
26
31
|
},
|
|
27
32
|
"peerDependencies": {
|
|
28
33
|
"vue": "^3.4",
|
|
29
34
|
"element-plus": "^2.0"
|
|
30
35
|
},
|
|
31
36
|
"devDependencies": {
|
|
32
|
-
"@vitejs/plugin-vue": "^
|
|
33
|
-
"typescript": "^
|
|
34
|
-
"vite": "^
|
|
37
|
+
"@vitejs/plugin-vue": "^5.2.0",
|
|
38
|
+
"typescript": "^5.7.0",
|
|
39
|
+
"vite": "^6.0.0",
|
|
40
|
+
"vite-plugin-dts": "^4.5.0",
|
|
35
41
|
"vue": "^3.4.5",
|
|
36
|
-
"vue-tsc": "^
|
|
42
|
+
"vue-tsc": "^2.2.0"
|
|
37
43
|
}
|
|
38
44
|
}
|
package/dist/style.css
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.render-block[data-v-89cef1ee]{margin:8px 0;padding:8px 0;width:100%;height:100%;min-height:400px}.render-block__component[data-v-89cef1ee]{border-radius:8px;background:var(--el-fill-color-lighter);box-shadow:0 0 10px #0000001a}.render-block__title[data-v-89cef1ee]{font-weight:600;font-size:14px;margin-bottom:6px;color:var(--el-text-color-primary)}.render-block__table table[data-v-89cef1ee]{width:100%;border-collapse:collapse;font-size:13px}.render-block__table th[data-v-89cef1ee],.render-block__table td[data-v-89cef1ee]{border:1px solid var(--el-border-color);padding:6px 10px;text-align:left}.render-block__table th[data-v-89cef1ee]{background:var(--el-fill-color-light);font-weight:600}.render-block__cards[data-v-89cef1ee]{display:flex;flex-direction:column;gap:8px}.card-item[data-v-89cef1ee]{border:1px solid var(--el-border-color);border-radius:8px;padding:10px 14px;background:var(--el-fill-color-lighter)}.card-field[data-v-89cef1ee]{display:flex;gap:6px;font-size:13px;line-height:1.8}.card-label[data-v-89cef1ee]{font-weight:600;color:var(--el-text-color-secondary);min-width:80px}.card-value[data-v-89cef1ee]{color:var(--el-text-color-primary)}.render-block__list[data-v-89cef1ee]{display:flex;flex-direction:column;gap:4px}.list-item[data-v-89cef1ee]{padding:6px 10px;font-size:13px;border-left:3px solid var(--el-color-primary);background:var(--el-fill-color-lighter);border-radius:0 4px 4px 0}.suggested-next[data-v-0e0e9b65]{display:flex;align-items:center;gap:8px;padding:8px 12px;margin:6px 0;background:var(--el-color-primary-light-9);border:1px solid var(--el-color-primary-light-7);border-radius:8px;font-size:13px}.suggested-next__icon[data-v-0e0e9b65]{font-size:15px;flex-shrink:0}.suggested-next__text[data-v-0e0e9b65]{flex:1;color:var(--el-text-color-regular)}.chat-message[data-v-fe82b4e5]{display:flex;gap:10px;padding:12px 0}.chat-message.role-user[data-v-fe82b4e5]{flex-direction:row-reverse}.message-avatar[data-v-fe82b4e5]{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px}.role-user .message-avatar[data-v-fe82b4e5]{background:var(--el-color-primary);color:#fff}.role-assistant .message-avatar[data-v-fe82b4e5]{background:var(--el-color-success);color:#fff}.message-body[data-v-fe82b4e5]{max-width:80%;min-width:0}.role-user .message-body[data-v-fe82b4e5]{background:var(--el-color-primary-light-9);padding:8px 14px;border-radius:12px 4px 12px 12px;box-shadow:0 0 10px #0000001a}.role-assistant .message-body[data-v-fe82b4e5]{background:var(--el-fill-color-lighter);padding:8px 14px;border-radius:4px 12px 12px;display:flex;flex-direction:column;box-shadow:0 0 10px #0000001a}.message-user-text[data-v-fe82b4e5]{font-size:14px;line-height:1.5;color:var(--el-text-color-primary);white-space:pre-wrap;word-break:break-word}.message-content[data-v-fe82b4e5]{font-size:14px;line-height:1.6;color:var(--el-text-color-primary);white-space:pre-wrap;word-break:break-word}.message-cursor[data-v-fe82b4e5]{display:inline-block;animation:blink-fe82b4e5 .8s step-end infinite;color:var(--el-color-primary);font-size:16px}@keyframes blink-fe82b4e5{50%{opacity:0}}.message-error[data-v-fe82b4e5]{margin-top:4px;font-size:12px;color:var(--el-color-danger)}.message-reasoning[data-v-fe82b4e5]{margin-bottom:8px}.message-reasoning details[data-v-fe82b4e5]{font-size:13px}.message-reasoning summary[data-v-fe82b4e5]{cursor:pointer;color:var(--el-color-info);font-size:12px}.message-reasoning pre[data-v-fe82b4e5]{margin:6px 0 0;padding:8px;background:var(--el-fill-color);border-radius:6px;font-size:12px;white-space:pre-wrap;word-break:break-word;max-height:200px;overflow-y:auto}.message-files[data-v-fe82b4e5]{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.message-file[data-v-fe82b4e5]{display:flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--el-border-color);border-radius:8px;background:var(--el-bg-color);font-size:12px}.message-file.is-image[data-v-fe82b4e5]{padding:4px;flex-direction:column;align-items:flex-start}.file-image[data-v-fe82b4e5]{max-width:200px;max-height:200px;border-radius:6px;object-fit:contain;cursor:pointer}.file-info[data-v-fe82b4e5]{display:flex;flex-direction:column;gap:2px}.file-name[data-v-fe82b4e5]{color:var(--el-text-color-primary);font-weight:500;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-size[data-v-fe82b4e5]{color:var(--el-text-color-secondary);font-size:11px}.chat-input[data-v-1f9902c6]{padding:12px 16px;border-top:1px solid var(--el-border-color-lighter);background:var(--el-bg-color)}.chat-input__files[data-v-1f9902c6]{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}.chat-input__wrap[data-v-1f9902c6]{display:flex;align-items:flex-end;gap:8px;background:var(--el-fill-color-light);border:1px solid var(--el-border-color);border-radius:12px;padding:6px 6px 6px 12px;transition:border-color .2s,box-shadow .2s}.chat-input__wrap[data-v-1f9902c6]:focus-within{border-color:var(--el-color-primary);box-shadow:0 0 0 2px var(--el-color-primary-light-8)}.chat-input__wrap[data-v-1f9902c6] .el-textarea__inner{border:none;background:transparent;box-shadow:none;padding:4px 0;line-height:1.6;font-size:14px}.chat-input__wrap[data-v-1f9902c6] .el-textarea__inner:focus{box-shadow:none}.chat-input__actions[data-v-1f9902c6]{flex-shrink:0;display:flex;align-items:center;gap:2px;padding-bottom:2px}.form-tip[data-v-21ad42a2]{font-size:12px;color:var(--el-text-color-secondary);line-height:1.6;margin-top:4px}.form-tip-inline[data-v-21ad42a2]{margin-left:8px;font-size:12px;color:var(--el-text-color-secondary)}.temp-row[data-v-21ad42a2]{display:flex;align-items:center;gap:12px;width:100%}.temp-val[data-v-21ad42a2]{width:28px;text-align:right;font-size:13px;color:var(--el-text-color-secondary)}.chat-panel[data-v-b29b5a67]{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--el-bg-color)}.chat-panel__header[data-v-b29b5a67]{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid var(--el-border-color-lighter);flex-shrink:0}.chat-panel__title[data-v-b29b5a67]{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:600;color:var(--el-text-color-primary)}.title-icon[data-v-b29b5a67]{color:var(--el-color-primary);font-size:18px}.chat-panel__ops[data-v-b29b5a67]{display:flex;gap:4px}.chat-panel__body[data-v-b29b5a67]{flex:1;overflow-y:auto;padding:0 16px;min-height:0}.chat-panel__body[data-v-b29b5a67]::-webkit-scrollbar{width:6px}.chat-panel__body[data-v-b29b5a67]::-webkit-scrollbar-thumb{background:var(--el-border-color);border-radius:3px}.chat-empty[data-v-b29b5a67]{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:20px;gap:14px}.chat-empty__logo[data-v-b29b5a67]{width:64px;height:64px;border-radius:18px;background:linear-gradient(135deg,#009688,#2d8cf0);color:#fff;display:flex;align-items:center;justify-content:center;font-size:32px;box-shadow:0 8px 24px #2d8cf04d}.chat-empty h3[data-v-b29b5a67]{margin:0;font-size:18px;color:var(--el-text-color-primary)}.chat-empty__desc[data-v-b29b5a67]{margin:0;font-size:13px;color:var(--el-text-color-secondary);line-height:1.6}.chat-empty__desc .hl[data-v-b29b5a67]{color:var(--el-color-primary);font-weight:600}.chat-panel__footer[data-v-b29b5a67]{flex-shrink:0}.chat-panel__stop[data-v-b29b5a67]{display:flex;justify-content:center;padding:6px 0 0}.chat-panel__error[data-v-b29b5a67]{padding:8px 16px 0}.fade-enter-active[data-v-b29b5a67],.fade-leave-active[data-v-b29b5a67]{transition:opacity .2s}.fade-enter-from[data-v-b29b5a67],.fade-leave-to[data-v-b29b5a67]{opacity:0}
|