1071 lines
142 KiB
Markdown
1071 lines
142 KiB
Markdown
# DevFlow 工作看板
|
||
|
||
> ⚠️ **挂机必读(2026-10-06 10:50 仓库状态变更)**:今早 10:13 的三笔提交(cec4d11/84df9b5/622507c)已被外部退回(G2 🔴门禁/G3 描述不达标),当前 HEAD=03dc27b,全部改动在工作区未提交。11:23 汇报中「已提交」的说法与事实不符。**重做要求见文末退回段;每次汇报前先跑 `git log -1` 实测再报。**
|
||
|
||
|
||
> 来源:`docs/02-架构设计/滚动规范/功能决策记录-2026-06-14.md`「需求与待办」+ `PROGRESS.md` 各 Sprint 遗留,2026-06-14 汇总去重 + 代码核对修正。
|
||
> 互操作:执行走 mission-control,回写 mission_id;审查走 cr;发布走 publish-*。
|
||
> 核对说明:2026-06-14 经代码勘察后修正——detached 卡死已部分修复降 P2、Sprint 19 遗留 3 项补入、依赖关系标注。
|
||
>
|
||
> **2026-06-18 归档**: 已完成 `[x]` 与历史分析段已迁至 [07-项目管理/todo归档/2026-06-18.md](./07-项目管理/todo归档/2026-06-18.md)。
|
||
> **2026-06-27 归档**: 已完成 `[x]`/`✅` 项已迁至 [07-项目管理/todo归档/2026-06-27.md](./07-项目管理/todo归档/2026-06-27.md)。
|
||
> **2026-10-05 归档**: 7 个实测核验全完成的历史走查段(父子任务支持/对话上下文透明化/文件拆分升级/ToolCard UI 合并/灵感模块诊断/aichat 深度走查/TaskDetail 按钮走查)迁至 [07-项目管理/todo归档/2026-10-05.md](./07-项目管理/todo归档/2026-10-05.md),销账批注与滞后勘误见该文件。
|
||
>
|
||
> **2026-08-05 编号碰撞登记**: `F-260619-03` 被两个特性复用(消息拆分存储=文档本体 + AI工具路径授权=复用)。子代理审查确认:改 18 处编号无实际价值有风险,**暂不改代码**,后续新增注释编号统一走日期+序号体系、避免复用已有编号。路径授权若后续单独立项再独立编号。
|
||
> **2026-08-15 编号碰撞登记**: `REFACTOR-260619-04` 被复用(父③③.2 审批状态机拆分=待办 vs ToolCard 拆分=已完成)。后续引用审批状态机拆分时用「审批状态机拆分」描述,不再沿用该编号。
|
||
|
||
### 💡 2026-10-05 UX 走查 — Web Interface Guidelines 合规(43 文件机械扫,4 类系统性)
|
||
|
||
> 背景:src 43 个 .vue 文件 UI 规范缺口全量合规走查(Vercel Web Interface Guidelines 适用子集)+ 审批/aichat/项目知识审计三域子代理分组审。质量中上无阻断,缺口集中 4 类系统性模式,其中 2 类可全局样式一刀切收敛。
|
||
> 详情:[05-代码审查/UX走查-Web规范合规-2026-10-05.md](./05-代码审查/UX走查-Web规范合规-2026-10-05.md)
|
||
|
||
- [x] P2-1 全局两刀 ✅(2026-10-06 本批:① global.css `:focus-visible` 兜底 outline 2px accent——全仓 outline:none 25 处散点不逐处改,键盘导航触发鼠标点击不显;② 弹层 `overscroll-behavior:contain` 滚动锁——实证类名清单 modal-overlay 10 处/TopBar 四面板 inline-list/ai-more-menu/confirm-box,选择器挂在 global.css 注释注明来源防漂移)
|
||
- [ ] P2-2 高频可点 div 键盘化:ToolCard:11 卡头/MessageList:1423 轨迹头/AuditLog:67,119 审计行(@click div 全仓 56 处,去 mask 合规项约 20 真缺口,高频改 button 其余 tabindex+keydown)
|
||
- [x] P3-1 transition:all ✅(2026-10-06 本批:全仓 37 处/24 文件归零——逐处看 hover 态实动属性机械替换为 background/color/border-color/box-shadow/transform/opacity 具体属性清单,不禁用布局属性意外动画;vue-tsc EXIT 0)
|
||
- [ ] P3-2 icon-only 按钮缺 aria-label ~15 处(title 非等价读屏补偿;EnrichmentPanel 关闭钮/ProjectDetail:185,189 编辑删除钮等)+剩余 div 键盘化
|
||
- 拍板点:修复范围「存量 vs 仅本批」——transition:all/outline:none 大半为存量;本批新代码 a11y 意识已好(svg aria-hidden 批补/MessageList role=log+aria-live/hover-only focus-within 补偿),仅清本批则工作量降 60%+
|
||
|
||
### 💡 2026-09-29 aichat 可用性与交互成本研究(三动线走查+异常循环截图实证,39 项新发现)
|
||
|
||
> 背景:用户反馈交互刷屏已修(工具卡默认折叠)后,按「使用体验/使用成本」深入走查三动线;截图实证「写完就删」循环跑到轮次耗尽——G2 熔断签名机制对写删交替结构性漏网(唯一率 0.83≫0.4,单签名最高 2 次<3,全程连警示都不触发);与 9-28 走查 17 项合并排序。
|
||
> 详情:[05-代码审查/aichat可用性与交互成本研究-2026-09-29.md](./05-代码审查/aichat可用性与交互成本研究-2026-09-29.md)
|
||
|
||
- [x] 第一批 P1 ✅2026-10-02 走查核验:I1 停止窄窗已修(ChatInput.vue:291 stopBtnState 读 conv_state)+I2 编辑死链已修(04acc42 canEdit+start-edit)+G2 破坏性回环熔断已实现(helpers.rs detect_destructive_loop)+V3 后台通知已修(e1dd0bc notify.rs 接线);V2 聚合层已修(useAiToolEvents 无条件入列,V5/V6 未逐项核)与 V1 审批徽标未修→留前端体验批
|
||
- [x] 第二批 P2:~~V8 草稿 per-conv 防串台~~✅(2026-10-05 核验:ChatInput watch convId setConvDraft/getConvDraft 已实现+mention/技能/图片临时态不跨会话携带)/~~R3 长回复带量提示~~✅(2026-10-05 核验:MessageList collapsedLongLabel 折叠态已带「N 字符/约 M tokens」量提示)+~~R4 代码块复制~~✅(aichat二批8e29271f)/~~I5 错误分类兜底~~✅(2026-10-05 核验:aiShared classifySendError 四类顺序敏感分类+ChatInput SEND_ERR_KEY 映射消费,原始错误留 {msg} 不丢)/~~V4 浮窗高风险二次确认~~✅(同批)/~~V7 排队时钟冻结~~✅(2026-10-05 核验:AiChat.vue nowTick 有排队时 1s interval 推进+queueTimedOut 显式读 tick,等待秒数/30s 超时横幅每秒重算,队列清空关表防泄漏)/~~R7 失败汇总~~✅(2026-10-05 本批:ToolCardList groupFailCounts computed 复用 isToolFailure 单点判定,组头红徽标「{n} 失败」+i18n 两键——轨迹卡聚合行/执行中步骤行既有失败计数外的组头盲区补齐)/R5+V9 消息内容检索(后端 IPC+前端搜索底座,唯一真缺口,独立批),排序详报告第五章
|
||
- [x] 第三批 P3 攒批:I8 ✅(2026-10-05 本批:stopChat 队列非空一次性 toast「已停止,N 条排队消息仍将自动发送」ai.queueWillContinue zh/en——停止≠清队预期对齐,全停走逐条取消/清队列)/I9 附件仅图片→~~I9~~✅(2026-10-05 本批:「📄 文件」按钮(ChatInput 📎 旁)——多选文本/代码/配置文件(57 扩展名白名单)读内容以 ```lang <!-- 文件名 --> 代码块插入草稿,复用图片链 blobFromPath(convertFileSrc)零新依赖;单文件 256KB/5000 行双上限截断+提示;走既有文本发送链零协议改动)/I11 ✅(2026-10-05 本批:ChatInput INPUT_MAX_HEIGHT=200 常量四处 120px 硬编码全收敛,与 CSS max-height 同源——手工拉伸不再被按键压回)/~~I12 快捷键零提示~~✅(2026-10-05 本批:TopBar ... 菜单加快捷键入口 + AiChat Teleport 速查面板(Ctrl+N/I/R/L/K/B+Esc 七键,label 随 locale,mask 点击外部/Esc/✕ 三路关)——速查键位表与 onGlobalKeydown 同文件同居防漂移)/I13 ✅(2026-10-05 本批:Ctrl+I 聚焦输入框,AiChat 全局键区接入 chatInputRef.focus,输入焦点守卫让路)+~~R8 流式裸 diff~~✅(2026-10-05 本批:useMarkdown wrapNakedDiff 改 export,useStreamRenderer parseBlockNoCache 接入同源预处理——流式中裸 +/- 行即红绿 diff 块,守卫3围栏内不动保证与完成态幂等不双包)+~~R10 阅读锚点~~✅(2026-10-05 本批:三处 collapseAllToolLists 调用点(滚轮回调/消息快照 watch/agentRound watch)全加 isFollowingBottom 门——上滚阅读中新轮次不再强制收起正浏览的工具卡)+~~R11 新内容信号~~✅(2026-10-05 本批:回底按钮生成中非跟随态加 amber 脉冲点 ai-btb-new-dot 2s 循环)+~~R13 assistant 时间戳常显~~✅(2026-10-05 核验:UX 密度改造已消解——ai-msg-time 全仓零命中,≥30min 间隔 timesep 分隔线替代 per-msg 时间戳)+~~I10 重试文案名实不符~~✅(2026-10-05 本批:streamInterruptedAfterTool zh/en 改「可点重试续跑(整轮重跑,已完成工具会重新执行)」明示副作用)+~~R12 diff 回看~~✅(2026-10-05 本批:a patch_file 长 diff 展开入口(DIFF_PREVIEW_LINES=120 默认预览,「展开全部 {n} 行/收起 diff」toggle,parseDiffLines expanded 传 undefined 全量)/b write_file 覆盖写入 diff 回看(后端 file.rs rename 前读旧内容(仅 utf-8 ≤1MB)generate_diff 产 diff 字段,新建/base64 为 null 前端不渲染;前端同构红绿行渲染+展开按钮)——工具卡可回看改了什么不再只看字节增减)+~~V11 分离窗三连~~✅(2026-10-05 本批:a 置顶默认 false(useAiWindow detachPanel alwaysOnTop:false,原 true 盖住 VSCode/浏览器;开过置顶走 AiChat df-ai-always-on-top KV 恢复链不受影响)/b 收回主面板闭环(TopBar reattach 按钮+emit 链补 AiChat @reattach→emitReattachToMain Tauri 全局广播→主窗 registerMainReattachListener(label=main 判定)→store.reattachPanel——原 reattachPanel 全仓零 UI 调用只能手动重开面板)/c 活跃会话 KV 按窗口域分流(activeConvKvKey() 主窗 'df-ai-active-conv' 分离窗 '-detached' 后缀,读端 loadConversations+写端切会话/新建/自动路由/删除回落 5 处统一;治两窗独立 JS context 共写同一 KV 互覆——分离窗切会话重启后主窗被带跑;detachPanel 种子分离窗 KV,reattachPanel 关全窗后清 KV;useAiConversations 顶层 import getCurrentWebviewWindow 同步解析无启动竞态))+~~V12 滚动位置丢失~~✅(2026-10-05 顺手批:MessageList 切会话 watch 记旧会话 scrollTop(Map 限 20 个 LRU),换入有存档恢复存档位+setFollowing(false) 尊重阅读位,无存档保持回底——回读不再被打断)+9-28 #9-#17 详见下条;其中 9-28#17 图片默认上传外部域名涉开源边界,单独决策。V10 本批实施纠错:先误核销后复核发现 Ctrl+N 仍有 `!store.state.streaming` 守卫(生成中静默吞键)与按钮侧 F-09 真并发语义矛盾依旧,已撤守卫对齐按钮(新建不杀旧 loop,后台继续),vue-tsc EXIT 0
|
||
- [x] ✅ 同日已修:工具卡默认折叠刷屏+read_file/list_directory 单行摘要补齐+分组折叠幂等补齐(工作区待提交)
|
||
|
||
### 💡 2026-09-29 aichat 知识库与记忆修复(「笨/丢历史」根因诊断,同日已修会话内侧)
|
||
|
||
> 背景:用户反馈「明显感觉丢历史会话特别严重」「感觉很笨」。DB 实证:44.7% 消息 compressed,最大会话 828 条仅 5% 可见(26 条用户消息 0 条可见),存储原文都在、丢的是发送视图;知识库四重收口(整句 LIKE 命中≈0/candidate 不参与检索/向量默认关/LLM 零知识工具,962 条知识存量近乎零生效);跨会话零召回。
|
||
> 详情:[05-代码审查/aichat知识库与记忆走查-2026-09-29.md](./05-代码审查/aichat知识库与记忆走查-2026-09-29.md)
|
||
> ✅ 同日已修:上下文管理演进 T4/T5 生产侧空壳补齐(WorkingContext begin_turn/sync_after_compress 写入链 + 工作流 DAG 摘要注入链),编译门禁过,详见诊断文档第四章。
|
||
|
||
- [x] P0 知识检索去整句 LIKE ✅已修(2026-10-02 核验:7c62d8d 接 search_keywords 分词,knowledge_inject 与 knowledge_search 工具两调用点实证,idea_repo.rs:699 纯函数+单测齐)
|
||
- [x] P0 candidate→published 断链打通 ✅已修(机制先行 7c62d8d:复用自动晋升+knowledge_promote 工具+晋升补嵌入;存量晋升迁移 V43 2026-10-02 落地:candidate+confidence=high→published,库副本实证 854 条晋升 967/53→113/907,重跑幂等 0 行,df-storage 180 测试全绿;增量 confidence 分级与 auto_publish 默认值等 C3 拍板)
|
||
- [x] P0 视图裁剪补滚动摘要 ✅已修(9b89610 淘汰补偿摘要插视图首部,user 角色保缓存指纹,纯视图不落库,eviction 11 测试全绿,2026-10-02 核验)
|
||
- [x] P1 LLM 知识工具注册 ✅已修(7c62d8d 注册 knowledge_search/insert/promote 三工具,tool_registry.rs:798,检索与注入同源分词)
|
||
- [x] P1 跨会话召回最小闭环 ✅实施完成(2026-10-05,设计 2026-10-04 [设计文档](./02-架构设计/专项设计/跨会话召回最小闭环-设计-2026-10-04.md) 3 拍板 B1/B2/B3 全按建议):①提炼侧 resolve_source_project 两级弱推断——级 a boundary_json.dir_allowlist 首条反查 projects.path 前缀匹配(轻量词法归一 normalize_dir_for_match:斜杠统一+小写+去尾分隔),级 b 唯一 `[项目:名称]` mention 回退(B1 拍板:多项目不猜置 NULL),皆无→NULL=全局知识零回归;extract_knowledge_from_conversation 插入处赋 source_project。②注入侧 search_keywords_scoped 新方法(B3 拍板,旧签名保留 MCP 外部调用零影响,project_id=None 转调旧路径回归门)——三档排序:同项目 0/全局 NULL 1/异项目 2,档位作第一排序键 ASC(title 命分为同档第二键,防档位被 title 分稀释);build_knowledge_context 注入前同走 resolve_source_project。③单测 6 个:df-storage scoped×3(同项目压异项目高复用/三档顺序/None 回归门)+devflow resolve×3(目录归一/级 a boundary 命中/级 b 唯一 mention 命中+多项目不猜)。验收 cargo test df-storage 199 passed 0 failed(顺带修正 migration 测试断言常量 48→49:V49 loop_state 迁移注册后断言未跟进,现全绿)+devflow --lib 706 passed 0 failed+knowledge_inject 26 passed
|
||
- [x] P1 存量测试修复 4 个 ✅已修(df3ed55 断言同步+e7cd035 笔误修正,2026-10-02 全量 cargo test --workspace 1827 passed/0 failed 复核)
|
||
- [ ] P2 DB 落库截断~~分 role 定阈值~~✅(2026-10-05 核验:conversation.rs:372 tool result 跳过 content 截断仅截 assistant/user——体量已由 read_file limit 控源)/namespace 重启懒重建/兜底压缩路径 sync_after_compress 复议
|
||
|
||
### 💡 2026-09-28 devflow 集成 u-claw 能力(✅ 代码面已落地 2026-10-05,剩真机冒烟)
|
||
|
||
> 链路:devflow → u-relay → u-claw。通路已生产验证(u-ppt 试点 2026-08-29),u-relay 零改动,唯一工作面 devflow 侧接入。
|
||
> **状态更新 2026-10-05**:ask_uclaw 工具(470 行)+UclawPanel 配置页+i18n+流式链补全已落地(任务 5fb916ac,cargo test 693 passed);「per-conv channel_id 隔离」经源码终核不成立(单 channel 单链,MVP 接受共享上下文语义);剩真机全链冒烟(需 u-relay+u-claw 在线配合)。原实施清单保留作档案。
|
||
> 详情:[02-架构设计/专项设计/devflow集成u-claw-可行性研究-2026-09-28.md](./02-架构设计/专项设计/devflow集成u-claw-可行性研究-2026-09-28.md)
|
||
|
||
- [x] devflow/u-claw 两侧细勘察补全 ✅2026-10-04 完成([勘察补全](./02-架构设计/专项设计/uclaw两侧勘察补全-2026-10-04.md)):多轮锚定=channel 级单 chain 粘性会话(request_id 仅单指令标识,常驻 claude 各轮同 session_id,崩溃 --resume 恢复);**协议已漂移**——端点改 /ws/commander(commander/agent 角色,e8113c5),hello {kind,channel_id,token},不能照抄 9-28 文档/u-ppt relay.ts;新增核实:串行 worker+队列满丢弃、单条 15min 硬超时、进度 2s 节流、空闲链回收 7s 冷启动;接入实施批清单六步已列(含 per-conv channel_id 隔离策略)
|
||
- [ ] 接入实施 ✅主体已落地(2026-10-05 任务 5fb916ac):ask_uclaw 工具+配置页三键+前端流式链全接通;隔离策略勘误=单链共享上下文(MVP),多实例 phase2;剩真机全链冒烟
|
||
|
||
### 💡 2026-09-28 aichat 交互走查清尾(启动「日常主入口」标准,1P1+7P2+9P3)
|
||
|
||
> ⚠️ 2026-09-29:17 项经核验全部未修,已并入《aichat 可用性与交互成本研究-2026-09-29》合并排序,修复排序以新报告第五章为准(本条目保留作原始详单指针)。
|
||
|
||
> 背景:devflow 启动定位=日常 AI 交互调度中枢,按日常主入口标准走查。新发现集中在 God 组件拆分丢功能的链路断点+多会话并发收口残留缝隙。
|
||
> 详情:[05-代码审查/aichat交互走查-2026-09-28.md](./05-代码审查/aichat交互走查-2026-09-28.md)
|
||
- [x] 第一批(日常直接受伤):~~#1 编辑末条消息入口丢失回归~~✅(2026-10-05 核验:MessageItem:126 编辑按钮+start-edit 链完整,I2 批已修)+~~#4/#5 排队消息被静默清~~✅(二批 8e29271f 修)+~~#6 后台会话错误气泡推错视图~~✅(forceConverge 气泡双过滤 `!convId || convId === activeConversationId` 才 push)+~~#7 429 无分类且重试照显~~✅(2026-10-05 核验:aiShared.ts:603 classifySendError 顺序敏感 429/限流先判+ChatInput SEND_ERR_KEY 分类文案)
|
||
- [x] 第二批(多会话体验):~~#8 审批徽标跨会话误导+点击 no-op~~✅(2026-10-05 核验:state.pendingApprovals 已退化为当前活跃会话视图投影(aiShared.ts:364 per-conv Map 底座)+徽标点击→AiChat:243 scrollToFirstPending 委托链完整)+~~#3 en 重试气泡残留~~✅(2026-10-05 核验:useAiLifecycleEvents 终态收尾按 m.isRetry 标记匹配清除,替代旧中文文案子串匹配,en 生效)+~~#2 rejectedHint i18n key 多前缀~~✅(2026-10-05 核验:ToolCard.vue/useAiApproval/useAiToolEvents 消费点全已统一 `aiTool.rejectedHint` 路径,zh/en 两 locale 键位齐)
|
||
- [x] 第三批随批清理:~~#10 user 时间戳+死样式~~✅(2026-10-05 核验:UX 密度改造消解——ai-msg-time 全仓零命中,≥30min timesep 分隔线替代)/~~#11 compressed 死代码~~✅(2026-10-05 核验:结论过时——compressed 段是 F-15 活代码(压缩摘要置顶显示不折叠),kind/模板/CSS 均在用)+#9 消息删除⏸️(2026-10-05 勘察:需后端 ai_delete_message IPC+前端全链(现仅 clearChat 整删/pop_last_assistant_round 弹末轮),纯前端只能视觉删除重启复活误导用户——与 #13 合并为「消息操作 IPC 协议级独立批」)+~~#12 token 面板~~✅(2026-10-05 顺手批:convTokenTotal 会话累计接入既有 token 详情 popover 尾部段(仅末条 AI 回复显,分 total/in/out 三行+分隔线样式)——只写不读的闲置数据源接上消费,非新面板零结构增量)+~~#13 中间错误重试错位~~⏸️(2026-10-05 勘察:需后端 IPC 加 from_id 参数+截断链(现仅 pop_last_assistant_round),协议级改动独立批)+~~#14 批量审批部分失败提示~~✅(2026-10-05 顺手批:batchApprove 部分失败从静默 console.warn 升级 ai-toast「批量完成:{ok} 项成功,{fail} 项失败」aiTool.batchPartialFail zh/en)+~~#15 ToolCallStarted 竞态~~✅(2026-10-05 顺手批:末条非 assistant 时兜底向前找最近 assistant 落卡,不再丢 running 卡;全程无 assistant 才保持原丢弃)+~~#16 注释与实现矛盾~~✅(2026-10-05 本批:注释纠偏——withConvOp failKey 错误气泡兜底实证(useAiConversations.ts:96),catch 内 console.error 留痕不重复提示)+~~#17 图片上传外部域名~~⏸️(2026-10-05 用户指示延后再论:涉开源边界,业务域名硬编码默认可 df-file-upload-base 覆盖,决策项不动代码)+B-260619-04③销账(实际已落地)。另 R5+V9 消息检索用户指示延后
|
||
- [x] 第四批(用户实测反馈 2026-09-29):批量读取文件时工具卡逐卡渲染刷屏 ✅已修——分组默认收起机制 6 月已有但为一次性初始化,流式场景首卡到达即触发完毕,组从 1 卡长到 N 卡不再折叠致 N 张单行卡全展开;改响应式补齐(组达 2 卡阈值即收起)+用户手动操作/审批展开记 touched 不被自动收回
|
||
|
||
### 💡 2026-06-27 统一 Inbox 设计(讨论产出)
|
||
|
||
> 思路:所有需要用户注意的事项(审批/知识待审/灵感确认/其他通知)集中到一个统一入口,
|
||
> 不阻塞对话。
|
||
>
|
||
> 审批留在对话内(需要即时上下文),知识/灵感/通知放 Inbox。
|
||
> 后续做详细设计方案。
|
||
|
||
## 🎯 统一规划(2026-06-26 全景)
|
||
|
||
> 整合知识图谱设计 + 22 条未完成项 + G1 目标钉扎(✅已落地) + 多工程方案。
|
||
> **核心主线:AI Working** — AI 拥有项目知识图谱,自主分解/编排/执行/自检,人只决策。
|
||
> **执行策略(两阶段)**:① 先攒批无冲突小 bug/小调整 → 提交;② workflow 编排相关任务批量推进大重构(减少文件读取/LLM 交互,提高上下文效率)。
|
||
|
||
### 主线脉络
|
||
```
|
||
G1目标钉扎(✅已落地) → 知识图谱Phase1(任务网络,AI编排地基)
|
||
↓ ↓
|
||
实测验证
|
||
↓ ↑
|
||
F-09多会话B(立项) ────────────────┘ (Phase4前置:多会话各自注入)
|
||
```
|
||
|
||
### 任务图谱(DAG · 有方向有状态)
|
||
|
||
> 节点=任务(着色=状态),边=依赖方向(前置 → 后继)。**推进时更新状态**(CLI/edit 同步此表 + Mermaid)。
|
||
> 图例:✅完成 / 🔨进行中 / 📋待办 / 🚫阻塞
|
||
|
||
```mermaid
|
||
graph TD
|
||
classDef done fill:#bfb,stroke:#393,stroke-width:2px
|
||
classDef doing fill:#ffd,stroke:#993,stroke-width:2px
|
||
classDef todo fill:#eef,stroke:#99c
|
||
classDef blocked fill:#fcc,stroke:#c33
|
||
|
||
G1["G1 目标钉扎<br/>✅代码 8ce18cb"]:::done
|
||
P1["父① 小bug攒批<br/>✅①.2/①.3(①.1过时·①.4归⑤)"]:::done
|
||
P2["父② 知识图谱Phase1<br/>✅Phase1(数据层+业务层)"]:::done
|
||
P3["父③ AI对话体验<br/>📋待办"]:::todo
|
||
P4["父④ F-09 per-conv<br/>✅前端per-conv(accessor)"]:::done
|
||
P5["父⑤ 灵感模块<br/>✅完成(⑤.1/①.4/⑤.2)"]:::done
|
||
P6["父⑥ Phase2-5<br/>🔨Phase2-3✅·4-5待办"]:::doing
|
||
P7["父⑦ 技术债<br/>📋待办"]:::todo
|
||
|
||
P1 -.先行.-> P2
|
||
G1 ==基建==> P6
|
||
P2 ==> P6
|
||
P4 ==> P6
|
||
P2 -.task_links.-> P5
|
||
```
|
||
|
||
| 任务 | 状态 | 子项 | 依赖(前置) |
|
||
|---|---|---|---|
|
||
| **G1** 目标钉扎 | ✅ 代码已落地 | G1/G2/G4 落地 | — |
|
||
| **父①** 小bug攒批 | ✅ 完成 | ①.2 白名单✅(settings.rs) / ①.3 priority✅(idea.rs) / ①.1 BUG层1❌过时(F-260619-03 方案①取代,层2待决策) / ①.4 雷达图→归父⑤ | — |
|
||
| **父②** 知识图谱Phase1 | ✅ Phase1完成 | ②.1 V29迁移✅ / ②.2 TaskRecord+TaskLinkRepo✅ / ②.3 IPC(create_task扩展+task_link CRUD+move_queue+get_tree)✅ / ②.4 父聚合✅(set_status_for_aggregation绕status收口) / ②.5 AI工具6✅(基线38) | G1(弱) |
|
||
| **父③** AI对话体验 | 🔨 ③.1✅ / ③.2待办 | ③.1 B-260619-04 ToolCard✅(跨轮收起已有+标题增强) / ③.2 REFACTOR-260619-04 审批状态机拆分 / 对话透明化 L1🟡待定 | — |
|
||
| **父④** F-09 per-conv | ✅ **全部落地**(2026-08-07 核验) | ④.1 streaming/currentText per-conv Map(accessor委派,单会话回归零变化,BUG-260624-01根因清除,vue-tsc 0) | — |
|
||
| **父⑤** 灵感模块 | ✅ 完成 | ⑤.1 软删除✅ / ①.4 雷达图✅ / ⑤.2 #05✅/#06拆const✅/#09/#10表单(逗号tags)✅ / #07 DEC-02保留purge(不改) / 附:priority_from_i32跨层映射修复(对齐前端0=critical) | #07→②.1 |
|
||
| **父⑥** Phase2-5 | 🔨 Phase4 注入进行中 | ⑥.1事件流✅(V30) / ⑥.2基础设施✅(V31) / ⑥.3注入✅(resolver 增强+extra 渲染) / ⑥.4前端(C 方案展开摘要✅已决待实施) |
|
||
| **父⑦** 技术债 | 📋 待办 | SMELL-P1-6 / conditions / CR缓存 / UX分页 / 审批超时 / miniapp / 双监听器 | — (穿插) |
|
||
|
||
> **推进路径**:父①先行(攒批提交)→ 父②主线 workflow → 父③/④并行 → 父⑤/⑥/⑦穿插。每父任务一个 workflow 批,子任务相关文件批量读改减少交互。**状态更新约定**:子项完成→父状态 🔨;全子完成→父 ✅;每批提交后同步此表。
|
||
|
||
### 协同点(跨主题复用)
|
||
1. **IDEA-FIX-07 关联单向 ↔ 知识图谱 `task_links`**:并入 Phase 1 用独立表(§2.2 论证 JSON 缺陷),别补 JSON 双向同步
|
||
2. **G1 system_prompt 注入基建 ↔ Phase 4 L0 注入**:复用 `pinned_goal` 拼接链路
|
||
3. **F-09 per-conv ↔ Phase 4 多会话注入**:F-09 前置
|
||
4. **REFACTOR-260619-04 审批状态机 ↔ `queue=decision` 待决策池**:审批对齐
|
||
|
||
|
||
## 交接状态(2026-06-14)
|
||
|
||
**代码健康度**:`cargo test --workspace` 全过、`npx vue-tsc --noEmit` 0 error(主代理独立验证,非 mission 自报)。
|
||
|
||
**工作区状态(重要)**:`git diff` 104 文件(8066+/6941-)是**三层混合**——①会话前未提交基线(Sprint 19 等大量工作:i18n 拆目录、knowledge 全栈、Settings 拆分、appSettings 迁移…)②本次会话重构 ③代理越权修复。**接手前务必 `git diff` 通览区分**,勿整体当作单一改动提交。
|
||
|
||
**本次会话完成**:
|
||
- 重构(用户授权):删 5 僵尸 crate(df-evolve/plugin/stages/task/traceability)、清 7 死模块(df-execute docker/git_ops/ssh + df-project scheduler/timeline/context + df-ideas graph)、拆 ai.rs→`commands/ai/` 11 文件、拆 ai.ts→6 composable、models 字段 bug 修复、coordinator B 路线标注
|
||
- 代理越权追加修复 6 处(已标✅,主代理验证编译+测试通过;逐行正确性建议接手方 `git diff` 复核):B-01 审批持久化 / B-02 ConditionEngine 默认 false / B-04 删 NodeRegistry Default impl / T-05 工具结果截断 50KB / B-08 promote 补偿删除 / T-07 诊断日志清理
|
||
|
||
**待设计交其他会话(核心)**:df-workflow 审批闭环三连 B-06/B-07/B-03。**✅ B-03 设计已完成**(接手会话,2026-06-14):见 [B-03-人工审批响应机制-2026-06-14.md](./02-架构设计/已编号方案/B-03-人工审批响应机制-2026-06-14.md),通道选型定为 **工作流独立审批通道**(复用 EventBus broadcast + HumanApprovalResponse 事件 + approve_human_approval IPC,非 ai.rs AiApprovalRequired——后者是 AI Chat 工具审批路径,与工作流节点审批是两条独立链路)。拆 B-03a(响应等待 + 超时,不依赖 B-07)/ B-03b(取消机制)。**B-06 / B-07 仍待实施**(B-06 = execution_id 下沉并发隔离;B-07 = 共享 StateMachine 取消前置),是 B-03a 并发安全 / B-03b 的前置。
|
||
|
||
**失控代理教训**:本次会话派的后台拆分代理在 stop hook 循环里失控,越权改代码/文档(先斩后奏)。接手方若再派 agent,注意约束其不碰决策记录(用户已要求手动触发)+ 限定单任务不自主续推。
|
||
|
||
---
|
||
|
||
## 待办
|
||
|
||
### 🔍 2026-06-21 AI Chat 技术债审查(workflow wf_92b61c35-4d2 · 10 模块串行 grep 核验)
|
||
|
||
> 详单见 [aichat-技术债审查-2026-06-21.md](./05-代码审查/aichat-技术债审查-2026-06-21.md)。0 P0 / 7 P1 / 25 P2 / 40 P3 / 已登记 8 / 新债 64。**P1#5/#6 已即时修并自验过**。
|
||
|
||
**[2026-06-24 核验销账]**: try_continue pending_conv_id 🟡语义复杂(R-PD-6 优先审批 conv_id 设计+try_continue 回退,非确定性低风险)/ MidStream chunk.error 🟡UX 结构变更(Partial 保文加 err 字段+前端渲染,非 bug)/ auto-compress save 🟡需理解 loop save 时机判真缺口。
|
||
|
||
**销账核对(已登记 8 复核)**:SMELL-P1-6(line221·#5 覆盖 executed/completed 双轨)/ MED-1(tool_registry:546 bind_directory)/ REFACTOR-260619-08(tool_registry:881 拆)/ REFACTOR-260619-09(context.rs:1 God 1552行)/ ARC-260619-05(agentic:318 超长)/ UX-260617-28(双监听器 INFO)。**均仍在未完成,审查复核确认,保留**。
|
||
|
||
**残留诊断代码(待清)**:chat.rs `authz_debug`/`authz-debug.log`(L2 调试遗留,P2 报 chat.rs:548 硬编码绝对路径),L2 完成后可清。
|
||
|
||
---
|
||
|
||
### 🔍 2026-06-21 查询能力缺口 + run_workflow 缺陷(本轮排查登记·未实施)
|
||
|
||
> 用户排查任务/项目/灵感查询能力现状,登记缺口为待办/缺陷,本轮不实施代码。详单见 [查询能力补全方案-2026-06-21.md](./02-架构设计/专项设计/查询能力补全方案-2026-06-21.md)。
|
||
|
||
---
|
||
|
||
### 📋 编排推进总览(2026-06-18 更新)
|
||
|
||
未完成待办按可执行性分 8 组(详细条目见下方各分类,勿重复记录):
|
||
|
||
| 组 | 说明 | 代表项 |
|
||
|---|---|---|
|
||
| **A todo 卫生** | 矛盾清理/被取代退役标注 | ✅ 本批已完成 |
|
||
| **B 零风险减法** | 死链清/空壳合并 | ✅ 本批已完成 |
|
||
| **C 需用户输入** | 阻塞,无法代办 | —(已归档)
|
||
| **D 功能增强** | 设计清晰可推进(P1) | F-15-01 审批选项 / F-15-02 task 详情 / F-15-03 分页⚠️breaking / F-15-04 卡片折叠 |
|
||
| **E 架构重投入** | 需设计,非小改 | F-14-01 模型能力 / F-14-07 trait 下沉 / ARC-05·06 store 拆·循环依赖 |
|
||
| **F 全局 review P2 需设计** | 安全/竞态收口 | R-PD-4/5/6/8/9/12/13 + R-PD-10 .map_err 85 处 |
|
||
| **H 长期功能池** | 不进主线 | F-14-02~10 / T-14-06 Settings 拆 / T-14-11 条件引擎 / B-14-05 / B-03b-R9 |
|
||
|
||
**推进原则**:能并行不串行(独立子任务 8-12 并发);每批重汇总+全优先级重排+销账核对 ✅;C 组阻塞项不代办等用户。**本会话首批**:A 卫生 + B 清死链。
|
||
|
||
**③④C类已迁**(2026-06-16):需人工决策项(③产品取舍 7 / ④设计方向 7 / 重投入排期 9 / C用户实测 5)见 [待决策.md](./待决策.md),从本文件抽离职责分离。**batch54 可自主批进展(2026-06-16·workflow wsfz7zl8i + 主代核查)**:复核-新⑪ 看门狗幽灵 ✅ 销账(清主窗口 state 视觉残留;**核验更正**:原 watchdog 幽灵已被 CR-260615-24 stopListener:371 clearStreamWatchdog 兜底);AE-03 diff预览 ⚠️ 降级阻塞(后端 write_file 未返 diff,待后端补,见 line 538);UX-04 断线保文 待 DEC-260616-03 授权(见待决策.md 🟡,本批不含)。
|
||
|
||
|
||
> **📦 已完成项归档**: [07-项目管理/todo归档/2026-06.md](./07-项目管理/todo归档/2026-06.md) — 2026-06-18 拆分, 已完成 `[x]` 与历史分析段迁此。另有 [2026-06-18.md](./07-项目管理/todo归档/2026-06-18.md) / [2026-06-27.md](./07-项目管理/todo归档/2026-06-27.md) — 本次归档。
|
||
|
||
### 🔴 2026-06-20 BUG-260620-05 F-260619-03 工程内路径误弹窗(reload_allowed_dirs 丢 workspace_root·b22e9ae 回归)
|
||
|
||
**现象**:AI Chat file_info 等文件工具访问工程内路径(如 docs/02-架构设计/单对话并行多轮-设计-2026-06-20.md)触发授权弹窗,用户称"本来就有访问权限,为什么还来申请"。
|
||
|
||
**根因**:`state.rs:586-619 reload_allowed_dirs` 合并 `kv_dirs(KV allowed_dirs)+ project_dirs(projects.bind_directory)` 为 `all_dirs`,**仅当 `all_dirs.is_empty()` 时(:618)才插入 workspace_root**。KV 配过 allowed_dirs 或有绑定项目 → all_dirs 非空 → **workspace_root 不入 persistent** → 工程内路径(在 workspace_root 下)`is_authorized`(:356 starts_with)失败 → `check_path_authorization` 返 `NeedsAuthorization` → 弹窗。
|
||
|
||
**注释承诺失配**::346-348 / :583 / :617 注释均称"KV 未配时保持 workspace_root 免授权(向后兼容)",但 :618 条件用 `all_dirs`(含 project_dirs),project_dirs 非空也丢 root。b22e9ae "reload 尊重用户 persistent" 引入的回归。
|
||
|
||
**用户政策指令**(2026-06-20):"默认直接访问,明确知道无权限才申请"。指向工程内(workspace_root 下)默认免授权,仅 workspace_root 外非白名单路径才弹窗。
|
||
|
||
**修法(层1·1 行确定性 bug)**:`state.rs:618` 去掉 `if all_dirs.is_empty()` 条件包裹,**无条件** `set.insert(workspace_root_path())`(工程内始终免授权,对齐用户政策 + 注释承诺)。不破坏现有能力:workspace_root 经 `set/get_allowed_dirs`(:664/680 filter root)本就不可见不可删,"用户删 root"语义未落地,保 root 无冲突。
|
||
|
||
**层2 待决策(政策范围)**:用户"默认直接访问"是否要求更宽语义——workspace_root 外的非黑名单路径也默认放行(翻转 `is_authorized` 为黑名单制,实质去白名单)?涉 P0 去固定根决策方向,见待决策.md。dev 自用场景层1 即满足。
|
||
|
||
**关联**:F-260619-03(todo :528 b22e9ae 回归源)/ 待决策 workspace_root 分发适配(方案b 用户项目绑定)/ memory [[devflow-project-path-binding]]
|
||
**状态**:✅ 已实施(层1 无条件插入 workspace_root + 层2 白名单制 persistent/session/once + 黑名单兼底,对齐 2026-06-28 用户决策)
|
||
|
||
---
|
||
|
||
### 💡 2026-06-16 新需求(已分析·待实施)
|
||
|
||
> 功能需求,已走查定位链路 + 方案记录,待用户确认后实施。
|
||
|
||
- [x] F-260616-09 [P1/架构·**✅2026-08-07全部落地销账 | A路线✅(batch60 + 06-19核验补漏已落地:commands.rs:1404/useAiConversations.ts:80 → 阶段1跳过),B 设计完成 2026-06-19([F-09设计文档](./02-架构设计/已编号方案/F-09-多会话并发架构设计-2026-06-19.md))·阶段2 批1-8 待拍板 b-1(messages per-conv)启动(见待决策.md)·**messages per-conv 已落地(2026-06-20 核验):mod.rs:326 `pub per_conv: HashMap<String, PerConvState>` + :384 `conv(&mut self, conv_id)` 访问器 + :394 `conv_read` + `tests_f09_per_conv` 测试模块 + 决策e 真并发已上线(见文件末 F-09 决策e 段,CR-260620-02 审 PASS)****] — **AiSession 单例 → 多会话并发架构(多窗口来回切 + 并行执行)**。用户需求(3 条消息强化):「应用级支持同时具备多会话」+「同时具备多会话的能力」+「多个会话窗口来回切,**并行执行**」。现状(Explore 走查确认):`AiSession` **应用级单例**(`state.rs:164` `ai_session: Arc<Mutex<AiSession>>`,init:205),messages/generating/stop_flag/pending_approvals/agent_language 全一份。设计「单例 + 软隔离」——generating 互斥(同一时刻**只一个对话能跑**) + 切换旧 loop 退出(`agentic.rs:177-190` B-260615-11) + 切换时 generating→readonly(`commands.rs:873-881`)。`llm_concurrency` per_conv 因此退化为单对话内并发(`state.rs:93-96` 注释已标注预留改 HashMap)。**memory 已标记「AiSession 单例未动」架构债**(aichat-arch-extensibility)。**残留 bug**(表象=新建会话上下文残留):前端 `newConversation`(`useAiConversations.ts:31-41`) 漏清 queue/generatingConvId/agentRound/searchQuery;后端 `ai_conversation_create`(`commands.rs:784-821`) 漏清 agent_language/stop_flag(设 true 停旧 loop 没复位 false)。**用户「并行执行」明确=B 方向**(A 只解切换残留不满足并行)。**分档**:**A 短期隔离修复**(补漏清字段,维持单例软隔离,解残留,低风险立即做,**B 前置**) + **B 多会话并发架构**(单例 → `HashMap<conv_id, SessionState>`,每会话独立 messages/generating/stop_flag/pending_approvals + llm_concurrency per_conv 改真 per-conv HashMap + loop 内校验改 conv_id 索引各自 session + 切换不退出旧 loop 各自跑完真并发 + 事件路由核对 conversation_id 全覆盖)。**决策点(待定)**:(a) A 先做解燃眉 vs 直接 B——倾向 **A 先**(残留真 bug 立即解,B 架构另立项) (b) B 形态——AiSession 整体 HashMap vs 拆字段(messages/pending 已可按 conv reload,只拆 generating/stop_flag per-conv)——倾向**后者侵入小** (c) B 并发上限——复用 llm_concurrency.global 限并发会话数防 token 暴增——倾向是 (d) **多窗口 UI 形态**——(d1) 单面板侧栏会话列表切换+后台并行(改动小) vs (d2) 每会话独立 Tauri 窗口(`useAiWindow.ts` detached 已有基础可扩,改动大但「窗口来回切」语义最贴)——**待用户定**,倾向先 d1 后 d2 (e) 旧 loop 切换处理——不退出各自跑完(真并发,倾向) vs 仍退出。— state.rs(AiSession 去单例化) + commands.rs(create/switch 重构 + 漏清补) + agentic.rs(:177-190 校验改 conv_id 索引) + context.rs(ContextManager per-conv) + useAiConversations.ts(漏清补) + stores/ai.ts(per-conv state) + llm_concurrency per_conv + useAiWindow.ts(若 d2 多窗口)。**B 是大改架构升级,需单独设计文档 + 立项**。**✅ 已决(2026-06-16·待决策归档):a — A 隔离修复 + B 立项(🔥 B 阶段高优先级尽快实施),UI d1+d2 都做(侧栏切换 + 独立 Tauri 窗口)**。
|
||
|
||
> **✅ 2026-08-07 核验销账(F-09 B 阶段全部落地)**:三方独立核验(2 agent + 主代 grep 抽查)确认 06-19 草案所有改造点(§4.1-4.7)已落地,**且代码超出草案**:① AiSession 去单例 → `per_conv: HashMap<String, PerConvState>`(mod.rs:593,顶层会话级字段全删)② ConvStateStore DashMap 无锁(治 guard.reset 锁竞争卡死连环)③ 三处退出校验改 conv 存在性(agentic/mod.rs 7 处,零旧 `active_conversation_id != conv_id` 残留)④ GeneratingGuard per-conv + loop_epoch owner token(F1 治同 conv 双 loop 竞态)⑤ last_heartbeat 心跳(F2 治卡死兜底误判)⑥ IPC 全加 conv_id + ConvStateStore 零锁读(switch 删 readonly / create 不杀旧 loop)⑦ 前端 convStates Map(enum 轨替代 bool Set)+ d2 多窗口(useAiWindow.ts `ai-detached-${convId}`)已落地。**剩余仅 B 路线 Phase3 单对话并行多轮**(`per_sub_flow` 占位未接,另线 [[aichat-b-route-parallel-multiround]])。c-1 决策已被用户「不设并发会话上限」推翻作废。
|
||
|
||
- [x] F-260616-12 [P2] ✅ **已核验无问题**:F-09 batch5 修正后 global permit 已移除(用户决策不设会话数上限),retry 仅持 per_conv permit(同 loop 内防自己挤占合理),代码注释标注 F-260616-12 核验通过。— 原 agentic.rs:238 重试持 permit 说法在 F-09 batch5 重构后已不适用。
|
||
|
||
### 🔴 aichat API Key 401 排查(2026-06-16)
|
||
|
||
> 用户报对话失败「调用失败: API Key 无效或无权限」+ 重设 key 无效。**排查结论:代码链路全对(保存 keyring✓ / 读取 resolve_provider_secret✓ / 鉴权头 openai=Bearer·anthropic=x-api-key✓ / URL 智能拼接✓),401 来自服务端,非 devflow bug**。根因四选一(key 无效 / provider_type 不匹配 / base_url 错 / model 名错)。详见 [aichat-apikey-401排查-2026-06-15.md](./09-问题排查/aichat-apikey-401排查-2026-06-15.md)。
|
||
|
||
- [x] S-260615-01 — ✅ **已解决(2026-08-09 用户确认)**:API Key 401 根因已定位解决,此待用户确认项销账。原为「用户跑直连测试(curl)区分 key/provider_type/base_url/model 哪项错」
|
||
|
||
### 🟦 架构审查待修项(2026-06-16)
|
||
|
||
> 纯架构层评估(边界/依赖/抽象/扩展性/状态管理),详见 [架构审查-2026-06-15.md](./05-代码审查/架构审查-2026-06-15.md)。共 🔴6 🟡6 ⚪4 + 亮点 6。与 06-14 三份报告去重(不重复 bug/性能 FR-*、aichat AR-*)。
|
||
|
||
**中期(技术债)**
|
||
✅ ARC-260615-07 已决策:缓做(d归F-09B,其余ROI低不实施)
|
||
|
||
### P1 — 重要缺陷
|
||
|
||
|
||
### 🔴 架构坏味道全面扫描(2026-06-18·6路并行 Explore agent·57K行代码)
|
||
|
||
> 来源: God文件/长函数 + 循环依赖/耦合 + DRY违反 + 错误处理不一致 + 命名API/类型安全 + 测试覆盖/死代码。6 维度全覆盖。
|
||
|
||
**🟡 P1 应该改进 (9项)**:
|
||
|
||
✅ **SMELL-P1-6** — **[P1🟢 已决·待推进]** String 类型滥用替 newtype/enum —— execution_id/status/tool_type 等 5+ 处改强类型(b 路线:仅 Rust 内部 newtype)
|
||
|
||
**🆕 sweep 派生登记(2026-06-18·workflow w2xkw4ybh data 抽出 + wo7d6zdqm 多维度 sweep)**:
|
||
|
||
- ✅ **conditions 条件引擎** — ✅ 全部完成:引擎完备+feature flag 默认开+executor 集成+前端 UI(WorkflowDagDisplay.vue 可编辑)+i18n 补齐
|
||
|
||
### 🟡 AI Chat 交互体验改进(2026-06-14 方案 → 待办化)
|
||
|
||
> 来源:[aichat交互体验改进方案-2026-06-14.md](./02-架构设计/构想审查/aichat交互体验改进方案-2026-06-14.md)。7 大类 20 个改进项,按原文优先级分 4 批。**去重**:§1.3 复制 ⊂ F-260615-13/14(已写)、§3.4 新建中断 ⊂ B-260615-10(已做软复位,本文档加 confirm 增强)、§6.2 分离窗口同步 ⊂ CR-24/25(已写)。**状态: 待讨论→看板跟踪**。
|
||
|
||
**第三批 — 锦上添花**
|
||
|
||
- [x] UX-2025-12 [P2] ✅ **后端分页已落地**(2026-06-28):ai_messages 加 list_recent 分页查询方法 + ai_conversation_load_more IPC + switch 返回最近 50 条 + has_more/earliest_seq 游标。前端滚顶加载 UI 待后续补充。
|
||
|
||
### 待澄清 / A-B 待定
|
||
|
||
- [x] S-260614-01 — ✅ 已销账(并入 F-09,F-09 B 阶段 2026-08-07 全部落地)。**[用户已澄清 2026-06-17]** 「显示多开」= 多个会话来回切都可对话(非 AI Chat 窗口多开)。**✅ 已并入 F-260616-09(已决 a):A 路线已实施,B 高优先立项,详见待决策归档/2026-06.md**
|
||
|
||
#### ℹ️ 架构观察(INFO · 2 项·不进修复队列)
|
||
|
||
- ✅ **UX-260617-28 [INFO]** — 已决策:现状够用,不出问题不升级
|
||
|
||
### 💡 灵感模块-来源采集/追溯(2026-06-21·待办·新功能范畴)
|
||
|
||
> 继批1-3c 升级后的下一步:灵感来源录入增强 + 自动采集机制。**属新功能范畴**,需独立设计采集规则/触发/去重,下一阶段推进。
|
||
|
||
- [x] **F-260621-01 [P2/新功能]** ✅ **source 录入增强已落地**(灵感捕捉模态框已含 source/tags/priority 输入字段,逗号分隔 tags 转 JSON):
|
||
1. ✅ **source 录入增强**:灵感捕捉模态框已加 `source` / `tags` / `priority` 输入,录入即结构化
|
||
2. ⏸️ **自动采集机制**:从对话/任务/代码中自动提炼灵感 —— 需独立设计采集规则/触发/去重,属下一阶段新功能
|
||
- **需设计**:采集规则(什么信号算灵感 — 关键词/意图/重复模式)/ 触发时机(对话结束/任务完成/手动触发)/ 去重(相似灵感合并避免洪水)/ 用户确认流(自动采集不污染灵感池,需用户确认入库)
|
||
- **依赖**:批1-3c 升级完成(已有 source/tags 字段基础 ✅) + 对话历史可读(F-15 archived_segment 状态 ✅) + 任务可读 ✅
|
||
- **关联**:memory [[devflow-idea-module]] / [[aichat-skill-slash-autocomplete]](联想需求,场景相关)
|
||
|
||
---
|
||
|
||
### F-260620-01 跨端 AI Chat:微信小程序 ↔ Rust 云后端 ↔ DevFlow 桌面端
|
||
|
||
**背景**:微信小程序远程用 DevFlow AI Chat,桌面端与小程序双向实时同步(微信电脑+手机同时在线模式)。
|
||
**设计**:[F-260620-01-跨端AIChat-微信小程序-2026-06-20.md](../docs/02-架构设计/已编号方案/F-260620-01-跨端AIChat-微信小程序-2026-06-20.md)(三层架构 df-tunnel/df-relay/df-miniapp + Rust 云后端选型)
|
||
**关系**:灵感 4495fbcd(选型论证,pending_review)+ 任务 6c816709(todo)
|
||
|
||
**实施分阶段**:
|
||
- **P1** df-relay 云后端(axum WS Server + 广播中继 + 鉴权)— 无依赖
|
||
- **P2** df-tunnel 桌面端(WS client + 事件桥接 ai-chat-event 透传 + 指令路由 + 配对绑定)— 依赖 P1
|
||
- **P3** df-miniapp 小程序(前端 UI 复用 + WSS 连云)— 依赖 P1/P2
|
||
- **P4** 双向同步完善(冲突处理 + 安全 + 离线降级 + 部署)— 依赖 P1/P2/P3
|
||
|
||
**Phase3 联调待办**(D1-D6 决策点推荐:A纯透传 / 全19变体透传 / EventBus汇聚 / switch不处理 / 强类型保留 / 桥接层R1兜底):
|
||
|
||
### 🔍 2026-06-22 miniapp 功能走查(workflow wf_ddd49ac8 · 5 域并行核验 + 主代终态抽查)
|
||
|
||
> 用户 /review miniapp + workflow 汇总安排。5 agent 独立 grep/read 核验源码(不信注释/文档) + 主代终态核验(ws.ts 真路径 `src/api/ws.ts`、`relay.rs:255/355`、remote_bridge 命令数 10 非 11)。**18 findings → 去重 P1×5 / P2×3 / P3×1**,2 项 refuted。关联 F-260620-01 阶段4(真机联调前置)。**守 session-role-diagnose-only:本会话仅走查 + 登记,未实施代码。**
|
||
|
||
**P1(阻塞真机/可靠性·5 项)**:
|
||
|
||
- [x] P1-D-260622 [P1] ✅ **config 持久化已实现**:`setConfig` 接入 `uni.setStorageSync`,懒加载从 storage 读回退 defaultConfig,新增 `resetConfig` 清除。— `apps/df-miniapp/src/config.ts`
|
||
- [x] P1-A-260622 [P1] ✅ **心跳 pong 闭环已实现**:relay 识别 `{control_kind:"ping"}` 构造 pong 回 miniapp(不经 device 透传),miniapp `lastInboundAt` 更新看门狗治半连接挂死。— `crates/df-relay/src/relay.rs` + `apps/df-miniapp/src/api/ws.ts` + `apps/df-miniapp/src/composables/useAiChat.ts`
|
||
|
||
**用户补充核验(2026-06-22 用户详读源码+设计文档,主代逐项核源码判真伪)**:
|
||
|
||
> ⚠️ 用户分析 P0 三项(协议三重不匹配 / EventBus 未接 / 桥接层占位)**经源码核验全部失实**,系基于 Phase3 阶段1-3 落地前的设计文档「计划态」描述,未核当前代码。证据:
|
||
> - **P0-1 协议**:`crates/df-tunnel/src/tunnel.rs:457/327/424` tunnel 纯透传 payload `Value` 上抛 on_command,**不**做 `from_value::<TunnelCommand>` 强类型反序列化(方案A 阶段1 已落地 commit 0fb5af5)→ miniapp `{cmd,args}` 反序列化在桥接层 `remote_bridge.rs:96 from_payload` 成功,非阻断。tunnel.rs:457 注释自证「不反序列化为 TunnelCommand 强类型」。
|
||
> - **P0-2 EventBus**:`src-tauri/src/lib.rs:128` `state.ai_event_bus.subscribe()`(tunnel subscriber 已接)+ `remote_bridge.rs:303/332/358/388` + `commands/ai/mod.rs:209/225` `publish_event` 跨端透传。**已双写接入**(todo line 760 commit 0fb5af5/612de4c emit 双写 chat19/audit12/guard3/stream_recv2/agentic18)。`event_bus.rs:53/115` 的 `#![allow(dead_code)]`+「骨架阶段」注释是**过时历史标注**(publish_event 现有调用方 remote_bridge/mod),非未接入。
|
||
> - **P0-3 桥接层**:`remote_bridge.rs` 完整实装(`handle_remote_command`:121 + `MiniCommand`:83 + `from_payload`:96 + match 路由 10 条 + `route_list/load_messages` publish_event)+ **已 wire** `lib.rs:150-154` `on_command = Arc::new(...handle_remote_command...)` + `:171` `.connect(&relay_url,&device_id,&token,on_command.clone())`。非占位/设计态。`remote_bridge.rs:40-42` 的 `#![allow(dead_code)]`+「零调用方」注释写于联调前,现 lib.rs 已调(过时标注,待清)。
|
||
|
||
**剩余开放项**:P3-B-260622 [P3·真机前置] — **manifest appid 占位**。`PLACEHOLDER` 无法真机调试,需微信公众平台注册的真 appid。— `apps/df-miniapp/src/manifest.json`
|
||
|
||
### ✅ 2026-06-24 aichat 可靠性修复(消息重叠×5 + 授权弹窗卡死 + 工具执行心跳误报 · 诊断workflow→论证workflow)
|
||
|
||
> 剩余低优 [ ](非阻断):
|
||
> - [x] BUG-260624-02 残留 ✅ 已销账(2026-08-15):ToolCard pending 态倒计时落地(`_approvalTimers` 升级携带 startedAt/timeoutMs + `getApprovalRemainingMs` 真值起点,expireSecs/expireLevel computed,≤60s `.is-urgent` 红;不限时回退正计时;i18n expireIn zh/en)+ detached 窗口核验无缺口(AiDetached→AiChat 独立 startListener,ai-chat-event app 级广播,主窗口 detach 时 stopListener 不竞态,结论注释 useAiWindow:107-115)
|
||
> - [x] F-09 根因:streaming/currentText 全局单例改 per-conv ✅ **2026-08-07 核验销账**(per_conv HashMap + 前端 convStates Map enum 轨 + AiConvStateChanged 事件 per-conv 路由,根治多会话串扰)(根治多会话串扰,见 docs/待决策.md)
|
||
> - [ ] CR-260622-01-P2-2 [P2低优·评估降级] — **HTML/markdown/JSON 等非代码文件无 session 级缓存**。**2026-06-24 评估**:已有 `TOOL_RESULT_COMPRESS_ENABLED`(mod.rs:98/1029-1078 view-only 摘要,>2KB tool_result 压缩,LLM 视图摘要非全文回灌 prompt)部分缓解;read_symbol 治代码文件(主场景,降 24.4x)。非代码文件完整 session 缓存(path→hash+content+patch失效)设计复杂 + LLM patch 后重读确认行为不确定(缓存命中提示可能不够 LLM 仍重读),归 B 路线 prompt 策略(约束 patch 后不重读)更合适,工具侧完整缓存低优暂缓。
|
||
|
||
---
|
||
|
||
### 🔍 2026-08-01 走查剩余待办(P2/P3/专项·本会话登记)
|
||
|
||
> 本次走查剩余项登记,未实施代码(守 session-role-diagnose-only)。专项已落 memory,此处留指针。
|
||
|
||
**P2(中期改进)**:
|
||
|
||
- [x] **WC-P2-status-union** — ✅ **已销账(2026-08-09)**:status union 已修
|
||
- [x] **WC-P2-useAiEvents-胖** — ✅ **已销账(2026-08-09)**:useAiEvents 已拆 12 个 composable(useAiLifecycleEvents/StreamingEvents/ToolEvents 等,65c0f6b)
|
||
- [x] **WC-P2-dfnodes-6未注册** — ✅ **已销账(2026-08-09)**:state.rs build_registry 已注册 git/docker/http/notify/subflow + human/ai/ai_self_review/task_advance 共 9 节点;script 有意禁用(R-PD-2)
|
||
- [x] **WC-P2-dfmcp-schema-required** — ✅ **已销账(2026-08-09)**:required_names() 兼容 array/bool 两形态 + 三例单测(server.rs:277-294/491-522)
|
||
- [x] **WC-P2-bind-directory** — ✅ **已销账(2026-08-09)**:tool_registry.rs:456-485 bind_dir_to_project 四要素齐全(id/路径校验/防重绑/stack探测)
|
||
|
||
**P3(风格/可读·低优)**:
|
||
|
||
- [x] **WC-P3-SubflowNode-风格** — ✅ **已销账(2026-08-09)**:subflow_node trait 顺序(execute→schema→node_type)对齐 ai/human 节点
|
||
- [x] **WC-P3-script-注释** ✅ 已销账(2026-08-15 全文核验):script_node.rs 全部 env var 相关注释(:9/:144/:167 等)均已是「运行时配置优先、env var 回退」语义,无「替代纯 env var」矛盾表述,无需改动
|
||
|
||
**专项(已登记 memory,留指针)**:
|
||
|
||
- 📌 **WC-专项-AI-router-sanitize** — AI router + sanitize 链路梳理重构 — 详见 memory(已登记,本会话不实施)
|
||
- 📌 **WC-专项-run_agentic_loop-重构** — `run_agentic_loop` 重构(ARC-260619-05 agentic:318 超长,历史登记) — 详见 memory(已登记,本会话不实施)
|
||
|
||
**技能注入(待定位)**:
|
||
|
||
- [ ] **WC-技能注入-trace定位** — 技能/skill 注入链路待 trace 定位(注入时机、上下文来源、是否重复注入),定位后再决定是否待办化
|
||
|
||
---
|
||
|
||
### 🔍 2026-08-02 UI/UX 扩展审查(wf_wynylx23h · 10 路并行 · 基于任务 0115aea6 原 12 问题角度)
|
||
|
||
> 详单:[UIUX扩展审查-2026-08-02.md](./05-代码审查/UIUX扩展审查-2026-08-02.md)。80 条发现(8 高/38 中/34 低;38 全新/29+ 延伸),高严重度主代理 grep 核验**全属实**。完整数据 `~/.claude/jobs/8ff8ccb7/tmp/audit_summary.json`。
|
||
|
||
**P0 确定性 bug(本会话首批 · 并行实施)**:
|
||
|
||
- [x] **UX-P0-1** ✅ 后端 `commands/project.rs` 4 处空 if 目录校验补 return Err(`7f0edce`)
|
||
- [x] **UX-P0-2** ✅ 后端 `commands/ai/tools/git.rs` exec_git 改返 `(String,bool)` 治假成功 + CREATE_NO_WINDOW(`7f0edce`)
|
||
- [x] **UX-P0-3** ✅ 后端 `commands/module.rs` run_git_cmd 加 CREATE_NO_WINDOW(`7f0edce`)
|
||
- [x] **UX-P0-4** ✅ 前端 `DependencyGraph.vue` 环高亮注入 renderGraph(`7f0edce`)
|
||
- [x] **UX-P0-5** ✅ 前端 `FileExplorer.vue` closeDropdown 加 closest 判定(`7f0edce`)
|
||
- [x] **UX-P0-6** ✅ 前端 `Tasks.vue` 快捷菜单 —— **HEAD 早修**(closeQuickMenu+listener+@click.stop,任务描述过时),销账
|
||
|
||
**P1 进展**:
|
||
|
||
- [x] ✅ **P1-a** 长内容折叠(MessageList AI 文本气泡>1500 字 + ConflictResolver 多冲突 + HelpRequiredCard 堆栈,`9e85cad`)
|
||
- [x] ✅ **P1-b** Dashboard 统计源解耦(治 H6/H7 翻页/筛选后统计错乱;统计走后端 count_tasks 独立通道,`d1321af`)
|
||
- [x] ✅ **P1-c** 列表状态持久化 — **2026-08-09 核验销账**:usePersistedRef 已接入 Tasks/Projects/Knowledge/Ideas/AuditLog;ProjectDetail Tab 手写 localStorage 按 projectId 隔离(动态 key,usePersistedRef 静态 key 不适用)保留
|
||
- [x] ✅ **P1-d** AuditLog 后端 WHERE 筛选 + 真实 total — **2026-08-09 核验销账**:list_tool_executions(record.rs:182)支持 status/risk_level/tool_keyword WHERE + count_by_query 独立 COUNT 真实 total + limit/offset 分页;前端 AuditLog.vue buildQuery 传后端 + usePersistedRef 持久化
|
||
- [x] ✅ **P1-e** 审批体系一致 — **全部落地(2026-08-09)**:挂起计时✅(ApprovalPopup :191 MM:SS)/ 授权粒度统一✅(ToolCard/ApprovalPopup/DirAuthDialog 同 i18n)/ deny 二次确认✅(DirAuthDialog 补)/ **失败 toast ✅ 本批落地**(useAiApproval catch emit('ai-toast') + AiChat listen;ApprovalPopup 窗口内自包含 useToast)
|
||
- [x] ✅ **P1-f** cmd 闪烁 N² — **已落地(2026-08-09 141777b)**:module.rs 新增仓库级 git status 缓存(GIT_STATUS_CACHE,key=仓库根 path,TTL 5s,锁内不跑 git,非 git 不缓存;get_module_file_tree + get_module_git_status 两处收口;删除/更新 module 清缓存);前端联动未做(5s TTL 自然过期 + FileExplorer 刷新已重拉目录树,无独立缺口)
|
||
- [x] ✅ **P1-g** store.tasks.filter 污染 — **2026-08-09 核验+补全销账**:ProjectDetail 独立 taskApi.list 已修;ChatInput @项目 enrichment 独立拉取(projectTasksCache)已修 + @任务联想本批改独立全量缓存 taskSuggestionCache(隔离 Tasks 页筛选子集)+ mentionTotal 对齐
|
||
|
||
**P2(打磨)**:✅ 幽灵 `--df-primary` 已清(2026-08-15:4 处引用迁 `--df-accent` 逐主题等价,双主题定义删除,零残留)/ ✅ 死代码 PlanProgress·isLastUser 已核不存在 / ✅ git 状态色 token(2026-08-15:--df-git-added/modified/deleted/untracked 双主题,FileTree/GitChanges/FilePreview 18 处迁 var+color-mix)/ ✅ 控件统一(2026-08-15:.setting-input 全局定义承接,Connection/ProviderPanel 重复副本删,存布局覆盖)
|
||
|
||
**批次 I(原 12 大改 · 后续专项)**:Dashboard 统计卡压底行(问题 1,依赖 P1 数据源)/ Projects 视图模式(问题 2)/ TaskDetail(4)·IdeaDetail(5)·KnowledgeDetail(6)·ProjectDetail(10)重设计 / ✅ project_event_repo 埋点已接入(2026-08-15 核验:commands/project.rs emit_project_event 封装 best-effort 写入 + list_project_activities 消费)
|
||
|
||
---
|
||
|
||
### 🔍 2026-08-04 aichat 历史会话实证诊断(弱模型工具行为失控)
|
||
|
||
> 触发:用户反馈"你好"时模型乱调 `list_project_modules("DevFlow")` + `search_files("scan")`。
|
||
> 实证:prod(76 会话/9928 消息/6392 工具)+ dev(98 会话/7853 消息)库 + 会话 dump 反推。详单 [aichat历史会话实证诊断-2026-08-04.md](./05-代码审查/aichat历史会话实证诊断-2026-08-04.md)。
|
||
> 核心:弱模型(sensenova-6.7-flash-lite)在任务中**重复探索/绕工具/参数错误**是系统性现象,非偶发。
|
||
|
||
- [x] **AC-1** ✅ 已落地(2026-08-09 核验):双层拦截——调用级 `cache.rs:251 find_cached_readonly_result`(同 tool_name+canonical_args 已 completed 即返缓存+警告头,第 2 次即命中)+ 轮级 `is_repetitive_exploration`(helpers.rs:304-332,单签名≥3/唯一率<40%)→ `check_stall_breaker`(警示→硬熔断 emit AiHelpRequired)
|
||
- [x] **AC-2** ✅ 已落地(2026-08-09 核验,提交 fe780c0):`MAX_TOOL_CALLS_PER_ROUND=8`(agentic/mod.rs:245)+ 目录列举去重(readonly_cache_args_key 只取 path,返目录专用警告)+ `detect_listing_bypass`(run_command 含列举命令且引用已列目录→警告,保守式不硬拒)
|
||
- [x] **AC-3** ✅ 已落地(2026-08-09 核验):prompt.rs:304/323 项目/任务清单已含 id + 注明语(projects_listed_note "引用用 id 非名称");**兜底机制超要求**:entity_resolve.rs name→id 自动解析(RESOLVE_MAP 12 工具 + UUID 跳过 + 0 命中/重名返可行动错误 + 9 单测,audit/mod.rs process_tool_calls 单点漏斗)
|
||
- [x] **AC-4** 🟡 部分(2026-08-09 核验):read_file **符号级命中**提示已补强(tools/file.rs:179-196 用 code_intel contains_definition 检测内容含定义节点才提示,替代旧按扩展名)+ 三态本体(code_intel.rs:130)+ 缓存兜底 + 单测 4;**模型分级已评估=保持现状**(穿模型需改 process_tool_calls 多路径签名波及 ai_approve/trust_hits/low_risk,ROI 低——提示一行且 token 节省可忽略,启发式判弱模型脆弱)。✅ 关闭(2026-08-15:残尾均为已评估定案,无后续动作)
|
||
- [x] **AC-5** 🟡 部分(2026-08-09 核验):画像复盘已做(docs/AI工具失败画像复盘-2026-08-08.md)+ 4/5 自愈机制落地(advance_task legal_targets / patch_file 相近锚点 / read_file·read_symbol 相近文件名候选 / search_files total=0 引导);**运行时失败率统计 ✅ 已落地(141777b)**:tool_failure_stats IPC 命令(stats_by_tool 按工具 status 聚合,failed_rate=failed/(completed+failed),rejected 不计分母,可选 from 时间下限)。✅ 关闭(2026-08-15:残尾均为已评估定案,无后续动作)
|
||
|
||
### 💡 2026-08-04 MCP 多进程架构潜在问题(分析登记)
|
||
|
||
> 来源:df-mcp 进程实测 + 代码核查。根因:MCP server 独立进程 + 与 GUI 同库不同进程 + 绕过 GUI 业务层直调 Repo。
|
||
> 分析类登记,待决策后实施。
|
||
> **✅ 2026-08-09 核查销账(2 agent 源码核验 + 主代抽查)**:8 项中 4 已落地(提交 02c8d8e 等)、4 本批补修(8cb666a)。
|
||
|
||
- [x] **P0-1** ✅ 已落地(2026-08-09 8cb666a):df-storage 三 Repo 新增 `update_full_cas`(WHERE id AND updated_at 原子条件写,affected==0 拒绝),df-mcp update_project/task/idea/score_idea 四工具改 CAS 调用(顺带修 score_idea 旧忽略 Ok(false) 静默覆盖),+6 单测
|
||
- [~] **P0-2** 🟡 部分(2026-08-09):GUI 内嵌 HTTP 形态已通(advance_task 数据变更映射本批补,data_change.rs);**独立 stdio 进程仍无感知**(on_write_call: None 无 AppHandle + 无轮询兜底),需设计 GUI 侧刷新机制
|
||
- [x] **P0-3** ✅ 已落地:main.rs:19-37 init_mcp_tracing(tracing-appender non_blocking 写 %TEMP%/devflow-trace.log,medium_audit warn 落盘)
|
||
- [x] **P1-4** ✅ 已落地(e722823):校验下沉 crates/df-storage/src/crud/task_validation.rs,df-mcp/GUI 复用同源函数
|
||
- [x] **P1-5** ✅ 已落地(02c8d8e):db.rs busy_timeout(5s) + WAL + foreign_keys
|
||
- [x] **P1-6** ✅ 已落地(02c8d8e):server.rs:100-107 空闲超时 60s 退出(--idle-timeout 可配)
|
||
- [x] **P1-7** 🟡 部分(设计取舍):高危默认拒 + 中危审计 + --read-only 可选;未做默认只读/写前确认(有缓解可接受)。✅ 关闭(2026-08-15:设计取舍已接受,无后续动作)
|
||
- [x] **P2-8** ✅ 已落地(8cb666a):主 list 工具分页 + list_trash 补分页(offset/limit/has_more); **P2-9** ✅ 已核销(2026-08-15):df-project scan/mod.rs 统一 to_lowercase 比较版(:69/:73)+ 单测断言,normalize_for_compare/canonicalize_for_store 已拆分; **P2-10** 有意收敛
|
||
|
||
---
|
||
|
||
### 🔍 2026-08-04 miniapp 聊天渲染 vs 桌面端兼容性走查(剩余待办登记)
|
||
|
||
> 走查 `apps/df-miniapp/src/pages/chat/index.vue` / `apps/df-miniapp/src/utils/mdRenderer.ts` / `src/components/ai/MessageList.vue` 等 miniapp 聊天渲染与桌面端兼容性。**已修复项不记录**,仅归档未修剩余项。守 session-role-diagnose-only:本会话仅走查+登记,未实施代码。
|
||
> **✅ 2026-08-09 核查销账(2 agent 源码核验 + 主代抽查)**:9 项中 7 已落地(e722823/795e05f/8cb666a)、本批补 2(mention chip + 语言标签)。
|
||
|
||
**P1(兼容性/体验·2 项)**:
|
||
|
||
- [x] **MR-P1-1** ✅ 已落地:chat/index.vue:66-131 splitStreamBlocks 块级 memo 流式渲染(currentText 不再纯 text 显语法字符;未闭合围栏降级 escapeFallback 属流式固有取舍)
|
||
- [x] **MR-P1-2** ✅ 已落地:mdRenderer.ts:203-207 table 显式 `display:table`(非 block)保留列对齐 + max-width/word-break 兜底
|
||
|
||
**P2(打磨·6 项)**:
|
||
|
||
- [x] **MR-P2-1** ✅ 已落地:mdRenderer.ts:198 img max-width:100% + border-radius(网络图依赖微信 downloadFile 白名单,非渲染代码)
|
||
- [x] **MR-P2-2** ✅ 已落地(2026-08-09 8cb666a):chat/index.vue segmentUserContent 分段渲染 `[项目:名]`/`[任务:名]`/`[灵感:名]` chip(命中已知实体才 chip,未命中保持字面,纯文本零回归)
|
||
- [x] **MR-P2-3** ✅ 已落地:mdRenderer.ts:167-172 input checkbox → ☑/☐ 字符符号
|
||
- [x] **MR-P2-4** ✅ 已落地(8cb666a):highlight.js 14 语言高亮 + 代码块语言徽标(codeLangBadge,围栏 lang 显标签)
|
||
- [x] **MR-P2-5** ✅ 已落地:桌面 MessageList.vue:698-708 isToolResultJson 折叠(对齐 miniapp)
|
||
- [x] **MR-P2-6** ✅ 已落地(795e05f):settings/index.vue 编辑模式(setConfig + 脱敏 + resumeIfDisconnected)
|
||
|
||
**P3(外部依赖/低优·2 项)**:
|
||
|
||
---
|
||
|
||
### 🔍 2026-08-07 aichat 切换/新建对话缺陷走查(用户实测 2 bug + 双 agent 深挖)
|
||
|
||
> 用户 dev 实测报 2 个 bug(队列串新会话 / 历史内容进新会话),派 2 agent(前后端)+ 主代独立抽查。**守 session-role-diagnose-only:本会话仅走查+登记,未实施代码。** 详单见走查报告(本段即清单)。
|
||
> **✅ 2026-08-09 核对销账(2 agent 独立源码核验 + 主代抽查 useAiEvents P1-1 一致)**:16 项中 **14 项已修**(提交 9f75db5「切换/新建对话缺陷」+ 后续 6ba6daf 收尾),各 [x] 项附当前源码证据行号;**CSW-P1-4 未修**(切到生成中 conv 首响应气泡丢失,需前后端 round0 占位补回设计,单列);**CSW-P2-7 未核对**(走查自标待确认,含 d2 分离窗口失效/跨端流式)。
|
||
|
||
**🔴 P0/bug1 待发送队列串到新对话(用户实测,根因已确认)**:
|
||
- [x] **CSW-P0-1** — ✅ 已修:`AiChat.vue:393-395` activeQueue computed 按 `activeConversationId` 过滤 + 模板 :70/:79 改用 activeQueue;queue 操作(cancel/edit/sendNow)经 `useAiSend.ts:420-431` activeQueueRealIndex 映射真实下标,clear/forceSend 均传 convId
|
||
|
||
**🟡 P1(前后端合并去重,按严重度)**:
|
||
- [x] **CSW-P1-1** — ✅ 已修:`useAiEvents.ts:101-102` 非当前会话 `AiCompleted` 仍 emit `ai-drain-queue`(带 conversationId,未被 isCurrent 吞);`useAiSend.ts:271-306` drainQueue 用目标 convId
|
||
- [x] **CSW-P1-2** — ✅ 已修:`conversation.rs:363-368` 非 live 分支先判 `mem_has_unsaved`(len>persisted_msg_count || needs_full_rewrite),有未落库内存则跳过 restore,DB 快照不再覆盖内存
|
||
- [x] **CSW-P1-3** — ✅ 已修:`conversation.rs:335/415-417` `already_live` 分支 pending 完全不动(不 finalize/不 retain/不从 DB 恢复),首屏用 per_conv 内存消息
|
||
- [x] **CSW-P1-4** — ✅ **已修(2026-08-09)**:切到生成中 conv 首响应气泡丢失——前端 switchConversation(useAiConversations.ts:336-355)在 parse 成功、active 置位后,若 `targetGen && 末条是 user` 补前端占位 assistant 气泡(`round0-pending-` 判重),承接 currentText 供 MessageList isLastAi 流式渲染 + flushCurrentText 回填。纯前端,不需后端协同
|
||
- [x] **CSW-P1-5** — ✅ 已修:`conversation.rs:613-616` 删除先登记 `deleted_convs` 再删库,save 入口 :259-265 命中直接 return + :416-426 INSERT 前二次校验,封死 Ok(None) 复活窗口
|
||
- [x] **CSW-P1-6** — ✅ 已修:`useAiConversations.ts:255-259` `if (!force && id === state.activeConversationId) return` 同 id 短路,不清文本不重拉
|
||
- [x] **CSW-P1-7** — ✅ 已修:`useAiConversations.ts:269/303-305` switchingConvs 集合缓冲切换往返窗口;`useAiEvents.ts:110-115` 非当前命中 switchingConvs 的 delta 累积到 per-conv 流式态而非 drop
|
||
- [x] **CSW-P1-8** — ✅ 已修:`useAiConversations.ts:333-335` 先 messages 后 active 同一同步块,parse 失败 catch :336-348 不切走,无 active/messages 错配
|
||
|
||
**🔵 P2(打磨/边缘)**:
|
||
- [x] **CSW-P2-1** — ✅ 已修:`useAiConversations.ts:71-73` newConversation 首行 `clearAllApprovalTimers()`
|
||
- [x] **CSW-P2-2** — ✅ 已修:`conversation.rs:356/400-405` 仅 `!conv_was_present` 才复位 session_trust/model_override/agent_language
|
||
- [x] **CSW-P2-3** — ✅ 已修:`conversation.rs:211-226` save_conversation_serialized 持 per-conv 锁(`mod.rs:696-701` save_locks)串行化 DELETE+INSERT,20+ 调用点无旁路
|
||
- [x] **CSW-P2-4** — ✅ 已修:`state.rs:561-565` clear_session_allowed_dirs_if_idle 仅在 `active_convs().is_empty()` 才清,后台 loop 文件工具不丢临时授权(三调用点 create/switch/delete 均用 _if_idle)
|
||
- [x] **CSW-P2-5** — ✅ 已修:`useAiConversations.ts:67/75-76/110` `_newConvLock` 防抖 + 300ms 释放
|
||
- [x] **CSW-P2-6** — ✅ 已修:`streamingGuard.ts:78` 带 convId 写 per-conv 流式态,无 convId 才写全局
|
||
|
||
**其他已销项**:CSW-P2-7(需实测确认,从待办去除)
|
||
---
|
||
|
||
### 🔍 2026-08-09 项目详情页走查(概览/文件/依赖图 · 3 agent 并行 + 主代核查)
|
||
|
||
> 用户要求「检查项目详情(概览、文件、依赖图)存在的问题」并「先检查做记录,不直接改」。详单见 [项目详情页走查-2026-08-09.md](./05-代码审查/项目详情页走查-2026-08-09.md)。共 **60 项**(P0×1 / P1×6 / P2×14 / P3×27)。守 session-role-diagnose-only:仅走查登记,未实施代码。
|
||
|
||
**P0(核心不可用)**:
|
||
- [x] **PD-P0-1** — ✅ 已修(2026-08-09 e6760e8):DependencyGraph 调 `register({shape:'vue-shape',component:ModuleNode})` + ModuleNode 改 `props.node?.getData?.()` 双兜底(vue-shape 传 {node,graph} 非 data,主代核 x6 源码确认)
|
||
|
||
**P1(数据正确性/一致性·6 项)**:
|
||
- [x] **PD-P1-1** — ✅ 已修(a9cb802):module.rs git status 加 `-c core.quotepath=false` 一行根治中文乱码
|
||
- [x] **PD-P1-2** — ✅ 已修(e6760e8):remove_project_module 删工程前级联清 module_dependencies(FK 约束)
|
||
- [~] **PD-P1-3** — 🟡 已降级标注(2026-08-09 a9cb802):WorkflowEventPayload 无 project 维度无法按项目过滤 → 实时进度面板默认隐藏(wfProgressEnabled)+ 日志默认折叠+「全局事件」标注,不改事件协议(跨层大改留设计)
|
||
- [x] **PD-P1-4** — ✅ 已修(a9cb802):projectTasks 加 df-data-changed 本地监听(entity=task,200ms 防抖,overview 活跃才刷)
|
||
- [x] **PD-P1-5** — ✅ 已修(a9cb802):df-data-changed 写文件后重拉 gitStatus + GitChanges refreshKey prop(修徽标清零+不刷新)
|
||
- [x] **PD-P1-6** — ✅ 已修(a9cb802):FileTree toggleDir 错误改行内态(toggleErrors 按 path),不炸整树
|
||
|
||
**P2(体验/打磨·14 项)**:
|
||
- [x] **PD-P2-1** ✅ 已修(a9cb802):watch(activeTab) 切回 overview 重拉 modules / **PD-P2-2** ✅ 已修:loadProjectTasks/loadModules 加 seq 序号守卫 / **PD-P2-3** 🟡 DAG 边条件编辑父级未监听(a9cb802 概览进度面板默认隐藏,编辑入口随隐藏;TaskDetail 场景不受影响,待评估) / **PD-P2-4** 🟡 stopEventListener 波及他视图(共享单例,留设计) / **PD-P2-5** ✅ 已修:watch(projectId) 重置折叠态
|
||
- [x] **PD-P2-6** 🟡 概览任务无 loading/分页(未做,列表上限 500 通常够,待评估) / **PD-P2-7** ✅ 已修:constants/project.ts 补全 5 状态 + i18n / **PD-P2-8** ✅ 已修(e6760e8):环高亮改 isCycle 注入 data + ModuleNode 红框 / **PD-P2-9** ✅ 已修:节点点击改组件内 selectedId 选中高亮(移除死代码 emit+push) / **PD-P2-10** ✅ 已修(a9cb802):零工程空态引导 CTA
|
||
- [x] **PD-P2-11** 🟡 打开文件 tab 全量 git 扫描(后端 5s 缓存已缓解,懒加载留设计) / **PD-P2-12** ✅ 已修:FileExplorer/DependencyGraph 用 KeepAlive 保活(onActivated 守卫) / **PD-P2-13** ✅ 已修(e6760e8):loadModules 重置 cycleNodes / **PD-P2-14** ✅ 已修:前端禁用已存在组合 + 后端幂等
|
||
|
||
**P3(边缘/打磨·27 项)**: 见详单文档(概览 O10-18 / 文件 F13-24 / 依赖图 G14-18) — 部分已随批修(见下)
|
||
> 已随批修 P3:O7 sourceScores clamp / O8 descCollapsible DOM 测量 / O9 handleSync 补模块+灵感 / O10 parseStack 缓存 / 依赖图 G10 防环文案 cycleAddError / G14 后端 from!=to 校验 / G16 省略号统一。其余待后续批。
|
||
|
||
> **优先级建议**:P0 G1 节点不渲染 → P1 F3 中文乱码 + G3 删依赖必失败 + O2 跨项目串数据 + O1 列表陈旧 + F1 变更不刷新 → P2 分批。
|
||
> **memory 指针**:[[devflow-project-detail-walkthrough]]
|
||
|
||
---
|
||
|
||
### 🔍 2026-08-09 aichat 运行效率走查(6 路并行 · 单轮成本/工具/流式/前端/会话/LLM成本)
|
||
|
||
> 用户反馈「aichat 运行的效率很低」+「成本走查,比如有的 LLM 要求的缓存命中率规则」。详单见 [aichat效率走查-2026-08-09.md](./05-代码审查/aichat效率走查-2026-08-09.md)。共 **74 项**(单轮13/工具9/流式12/前端12/会话16/LLM成本12)。守 session-role-diagnose-only:仅走查登记,未实施代码。
|
||
|
||
**LLM 成本/缓存命中(用户重点 · P0×2)**:
|
||
- [x] **AC-EFF-C0-1** — ✅ 已修(2026-08-09 d09d136):AnthropicRequest.system 改 untagged SystemBlock 枚举(Plain/Cached),cache_control:{type:ephemeral},开关 ANTHROPIC_CACHE_ENABLED 默认关
|
||
- [x] **AC-EFF-C0-2** — ✅ 已修(d09d136):system 稳定段/易变段分离——日期+项目/任务清单+augmentation+知识注入挪消息流末尾 merge_volatile_tail(治跨天失效+前缀稳定),开关关逐字等价现状;df-ai 492 测试通过
|
||
- [~] **AC-EFF-C1-1** ✅ 日期挪易变段已修 / **C1-2** 🟡 每轮全量重发 O(n²) 部分缓解(cache_control+稳定前缀后第2轮起命中,增量滑窗留待后续批) / **C1-3** ✅ augmentation+知识注入挪消息流已修
|
||
|
||
**后端效率(单轮成本 + 会话 + 工具 · P0×4)**:
|
||
- [x] **AC-EFF-R1-1** 🟡 全量历史重放(cache_control 命中后 O(n²) 实际降为 cache_read,增量机制待后续) / **AC-EFF-R2-1** ✅ 已修(0300764):count_recent_failures+check_stall_breaker 改 recent_messages 尾窗口 40 条
|
||
- [x] **AC-EFF-L0-1** — ✅ 已修(0300764):save_conversation 无变化捷径提前判定(无变化不 clone/truncate/构建 records)
|
||
- [x] **AC-EFF-L0-2** — ✅ 已修(0300764):system prompt 数据指纹缓存(OnceLock+entity_fingerprint,省每轮 DB 查询+拼接)
|
||
- [x] **AC-EFF-L0-3** — ✅ 已修(c41f4ad):压缩后台化 tokio::spawn fire-and-forget + is_compressing 防重入,当前轮正常走不阻塞
|
||
- [x] **AC-EFF-T1-1** ✅ 已修(c41f4ad):AiToolExecutionRepo.insert_batch 单事务批量,审计砍串行尾巴 / **T1-2** ✅ 已修:只读缓存轮内去重(同轮重复 (tool,args_key) 只真执行一次) / **T1-3** 🟡 git 工具不进缓存(留待后续,module.rs git 缓存未共享)
|
||
|
||
**前端效率(流式 + 交互 · P1×4)**:
|
||
- [x] **AC-EFF-S1-1** ✅ 已修(c41f4ad):流式增量渲染(已完成块跨帧缓存 + 只重 lexer 末块增长段,单块>12000 降级纯文本) / **S1-2** 🟡 长尾代码块 hljs(随 S1-1 缓解,高亮缓存留待)
|
||
- [x] **AC-EFF-F1-1~3** — ✅ 已修(0300764):scheduleConversationsRefresh 250ms trailing debounce 收敛回合双拉+notify 自触发+无防抖
|
||
- [x] **AC-EFF-S2-1** ✅ 已修(c41f4ad):MessageList 双渲染合并(currentText 条件改 streamingBlocks.length>0,每 delta 只 rAF 一次) / **S2-5** ✅ 已修:AiCommandOutput 50ms+4KB 合批(砍事件风暴)
|
||
|
||
**P2/P3 其余 50+ 项**: 见详单文档(R2/R3/T2/T3/S2/S3/F2/F3/L1/L2/L3/C2/C3 全量)
|
||
|
||
> **优先级建议**:① C0-1+C0-2 缓存命中率 → ② L0-1 save + L0-2 system 缓存 + L0-3 压缩后台化 → ③ R1-1 全量重放 + S1-1 流式增量 → ④ T1-1 审计批量 + F1-1/2/3 列表刷新收敛。
|
||
> **memory 指针**:[[aichat-efficiency-walkthrough-2026-08-09]]
|
||
|
||
### 🔍 2026-08-09 任务/仪表盘/灵感知识走查(3 路并行 · 阶段②第一批)
|
||
|
||
> 详单见 [任务+仪表盘+灵感知识走查-2026-08-09.md](./05-代码审查/任务+仪表盘+灵感知识走查-2026-08-09.md)。共 **59 项**(任务19/Dashboard+Projects17/Ideas+Knowledge23,P0=0/P1=7/P2=25/P3=27)。守 session-role-diagnose-only:仅走查登记,未实施代码。
|
||
|
||
**P1(确定性,优先修)**:
|
||
- [x] **WK-1** ✅ 已修(2026-08-09 0554cc1):ActiveProjectsPanel 改 status !== completed/cancelled + 状态映射对齐 7 态(in_progress→coding/testing→testing/releasing→release),删 active 键
|
||
- [x] **WK-2** ✅ 已修:Knowledge 操作前快照 index,selectNextCandidate 直接按同位置取后续
|
||
- [x] **WK-3** ✅ 已修:updateStatus/archive 返布尔,失败 toast + 中止推进
|
||
- [x] **WK-4** ✅ 已修:promoteIdea/relateIdeas 去内部 loadIdeas + _activeIdeaQuery + Ideas.vue loadCurrentView()
|
||
- [x] **WK-5** ✅ 已修:Ideas/IdeaDetail 状态菜单排除 promoted
|
||
- [x] **WK-6** ✅ 已修:7 态 status-* 色类提取全局 components.css(列表+详情+项目统一)
|
||
- [x] **WK-7** ✅ 已修:Ideas 改 error-banner,失败不清理选中态,deleteIdea 返布尔
|
||
|
||
**P2(体验/数据)**: WK-8~13 ✅ 已修(0554cc1):快捷菜单状态机+补cancelled / overflow裁切根治(顶底角裁剪下放) / loadTasks seq守卫+keyword / 搜索态隐藏进度徽章 / 分页越界钳制 / 失败统一toast。剩余 WK-14~18 🟡 待后续
|
||
|
||
**P3(27 项)**: 见详单文档(TSK-10~19 / DBP-10~17 / IDEA-10~12 / KNOW-6~10 / C-1~3)
|
||
|
||
> **优先级**:WK-1 Dashboard 状态映射 → WK-2/3 Knowledge 确定性 → WK-4/5 Ideas → WK-6 状态徽章 → WK-7 错误条统一。
|
||
|
||
### 🔍 2026-08-09 Settings/审计/布局/后端命令走查(3 路并行 · 阶段②第二批)
|
||
|
||
> 详单见 [settings+审计+布局后端走查-2026-08-09.md](./05-代码审查/settings+审计+布局后端走查-2026-08-09.md)。共 **95 项**(Settings+AuditLog29 / layout+sidebar21 / 后端命令45,P0=0/P1=9/P2=32/P3=54)。守 session-role-diagnose-only:仅走查登记,未实施代码。
|
||
|
||
**P1(确定性/安全,优先修)**:
|
||
- [x] **LW-1** ✅ 已修(0554cc1):ConfirmDialog Enter 分支加 BUTTON 排除(焦点在取消不再误触删除)
|
||
- [x] **LW-2** ✅ 已修(7795fe6):update_project 白名单剔除 id/created_at + status 值校验 + path relocate 同款校验 + stack JSON 校验
|
||
- [x] **LW-3** ✅ 已修(7795fe6):update_idea status 值校验 + 拒绝 status=promoted + related_ids/scores JSON 校验
|
||
- [x] **LW-4** ✅ 已修(7795fe6):update_task queue 补 validate_queue + queue/status 一致性校验
|
||
- [x] **LW-5** ✅ 已修(7795fe6):count_by_query 补齐 assignee/queue/parent_id/module_id 维度
|
||
- [x] **LW-6** ✅ 已修(7795fe6):update_field_active(WHERE id AND deleted_at IS NULL) 软删拒改
|
||
- [x] **LW-7** ✅ 已修(7795fe6):evaluate_idea 起始 guard 终态返 Err
|
||
- [x] **LW-8** ✅ 已修(7795fe6):claim_promotion CAS(WHERE id AND promoted_to IS NULL) 防双击重复立项
|
||
- [x] **LW-9** ✅ 已修(7795fe6):create_task/update_task parent_id/move_task_queue 后 recompute_parent_status
|
||
|
||
**P2(体验/数据·32 项)**: 见详单文档(SA-1~8 审计 i18n/脏表单/竞态、LS-2~10 侧栏偏好/小屏布局/审批浮窗/Paginator、BE-CMD-9~23 后端校验/聚合)
|
||
**P3(54 项)**: 见详单文档(SA-9~31 / LS-11~21 / BE-CMD-24~45)
|
||
|
||
> **优先级**:LW-1 ConfirmDialog 安全 → LW-2/3 update 裸奔 → LW-4 queue → LW-5 count/list → LW-6 软删 → LW-8 父聚合。
|
||
> **全系统索引**:前端 13 + 后端 9 命令全走查完成 ✅,剩 crate df-mcp/df-execute/df-project/df-ideas/df-tunnel/df-relay/df-types。
|
||
|
||
### 🔍 2026-08-09 df-mcp + 工具 crate 走查(阶段②最后一批)
|
||
|
||
> 详单见 [df-mcp+工具crate走查-2026-08-09.md](./05-代码审查/df-mcp+工具crate走查-2026-08-09.md)。共 **35 项**(P0=0/P1=2/P2=8/P3=25)。守 session-role-diagnose-only:仅走查登记,未实施代码。
|
||
|
||
**P1**:
|
||
- [x] **MC-1** ✅ 已修(7795fe6):MCP update_project status 保留原值(对齐 update_task 收口)
|
||
- [x] **MC-2** ✅ 已修(4387695):df-project normalize_path 拆 normalize_for_compare/canonicalize_for_store,存库保留大小写(调用点迁移留后续)
|
||
- [x] **MC-3** ✅ 已修(4387695):df-tunnel 文档更正——自动重连已在 src-tauri supervisor 实现(lib.rs:292 轮询+指数退避),避免双重竞争;backoff_delay 改 pub 供 supervisor 复用
|
||
- [x] **MC-4** ✅ 已修(4387695):df-relay 成本评估选文档明示风险 + validate_device_id 最小加固(per-device token 留 Phase3)
|
||
- [x] **MC-5** ✅ 已修(7795fe6):is_success_tool_call 按 result.isError 判定,业务失败不触发写回调
|
||
- [x] **MC-6** ✅ 已修(7795fe6):create_idea priority normalize + create_project/task 拒空名 + bind_directory 降级;evaluate 复用 ScoringEngine 未做(独立口径声明,df-mcp 不依赖 df-ideas 避免重 HTTP 依赖树)
|
||
- [x] **MC-7** ✅ 已修(2026-08-09):df-ideas 自洽性校验(enforce_score_consistency 分档一致性,ARC-260618-01-e 已实施) + df-types Priority::from_i32(0-3/Low 兜底对齐读侧) + script 措辞修正
|
||
- [x] **RLY 附加** ✅ 已修(4387695):token 固定时间比较 + 入站帧 1MB 上限 + 未设 token 改错误退出(不再 panic)
|
||
|
||
**P3(25 项)**: 见详单文档(MCP-7~16 / EX-1~4 / PRJ-2~4 / TUN-2~4 / RLY-2~5)
|
||
|
||
> **全系统走查(阶段②)完成 ✅**——前端 13 模块 + 后端 9 命令 + 全部 crate 已走查登记。进入**阶段③批量打包推进 /advance**。
|
||
### 🔴 2026-08-09 AI 自审/工作流推进链路缺陷(✅ P0×3 已修,2026-10-05 核验销账)
|
||
|
||
> 用户「检查 AI self-review 遇到的问题」触发对工作流推进链路的深度审查。**原结论「三条推进链全部不可用」已过时——P0×3 全部已修**(task_id 注入 workflow.rs:340 + AiNode 自审落库含 agent 模式 + TaskDetail 审批 UI 随 2eea011 审批重设计批落地),核验详录迁 [07-项目管理/todo归档/2026-10-05.md](./07-项目管理/todo归档/2026-10-05.md)。以下原始诊断保留作档案,修复状态见归档勘误。
|
||
|
||
**涉及文件**:
|
||
- `src-tauri/src/commands/workflow.rs`(run_workflow_inner 核心)
|
||
- `crates/df-nodes/src/task_workflow_templates.rs`(三模板)
|
||
- `crates/df-nodes/src/ai_node.rs` / `ai_self_review_node.rs` / `ai_node_helpers.rs` / `human_node.rs`
|
||
- `crates/df-workflow/src/executor.rs` / `dag.rs` / `registry.rs` / `dag_def.rs`
|
||
- `src/views/TaskDetail.vue` / `src/stores/project/workflow.ts` / `src/views/ProjectDetail.vue`
|
||
|
||
---
|
||
|
||
## 🔴 P0 缺陷(3 项,工作流推进 100% 失败)
|
||
|
||
### P0-A task_id 断裂:AiSelfReviewNode 必定失败
|
||
- **位置**:`workflow.rs:295` `executor.run(&runtime_dag, config)` + `executor.rs:153`
|
||
- **现状**:前端传 `config = {}`(TaskDetail.vue:590),`run_workflow_inner` 拿到 `task_id` 但**只存进 WorkflowRecord + 回调闭包 cb_task_id,从未注入传给 executor 的 config**。DagExecutor 构造 NodeContext 时 `deep_merge(config={}, node_configs[id])`,testing 模板节点 config 只含 `{"gate":true}`。最终 `ctx.config` **无 task_id**。
|
||
- **结果**:`ai_self_review_node.rs:100` `ctx.config.get("task_id")` → None → `Err("AiSelfReviewNode 缺少必填参数: task_id")` → 节点失败 → 工作流 failed。
|
||
- **修复**:`run_workflow_inner` 在 `executor.run` 前把 `task_id` 注入 config:`config["task_id"] = task_id`(1 行)。
|
||
|
||
### P0-B AiNode 缺 prompt:in_progress 模板必定失败
|
||
- **位置**:`task_workflow_templates.rs:45-47` `dag.add_node("ai_execute", "ai", json!({}))`
|
||
- **现状**:in_progress 模板 AiNode config 为空对象。注释称「prompt / provider / task_id 均由 run_workflow 全局 config 注入」,但前端传空 config、后端不注入。AiNode 的 `parse_params`(ai_node_helpers.rs:189-200)取 `inputs["prompt"]` > `config.prompt`,两者皆无 → `Err("AiNode 缺少必填参数: prompt")`。
|
||
- **结果**:todo→in_progress 推进链 AiNode 必定报错,任务原地不动,无 AI 产出。
|
||
- **修复**:AiNode 加默认 prompt 兜底(基于 task.description 生成执行方案),或 run_workflow 注入。
|
||
|
||
### P0-C TaskDetail 无审批 UI:testing/done 模板的 HumanNode 审批无法操作
|
||
- **位置**:`TaskDetail.vue`(无 ApprovalDialog 组件)+ `ProjectDetail.vue:353-356`(唯一渲染处)
|
||
- **现状**:工作流 store 的 `startEventListener`(workflow.ts:111-144)收到 `human_approval_request` 会设 `state.pendingApproval`。但**只有 ProjectDetail.vue 有 `watch(() => store.pendingApproval)` 打开 ApprovalDialog**(ProjectDetail.vue:838-841)。TaskDetail.vue 只调 `store.startEventListener()`(TaskDetail.vue:674),**不渲染 ApprovalDialog、不 watch pendingApproval**。
|
||
- **结果**:用户从 TaskDetail 点「工作流推进」进入 testing(in_review→testing 模板含 ai_self_review + human_review)或 done(testing→done 模板含 human)模板,HumanNode 发出审批请求 → `state.pendingApproval` 被设但**无弹窗** → 用户无法批准/拒绝 → HumanNode 等满 30min 默认超时(human_node.rs:34 DEFAULT_TIMEOUT_SECS=1800)→ 工作流 failed。
|
||
- **修复**:TaskDetail 渲染 ApprovalDialog + watch pendingApproval,或将审批弹窗做成全局(独立于 ProjectDetail/TaskDetail)。
|
||
|
||
---
|
||
|
||
## 🟠 P1 缺陷(3 项)
|
||
|
||
### P1-D in_progress 失败无退回信号
|
||
- **位置**:`task_state_machine.rs:156` `regression_target(IN_PROGRESS) => None`
|
||
- **现状**:in_progress 模板失败(AiNode 缺 prompt,P0-B)时,`regression_target("in_progress")` 返回 None → 回调跳过推进。任务**原地留在 todo**,无错误提示、无退回态、无任何信号(回调只 `tracing::warn!`)。
|
||
- **结果**:用户点「工作流推进」→ 后台静默失败 → 任务不动,前端 wfResult=failed 提示但无具体原因。
|
||
- **修复**:AiNode 失败时把错误信息透出到前端(WorkflowFailed.error 已含,但前端 wfFailedHint 只显通用文案)。
|
||
|
||
### P1-E done 模板失败后任务卡 testing 无退回
|
||
- **位置**:`task_state_machine.rs` `regression_target(DONE) => None`
|
||
- **现状**:testing→done 模板(human 节点)若用户拒绝(返回 Err)→ 工作流 failed → `regression_target("done")` → None → 任务**留在 testing**,未退回 in_review。
|
||
- **问题**:done 是终态,无可退态合理,但用户拒绝后应停留 testing 让人工处理,当前无明确信号提示「推进未完成,任务仍在 testing」。
|
||
|
||
### P1-F AiSelfReview 审查空产出
|
||
- **位置**:`ai_self_review_node.rs:129-134`
|
||
- **现状**:若 in_progress 阶段 AiNode 失败(P0-B),output_json 为空 → 自审节点审查占位文本 `"(无产出,仅依据需求审查)"`。
|
||
- **结果**:即使 task_id 修好,无产出的自审也只是空洞审查,无意义。
|
||
|
||
---
|
||
|
||
## 🟡 P2 缺陷(3 项)
|
||
|
||
### P2-G 前端注释误导:「运行时注入」实际无注入
|
||
- **位置**:`TaskDetail.vue:590` 注释「全局 config 留空(节点级 config 由模板/运行时注入)」
|
||
- **现状**:模板只注入 gate:true,运行时(run_workflow_inner)不注入 task_id/prompt。注释承诺与实际不符,误导后续维护者。
|
||
|
||
### P2-H 三模板归一度差:in_progress 纯 AI / testing AI+Human / done 纯 Human
|
||
- **位置**:`task_workflow_templates.rs`
|
||
- **现状**:三模板职责不统一——in_progress 无人工确认直接改状态,testing 有 AI 自审 + 人工,done 纯人工。用户对「工作流推进」在三个状态的体验差异巨大但不透明。
|
||
- **建议**:至少统一「推进是否有人工确认」的预期,或在按钮文案/进度提示中说明当前推进链内容。
|
||
|
||
### P2-I WorkflowRecord 未存 project_id
|
||
- **位置**:`workflow.rs:170` `project_id: None`
|
||
- **现状**:即使 task_id 关联任务(任务有关联 project_id),执行记录 `project_id` 恒为 None。按项目过滤工作流执行记录时无法直接从 workflow 关联项目。
|
||
- **修复**:task_id 有值时反查任务 project_id 填入。
|
||
|
||
---
|
||
|
||
## 验收标准
|
||
|
||
1. task_id 注入 AiNode/AiSelfReviewNode config,自审节点能读到任务
|
||
2. in_progress 模板 AiNode 有默认 prompt,能生成产出
|
||
3. TaskDetail 触发工作流后,HumanNode 审批弹窗正常弹出可操作
|
||
4. 工作流失败时前端显示具体错误原因(非通用文案)
|
||
5. 老工作流(无 task_id/target_status)零行为破坏
|
||
6. cargo check --workspace EXIT 0 + vue-tsc EXIT 0
|
||
|
||
---
|
||
|
||
**🟡 P1**:
|
||
- [x] **SC-260811-P1-1** ✅ 已销账(2026-08-15 核验,1b012bc 覆盖):`task_state_machine.rs:155 shortest_path` BFS 推导 + `task_advance_node.rs:81-84` 非法转换错误信息附加最短路径提示(路径>2 跳时),+6 单测
|
||
|
||
**🔧 既有测试失败修复(2026-08-11)**:累计修 7 项既有失败,df-nodes 175 全过 / df-storage 166 全过:
|
||
- ✅ `ai_self_review_node::clamp_dimension_scores_in_place` 类型保真:区间内整数保持整数(9 不转 9.0),仅越界 clamp——修 parse_review_json_valid_passes_through,同步调 clamps_out_of_range_scores 边界值断言(10 保持整数)
|
||
- ✅ `build_review_prompt` 模板说明文字裸 `<task_requirements>` 与真实标签同名,测试 find 首现误命中行内引用→真实标签加换行锚定定位(`\n<tag>\n`),说明文字标签加反引号
|
||
- ✅ `project_module_repo::setup` async 上下文直接 `blocking_lock()` 触发 "Cannot block the current thread" panic→改用 `ProjectRepo::insert` 异步 API(对齐 service_repo 风格)
|
||
|
||
---
|
||
|
||
|
||
**关联**:本走查与「2026-08-09 TaskDetail 操作按钮缺陷走查」同属 TaskDetail 交互审查线,但本段聚焦 AI 工作流推进链路(后端 + 审批 UI),按钮缺陷聚焦 TaskDetail 自身交互。修复时建议合并处理(都在 TaskDetail + workflow 链路)。
|
||
---
|
||
|
||
# aichat agent loop 静默死亡走查待办(2026-10-02)
|
||
|
||
> 来源:中断根治批次全量走查(正常设计路径无漏 emit,风险集中四类)。P1-2/P0-1/P2-1 本批已修,以下为登记项。
|
||
|
||
### P0 run_agentic_loop 包 catch_unwind ✅已修(2026-10-05 核验:loop 主体 unwind_to_result 包裹,panic 转 teardown_round 补终态,5 单测锁定 mod.rs:3135-3165)
|
||
- **位置**:`agentic/mod.rs` run_agentic_loop 主体(无 catch_unwind)
|
||
- **现状**:任一轮 prepare/stream/finalize/tools 段 panic → task 死亡 → GeneratingGuard::drop 只迁 Idle+emit AiConvStateChanged,**不 emit AiError/AiCompleted**,heartbeat 随作用域死亡——「工具完成后流断+无终止事件」的精确根因形状(前端探测式续跑已兜住后果,此为后端根治)。
|
||
- **修复**:整体包 `std::panic::catch_unwind(AssertUnwindSafe(...))`,unwind 时 emit AiError{error_type:Internal} 再收敛;guard Drop 兜底保留。核心 loop 改动,需谨慎设计+场景回放测试。
|
||
|
||
### P1 conv 删除类静默退出族 6 处补终态事件
|
||
- **位置**:`agentic/mod.rs:417/:1316/:1379/:1437/:1593/:1423`、`stream_relay.rs:520-525`(MidStream 保文时 conv-deleted 跳过 teardown emit,最刺眼)
|
||
- **现状**:生成期间会话被删,裸 return 仅 guard Drop 迁 Idle,无终止事件。
|
||
- **修复**:收敛到 conv-deleted 也 emit 带 conv_id 的 AiCompleted(incomplete) 或等价终态语义事件;至少 stream_relay.rs:525 处补 teardown。
|
||
|
||
### P2 审批超时惰性收敛改主动任务
|
||
- **位置**:`agentic/approval_timeout.rs:5-6`(cleanup_expired_approvals 仅 try_continue_agent_loop 入口调用)
|
||
- **现状**:用户不点任何按钮,超时审批永久占位、会话永远停审批态;注释语义(自动转拒绝)与实现(下次交互才转)不符。
|
||
- **修复**:审批挂起时 spawn timeout 定时任务到点主动 cleanup+emit(现有函数可复用)。
|
||
|
||
### 附:F2 兜底前移(可选)
|
||
- `ai_chat_stop` 的心跳 60s stale 判死+emit AiCompleted 兜底只在用户点停止时运行;可在 loop spawn 时自带一份,panic 死 loop 无需用户点停止也能收敛。
|
||
|
||
# aichat 三路走查增量待办(2026-10-02 深夜)
|
||
|
||
> 来源:上下文管理批收口期 rev-backend/rev-frontend/rev-crates 三路走查(历三次会话重启后续跑完成)。**全文与批次归并建议见 `docs/05-代码审查/aichat三路走查报告-2026-10-02.md`**。以下为可执行登记,开工以现场源码为准。
|
||
|
||
### 批次2(后端高危)并入项
|
||
- [x] P0 压缩 conv_id 分裂【已亲核实锤】:`commands/chat.rs:1734` 起 cid 切 active——压缩后台会话时目标 conv compressing 永久卡死 + active 会话被插入他人摘要入库。修::1734 改 `cid = conversation_id.clone()`(约 4 行,首位) ✅已修(2026-10-04 核验:压缩路径全函数用 conversation_id,零 active_conversation_id 引用,注释含修复说明)
|
||
- [x] P0 V21 迁移 COUNT 幂等窗口:`df-storage/migrations.rs:481-488,570` 批次中途崩溃→剩余对话永不迁移但版本号补齐。修:按对话进度标记替代全局 COUNT ✅已修(2026-10-04 核验:已改逐对话进度判定——批事务保证对话级原子,已落库数=JSON 消息数即跳过,重跑只补未迁对话)
|
||
- [x] P1 conv delete 不停 in-flight loop:`commands/conversation.rs:608-640` 无 stop_flag/epoch bump——zombie 复活+审批吊死。**与上方「conv 删除族 6 处」同域合并做** ✅已修(2026-10-04 核验:删除路径全链齐备——tombstone deleted_convs 先于 DB 删+stop_flag/notify/epoch bump 同锁停 in-flight loop+级联停子代理+审批 retain 清理+conv_states/per_conv/save_locks/semaphore 全量摘除+loop_was_alive 时 emit_ai_completed_once 单点补终态事件(带 epoch 守卫天然防重复))
|
||
- [x] P1 只读结果缓存无写失效:`audit/cache.rs` 写后读回过期内容。修:per_conv 脏标记,写后整体失效 ✅已修(2026-10-04:PerConvState 新增 readonly_cache_floor 失效下界——非只读工具 completed 回填后推进到 messages.len(),find_cached_readonly_result 扫描 skip(floor) 过界即脏;4 个写执行回填点全接入(Low 并行/trust 放行/boundary 放行/ai_approve 审批后)+min(len) 钳制防索引漂移+单调 max;ai 域 608 测试全绿含 2 个新增锁定测试)
|
||
- [x] P1 OpenAI 流式 error 帧被 choices 必填整帧丢弃:`df-ai/openai_helpers.rs:193-203`(无声截断)+ 同批 serde 结构错误判 Retryable(`anthropic_compat.rs:629`/`openai_compat.rs:527`) ✅已修(2026-10-04 核验:OpenAiStreamChunk.choices 改 #[serde(default)]+error:Option<Value> 字段提取,apply_openai_sse 识别 error 帧返 error 载荷由 stream_llm 发 AiError;双协议非流式改 text 先取后 from_str 分层——读取中断(is_decode)判 Retryable,JSON 结构错判 Fatal 防确定性失败白烧重试预算)
|
||
- [x] P1 sanitize 合并连续同 role 丢多模态 parts:`df-ai/context/sanitize.rs:406-425` 带图消息图对 LLM 隐身。修:合并分支 extend parts ✅已修(2026-10-04 核验:ensure_sequence_legal 合并分支已含 `if let Some(parts) = m.parts { last.parts.get_or_insert_with(Vec::new).extend(parts) }`——纯图空 content 消息的 parts 随合并迁移,图不再隐身)
|
||
- [x] P2-2 maybe_auto_compress protect_start 跨锁过期切片 panic:`context_lifecycle.rs:118` 加 `min(len)` 钳制(一行,与 F2 前移同域) ✅已修(2026-10-04 核验:第二段锁内 `let cut = protect_start.min(msgs.len())` 钳制已在,注释明确记载跨锁窗口消息变短防御,与 compress_old_messages 内部钳制口径一致)
|
||
- [x] P2-3 try_continue_agent_loop 裸 emit 绕过 emit_ai_completed_once:`agentic/helpers.rs:100/:171` 占位 tool_result 与 pending 残留 ✅已修(2026-10-04 核验:两处非续跑分支(!should_continue 与 !still_generating)均改走正典 emit_ai_completed_once(零 token+notify=false),随出口终态化占位 tool_result+清 pending_approvals,注释记载防 __PENDING__ 占位残留)
|
||
|
||
### 批次3(前端体验)并入项
|
||
- [x] P1 后台审批/授权事件被 isCurrent 丢弃→会话挂死:`useAiEvents.ts:94-123` !isCurrent 分支对 ApprovalRequired/DirAuthRequired 放行(与 P2-5 审批数组 per-conv 合并同域) ✅已修(2026-10-04 核验:isGlobalApprovalEvent 白名单(AiApprovalRequired/AiDirAuthRequired)+isCurrent 守卫改双条件 `!isCurrent && !isGlobalApprovalEvent(event)`,审批挂起跨会话放行归口 per-conv 待审批集合)
|
||
- [x] P1 switchConversation「对话不存在」兜底漏置 activeId:`useAiConversations.ts:294-309` 补一行(视图/高亮/发送目标三重错配) ✅已修(2026-10-04 核验:兜底新建路径已含 `state.activeConversationId = created.id` 置位+持久化,注释记载旧 id 残留致 isCurrent 误路由;另附 P3-7 noCreateFallback 程序化跳转分支)
|
||
- [x] P2 看门狗 legacy/per-conv 双轨三错配:useAiSend.ts:169/:241/:512 统一迁移传 convId + `_resumeAttempts` 收尾清(债务本就要还) ✅已修(2026-10-04 核验:regenerate(:183)/editMessage(:259)/stopChat(:512+)三处均已传 per-conv convId 重置/清理看门狗,stopChat 收尾 clearResumeAttempts(activeConversationId),注释明确记载「不再落 legacy 单 timer fallback」)
|
||
- [x] P2 _lastDeltas 双路径漏清:useAiEvents.ts:96-115/:154-161 补 clearLastDelta ✅已修(2026-10-04 核验:后台终止分支(:217)与停靠卡归集分支(:131)均补 clearLastDelta,前台收尾 cleanupTerminatedConversation 亦有显式清理,注释记载防残留记录误丢下轮同内容 delta)
|
||
- [x] P2 removeGoal 不回写 store/不回滚:TopBar.vue:530-539 对齐 withConvOp 模式 ✅已修(2026-10-04 核验:removeGoal 已回写 `conv.pinned_goals = next`(注释 UX 走查-对话域 B4),防 loadGoals 重读旧列表复活已删目标)
|
||
- [x] P2 forceConverge 收敛/错误气泡缺 activeId 守卫 ✅已修核验销账(2026-10-05):per-conv 触发守卫已在 forceConverge 入口(会话已删除或已收敛即清态早退 useAiStream.ts:96-103)+补气泡双过滤(仅 `!convId || convId === activeConversationId` 才 push,:138-139,后台会话静默收敛气泡不错位)
|
||
|
||
### 机械批(可独立小批)
|
||
- [x] remote_bridge 6 处 + agentic/mod.rs 4 处裸 emit 换 emit_ai_chat_event ✅已收核验销账(2026-10-05):grep 全库 `\.emit\("ai-chat-event"` 仅剩正典 event_bus.rs:87 本体+注释+有意分路的 completed_once(mod.rs:2588 注释保护),remote_bridge 已全走 publish_event/emit_ai_chat_event 双写正典——DRY-B #1 批次顺带收口,文档滞后案
|
||
- [x] i18n searchFilesBlocked 死键裸 @ ✅已修(2026-10-04 狗粮实证批⑤:zh-CN/en aiChat.ts 裸 @ 改 @ 转义,文档滞后案,2026-10-05 复核确认)
|
||
|
||
### 登记观察(定级前先核)
|
||
- [x] model_fetch 空列表 Ok([]) 上层写回清空模型池 ✅已修(2026-10-03 N1):provider.rs 空守卫跳过写回+前端 toastFetchEmpty 同语义守卫
|
||
- [x] save_conversation needs_full_rewrite 复核 ✅已核+已修(2026-10-03 N1):实锤增量/无变化路径写库期间新置 dirty(压缩 mark)被 advance 无条件误清→改动滞留内存;改 advance_persisted_count(new,full_rewrite_applied) 仅全量清+新测试锁死;secret.rs 仍未走查
|
||
- [x] authz_debug 残留 ✅已清(2026-10-03 N1):全仓 grep 零残留(chat.rs/state.rs 注释提及已删)
|
||
|
||
# 子代理调度走查(2026-10-03 两路,详情 temp/走查-子代理{UX,调度后端}-2026-10-03.md)
|
||
|
||
> 前端 13 项(P1×2/P2×4/P3×7) + 后端 P1×1/P2×3/P3×8;后端报告含 6 点「确认无恙」防重查。
|
||
|
||
- [x] P1 分离窗下 TaskDrawer 关联会话死点击:openConversation detached 分支无跨窗信号不聚焦(useAiConversations.ts:661) ✅已修核验销账(2026-10-05):openConversation detached 分支已 emitDetachedOpenConversation 跨窗信号+分离窗 handleDetachedOpenConversation 承接切换+not_found toast 落承接窗,注释明确记载 UX走查 P1-1
|
||
- [ ] P1 子代理运行期切回父会话 spawn 卡「已完成」幽灵态:回载 parseConvMessages 恒标 completed+运行期零事件(useAiConversations.ts:230) ——半修(2026-10-05 核验):回载态判定已修(toolCalls status 改 `toolResultMap.has || !convGenerating ? completed : running`,运行期回载不再恒 completed);剩「运行期零事件」半(子代理运行事件仍不推父会话视图)待批
|
||
- [x] P1 后端 外层 960s 超时 drop 子循环 future→统一出口全跳过(报告蒸发+注册表泄漏+子会话滞留):deadline 检查下沉 stream chunk 循环或 select 超时分支特殊化补 AiAgentFinished(truncated)(audit/mod.rs:306) ✅已修(2026-10-05 核验:audit/mod.rs:326-329 子代理外层 deadline=SUB_AGENT_WALL_TIMEOUT_SECS+60 缓冲,循环内以截断报告优雅收尾非硬腰斩,「报告蒸发」注释原文在案)
|
||
- [x] P2 rejected_tools 前端丢弃不可扫描:完成卡收字段+warn 色 chip(useAiEvents.ts:70) ✅已修(2026-10-05 核验:aiShared.ts:630 rejected_tools 字段+MessageList:1453 warn chip「工具名×次数」+title 全清单)
|
||
- [x] P2 完成卡纯内存重启蒸发:切换/挂载按 origin='sub_agent' 回补(aiShared.ts:630) ✅已修(2026-10-05 核验:aiShared.ts:677 ai_sub_agent_list 反查重建,轨迹存在即视为 completed)
|
||
- [x] P2 完成卡恒贴底时序漂移:按完成轮次桶插入(MessageList.vue:1080) ✅已修(2026-10-05 核验:renderItems 内按 finishedAt 落桶插桩,「不恒贴消息流最底部」注释在案)
|
||
- [x] P2 轨迹浮层无身份标识:头补 res.title/任务书首行(MessageList.vue:1584) ✅已修(2026-10-05 核验:agentPeekSubject{agent,convTitle,task,taskFull} 四字段+任务行取子会话首条 user 消息首行)
|
||
- [x] P2 后端 白名单执行期不拦 Low 工具:allowed 随子循环传入 process_tool_calls(audit/mod.rs:814) ✅已修(2026-10-05 核验:audit/mod.rs:217 P2-1 执行期白名单判定纯函数+whitelist-clamp 拒绝语义「spawn 时被裁剪或不存在」人话提示)
|
||
- [x] P2 后端 父删除级联孤儿轨迹照落库 ✅已实施核验销账(2026-10-05):CascadeStopForm::Delete 形态已落地(sub_agent.rs:268 cascade_stop_children_locked,行282 deleted_convs.insert 同锁补标记,与出口 alive 判定互斥注释在案;出口 sub_agent.rs:551-555 见标记即放弃落库防空壳复活)——文档滞后案
|
||
- [x] P2 后端 S4 反查 LIMIT 1000 先截断后过滤:匹配条件下沉 SQL 或辅助索引(audit/record.rs:315) ✅已修(2026-10-05 核验:P2-3 task_id 预筛下沉 SQL——result LIKE 参数化预筛缩小窗口,精确判等仍在 Rust 侧 match_task_audit_row,「禁裸 LIKE 判等」不破,预筛只多放不漏放+单测锁定)
|
||
- [x] P3×15(前端7+后端8):✅(2026-10-05 销账核验:15 条实际全部已落码或已缓批登记——deny envelope 人话渲染(parseDenyEnvelope+deniedTool i18n)/浮层 Esc(closeAgentTraceOnEsc+切会话 closeAgentTrace)/spawn_agent 本地化(spawnAgentPrefix zh/en)/卡 loading(agentPeekLoadingId spinner)/停止标「已取消」(stop_kind 结构化+fallback 启发式)/后台完成通知(agentFinishedToast)/已删会话静默新建(uf1 noCreateFallback)/空收敛降级(dx1 empty_convergence)/流后取消补 envelope(P3-3)/bypass 连带解除黑名单(P3-4 PathBypass 三态分流)/落库元数据错位(P3-5 SaveMetaOverride)/peek 校验(agentFinNoTrace 禁点+title)/事件广播噪音(P3-2 文档补全确认)——todo 行未勾属滞后;唯 AiAgentStarted 缓批「子代理运行面二期」+并发配额挤兑缓批已立项)——见两报告 P3 节
|
||
|
||
# 子代理深查两路(2026-10-03 晚,详情 temp/深查-子代理{AI效果面,x上下文管理交叉面}-2026-10-03.md)
|
||
|
||
> 与上节 25 项零重叠(报告尾附排除对账)。修复批:四路走查修复收口后,确定性项先行,需拍板项进拍板集。
|
||
|
||
- [x] P1[确定性] 子代理指引真空:父会话实测蒸馏的四段工具纪律(read_symbol 优先/URL 三工具纪律/重复调用检测/get_app_config)未注入子代理 system prompt,而白名单缺省下发 25+ Low 工具,主会话已根治的翻车模式(一次死磕烧 1/3 预算)会在子代理原样复发;修法=抽共享指引段同源拼接 ✅已修(2026-10-05 核验:prompt.rs sub_agent_tool_discipline_section 同源拼接,sub_agent_system_prompt 内引用,obscura 交互条款已在共享函数内裁剪)
|
||
- [ ] P1[需拍板] 熔断无收尾轮:max_rounds 打满是常态,截断时父拿到「末轮思考独白」而非报告;修法=熔断触发补一次无工具收尾 LLM 调用(涉预算策略)
|
||
- [ ] P1[需拍板] 报告被视图压缩吞掉:summarize_tool_results 无新近度豁免,报告 envelope>2KB 下一轮即被 JSON 分支折叠(512 字符),父 LLM 从未见过报告全文而 DB/前端卡是全文,追问细节答不上;涉上下文策略(stall_detector.rs:278-350/context_helpers.rs:461-513)
|
||
- [x] P2 max_tokens=8192 截断零信号:finish_reason=length 被通道层按正常完成吞,报告腰斩仍标 completed[确定性可修] ✅已修(2026-10-05 核验:RoundOutcome::Continue 携 truncated_by_max_tokens 全链穿透,收敛时追加「⚠ 回复因 max_tokens 上限被截断」系统提示 mod.rs:1915-1925)
|
||
- [x] P2 空回复静默假成功(子代理侧) ✅已修(2026-10-05 核验:sub_agent.rs:384-397 末轮空白降级 Truncated+stop_kind=empty_convergence,不再 Completed+空报告失真;主循环侧同语义归无人值守 P2 批)
|
||
- [x] P2 任务书=首条 user 消息,超预算时第一个被逐出且子代理无目标钉扎(主循环有,子循环显式传空 sub_agent.rs:594)[确定性可修] ✅已修(2026-10-05 核验:P2-2 任务书钉扎——<task> 全文并入 system prompt「上下文裁剪不可逐出」段)
|
||
- [x] P2 预算三值(轮次/token/900s)不告知子代理,系统提示词硬编码「默认最多 6 轮」[确定性可修,文案] ✅已修(2026-10-05 核验:sub_agent_system_prompt(max_rounds) 动态注入三值实际生效值+防回归断言禁「默认最多 6 轮」文案回潮)
|
||
- [x] P2 Fatal 错误细节被吞(RoundOutcome::Fatal 无 payload),父拿无因报告无法针对性重派[中小扩参] ✅已修(2026-10-05 核验:sub_agent.rs:897 P2-4 Fatal 携最后诊断文本进出口报告,封顶防超长污染)
|
||
- [ ] P2 namespace 10MB 全局 LRU 淘汰:报告蒸发为「重新调用」死路+多代理共池互踩 ✅设计完成(2026-10-04 [设计文档](./02-架构设计/专项设计/namespace淘汰治理-设计-2026-10-04.md)):pin 机制+EvictionLog 富提示(替代裸 EVICTED_PLACEHOLDER)+owner 软隔离三招,零 schema 变更;2 拍板点(pin 上限保护/报告外默认 pin 范围),约 0.5-1 天
|
||
- [ ] P2 被拒事实父上下文仅报告尾段单副本,LLM 压缩 prompt 无保留指令[需拍板]
|
||
- [ ] P2 完成卡(前端全文)与父上下文(压缩)双轨无「已消化」降级机制 ✅设计完成(2026-10-04 [设计文档](./02-架构设计/专项设计/子代理完成卡已消化降级-设计-2026-10-04.md)):勘察修正——重启回补已存在(aiShared.ts:677 ai_sub_agent_list 反查重建),设计聚焦 digested 标记(KV 持久)+卡降级交互+ai_sub_agent_trace 只读工具(LLM 追问自助通道,兼为 namespace 蒸发兜底);2 拍板点,约 1-1.5 天
|
||
- [ ] P2 子会话缺 maybe_auto_compress 层+预算恒 128k 默认[需拍板]
|
||
- [ ] P3 spawn task 全文永续无瘦身/8KB 截断文案对子代理语境失真/环境画像日期不注入/报告 8K 头尾截断恰切证据区/temperature 0.7 共享/model 回退不回报/namespace 挤兑/一次性语义未向父声明/报告约定缺「文件路径原样保留」/语言无 lang 参数——见两报告 P3 节
|
||
- [x] ~~观察 uf2 修复引入:取消判定 summary.includes('已被取消') 中文子串启发式,根治=后端透出结构化 stop_reason/取消标志字段~~ ✅已根治核验销账(2026-10-05 本批,文档滞后案):结构化字段已全链落地——后端 SubAgentStopKind::Cancelled 两处取消检查点同点产出(sub_agent.rs:716/824)+ AiAgentFinished.stop_kind 事件透出(serde 单测锁定)+ 前端 agentFinStatusText 结构化优先(MessageList.vue:1127,cancelled/max_rounds/wall_clock/token_budget 细分直达语义);中文子串判定降级为旧后端兼容性回退(无 stop_kind 字段才走),防御性保留非主路径
|
||
|
||
# 无人值守长任务(2026-10-04 用户拍板方向,设计先行)
|
||
|
||
> 用户拍板:审批类(S2-B 真审批通道)延后不做;产品主线=任务规划一次性确定边界后,无人值守、自主无干预、稳定完成长任务,用户体验优先零打断。追加两维度:效率(完成快+tokens 高效)、可观测可控(进度花费看得见,暂停纠偏接管控得住)。
|
||
> 设计文档已定稿:docs/02-架构设计/专项设计/无人值守长任务-设计-2026-10-04.md(257 行,含效率/可观测可控补遗两章),拍板点 13 项各带建议。
|
||
> 缺陷靶心分析:temp/深查-无人值守稳定性缺陷-2026-10-04.md(P1×5/P2×7+效率 5+观测可控 5,接驳点已标注)。
|
||
|
||
- [ ] 设计评审后按分期实施(P0 边界模型+旁路主干 → P1 自愈+通知 → P2 断点续跑+信任分级)
|
||
- [ ] P1 缺陷随分期消化:~~①审批超时取消后循环永不恢复~~ ✅①已修(2026-10-04 核验:cancel_expired_approval 第6步清幽灵态迁回 Idle+第7步安全停靠 AiTaskParked+NeedAction 通知,audit/mod.rs:530-555) ②spawn_agent 注册 Medium 无人值守动线停摆(归 P0 旁路) ③~~MidStream 断流=整任务终止~~ ✅已修(2026-10-05 核验:RoundOutcome::MidStreamSaved 分支 emit_task_parked 安全停靠+NeedAction 托盘通知「midstream」原因,mod.rs:1146) ④~~轮级重试 30s 总预算全候选共享无跨轮重入~~ ✅已修(2026-10-05 核验:任务级跨轮重入已落地——ROUND_REENTRY_MAX=3 指数退避 60/300/900s,Continue 成功连续失败归零,预算耗尽转停靠 mod.rs:1071/1124/1162) ⑤重启后任务静默失踪(归 P2 断点续跑)
|
||
- [ ] P2 缺陷登记:panic 收尾伪装正常完成无通知/context_length Fatal 无降级/空回复静默假成功/前端 3 次探测强制收敛与后端分裂/checkpoint 审计只增不清
|
||
- [ ] 效率面:模型无轮内分级/警示消息打断前缀缓存/换参同语义死磕不计数/子代理串行 await/token 花费中途不可查/纠偏只能排队不能注入/预算中途调整不可达(归设计补遗两章分期)
|
||
|
||
# 后续规划方向(2026-10-02 用户口述,不分先后)
|
||
|
||
> 用户指令:完成 ai-chat 核心后,以下 9 项纳入后续规划,先记录后逐渐开展。此处为方向索引,开展时各自立项细化。
|
||
|
||
1. 打造核心 ai-chat 及上下文管理能力(当前上下文管理批即此项主线,持续演进)
|
||
2. 知识库、技能、记忆的管控管理(知识链路 B 系延伸;candidate 晋升/跨会话召回 C1/记忆空壳定案后续)
|
||
3. miniapp(关联 df-miniapp 跨端三层,Phase3 后端闭环已有,剩真机联调+UI+token 生产级)
|
||
4. 接入飞书 bot(启动定位=调度中枢的飞书侧动线,P0 打包+u-switch 接入已在本批)
|
||
5. devflow 云端化部署(分布式 ai 办公协同)
|
||
6. 接入企微
|
||
7. UX 体验交互体验(批次3 及后续 UX 批持续线)
|
||
8. 内置数据库、远程服务器连接能力(与代理工具生态 mysql-proxy/ssh-proxy 等整合)
|
||
9. 远程内网设备文件程序管控(中继+代理 client,内置于 u-desk/devflow 或全新设计,关联 u-relay)
|
||
|
||
# 使用数据分析深查(2026-10-04,logs+DB 实证,详情 temp/使用数据分析-1004/)
|
||
|
||
> 89 会话/15126 消息/9398 工具执行(3.5 个月真实使用);全文与 out1~out7 中间数据见分析目录。修复以现场源码为准。
|
||
|
||
- [x] P0 git.rs:161 字节切片撞 UTF-8 边界 panic(中文 diff 必炸,13:44 两次实证) ✅已修(分析当场,回退字符边界)
|
||
- [x] P1 Temperature 原样透传不支持的模型(sensenova 等仅允许 1,9 次 400 实证)——按模型适配/省略 ✅已修(2026-10-04:ModelConfig 加 temperature_supported 字段+presets 标 sensenova-6.7-flash-lite=false+启发式 sensenova 前缀判定;openai/anthropic 双协议转换层不支持即省略字段;df-ai 560+df-ai-core 33 测试全绿含新增锁行为测试)
|
||
- [x] P1 压缩无 memoization:view-only 压缩 2280 次中 369 组同内容反复压(最坏 54 次),prompt 1.2 亿 tokens=completion 115 倍——同内容哈希跳过 ✅已修(2026-10-05 核验:PerConvState.tool_compress_cache 内容哈希→压缩结果,mod.rs:1682 接线,双调用点主循环+子代理,agentic 122 测含)
|
||
- [x] P1 标题采到 assistant 首句('信息已足够。让我看一眼...'/'<details><summa')——标题源取 user 首条 ✅已修(2026-10-05 核验:title.rs:62 两段式采样——user 首条必进锚定主题+其余按序补足 6 条)
|
||
- [ ] P2 checkpoints.token_total 语义失效(p50=120 vs 真实数万级,差 3 个量级)【归 V49 schema 迁移批】
|
||
- [ ] P2 ai_conversations.status 只有 active/compressed,incomplete/error 终局未建模入 status(17/89 停在 tool 结果无收尾,无法统计未完成率)【归 V49 schema 迁移批】
|
||
- [ ] P2 审计表无执行耗时字段(requested→executed 混入审批等待,耗时统计不可信)【部分缓解:AuditLog.vue:71 ⏱ durationLabel 已显示且诚实标注「审批→执行」;纯执行耗时独立字段归 V49 schema 迁移批】
|
||
- [ ] P2 messages blob 双存储冗余(89/89,单会话最大 1.7MB)【归 V49 schema 迁移批】
|
||
- [x] P2 日志无轮转且放 %TEMP%(系统清理无声删除,建议迁数据目录+按大小轮转) ✅已修(2026-10-05:logging.rs 双进程共用——落点迁 app_data_dir/{identifier}/devflow-trace.log+启动期 5MB 轮转保留 .1+旧 %TEMP% 日志迁移清理,3 单测锁定)
|
||
- [ ] 观察自动执行模式架空审批(auto 系 81%/人工 15%,auto_takeover_all 含 run_command 886 次)——产品语义与 S2/信任分级联动
|
||
- [ ] 观察进化系统只写不读:knowledges 1033 条/embedding 全 NULL/83.6% 零复用/knowledge_search 仅 5 次
|
||
- [ ] 观察多模态未走通:贴图落"[图片已忽略]"占位,实际靠 run_command 外部 vision CLI 绕路
|
||
- [ ] 观察编排面零使用:workflow/node_executions/ai_plans 等 9 张表全 0 行;四会话分工 origin 89/89 全 NULL
|
||
- [ ] 观察数据目录 ~640MB(主库 140.5MB+dev 库 71.2MB+4 份手工备份 346.9MB 散落)
|
||
|
||
# ai-chat UX 走查第五轮(2026-10-05,可访问性视角,详情 temp/UX走查-aiChat缺陷-2026-10-05.md)
|
||
|
||
> Web Interface Guidelines 视角(子代理全量走查+主代复核)。前四轮零重复:本轮全是「键盘/读屏/触屏可达性」层,与历轮「交互逻辑」层正交。
|
||
> 计数:P2 × 4 / P3 × 9(P1 零)。
|
||
|
||
- [x] P2-M1 MessageItem 三操作按钮 hover-only:键盘聚焦不可见+触屏不可达(MessageItem.vue:129-136,217-219)——补 :focus-within 显形+aria-label,一处 CSS ✅已修(2026-10-05:.ai-msg-user:focus-within 两选择器入组+编辑/复制按钮补 aria-label)
|
||
- [x] P2-T1 TopBar 四面板徽章 span@click 键盘不可达(TopBar.vue:138 等,面板行为层已完备仅入口缺失)——改 button 或补键盘三件套 ✅已修(2026-10-05:四徽章 span→button type=button+.ai-tool-badge 归零按钮默认样式+focus-visible 描边)
|
||
- [x] P2-T2/T3 TopBar 约 8 处交互 div/span(@click 无键盘处理):provider 切换(:30)/审批徽章(:18)等——统一改 button ✅已修(2026-10-05:审批徽章 div→button+provider-bar div→button,两处 CSS 归零+focus-visible;余 model select 原生可聚焦,more 菜单已是 button)
|
||
- [x] P2-G1 流式输出无 aria-live:读屏用户对 AI 回复零感知(MessageList.vue 全文零命中,唯一例外 ApprovalOverlay role=alert)——容器加 role="log" aria-live="polite" ✅已修(2026-10-05:.ai-messages 容器加 role=log+aria-live=polite)
|
||
- [x] P3-M2/G4 按钮仅 title 无 aria-label(MessageItem:129-137/ChatInput 仅 :53 一处) ✅已核验(2026-10-05:MessageItem 编辑/复制按钮 aria-label+svg aria-hidden 已齐,残留 ChatInput :53 一处,下批顺带)
|
||
- [x] P3-G2 装饰性图标缺 aria-hidden ✅已修(2026-10-05 机械批:ps1 正则 `(?s)<svg(?![^>]*aria-hidden)` 批量插入 193 处(22 文件含多行开标签;前置核验全库零 role=img/<title>/aria-label 语义型 svg;已有 10 处负向前瞻跳过),vue-tsc EXIT 0)
|
||
- [x] P3-G3 滚动容器/弹层无 overscroll-behavior ✅核验销账(2026-10-05):桌面 Tauri WebView2 无移动端橡皮筋回弹/滚动链穿透问题,现状即合理,不引入
|
||
- [x] P3-G5 MessageList user-select:none 9 处 ✅核验销账(2026-10-05):逐处核对 9 处全为交互控件(bubble-toggle/time-sep/归档段折叠条/trace 折叠头/think-pill/步骤行/retry chip/agent-fin 完成卡头),零误伤正文选择,现状即合理
|
||
- 好评:ConversationSidebar/TaskBoundaryCard/DirAuthDialog 经前四轮修复质量扎实;无 transition:all/autoFocus 滥用等反模式
|
||
|
||
# ai-chat UX 走查第四轮(2026-10-04,增量深查,详情 temp/UX走查-aiChat缺陷-2026-10-04.md)
|
||
|
||
|
||
|
||
> P1 零;P2×7/P3×11;已修三轮清单已硬排除。修复批开工以现场源码为准。
|
||
|
||
- [x] P2-A2 边界配置卡目录白名单零校验 ✅已修(词法校验+就近红字),坏路径拖到运行期才暴露(TaskBoundaryCard.vue:163)
|
||
- [x] P2-A1 边界拉取失败静默降级 ✅已修(failed 态+授权禁用+重试)默认表单,一次授权即静默覆盖原授权(TaskBoundaryCard.vue:126+useTaskBoundary.ts:25)
|
||
- [x] P2-A4 熔断时求助卡被停靠卡顶替 ✅已修(AiTaskParked 保留 pendingHelp),help options 决策项丢失(useAiLifecycleEvents.ts:87,239)
|
||
- [x] P2-A3 generating 锁编辑连带锁死 ✅已修(清除解锁+confirm)「清除边界」(收权被盖,纯前端限制)(TaskBoundaryCard.vue:77,232)
|
||
- [x] P2-B1 非视觉模型贴图发送前零感知 ✅已修(modalities 判定+警示 chip),静默丢图(ChatInput.vue:185,modalities 全链路未消费;数据实证三连手敲重试)
|
||
- [x] P2-B2 纯发图+非视觉模型 ✅已修(前后端双闸拒纯图),占位串当用户消息喂模型跑偏一轮(chat.rs:789)
|
||
- [x] P2-B3 error_type 大面积 Unknown ✅已修(classify_permanent→ProviderConfig CTA),永久错误也显「重试」必再败(MessageList.vue:688+mod.rs:596)
|
||
- [x] 回归疑点 App.vue:227 全局快捷键 ✅已修(双文件 target 守卫+AIChat:339)(Ctrl+I/N/R/L/K/B)无 target 守卫,仅 Esc 有(走查复核提请,修时验证)
|
||
- [x] P3×11(文案四条已顺带修 ✅:fatal 矛盾措辞/cancelled 续跑 CTA/high 裸串/TopBar ellipsis)+~~A5 停靠卡 scrollIntoView 无效~~✅(2026-10-05 本批:删 no-op 调用+cardRef/nextTick/watch 残留引用清理——卡挂输入区上方常驻可见非消息流,原注释意图错位)+~~A9 TopBar 进度徽章前 4 轮盲区~~✅(2026-10-05 本批:mod.rs 进度 emit 条件加 `|| iteration == start_iteration`——首轮即发快照,起步阶段「在干活」信号不再缺席,托盘场景唯一进度面补齐)+余 7 项本批全清(2026-10-05):~~A8 双进度矛盾~~✅(TopBar 快照徽章在输入区 agentic 实时进度可见时隐藏——`v-if="taskProgress && !agenticProgressVisible"`,同口径 computed 对齐 AiChat showAgenticProgress;快照徽章只服务托盘/静默期场景)+~~A10 边界盾标跨窗空洞~~✅(ConversationSidebar onMounted 补拉 hydrateBoundaryBadges——对列表全部会话拉边界镜像,已有条目跳过省 IPC,治分离窗授权/重启后盾标全消失)+~~A11 切会话丢边界编辑~~✅(TaskBoundaryCard hasDirtyEdits computed 比对表单 vs 镜像,脏编辑时切会话不静默重填保留编辑+琥珀提示条 dirtyKept)+~~A12 预算校验不定位+无防重~~✅(parseBudget 记 budgetErrField 错误字段,红字着色具体输入框+toast 指名 budgetInvalidField;confirm/clear 加 confirming in-flight 禁用防双击双 IPC)+~~A13 echoSummary high 裸串~~✅(前批已修:riskHigh 分支复用 agentTrace.riskHigh)+~~B4 压缩静默~~✅(useAiContext autoCompressedFlash ref:AiAutoCompressed 置 true 4s 自灭,AiChat 输入区上方 hint 行显示「上下文已自动压缩」aiChat.autoCompressed zh/en——不打断 LLM 流不弹 toast)+~~B5 惰性渲染评估~~✅(评估后最小实施:MessageList collapsedPreviewHtml——折叠态长消息(>1500字)仅渲染前 800 字符预览,全量 markdown 渲染延迟到展开瞬间,治长会话切换/挂载成本线性涨;虚拟滚动回滚维持不做)
|
||
|
||
# 后续规划登记(2026-10-04 用户口述)
|
||
|
||
- 各模块 UX 走查(全模块逐域走查,ai-chat 已做完四轮,剩余:项目/任务/工作流/想法池/知识/设置等域)——待令启动,建议逐域分批
|
||
|
||
# DevFlow agent 狗粮实测短板(2026-10-04,84cb104c 会话数据实证,登记待排批)
|
||
|
||
> 当日 ~810 次工具调用;主循环配置 max_iterations=0(不限)实证 225 轮零触顶;子代理 spawn max_rounds 6 默认/模型自给 10→20(上限 20)。
|
||
|
||
- [x] P1 工具纪律失守:read_file 本支持 offset/limit 分页+search(工具描述明示)但模型不用,67+ 次 run_command PowerShell/python 切片绕道读文件——大文件 read_file 自动截断返回并带「用 offset/limit」引导+系统提示词禁 run_command 读文件 ✅已修(狗粮批 a6a49ce8:prompt.rs file_reading_guidance 中/英双版,父 system_prompt 两语言+子代理纪律段同源拼接)
|
||
- [x] P1 patch_file old_text 未命中 28%(38/136,全部「未找到目标文本」):加空白归一化回退匹配(唯一命中自动采用并提示),工具描述教「3-5 行锚点小步 patch」 ✅已修(在飞批:old_text 精确未中自动空白归一化重试,唯一命中整行区间替换+warning 注明,276 行含测试)
|
||
- [x] P2 子代理默认 max_rounds=6 偏小,父试探性提到 10/20:默认提到 12 或按任务书长度给建议值 ✅已修(2026-10-05:SUB_AGENT_DEFAULT_MAX_ROUNDS=12+schema/greeting 文案三处同步,spawn_agent 3 测+sub_agent 19 测全绿)
|
||
- [x] P2 验证烧轮:全量 cargo check 多次(单次数十秒),引导 check -p 单包/单文件快检策略 ✅已修(2026-10-05 本批:prompt.rs verification_fast_check_guidance 中/英——窄域验证优先(单包 check -p/单文件回读),全量留阶段收官;父会话 en/zh 模板+子代理工具纪律段三处同源拼接)
|
||
- [x] P3 并行子代理轮次徽标无身份,交错显示「第3轮/第2轮」致乱序观感(机制=各自独立计轮,正常) ✅已实施核验销账(2026-10-05 本批,文档滞后案):A-3 序号身份已落地——agentFinSeq 正则 `::agent-(\d+)$` 从 agentId 尾段提序号 + 完成卡模板 `#{{seq}}` 徽标(解析失败不渲染)+ agentPeekSubject 浮层头身份行(agent 序号/子会话标题/任务书首行),多代理交错完成可辨认「哪张卡是哪个代理」
|
||
|
||
# 新能力引入评估纪律(2026-10-04 用户令,长期生效)
|
||
|
||
> 引入任何新能力(协议/工具/机制/大重构)前,须做负面影响与破坏性判定,登记在设计文档内;审查(Review 会话)按此清单核。四维度基准:功能/接口适配/内容风格/性能,禁「未发现故障=不受影响」。
|
||
|
||
- [ ] **兼容性**:旧数据/旧客户端/旧配置共存与迁移路径;迁移须可断点续跑(借鉴 V21 教训)且可逆(SQL 迁移带 DOWN 或等价回退)
|
||
- [ ] **破坏性**:不可逆操作清单(删数据/拆兼容层/改协议旧值拒认);每项须有回退方案或「为何不可回退」论证
|
||
- [ ] **安全面**:新增攻击面(端点/帧/命令执行/路径)逐项列;权限是否放大(对齐边界模型 risk 分级)
|
||
- [ ] **资源面**:token/磁盘/内存/进程开销评估;日志与数据膨胀上限(借鉴日志无轮转教训)
|
||
- [ ] **回退开关**:新能力默认关或带单点回退(借鉴 GOAL_PIN 系开关范式);灰度顺序与观测指标
|
||
- [x] **追溯评估(实例,2026-10-04 完成)**:u-relay wire v3(「兼容层全拆」)——初判「零评估章」系 grep 截断误判,实有 §8 安全说明+§9 旧版差异;正式评估结论:生态四方(relay 现网/u-ppt/df-miniapp/df-tunnel)已全部 v3 一致,切换期破坏已吸收(均为开发期集成,无生产 SLA 损伤)。残余缺口登记:
|
||
- [ ] P2 指令离线即丢(§7 不缓存):commander 发指令时 agent 离线=静默丢失,移动端控制场景用户无感知——补业务层送达回执或短缓冲
|
||
- [ ] P2 Hello 无协议版本字段:下次破坏性变更仍是无通知硬切换——加 proto 版本字段(现在加便宜,以后加贵)
|
||
- [ ] P3 单共享 token 可冒充任意 channel_id(§8 自述):补 token 轮换 runbook(/etc/u-relay.env 改+重启+四方客户端同步换,锁步成本需写明)
|
||
- [ ] P3 心跳间隔未定值:nginx proxy_read_timeout=300s,间隔须 <300s,文档补建议值(30-60s)
|
||
- [ ] P3 同 channel_id 多 agent 并存全投递(§3.3):双 devflow 实例共享通道=指令重复执行,补「一通道一 agent」运维纪律
|
||
|
||
# 提交历史重整(2026-10-04 用户令,交 DevFlow agent 执行)
|
||
|
||
> 现状:main ahead 6(本地未推送),六笔零 body/一笔主行超长/文档笔类型误标。**执行前置:自身无在飞任务+git status 干净**(历史重放期间不得并行改码)。
|
||
|
||
## 步骤(非交互,全程可脚本化)
|
||
|
||
1. `OLD=$(git rev-parse HEAD)` 记录现 HEAD(396f74d)
|
||
2. `git reset --hard origin/main`
|
||
3. 按原序 cherry-pick 六笔:3dfa45d → f90ff80 → 737cc1f → 8dd756c → d5d9d9a → 396f74d,每笔 pick 后 `git commit --amend -F <消息文件>` 换用下方草案
|
||
4. 校验:`git diff $OLD HEAD --stat` 必须为空(树逐字节一致)+ `git status` 干净 + `git log --format="%h %s"` 六笔齐
|
||
|
||
## 六笔消息草案(subject 全部 ≤50 字;body 每行一事项;可按你对实际改动的了解细化,但不得添加 diff 中不存在的说法)
|
||
|
||
1. `新增: 无人值守P0任务边界全链`
|
||
body: 任务级授权边界判定与审批旁路单点插桩 / boundary_json 随会话落库(V45 可逆迁移) / 六路非正常终局统一安全停靠与托盘通知 / 每五轮进度事件与会话头部进度条 / 前端边界配置卡侧栏徽标及 UX 校验补齐(每条一行)
|
||
2. `优化: 子代理体验与纪律注入`
|
||
body: 工具纪律段抽共享同源注入 / 子代理轨迹浮层与完成卡身份 / 分离窗会话切换修复 / 960s 统一出口报告不再蒸发
|
||
3. `修复: 协议层与体验缺陷六件`
|
||
body: temperature 按模型适配仅收 1 的模型不再 400 / 流式 error 帧不再被 choices 必填整帧丢弃 / 只读缓存写后失效 / git diff 中文截断撞 UTF-8 边界 panic / 非视觉模型纯图片直接拒绝 / 全局快捷键补输入焦点守卫
|
||
4. `优化: 跨端链路协议对齐`
|
||
body: miniapp 配置域旧端点强制重置 / df-tunnel 隧道协议与 relay 现网对齐 / relay e2e 例程入 examples
|
||
5. `优化: 子代理截断信号与缓存失效`
|
||
body: max_tokens 截断标记穿透到完成卡 / 缓存写后失效补测试锁定 / 派发参数卡头信息补全
|
||
6. `文档: 设计定稿与评估纪律登记`(类型由「优化」改「文档」,文件面全在 docs/)
|
||
body: 无人值守长任务设计定稿含效率与可观测补遗 / u-relay wire 协议规格与五项评估结论 / 新能力引入评估纪律五项清单 / todo 销账与狗粮短板分析登记
|
||
|
||
## 提交重整补充(防坑,必读)
|
||
|
||
- **reset --hard 前工作区必须干净**:当前存在未提交改动(含本节处方)。执行顺序=①先收尾在飞工作,连同本节处方一并提交为第 7 笔(消息如 `文档: 提交重整处方与在飞收尾`)②然后 reset --hard origin/main ③按原序 cherry-pick 前六笔并逐笔 amend 换消息 ④第 7 笔原样 cherry-pick 不改消息 ⑤树一致性校验(git diff 原HEAD 为空)
|
||
- 重放期间禁止并行改码;校验不过立即 `git reset --hard $OLD` 回滚到重整前
|
||
|
||
# 能力建设批设计完成(2026-10-04 深夜,并行化+wake 原语)
|
||
|
||
> 设计: docs/02-架构设计/专项设计/并行化与异步唤醒-设计-2026-10-04.md(五项自评已过,拍板点 3 项)。实施按分工归 DevFlow agent 或我方批次,待令。
|
||
|
||
- [ ] W-a 写并行二维分组器(risk×路径租约:读类并行/写类异路径并行同路径保序/High 不变;顺带修 boundary 同文件双 patch 竞态)
|
||
- [ ] W-b wake 原语(内存 registry 三条件 delay/file-appear/process-exit,唤醒注入走 a5 路径+guard)
|
||
- [ ] W-c 与 M1 接力棒/飞书通道对接(依赖各方落地)
|
||
|
||
- [ ] W-d 空闲自领(wake 首应用):空闲检测→领 todo 确定性条目→边界内执行→完成回写+飞书推送;拍板点 4 项(默认关起步/30min 延迟/仅确定性/推送飞书)——设计要点见并行化与异步唤醒设计 §6.2
|
||
|
||
- [ ] W-d 挂机模式(用户拍板:自领/自推进/自拆解/自设计;设计 §6.3):W-d1 挂机循环骨架(确定性条目)/W-d2 自拆解+自设计(设计稿落 docs 挂待拍板)/W-d3 治理强化(预算闸+挂机报告+待人工清单);拍板点 4 项待定
|
||
|
||
- [ ] 指标阶梯升级为四支柱框架(2026-10-04 用户定):效率+自主+质量+可控四柱同时定级(木桶规则),每柱映射 L1-L4 指标族;已并入 baseline json framework 段;推进序不变
|
||
|
||
- [ ] W-e 多任务×子代理×真异步编排(设计 §七):W-e1 async spawn+报告轮界回填/W-e2 全局并发池+预算联动/W-e3 continuum 组合;前置=W-a+W-b;拍板点 2 项
|
||
|
||
- [ ] W-f 编排能力三层路线(设计 §八):1.0 板驱动(挂机内含)/2.0 task_links 依赖图自动推进(advance 回调+wake 解锁)/3.0 DAG×agent 融合(TaskAdvanceNode 插销已备);拍板点 2 项
|
||
|
||
- [ ] W-g 状态即时同步与通知(设计 §九):W-g1 出口扇出+即时级(依赖飞书通道)/W-g2 摘要级+远控查询命令族/W-g3 每日报告(挂机联动)
|
||
|
||
- [ ] W-h 会话间/代理间感知(FileLeaseRegistry:写前登记+冲突指路/query_leases 工具/兄弟感知/知识联动;与 W-a 组合成完整 lease)——设计 §十;根治今日全部互踩
|
||
|
||
- [x] W-h 感知租约 ✅已实施核验销账(2026-10-05):lease.rs 345 行全套在案(FileLeaseRegistry+写前置校验+10min TTL 兜底+键归一+互斥/同会话放行/释放/TTL/归一五组单测),query_leases 工具已注册暴露,对齐《并行化与异步唤醒-2026-10-04》§10.1——文档滞后案
|
||
- [ ] W-e2 全局并发池(小:子代理并发上限+预算联动)
|
||
- [ ] W-d1 挂机最小闭环(领单→执行→销账→循环+轻量续接;W-b wake 随其绑定实施)
|
||
- [ ] 冻结待信号: W-a 写并行吞吐(只先修竞态)/W-d2 自拆解自设计/W-f 编排 2.0-3.0/W-e1 async spawn——启动信号见设计 §十一
|
||
|
||
- [ ] C-m 上下文三层记忆(设计落档):C-m1 记忆卡四类(目标/决策/发现/待办)压缩重构/C-m2 压缩时机信息增益信号/C-m3 与召回闭环衔接;拍板点 3 项
|
||
- [ ] E-m 自进化能力(设计 §十二):E-m1 模式扫描报告(挂机自领类)/E-m2 在线启发(熔断对话化)/E-m3 技能注册管线;拍板点 1 项
|
||
- [ ] W-f 2.0 改为最小探针(依赖声明工具面暴露,使用率决定深化)——[补2] 方法修正
|
||
|
||
- [ ] F-m 失败学习环(设计 §十三):F-m1 失败归类统计(挂机自领类)/F-m2 教训提炼进 knowledges 失败分册+同类任务前置注入/F-m3 失败现场即时附学;拍板点 1 项(教训审核)
|
||
|
||
# 环境知识:GitHub 直连受限的替代方案(2026-10-04 深夜,失败学习环首条)
|
||
|
||
- download_file 拉 github.com releases 失败(今晚 protoc 实证)→ 替代:**URL 前缀镜像**(如 https://gh-proxy.com/ + 原URL)或 **gh 命令**(gh release download,已登录态)或本地包管理器(winget/choco 装 protoc 等构建依赖,一次预置后构建不再拉外网)
|
||
- download_file 工具增强候选:失败自动镜像回退(小改,登记待批)
|
||
|
||
- [ ] F-m 实施细节补充(§13.4 有界失败记忆):A4 失败豁免精化为「首条全文+同签名折叠一行(第N次)」——防窗口灌爆+盲试显式计数;失败分册按类去重 Top-K 有界;监控按月轮转;三界类目口径同源(同一归类函数)
|
||
|
||
## 派工纪律内置基线(AI-Ops 分析移交 2026-10-05,用户拍板"通用能力内置沉淀")
|
||
|
||
> 背景:派工纪律 11 条在 AI-Ops(u-claw 侧)一周实战蒸馏;devflow agent(spawn_agent)同样需要,但走知识库条目会在分发时裸奔(数据不随包,新实例知识库空=纪律失效)。用户拍板:通用能力内置进代码随包分发,知识库只放场景性增强层。
|
||
> 落点:agentic loop 的 system_prompt 组装处内置以下母本(常量,编译进二进制)。u-claw 侧同款内容走 prompt.go 灰度(已拍板路径,分层:1-9 条第一批,10/11 条观察后二批)。
|
||
|
||
### 内置母本(8 行,双端通用,可微调措辞不可删项)
|
||
|
||
```text
|
||
## 派工纪律
|
||
1. 派工先估颗粒:单任务一轮内自证完成,装不下就拆批;独立子任务并行派。
|
||
2. 任务书三要素:目标文件边界(热点文件单点编辑权)+预期时限+标准验证命令。
|
||
3. 验收认证据:子代理须交"命令+结果",不收"我做完了";主代理独立抽查裁决。
|
||
4. 子代理报告限长(约4千字),超长落盘只给指针;主代理消化后紧凑透出,禁全量转贴。
|
||
5. 超时处置:到点发收敛令→无响应试探存活→确认死则主代理砍维度亲自收尾,勿重派同颗粒。
|
||
6. 改代码禁全量验证:单文件快检,阶段收官统一验证一次。
|
||
7. 派工前查重在途执行体,同类故障只委托一头。
|
||
8. 结果透出结论先行,证据随附,过程不铺陈。
|
||
```
|
||
|
||
### 实施项
|
||
|
||
- [ ] **N1 内置基线**:母本注入 agentic loop system_prompt 组装处(spawn_agent 子代理与编排节点同享;主 agent 自己派工时同样受此约束)。验收:新会话 system_prompt 含该段;知识库为空的全新实例同样生效。
|
||
- [ ] **N2 知识库增强层定位收缩**:纪律类内容不再入知识库条目(避免双源漂移);知识库只留场景性/经验性条目。存量 review_rule 若与母本重叠,以母本为准去重。
|
||
- [ ] **N3 知识库分发缺口登记**(独立项,优先级随多实例节奏):安装包带基线知识包(首启导入)或同步桥提级(存储架构定稿既有的"统一条目模型+同步桥"第一个实战用例,中心=df-pg)。单机阶段可缓,多实例分发前必须解。
|
||
- [ ] **N4 与编排纪律 prompt 合并**:u-claw 侧落点 prompt.go"派工纪律"段与既定"编排纪律 prompt"(07a8c55 同落点)一次发版合并做,勿两次动 system prompt。
|
||
|
||
## u-claw 沉淀能力蒸馏清单(AI-Ops 分析移交 2026-10-05)
|
||
|
||
> 来源:u-claw 一年实战沉淀(memory 30+ 条+Go 代码机制)。筛选标准:通用能力(非业务/非容器特有),devflow 有实证差距才立。已对齐不重复立的:显式交付协议(通知桥 oneshot)、PATCH 单点渲染、重连 backoff、查重在途(派工契约第7条)、双头让位。
|
||
|
||
### A 类·机制移植(有实证差距,优先)
|
||
|
||
- [x] **D1 僵尸资源显式释放** ✅实施完成(2026-10-05 本批,勘察补充:现 main.rs 尚无重连循环,leak 暂只发生一次,但 SDK start() 退出即任务终局——将来补 backoff 重连时 run() 重入必每次 leak 一份 LarkClient,预防性根治):client 由字段 `LarkClient` 改 `&'static LarkClient`,Box::leak 收敛到 new()/offline() 构造期各一次;run() 重连重入只重建 Channel 复用同一 &'static 引用,注释记载 D1 根因;dispatch 出站链零改动(引用传递同语义)。验收 cargo check -p df-im-gateway EXIT 0 + cargo test -p df-im-gateway 14 passed 0 failed
|
||
- [ ] **D2 白名单热加载**(u-claw 已有):现白名单启动时读死进 Ctx(L107),改 KV 须重启进程。修:whitelist 改 RwLock<HashMap> 或每消息现读 KV(读频低,成本可忽略);验收:改 KV 后下一条消息即生效,无需重启。
|
||
- [ ] **D3 渠道心跳保活**(u-claw feishu_beat.go):现靠断线被动重连,静默半开连接(对端假活)检测不到。修:周期(60s)轻量活性探测,连续 N 次失败主动断开触发重连。验收:杀对端连接后 2 分钟内自愈。
|
||
|
||
### B 类·设计思想对齐(随相关批次顺路)
|
||
|
||
- [ ] **D4 目标快照+补拉兜底**(u-claw goal.go L1/L2/L3 实证"三战三捷"):停机恢复按快照续,不重放旧目标。V49 断点续跑(loop_state)正在做,补一个维度:恢复时对齐用户当前有效意图(目标快照),防"按旧目标继续跑偏"。
|
||
- [ ] **D5 空轮判据自愈**(u-claw 空轮自愈经验):会话轮次无产出(空文本/无工具调用)连续 N 次→判定卡死,自动止损+提醒,而非挂到超时。
|
||
- [ ] **D6 效率基线滚动机制**(u-claw 1001 基线方法论):季度实测运行基线(吞吐/尾延迟/子代理占比)对照优化,防瓶颈形态迁移后优化失焦。devflow 首个基线已建(2026-10-05),固化为机制。
|
||
|
||
### C 类·功能候选(产品拍板,不急)
|
||
|
||
- [ ] D7 媒体收发:图片/文件上下行(SDK upload_image/download 已在,u-claw media.go 先例)——识别截图/回传产物图场景价值高
|
||
- [ ] D8 定时任务面:bot 内 cron 注册/查询/触发(u-claw crontab.go 形态)
|
||
- [ ] D9 群成员/用户名缓存:回复带真实姓名(u-claw members/username.go,20min 缓存)
|
||
- [ ] D10 会话标题:摘要里第二批已列(title_lifecycle 已有桌面端,渠道侧展示)
|
||
|
||
|
||
## 2026-10-05 晚交接:AI-Ops 移交待办(用户拍板:devflow 安排推进)
|
||
|
||
> 用户已授权:下列项无需再逐项请示,按看板自行安排推进。攒批提交已授权(分组执行)。
|
||
|
||
### 决策结论(已定,不再议)
|
||
- D2d 归档阈值 = 90 天(定案,随 D2a 批实施)
|
||
- N3 知识库分发 = 先安装包基线包、后同步桥(多实例分发前 2 周启动)
|
||
- 渠道假活(21:19 换装后 WS 未连)= 复发才深挖;D3 看门狗已实测立功(21:43 告警)
|
||
- 历史数据默认保留禁清理(全局规则,见 memory feedback-history-data-keep-default)
|
||
|
||
### 待办(按优先级)
|
||
1. [ ] **攒批提交 47 文件**(已授权):停笔窗口执行,按主题 4 笔分组——①V49 断点续跑批(state/main/lib/sub_agent/df-storage) ②飞书渠道批(feishu_channel 四修+流式+D1-D3) ③纪律内置+知识库批(N1 helpers 等) ④前端流式链批(useStreamRenderer 等)。提交前 cargo check + vue-tsc 终验。
|
||
2. [ ] **C-r0 验证命令后台化**(验收:>90s 同步等待占比 <15%,现状 45%)
|
||
3. [ ] **D2a ai_tool_executions 结果过期外置**(DB 193.7MB 半天+17.6MB,紧迫)+ D2d 归档 90 天随批
|
||
4. [ ] **锁面+同步 IO 技术债**(196 处 async 锁抽查、commands/ai 内 5 文件 std::fs 混入)
|
||
5. [ ] **注入验证**:知识库 691b351d/c142e6b2 已 published+high,新会话确认铁律段带出
|
||
6. [ ] **V49 批次独立核查**:47 文件收敛后请 AI-Ops 派核查,或自证全量 build+测试
|
||
7. [ ] C 类功能候选(优先级未排):D7 媒体收发 / D8 定时任务面 / D9 用户名缓存 / D10 会话标题
|
||
|
||
### 已完成勿重做(2026-10-05 AI-Ops 侧,勾选凭据)
|
||
- N1 派工纪律内置(DISPATCH_DISCIPLINE:mod.rs:184/2791 + sub_agent.rs:489)——已随 21:19 换装上线
|
||
- D1 僵尸 client 泄漏修复 / D2 白名单热加载 / D3 看门狗告警——已上线,D3 实测立功
|
||
- 飞书四修+流式(占位卡片 edit_card 原地更新/表格降级/clip_for_card 超长裁剪/启动日志)——已上线
|
||
- 知识库 691b351d/c142e6b2 已 published+high(c142e6b2 含权威源声明);9c848ab 确认零丢失(rescue 分支锚定)
|
||
|
||
### 新缺陷(2026-10-05 22:2x 用户截图实证,与 N/D 清单同级)
|
||
8. [ ] **工具输出 ANSI 转义裸露**(乱码):run_command 类工具输出含 ANSI 码(\x1b[7m 等)原样透传前端显示为 ␛[7m。修:执行器统一 strip_ansi(或注入 TERM=dumb/--color=never)+前端渲染层兜底过滤;验收:cargo test 输出在面板无 ␛ 残留。
|
||
9. [ ] **会话标题 content 泄漏**:会话标题显示原始正文片段(如 `<details> <summa…`,84cb104c 会话同症)——标题生成输入未清洗或兜底直接取 content 头部。修:title 生成失败/超时兜底改为清洗后的首行摘要,含 HTML/Markdown 标签时剥离;验收:长会话标题无标签裸露。
|
||
> 附:截图实证单会话 206 轮/1500 万 tokens——C 批次(上下文管理)紧迫性最强活证,随 C-r0 优先消化。
|
||
|
||
### 🔴 提交后跟进(2026-10-05 23:0x 走查发现,cb260ab 已入库但未修)
|
||
10. [x] **loop_state 对新会话/编排会话静默失效(高)** ✅修复(2026-10-06,提交「修复: loop_state 懒创建继承与入口早退清理」):懒创建继承 running(conversation.rs)+入口早退清残留(agentic/mod.rs)+list_parked 消费方=TopBar「可恢复」分区(V49 读侧)。验收:cargo check EXIT 0+vue-tsc EXIT 0。
|
||
11. [x] 【中】conversation_repo.rs:817 注释矛盾 ✅修复(2026-10-06 同批):update_full 剥离 loop_state 列,封 lost-update 窗口,注释与实现一致。
|
||
12. [x] 【中】前端 i18n 双侧同缺 aiChat.reattachToMain 键 ✅修复(2026-10-06 同批):zh/en 补键。
|
||
> 以上为 72 文件走查结论(报告要点 23:0x 已交群),提交规范 18 笔全合规,质量项按本清单跟进。
|
||
|
||
## 流畅性根本解三件(2026-10-05 深夜用户立项:1+2+3,④双通道搁置)
|
||
|
||
13. [x] **①过程流式** ✅ 2026-10-06 实施:run_stream_refresher 消费面扩容(AiTextDelta + AiAgentRound + AiToolCallStarted/Completed 四事件,conv 路由过滤共用)——过程流不刷屏:卡片改「头部一行摘要 + 正文增量」结构,头行=轮次 + ⚙当前工具执行中/已完成 N 步(历史步骤折叠为计数,决策价值过滤);过程事件标脏强制重刷(纯工具轮无文本也有"活着"信号,治 206 轮长任务卡片静止猜卡死);签名去重防同 tick 事件风暴空刷;超限保尾截断口径不变。4 单测锁格式契约(首轮无头行/工具执行中/轮间空档/截断)。验收:cargo check EXIT 0 + feishu 7 passed。参照 u-claw 进度卡治理;桌面过程视图同步对齐见「桌面端能力同步清单」。
|
||
14. [ ] **②任务式委托**:重任务(agentic loop 任务)受理即回任务卡(「已受理·预计 N 分钟」),用户可离开;完成后卡片原地更新+结果在卡。底座已有(30min 超时任务后台不丢),重构 handle_message 等待形态为受理/完成两段式。验收:发「走查代码」3s 内收到受理卡,完成后卡片变结果,全程无需等待。
|
||
15. [ ] **③C 批次关联**:本组两件的提速收益依赖 C 批次(prompt 71K→按需)——C-m1/m2 优先级顺位提升(单轮推理是 80% 耗时大头,见流畅性分析 2026-10-05)。
|
||
16. [x] **纠偏注入通道**(用户 2026-10-05 深夜点名,飞书对话补充消息目前只能排队不能注入运行中任务)✅ 2026-10-06 实施:引擎层 `inject_runtime_message`(chat.rs,活跃守卫 conv_states.is_active → 短锁 push per_conv.messages → save_conversation 增量落库,loop 下轮 build_for_request 自然带上,u-claw 补拉同构);飞书侧 handle_message 白名单后加注入旁路(chat_map 命中且 conv 活跃 → 注入 + 卡片确认「下一轮生效」,非活跃 Err 落回常规 spawn 路径零行为变更)。不改锁语义/不打断 loop;桌面任务卡补充入口待 14 异步委托批配。验收:cargo check EXIT 0 + chat 17 passed + feishu 3 passed(含注入前缀格式契约单测)。
|
||
> **14 升级(用户拍板 2026-10-06 凌晨):桌面也要异步能力,不做双端分叉**——异步委托是引擎层能力,桌面与飞书都是它的前端视图。实现要点:①引擎层 spawn 即受理返回,完成走通知桥广播(oneshot 改事件+等待者订阅) ②桌面任务卡 UI:受理/进行中 N 轮/完成+系统通知,发消息后可切会话/最小化 ③飞书为同一语义投影(受理卡/完成原地更新) ④锁语义保守起步=单会话单在途+排队,多并发看用量再说 ⑤yml 开关灰度。依赖链:16 纠偏通道(受理后补充入口)→13 过程流式(进行中视图)→本项。验收:桌面发任务→切走→完成收系统通知;飞书同构;双端行为一致。
|
||
|
||
> **设计约束(用户拍板 2026-10-06 凌晨):任务会话高度复杂,代码设计一定要优雅**——①状态机显式化:受理/运行/暂停/完成/失败用枚举统一,禁散落 bool 拼凑 ②单一事实源:任务状态只在引擎层,桌面/飞书 UI 都是投影(订阅不轮询) ③事件驱动贯通:13/14/16 共用同一事件总线,不做渠道私有旁路 ④优雅优先于速度:宁可工期换结构,不做特判堆补丁(优雅架构铁律)。
|
||
|
||
> **桌面端能力同步清单**(与渠道对齐,2026-10-06):16 纠偏注入做在 AiSession 会话层桌面天然受益;13 过程流式桌面过程视图同步对齐;14 任务卡+系统通知已在升级注记;另两件桌面专属:①V49 可恢复入口——走查实锤 list_parked 读侧零消费,桌面侧栏补「可恢复」列表消费它(断点续跑闭环最后一块) ②缺陷9 会话标题泄漏桌面同症随批修。
|
||
17. [ ] **桌面会话内容同步飞书**(同会话,2026-10-06 凌晨拍板):绑定飞书 chat 的 conv(chat_map 映射既有,恢复机制在)——桌面端该 conv 的新消息(user/assistant)实时投影飞书卡片,用户离机后手机飞书可跟任务全程。实现:订阅 ai_event_bus 的 conv 内容事件→飞书投影,与 13 过程流式/14 任务卡共用单写卡者;按决策价值过滤防刷屏(完整历史在桌面,飞书给关键节点)。与 14 组合即完整闭环:桌面发任务→切走→手机看过程→收结果。验收:桌面 conv 发消息/收回复,绑定飞书 3s 内卡片更新关键节点。
|
||
18. [x] **渠道错误话术吞因**(09:51 实证)✅ 2026-10-06 修复:①spawn Err 分类话术——并发护栏拒绝(「正在生成」)→「⏳ 该会话已有任务进行中,本条将在任务完成后处理;可稍后重发,或先 /status 查看进度」;其余失败→附截断原始原因(不吞因)。②探活告警口径修正——inflight 计数点从 spawn 前提前到 handle_message 白名单通过处(RAII 覆盖占位卡 HTTP+per-chat 锁排队窗口,原该窗口任务在跑却报「无在途会话」);旧计数点删除防双重计数。验收:cargo check EXIT 0 + feishu 7 passed。
|
||
> 附:09:48 桌面纠偏「不是 haogame 是 redtimer」被运行中 loop 下一轮直接接住——16 纠偏注入的桌面形态天然存在,飞书侧对齐即可。
|
||
|
||
## 工作流治理升级(2026-10-06 用户拍板:根本性增强,源自提交质量检查三不达标)
|
||
|
||
> 根因:任务传递靠软机制(看板摘要+群消息阅读),无结构化任务单与销账门禁——🔴被静默跳过/i18n 描述失实/描述与内容偏差,三层同源。
|
||
|
||
### 治理四条(对 devflow 工作流生效)
|
||
- [ ] **G1 结构化修复单**:走查/审查发现逐条独立成单,格式=`[编号] file:line + 复现/影响 + 验收命令`,🔴级不允许自由跳过(先销后立新)
|
||
- [ ] **G2 🔴门禁**:🔴级条目未清零前,新功能提交打回(cm 提交前置检查看板🔴余量)
|
||
- [ ] **G3 描述反向核对**:提交前 diff 关键词与描述机械比对,不符打回(cm 技能增强)
|
||
- [ ] **G4 销账带证据**:勾选 [x] 须附验收命令输出行,无证据视同未完成
|
||
|
||
### 桌面能力同步(随本批)
|
||
- [ ] G5 V49「可恢复」入口(桌面侧栏消费 list_parked,断点续跑闭环最后一块)
|
||
- [ ] G6 缺陷9 标题泄漏桌面同症随批修
|
||
|
||
### ⚠️ 退回重处理(2026-10-06 用户令,G2/G3 治理标准首次执行)
|
||
- 三笔提交(cec4d11 委托引擎/84df9b5 租约/622507c UI)已 reset --mixed 退回(内容全在工作区,零丢失,未推远端无需处理远端)
|
||
- **重做要求**:①先修 🔴10 loop_state 失效(G2 门禁:🔴不清零不得提交新功能)②描述按 G3 如实:实际干了 14+16+事件广播三件须逐件列全 ③i18n reattachToMain 键随批补上 ④修完按主题重新分组提交,销账 [x] 附验收输出(G4)
|
||
19. [x] **飞书 outbound 统一出口**(11:23 实证)✅ 2026-10-06 收口:勘察确认对话/受理/完成/注入回执已统一走 deliver_result(降级/裁剪/卡片链内聚);病灶「挂机进度汇总独立发送路径」在当前 main 不存在(属退回的挂机实验代码)。本批防复发收口:①新增 push_to_chat pub(crate) 正典出口(主动推送形态——挂机进度汇总/巡检通知将来落地时禁再开独立路径,强制走降级/裁剪/卡片链) ②ACTIVE_CLIENT OnceLock 全局句柄(渠道启动就绪,推送复用长连接 client 不临时建连,未启动静默跳过)。验收:cargo check EXIT 0 + feishu 7 passed。
|
||
> 附:挂机汇报自报 🔴10 已修验证通过+43 文件产出——挂机模式推进有效,路径修复别误伤它。
|
||
|
||
## 无人值守可靠性专项(2026-10-06 swarm 立项,设计档:docs/02-架构设计/无人值守可靠性专项设计-20261006.md+temp/V49断点续跑设计-20261006.md)
|
||
- [x] B1(S):H1 汇报 git 实测附录 ✅(2026-10-06:deliver_completion_report_if_waited 单点 append_git_facts——branch/HEAD/未提交计数三行,非 git 仓静默跳过,超长报告不追,git.rs 增 git_exec 只读薄封装)+ 探活告警口径修正 ✅(同日 18 批:inflight 计数点前移到 handle_message 白名单通过处,覆盖占位卡 HTTP+per-chat 锁排队窗口,旧计数点删除防双计)- [ ] B2(M):H2 token 三闸(抄 sub_agent round_budget_stop)+ H4 产出审计 subscriber
|
||
- [x] B3(M):V49 防覆盖定稿+单测 ✅(本会话前批:#11 update_full 剥离 loop_state 列,df-storage conversation 8 passed)+ ai_list_recoverable IPC ✅(2026-10-06:conversation.rs parked 专项完备真相清单 id/title/model/updated_at,不受侧栏 limit 截断,lib.rs 已注册)+ 桌面「可恢复」入口 ✅(2026-10-06 本批:TopBar recoverableTasks 双轨数据源——conversations loop_state 实时投影+ai_list_recoverable IPC 完备真相合并去重,面板展开触发 IPC 拉取,失败退回投影;ai.ts listRecoverable 封装)。验收:cargo check EXIT 0 + vue-tsc EXIT 0。
|
||
- [ ] B4(L):ai_recover_parked 重启恢复 + H3 外部干预感知(git HEAD 比对→Parked)
|
||
|
||
## UI/UX 体验设计实施项(2026-10-06 设计档:temp/异步任务会话UIUX设计-20261006.md,依赖 13/14/16/17 机制先行)
|
||
- [ ] U1 任务卡生命周期组件(双端):桌面 TaskCard 八态投影枚举(全部由既有事件派生,零引擎新状态)+飞书 header 状态色结构卡(JSON 元素级规格已给,动作 v1 走文本命令)
|
||
- [ ] U2 进度语义:三层模型(活性脉冲/位置计数/内容工具名)+防假进度五规则——核心"数字不动+脉冲停才算卡死",无分母禁画百分比
|
||
- [ ] U3 通知分级:必达(L0决策/L2完成)与静默累积(L3过程)分级表;飞书侧=哪些事件值得动占位卡,注入回执走 reply 不动占位卡
|
||
- [ ] U4 纠偏交互:桌面直发默认注入·下一轮生效(排队可切),回执+前缀逃生;飞书回复即注入保持
|
||
- [ ] U5 异常态话术公式:状态+真实原因+已保留什么+≥2条出路;禁自动判死静默任务(15min 重入退避是合法等待),给判断材料不替用户决策
|
||
- [ ] U6 跨端一致性:引擎唯一写者,双端不直同步,"实时"=秒级最终一致;断线恢复桌面走 DB 回放/飞书走 /status 回查
|