优化: AI Chat 消息视图: 闪烁修复+骨架统一+过程卡降级+任务关联 chip

MessageList.vue:
1. 流式闪烁修复: _mdRenderKey 稳定化 + key 对齐, 消除流式重渲染抖动
2. 骨架统一: 过程步骤卡改用 trace 卡骨架(头部一行摘要 + 正文增量)
3. 过程卡视觉降级: 缩进收窄 + 紧贴结果, 弱化过程突出结论
4. 消息任务关联: TASK_REF_TOOLS 映射(advance_task/run_workflow) 从
   toolCalls[].args 派生任务 chip, 零数据模型改动(单一事实源), 无任务工具
   的消息不渲染 chip; 新增 .ai-trace-task-chip 样式 + go-to-task emit

AiChat.vue: goToTask(taskId) 接参, router.push('/tasks?taskId=xxx')
Tasks.vue: applyRouteTaskId 消费 query.taskId 自动开抽屉(onMounted 跨路由 +
  watch 同路由), 消费后 router.replace 清 query 保持 URL 干净
i18n zh/en: aiChat.goToTaskHint + ai.trace.taskRef 双语补键

验收: vue-tsc --noEmit EXIT 0 + build EXIT 0。
This commit is contained in:
lxy
2026-10-09 22:53:22 +08:00
parent a8c92e9619
commit 40c4a21a7e
5 changed files with 177 additions and 25 deletions
+5 -4
View File
@@ -113,6 +113,7 @@ export default {
examplePrompt4: '生成一个项目灵感',
goToSettings: '去设置',
goToSettingsHint: '分离窗口无法直接打开设置,请在主窗口的设置页配置 AI 提供商',
goToTaskHint: '分离窗口无法直接打开任务,请在主窗口查看任务详情',
// ── Provider 切换反馈──
providerSwitched: '已切换到 {model}',
@@ -136,12 +137,12 @@ export default {
clearSkill: '取消技能',
skillBadgeTip: '已注入技能「{name}」的完整规程',
placeholderWithSkill: '已选技能,输入参数后回车',
placeholderDefault: "输入消息...(/ 触发技能,@ 引用实体)",
placeholderDefault: "输入消息...(/ 触发技能,@ 引用实体)",
skillNoMatch: '无匹配技能',
skillNotLoaded: '未读取到本机技能',
// ── @ 实体引用(@ 触发 popover,选中插入 [类型:名] 标记) ──
mentionHint: "@ 引用项目/任务",
mentionHint: "@ 引用项目/任务",
mentionGroupProject: '项目',
mentionGroupTask: '任务',
mentionGroupIdea: '灵感',
@@ -233,7 +234,7 @@ export default {
// ── Input Augmentation 层: mention/skill 注入反馈 ──
// search_files 盲搜被白名单兜底拒绝(不应弹授权窗,直接友好提示用户改用 @引用或绝对路径)
searchFilesBlocked: "search_files 仅在已授权目录可用,请用 @[项目] 引用或提供绝对路径",
searchFilesBlocked: "search_files 仅在已授权目录可用,请用 @[项目] 引用或提供绝对路径",
// /技能 热重载(ai_reload_skills IPC)成功后提示
skillReloaded: '技能已重新加载',
// @引用 实体 resolve 失败(id 指向的项目/任务/灵感/技能已被删除或不可用)
@@ -327,7 +328,7 @@ export default {
// ── TopBar 目标/项目上下文标签 ──
goalsCount: '目标({n})',
none: '无',
projectLabel: "@项目",
projectLabel: "@项目",
// ── 3c UX 批追加(I5 发送失败错误分类文案):按错误内容映射友好提示,
// {msg} 保留原始错误串供排查,不丢线索 ──