diff --git a/docs/06-前端开发/前端架构技术债-2026-06-19.md b/docs/06-前端开发/前端架构技术债-2026-06-19.md new file mode 100644 index 0000000..c6e8cf2 --- /dev/null +++ b/docs/06-前端开发/前端架构技术债-2026-06-19.md @@ -0,0 +1,51 @@ +# 前端架构技术债清单(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)。 + +## 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)/MessageList.vue(1444)/ToolCard.vue(1066) 仍过重 | AI 改 AI 模块上下文巨大 | +| P1-2 | `components/` 一级散落 AiChat/ToolCard/ToolCardList(应进 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 理解)