Files
DevFlow/docs/06-前端开发/前端架构技术债-2026-06-19.md
绝尘 bd6a41fe6e 新增: 批次工作落地(推进链/评估闭环/事件总线/并发/加固) + 技术债清理 + 文档整理
后端:
- 工作流推进链(D-03):advance_task/状态机/闸门走 df-nodes Node trait,conditions 条件引擎扩展
- 想法评估闭环:启发式评分+对抗评估,df-ideas/scoring + df-storage/idea_eval_repo + idea 前端打通
- 全局事件数据总线:df-ai/context+context_helpers+augmentation 跨模块解耦
- AI planner/plan_hint/intent:aichat B 路线并行多轮基础
- patch_file 加固(TD-03/04):读改写整体锁防 lost update,expected_hash 合约闭环
- 压缩超时兜底(F-15 卡死根治)
- F-09 多会话并发:LlmConcurrency per-conv + streamingGuard 前端守护 + verify 脚本
- 知识注入 DRY/skills/audit 扩展

清理:
- aichat 技术债(误报 allow/死导入/过时注释 30 项)
- URGENT.md 删除(11 项加急全解决/迁 todo)
- 文档整理(todo/待决策/待审查/ARCHITECTURE/INDEX + 总线/技术债审查新文档)
2026-06-21 20:51:26 +08:00

3.9 KiB

前端架构技术债清单(2026-06-19 审查)

来源:fe-arch-review 子代理多角度审查(目录/组件粒度/状态/类型/依赖/路由/命名/测试/AI coding 友好度)。 整体:B+(AI coding 友好 7.5/10)。类型基础扎实(strict + vue-tsc 0)、命名一致(A 95/100)、依赖无环、死代码 1.7%。债集中在 AI 模块体量 + status 类型化。 已修复:i18n as any 样板收口(i18n-helpers.ts,as any 22→10,i18n 13→0,commit f4cc2e5)。

核对更新(2026-06-20·本次清理):P1-1 AiChat.vue 4075→750 已拆 God(REFACTOR-07/SMELL-P0-3,子组件 ConversationSidebar/MessageList/ChatInput/TopBar/DirAuthDialog/MaxRoundsCard 进 ai/)/ ToolCard.vue 1066→374(拆出 ToolCardList 422 + ToolResultBody)/ MessageList 已进 ai/(P1-2 部分兑现)。P0 未动:useAiSend/useAiEvents/useToolCard 三大件拆 + status union 仍待。另:utils/time.ts formatRelativeZh→formatRelative 重命名落地(SW-260618-21,消除 Zh 误导)。

P0(阻碍 AI coding)

# 影响 ROI 风险
P0-1 useAiSend.ts(532 行)混合发送+队列+审批三条链 改一处需通读全文 高(拆 3 文件)
P0-2 useAiEvents.ts(427 行)巨型 switch 12 case 216 行 新增事件改 200+ 行函数 高(按域拆 handler)
P0-3 useToolCard.ts formatToolResult switch 15+ case 新增工具改多处 高(策略表)
P0-4 status 字段无 union(types.ts 4 处 Record + 34 处比较) 拼写错误编译期不报错 中(逐字段核对字面量集)

P1(降效率)

# 影响
P1-1 AiChat.vue(1474→750 已拆 God)/MessageList.vue(1445)/ToolCard.vue(1066→374 拆出 ToolCardList+ToolResultBody) — AiChat/ToolCard 已收敛,MessageList 仍重 AI 改 AI 模块上下文巨大
P1-2 components/ 一级散落 AiChat(薄壳容器)/ToolCard/ToolCardList/ToolResultBody — MessageList 已进 ai/,余仍一级 找文件靠记忆
P1-3 catch (e: any) 30+ 处 应改 unknown + Error 收窄
P1-4 App.vue 8 职责(布局已拆 layout/ → AppLayout/AppSidebar,App.vue 546→179,余初始化职责) layout 已抽取,App.vue 收敛
P1-5 JSON.parse 后 cast 无守卫 4 处(IdeaDetail/TaskOutputCard/useToolCard/useAiConversations) 后端格式漂移运行时崩
P1-6 useAiConversations.switchConversation 116 行单函数 难维护
P1-7 constants/project.ts 含 task 常量(命名狭窄) 找 task 常量去错文件

P2(优化)

  • 测试覆盖 0%(无 vitest)。高 ROI 目标:utils/time.ts(parseTs 边界)/ utils/markdown.ts(stripMd)/ utils/project.ts(parseStack)纯函数易测
  • router 无 404 catch-all
  • meta.icon 11 处死字段(删或接入 AppSidebar)
  • ErrorBoundary.vue 已实现(76 行)+ i18n key 就绪,从未接入(main.ts:12 注释承诺未落地)
  • useAiEvents.ts:95 模块级导出 pendingMaxRounds ref(破坏 composable 可复用性)
  • store 三段式 try/catch/finally 样板可抽高阶函数

留待用户决策(高风险/需拍板)

  1. P0-4 status union 类型化:试点 IdeaRecord.status(语义最单一),跑通后推其余(TaskRecord/AiToolCallInfo/WorkflowRecord 字段名同语义不同,易误伤)
  2. P0-1/2/3 AI 三大件拆分(useAiSend/useAiEvents/useToolCard):行为变更面大,独立任务逐个 + vue-tsc + 手测
  3. ErrorBoundary 接入:App.vue router-view 外层包裹,或删组件+删注释
  4. P1-2 components 一级归位(AiChat/ToolCard/ToolCardList → ai/)+ P1-7 constants/project 拆 task:改 import 路径面广,集中"目录整理"任务
  5. router meta.icon 死字段:删或接入 AppSidebar

AI coding 友好强项(保持)

  • 类型基础好(strict + vue-tsc 0 + 0 处 @ts-ignore)
  • 命名一致(PascalCase/动词前缀/kebab-case)
  • 依赖无环(stores→composables→components→views 单向)
  • 死代码少(1.7%)
  • 注释详尽(每个 composable 头部职责+耦合说明,极利 AI 理解)