From b589521775098322fa87893d3b705f6ed9bcfb24 Mon Sep 17 00:00:00 2001 From: Wenjie Zhang Date: Tue, 3 Feb 2026 14:03:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=9B=B4=E5=A4=9A?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E8=A7=A3=E6=9E=90=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/AgentPanel.vue | 4 +- .../ToolCallingResult/BaseToolCall.vue | 19 +++++- .../ToolCallingResult/ToolCallRenderer.vue | 40 ++++++++++++ web/src/components/ToolCallingResult/index.js | 5 ++ .../ToolCallingResult/tools/EditFileTool.vue | 55 ++++++++++++++++ .../ToolCallingResult/tools/GlobTool.vue | 38 ++++++++++++ .../tools/ListDirectoryTool.vue | 44 +++++++++++++ .../ToolCallingResult/tools/ReadFileTool.vue | 62 +++++++++++++++++++ .../tools/SearchFileContentTool.vue | 41 ++++++++++++ .../ToolCallingResult/tools/TodoListTool.vue | 8 +-- 10 files changed, 307 insertions(+), 9 deletions(-) create mode 100644 web/src/components/ToolCallingResult/tools/EditFileTool.vue create mode 100644 web/src/components/ToolCallingResult/tools/GlobTool.vue create mode 100644 web/src/components/ToolCallingResult/tools/ListDirectoryTool.vue create mode 100644 web/src/components/ToolCallingResult/tools/ReadFileTool.vue create mode 100644 web/src/components/ToolCallingResult/tools/SearchFileContentTool.vue diff --git a/web/src/components/AgentPanel.vue b/web/src/components/AgentPanel.vue index f0dfb00f..17c39cfc 100644 --- a/web/src/components/AgentPanel.vue +++ b/web/src/components/AgentPanel.vue @@ -126,7 +126,7 @@
-

暂无附件

+

暂无附件,支持 txt/md/docx/html 格式 ≤ 5 MB

