diff --git a/docs/develop-guides/roadmap.md b/docs/develop-guides/roadmap.md index 41a8af0e..34fe5c6d 100644 --- a/docs/develop-guides/roadmap.md +++ b/docs/develop-guides/roadmap.md @@ -70,7 +70,7 @@ - 标准化 Agent run/SSE 执行链路:run 创建时持久化输入消息并提交后入队,worker 统一写入 Redis Stream envelope,SSE 输出 `event/data/id`、心跳注释、`Last-Event-ID` 回放和终止 `end` 事件;前端强制使用 run API 并支持 ask_user_question 中断后以 resume run 恢复。 - 收敛后端模块边界:文档解析从 `plugins.parser` 移动到 `knowledge.parser`,内容审查从 `plugins.guard` 移动到 `services.guard`。 - 收敛文件服务边界:文件预览判断抽为独立服务,Viewer 文件系统的 workspace 分支复用用户 workspace 服务,线程运行时上下文解析从泛化 `filesystem_service` 拆出为 agent runtime helper。 -- 优化聊天输入 @ 文件提及:未创建 Thread 时可搜索用户 workspace,创建 Thread 后按当前对话文件优先、workspace 兜底的来源顺序搜索,并拆分 workspace/thread 缓存避免假 thread 与跨用户缓存污染。 +- 优化聊天输入 @ 文件提及:未创建 Thread 时可搜索用户 workspace,创建 Thread 后按当前对话文件优先、workspace 兜底的来源顺序搜索,并拆分 workspace/thread 缓存避免假 thread 与跨用户缓存污染;输入框与用户消息支持将 raw mention 渲染为带类型图标的引用单元,文件仅显示文件名且保留原始沙盒路径文本。 --- diff --git a/web/src/components/AgentChatComponent.vue b/web/src/components/AgentChatComponent.vue index 50c5bb12..22d37936 100644 --- a/web/src/components/AgentChatComponent.vue +++ b/web/src/components/AgentChatComponent.vue @@ -55,6 +55,7 @@ :is-processing="isDisplayMessageProcessing(row.conv, displayItem)" :show-refs="showMsgRefs(displayItem.message)" :hide-tool-calls="true" + :mention="mentionConfig" @retry="retryMessage(displayItem.message)" > diff --git a/web/src/components/AgentMessageComponent.vue b/web/src/components/AgentMessageComponent.vue index e9e65614..62b54870 100644 --- a/web/src/components/AgentMessageComponent.vue +++ b/web/src/components/AgentMessageComponent.vue @@ -23,7 +23,9 @@ -

{{ message.content }}

+

+ +

{{ message.content }}

@@ -139,11 +141,13 @@ import RefsComponent from '@/components/RefsComponent.vue' import { Copy, Check } from 'lucide-vue-next' import ToolCallsGroupComponent from '@/components/ToolCallsGroupComponent.vue' import MarkdownPreview from '@/components/common/MarkdownPreview.vue' +import MentionTextRenderer from '@/components/common/MentionTextRenderer.vue' import { useAgentStore } from '@/stores/agent' import { useInfoStore } from '@/stores/info' import { storeToRefs } from 'pinia' import { MessageProcessor } from '@/utils/messageProcessor' import { normalizeAttachmentPreviews } from '@/utils/file_utils' +import { buildMentionDisplayLabels } from '@/utils/mention_utils' const props = defineProps({ // 消息角色:'user'|'assistant'|'sent'|'received' @@ -175,6 +179,10 @@ const props = defineProps({ type: Boolean, default: false }, + mention: { + type: Object, + default: () => null + }, // 是否显示调试信息 (已废弃,使用 infoStore.debugMode) debugMode: { type: Boolean, @@ -264,6 +272,8 @@ const fileAttachments = computed(() => messageAttachments.value.filter((attachment) => !attachment.isImage || !attachment.previewUrl) ) +const mentionDisplayLabels = computed(() => buildMentionDisplayLabels(props.mention || {})) + const messageSources = computed(() => { if (props.message.type === 'ai') { return MessageProcessor.extractSourcesFromMessage(props.message, availableKnowledgeBases.value) diff --git a/web/src/components/AttachmentTmpUploadModal.vue b/web/src/components/AttachmentTmpUploadModal.vue index a00cc9bf..0a5a5b97 100644 --- a/web/src/components/AttachmentTmpUploadModal.vue +++ b/web/src/components/AttachmentTmpUploadModal.vue @@ -32,7 +32,7 @@ @@ -136,7 +136,7 @@ :loading="item.status === 'parsing'" :disabled="confirming" > - 解析 + 可解析 @@ -546,12 +546,6 @@ const formatFileSize = (size) => { } .remove-btn { - display: inline-flex; - flex: none; - align-items: center; - justify-content: center; - width: 30px; - height: 30px; color: var(--gray-500); } @@ -565,7 +559,6 @@ const formatFileSize = (size) => { align-items: center; justify-content: space-between; gap: 8px; - margin-top: 6px; color: var(--gray-500); font-size: 12px; } @@ -585,6 +578,7 @@ const formatFileSize = (size) => { .parse-trigger-btn { flex: none; margin-left: auto; + font-size: 12px; } .parse-panel { diff --git a/web/src/components/MessageInputComponent.vue b/web/src/components/MessageInputComponent.vue index 9e766db9..d20e49d9 100644 --- a/web/src/components/MessageInputComponent.vue +++ b/web/src/components/MessageInputComponent.vue @@ -25,22 +25,27 @@ -