上传附件
@@ -827,7 +827,7 @@ const stopResize = () => { display: flex; align-items: flex-start; gap: 10px; - padding: 12px; + padding: 6px 12px; border-radius: 8px; border: 1px solid var(--gray-150); transition: all 0.15s ease; diff --git a/web/src/components/ToolCallingResult/BaseToolCall.vue b/web/src/components/ToolCallingResult/BaseToolCall.vue index 27827bf7..ebbea3a4 100644 --- a/web/src/components/ToolCallingResult/BaseToolCall.vue +++ b/web/src/components/ToolCallingResult/BaseToolCall.vue @@ -305,11 +305,24 @@ const formatResultData = (data) => { :deep(.tag) { font-size: 12px; - color: var(--gray-600); - background-color: var(--gray-100); - padding: 0px 4px; + color: var(--gray-800); + background-color: var(--gray-50); + padding: 4px 4px; border-radius: 4px; margin-left: 8px; + + &.tag-yes { + color: var(--main-500); + } + + &.success { + color: var(--color-success-500); + background-color: var(--color-success-50); + } + &.error { + color: var(--color-error-500); + background-color: var(--color-error-50); + } } } } diff --git a/web/src/components/ToolCallingResult/ToolCallRenderer.vue b/web/src/components/ToolCallingResult/ToolCallRenderer.vue index 0a4da6b6..0b9c5626 100644 --- a/web/src/components/ToolCallingResult/ToolCallRenderer.vue +++ b/web/src/components/ToolCallingResult/ToolCallRenderer.vue @@ -23,6 +23,21 @@ + + + + + + + + + + + + + + + @@ -41,6 +56,11 @@ import TodoListTool from './tools/TodoListTool.vue' import ImageTool from './tools/ImageTool.vue' import TaskTool from './tools/TaskTool.vue' import WriteFileTool from './tools/WriteFileTool.vue' +import ReadFileTool from './tools/ReadFileTool.vue' +import ListDirectoryTool from './tools/ListDirectoryTool.vue' +import SearchFileContentTool from './tools/SearchFileContentTool.vue' +import GlobTool from './tools/GlobTool.vue' +import EditFileTool from './tools/EditFileTool.vue' const props = defineProps({ toolCall: { @@ -130,6 +150,26 @@ const isWriteFileResult = computed(() => { return toolName.value === 'write_file' }) +const isReadFileResult = computed(() => { + return toolName.value === 'read_file' +}) + +const isListDirectoryResult = computed(() => { + return toolName.value === 'list_directory' || toolName.value === 'ls' +}) + +const isSearchFileContentResult = computed(() => { + return toolName.value === 'search_file_content' +}) + +const isGlobResult = computed(() => { + return toolName.value === 'glob' +}) + +const isEditFileResult = computed(() => { + return toolName.value === 'edit_file' || toolName.value === 'replace' +}) + // 处理知识图谱刷新 const graphToolCallRef = ref(null) const refreshGraph = () => { diff --git a/web/src/components/ToolCallingResult/index.js b/web/src/components/ToolCallingResult/index.js index 204c4fdc..15a8c361 100644 --- a/web/src/components/ToolCallingResult/index.js +++ b/web/src/components/ToolCallingResult/index.js @@ -10,3 +10,8 @@ export { default as CalculatorTool } from './tools/CalculatorTool.vue' export { default as TodoListTool } from './tools/TodoListTool.vue' export { default as ImageTool } from './tools/ImageTool.vue' export { default as WriteFileTool } from './tools/WriteFileTool.vue' +export { default as ReadFileTool } from './tools/ReadFileTool.vue' +export { default as ListDirectoryTool } from './tools/ListDirectoryTool.vue' +export { default as SearchFileContentTool } from './tools/SearchFileContentTool.vue' +export { default as GlobTool } from './tools/GlobTool.vue' +export { default as EditFileTool } from './tools/EditFileTool.vue' diff --git a/web/src/components/ToolCallingResult/tools/EditFileTool.vue b/web/src/components/ToolCallingResult/tools/EditFileTool.vue new file mode 100644 index 00000000..b3c35f0a --- /dev/null +++ b/web/src/components/ToolCallingResult/tools/EditFileTool.vue @@ -0,0 +1,55 @@ + + + diff --git a/web/src/components/ToolCallingResult/tools/GlobTool.vue b/web/src/components/ToolCallingResult/tools/GlobTool.vue new file mode 100644 index 00000000..32ec4c4e --- /dev/null +++ b/web/src/components/ToolCallingResult/tools/GlobTool.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/web/src/components/ToolCallingResult/tools/ListDirectoryTool.vue b/web/src/components/ToolCallingResult/tools/ListDirectoryTool.vue new file mode 100644 index 00000000..29b65fb8 --- /dev/null +++ b/web/src/components/ToolCallingResult/tools/ListDirectoryTool.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/web/src/components/ToolCallingResult/tools/ReadFileTool.vue b/web/src/components/ToolCallingResult/tools/ReadFileTool.vue new file mode 100644 index 00000000..d3aeded3 --- /dev/null +++ b/web/src/components/ToolCallingResult/tools/ReadFileTool.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/web/src/components/ToolCallingResult/tools/SearchFileContentTool.vue b/web/src/components/ToolCallingResult/tools/SearchFileContentTool.vue new file mode 100644 index 00000000..c31b10b7 --- /dev/null +++ b/web/src/components/ToolCallingResult/tools/SearchFileContentTool.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/web/src/components/ToolCallingResult/tools/TodoListTool.vue b/web/src/components/ToolCallingResult/tools/TodoListTool.vue index 639fb6d1..98650db7 100644 --- a/web/src/components/ToolCallingResult/tools/TodoListTool.vue +++ b/web/src/components/ToolCallingResult/tools/TodoListTool.vue @@ -147,17 +147,17 @@ const todoListData = (content) => { .todo-list { display: flex; flex-direction: column; - gap: 8px; + gap: 2px; } .todo-item { display: flex; align-items: flex-start; gap: 10px; - padding: 10px 12px; - background: var(--gray-25); + padding: 4px 8px; + // background: var(--gray-10); border-radius: 6px; - border: 1px solid var(--gray-150); + // border: 1px solid var(--gray-150); .todo-status { flex-shrink: 0;