Files
DevFlow/PROGRESS.md
绝尘 98393b4908 新增: 初始化 DevFlow 项目仓库
Tauri 2 + Vue 3 + Vite 6 桌面应用,Rust workspace 含 13 个 crate
(df-ai / df-storage / df-workflow / df-core / df-execute 等)。
核心能力:AI 聊天 agentic 循环(工具调用+人工审批)、工作流引擎、
任务/想法/项目/阶段管理、可追溯性,及配套前端组件。
2026-06-12 01:31:05 +08:00

398 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DevFlow — 项目进展与工作交接
> 创建: 2026-06-10 | 最后更新: 2026-06-12 | 当前阶段: Phase 2 aichat UX 快赢A 路线)+ 技能联想需求调研Sprint 8
---
## 一、项目速览
| 项目 | 值 |
|------|-----|
| 定位 | AI 原生创作流程驾驶舱,从想法到创作成果的全流程管理 |
| 技术栈 | Tauri v2 + Vue 3 + TypeScript + Pinia / Rust Workspace (13 crate) / SQLite |
| 路径 | `E:/wk-lab/devflow/` |
| 架构文档 | `ARCHITECTURE.md` (22,745 字) |
| Git 状态 | 未首次 commit代码全在 untracked |
| AI 能力 | df-ai OpenAI 兼容 Provider + 12 工具 + Agentic Loop |
---
## 二、代码规模统计
### Rust 后端 (71 个 .rs 文件)
| Crate | 文件数 | 总行数 | 有效行 | 实现程度 |
|-------|--------|--------|--------|---------|
| df-core | 4 | 259 | 151 | ✅ 完整 — 错误/事件/状态枚举/ID生成 |
| df-workflow | 7 | 489 | 333 | ✅ 核心 — DAG拓扑排序/执行器/状态机/事件总线 可用 |
| df-storage | 4 | 294 | 217 | ✅ 部分 — SQLite连接/迁移/建表完整,**缺 CRUD 层** |
| df-execute | 5 | 203 | 129 | ⚡ 混合 — Shell 执行器真实可用Docker/SSH/Git 骨架 |
| df-ideas | 6 | 421 | 278 | ⚡ 大部分 — 捕获/评估/晋升/关联图 有逻辑,评分固定值 |
| df-task | 5 | 390 | 252 | ⚡ 大部分 — Task/Branch/Semver 可用,合并冲突 骨架 |
| df-project | 5 | 272 | 175 | ⚡ 混合 — 数据模型/Timeline 可用,调度器 骨架 |
| df-ai | 6 | 281 | 173 | 🔧 接口 — 类型/Provider trait 完整,无实际 LLM 调用 |
| df-traceability | 4 | 312 | 201 | ⚡ 混合 — 决策记录/标注构建 可用SQLite查询 骨架 |
| df-plugin | 4 | 255 | 158 | ⚡ 混合 — Host/Builder 有逻辑,核心加载 骨架 |
| df-evolve | 6 | 301 | 172 | ⚡ 混合 — Knowledge/PromptTemplate 可用,引擎/提取器 骨架 |
| df-nodes | 9 | 344 | 277 | ⚡ 混合 — script_node 真实可用(接 Shellhuman_node 半实现(审批响应 TODO其余 6 种骨架 |
| df-stages | 6 | 287 | 209 | 🔩 全骨架 — 11个阶段节点 Schema 完整execute() 全空 |
| **合计** | **71** | **~4,108** | **~2,625** | |
### 前端 (9 页面 + Store + i18n)
| 类别 | 文件数 | 行数 | 状态 |
|------|--------|------|------|
| Vue 页面 | 9 | ~3,372 | ✅ UI 全部真实 — 无空壳 |
| Pinia Store | 4 | ~362 | ⚠️ 有 state/getter 但**无 actionView 未引用** |
| Router | 1 | 63 | ✅ 9 条路由含动态路由 |
| i18n | 2 | ~94 | ⚠️ 翻译完整但**未接入 main.ts** |
| 设计系统 | 1 | 105 | ✅ CSS 变量/动画/Arco 暗色覆盖 |
| Tauri Commands | 1 | 13 | 🔩 仅 `greet` 示例,无业务逻辑 |
**前端关键问题**
- 所有 View 组件数据**硬编码** (`ref([...])`),与 Store 完全独立
- 所有按钮事件处理函数为**空函数** `{}`
- i18n 插件未注册到 Vue app
- Arco Design 组件库未实际使用(仅 CSS 变量覆盖)
---
## 三、架构分层与依赖关系
```
真实可用路径(有端到端逻辑):
df-core (类型基础)
→ df-workflow (DAG 拓扑排序 + 执行器 + 状态机 + EventBus)
→ df-execute/shell (tokio::process Shell 执行)
→ df-storage (SQLite 连接 + 迁移 + 建表)
待打通路径(骨架就位,需填充):
df-workflow → df-nodes (8种节点 execute() 待实现)
df-workflow → df-stages (11种阶段节点 execute() 待实现)
df-ai → LlmProvider 实现 (无 HTTP client)
df-storage → 所有 crate 的 CRUD 操作
Tauri commands → Rust 业务逻辑
Vue Views → Pinia Store → Tauri IPC → Rust
```
---
## 四、全局性问题
| # | 问题 | 影响 | 优先级 | 状态 |
|---|------|------|--------|------|
| 1 | **无 CRUD 层** — df-storage 只有建表 | 所有 crate 无法持久化数据 | P0 | ✅ Sprint 2 |
| 2 | **Tauri IPC 未建** — 只有 greet 示例 command | 前端无法调用后端 | P0 | ✅ Sprint 317 commands |
| 3 | **Store 未接入 View** — 两套独立硬编码数据 | 数据流断裂 | P0 | ✅ Sprint 4 |
| 4 | **AI Provider 无实现** — trait 定义完整但无 HTTP client | AI 功能全部不可用 | P1 | ✅ Sprint 5 |
| 5 | **同层节点未并行** — DagExecutor 有 TODO 注释 | 工作流执行效率 | P1 | ✅ Sprint 3join_all |
| 6 | **条件表达式引擎** — 仅支持 true/false 字面量 | 条件分支不可用 | P2 | ⬜ 待办 |
| 7 | **i18n 未注册** — 翻译文件存在但未挂载 | 多语言不生效 | P2 | ✅ Sprint 7 |
| 8 | **未 git commit** — 代码全 untracked | 无版本基线 | P0 | ✅ Sprint 2 |
---
## 五、Phase 规划与当前进度
### Phase 1 — 引擎骨架 ✅ 完成
| 任务 | 状态 | 说明 |
|------|------|------|
| df-core 类型系统 | ✅ 完成 | 错误/事件/状态枚举/ID生成 |
| df-workflow DAG 引擎 | ✅ 完成 | 拓扑排序/执行器/状态机/EventBus |
| df-storage SQLite 基础表 | ✅ 完成 | 6 张表 + 4 索引,缺 CRUD |
| df-execute Shell 执行 | ✅ 完成 | tokio::process 实现 |
| 最小前端:项目列表 + 工作流日志 | ✅ 完成 | Sprint 45 页面接 Store + 创建/运行交互 |
| 验证3 节点简单工作流 | ⬜ 待验证 | 后端就绪,需端到端跑通 |
| df-storage CRUD 层 | ✅ 完成 | Sprint 26 Repo + impl_repo! 宏Sprint 3 增 BranchRepo |
| 对抗式评估系统 | ✅ 完成 | Sprint 6AdversarialEngine + 正反方辩论 + AI 分析师 |
| Migrations V2关联字段 + branches 表) | ✅ 完成 | Sprint 3 |
| Executor 同层并行 + 状态转换校验 | ✅ 完成 | Sprint 34 单测全绿 |
| Tauri IPC 命令 | ✅ 完成 | Sprint 317 commands + 事件转发 |
| Store 接入 View | ✅ 完成 | Sprint 4API 层 + composable Store + 5 页面改造 |
### Phase 2 — AI 集成 ✅ 核心完成
| 任务 | 状态 | 说明 |
|------|------|------|
| df-ai Provider 实现 | ✅ | OpenAI 兼容 HTTP client流式 SSE 解析 |
| AI 工具注册 + V3 迁移 | ✅ | AiToolRegistry + 12 工具list/create/update/delete + 文件系统) |
| AI IPC 命令 | ✅ | 17 个 AI command对话/工具执行/审批门控) |
| AI Chat 面板 | ✅ | 侧边栏 + 分离窗口 + 拖拽调宽 + 对话管理 |
| Agentic Loop | ✅ | 多轮工具调用循环max 10 轮)+ 中/高风险人工审批 |
| AI Node 实现 | ✅ | df-nodes 接 df-aiconfig 驱动 providerbase_url/api_key/model/prompt→ OpenAICompatProvider.complete → 输出 text/model/usage注册 "ai" 节点;未端到端实测 |
| **AI Chat LLM 优化** | 🚧 P0 完成 | 任务 #43P0 可靠性(超时/断连/停止生成P1 token 控制usage采集/滑动窗口/摘要)⬜ | |
### Phase 3 — 想法池 + 多项目 (3-4 周) | ⬜ 未开始
### Phase 4 — 节点丰富 + 阶段插件 (3-4 周) | ⬜ 未开始
### Phase 5 — 体验打磨 (4-6 周) | ⬜ 未开始
---
## 六、工作迭代日志
### [Sprint 1] 2026-06-10 — 项目初始化
**工作内容**
- 创建项目骨架:`bun create vite` + Tauri v2 + Cargo Workspace
- 编写完整架构文档 `ARCHITECTURE.md` (22,745 字)
- 13 个 Rust crate 全部创建,类型系统和接口设计完整
- 9 个 Vue 页面 UI 全部编写(~3,372 行),设计系统完善
- 4 个 Pinia Store 定义state + computed
- i18n 中英文翻译
**代码规模**Rust ~4,108 行 / Vue+TS ~3,896 行 / 总计 ~8,000 行
**遗留问题**
1. 所有数据硬编码,无持久化
2. 前后端未桥接
3. 未做 git commit
**下一步建议**
1. 首次 git commit 建立基线
2. 优先实现 df-storage CRUD 层(所有持久化的前置条件)
3. 实现 Tauri IPC 命令层
4. 将 Store 接入 View替换硬编码数据
5. 端到端验证3 节点简单工作流跑通
---
### [Sprint 2] 2026-06-10/11 — 设计审查 + 对抗论证 + 阻塞项修复
**工作内容**
- 三路功能审查(架构/前端/数据模型):发现 4 条核心路径全断、缺 10 张表、状态枚举三套不一致
- 三路对抗论证(市场/技术/需求"魔法打败魔法"):综合结论 = 方向有价值、scope 必须砍 60%
- 修复 Phase 1 阻塞项Shell Windows 兼容cmd /C、状态枚举统一types.rs 为准、DAG 序列化DagDef + NodeRegistry
- 实现 df-storage CRUD 层6 Repo + impl_repo! 宏 + spawn_blocking + 列名白名单)
- ScriptNode 接入 df-execute Shell 执行器
- 建立 docs/ 8 层文档体系(中文命名)
- 新增设计文档:业务系统设计、对抗论证裁决报告、想法探索-对抗式评估
**关键决策(详见 docs/02-架构设计/对抗论证裁决报告.md**
- 定位调整:"产研操作系统" → "本地优先的个人开发流程驾驶舱"
- 砍掉:插件系统、经验进化(自动)、需求-测试追溯、多模型路由、Agent 协作
- 降级:想法池(简化+对抗式评估、标注TODO 扫描器)、决策留痕(字段级)
- Phase 1 只激活 6 个 crate其余 7 个标记预留
- 验证策略:先自用 3 个月再决定是否对外
**遗留问题**
1. Executor 同层并行化 + StateMachine 转换校验(任务 #8
2. Migrations V2 补字段promoted_to/workflow_def_id/project_id 等)+ branches 表(任务 #9
3. Tauri IPC / 前端 Store 对接尚未开始
4. Sprint 2 的代码变更未 commit
**下一步**
1. commit Sprint 2 变更
2. Migrations V2 + Executor 并行化
3. Tauri IPCAppState + project/task/workflow commands
4. 前端类型对齐 + Store 接 View
### [Sprint 3] 2026-06-11 — Migrations V2 + Executor 并行化 + Tauri IPC三代理并行
**工作内容**(三个子代理并行,目录互不重叠):
- **Migrations V2**df-storage/df-core版本推进到 2 — ideas 补 promoted_to/ai_analysis/scores、tasks 补 workflow_def_id/base_branch、workflow_executions 补 project_id/task_id、新建 branches 表(含 2 索引BranchRecord/BranchRepo/BranchStatus 枚举同步落地ALLOWED_COLUMNS 白名单 +8 列
- **Executor 并行化**df-workflow同层节点改 futures::join_all 并发三阶段模式串行准备→并发执行→串行收尾规避借用冲突StateMachine 增加转换校验(仅 Pending→Running、Running→Completed/Failed 合法set_xxx 改返回 Result4 个单测全绿(含并行耗时断言 <180ms、失败中止下游层
- **Tauri IPC**src-tauriAppStatedb + 6 Repo + EventBus + NodeRegistry+ 17 个 commandproject/task/idea CRUD + run_workflow/list/get executionsrun_workflow 先落库 status=running 立即返回 execution_id事件经 app.emit("workflow-event") 转发前端完成后回写状态。注意NodeRegistry 不能用 default()script 工厂是 unimplemented! 占位),改为 new() + 手动注册真实 ScriptNode
**验证**cargo check 通过(仅 1 个 dead_code 警告releases/node_executions Repo 暂无 command 使用cargo test -p df-workflow 4 passed
**遗留问题**
1. executor 失败路径只发 NodeFailed 不发 WorkflowFailed目前由 run_workflow 在 IPC 层补发——后续应下沉到 executor
2. 前端 Store/View 仍硬编码,未调用任何 command
3. NodeRegistry::default() 的 unimplemented! 占位是隐患,应改为注册真实节点或移除
**下一步**
1. 前端类型对齐id: string、状态枚举对齐 types.rs+ src/api/ 封装层
2. Store 加 action 接 API核心 4 页面Dashboard/Projects/ProjectDetail/Tasks接 Store
3. 端到端验证tauri dev 创建项目 → 运行 3 节点工作流 → 日志实时展示
### [Sprint 4] 2026-06-11 — 前端交互功能API 层 + Store + 5 页面)
**工作内容**
- **API 层**:新建 `src/api/` 目录 — types.ts与 Rust Record 严格对齐)+ project/task/idea/workflow 四个 invoke 封装 + 事件监听listen workflow-event
- **Store 重写**`stores/project.ts` 改为 composable 模式reactive 全局状态 + 12 个 actions + computed stats不依赖 Pinia
- **Projects.vue**:接 Store 真数据 + 创建项目模态框(名称/描述)+ 卡片点击跳详情页 + status 中文映射
- **ProjectDetail.vue**:路由参数加载项目 + 真实任务列表 + **3 节点 Shell DAG 工作流运行**(环境检查→运行测试→构建产物)+ 实时事件日志 + 创建任务模态框 + onUnmounted 清理监听
- **Tasks.vue**:项目/状态双筛选联动 + 创建任务模态框(选择项目+标题)+ 状态/优先级中文映射
- **Ideas.vue**:捕捉想法模态框 + 选中详情tags JSON 解析、scores 展示)+ 删除功能
- **Dashboard.vue**:统计卡从 Store computed 计算 + Active Projects/Idea Pool 接真数据 + quickCapture 跳 Ideas
**代码变更**13 files, +1059/-486
**遗留问题**
1. 端到端验证未完成:需 tauri dev 实际创建项目→运行工作流→确认日志展示
2. 无数据时空状态展示较简陋
3. ~~Settings/Knowledge/Decisions 三个页面仍为硬编码 demo~~ ✅ Sprint 7 已解决(三 view 接 stores/{knowledge,settings}.ts无 ref([ 硬编码)
**下一步**
1. 端到端验证tauri dev → 创建项目 → 运行 3 节点工作流 → 日志实时展示
2. 修复验证中发现的问题
3. 考虑 Phase 2 规划
### [Sprint 5] 2026-06-11 — AI Chat 全功能Provider + 工具执行 + Agentic Loop
**工作内容**
- **df-ai Provider**OpenAI 兼容 HTTP clientSSE 流式解析ChatMessage/CompletionRequest 类型系统
- **V3 存储迁移**ai_providers、ai_conversations、ai_tool_executions 三张表 + 对应 Repo
- **AI IPC 命令层**17 个 command — 对话发送/流式推送、工具执行/审批门控(低风险自动/中高风险人工、对话管理CRUD + 切换)
- **AI 工具注册**12 个工具 — list_projects/tasks/ideas只读、create_project/task/idea创建、update_project更新、delete_project删除、read_file/list_directory/write_file文件系统
- **Agentic Loop**多轮工具调用循环max 10 轮),流式输出→检测工具调用→执行→结果回传→继续,中高风险暂停等审批后恢复
- **AI Chat 前端**:侧边栏面板 + 拖拽调宽 + 分离独立窗口 + 对话列表管理 + 工具审批弹窗 + AgentRound 多轮消息
- **Tauri Capabilities**ai-detached 窗口权限配置
**代码变更**20+ files新增 ~2000 行
**遗留问题**
1. ~~空白屏问题Vite 启动正常122s、HTML 200但 webview 显示空白~~ ✅ Sprint 7 已修复index.html 主题防闪烁脚本 + 启动计时埋点 __APP_T0 + body 背景色)
2. AI Node 未实现 — 目前只有骨架,需接入 df-ai 的 LlmProvider任务 #44
3. AI Chat LLM 调用逻辑待优化长对话可靠性、大任务执行稳定性、token 消耗控制(任务 #43)— **P0 可靠性已在 Sprint 6 完成P1 token 控制待办**
**下一步**
1. 排查并修复空白屏问题
2. 实际验证 AI Chat 端到端(选 Provider → 发消息 → 工具调用 → 审批)
3. HumanNode + Settings 页面
4. AI Chat LLM 调用逻辑优化(任务 #43
5. AI Node 实现(任务 #44
### [Sprint 6] 2026-06-11 — AI Chat 调用可靠性 P0 + 前端类型修复
**工作内容**
**A. AI Chat 调用可靠性 P0df-ai + src-tauri跨前后端 6 文件)** — 三路代理核对(调用链/上下文-token/前端)后定位可靠性死锁类问题,本轮按"先保命"只做 P0 五项P1 token 控制设计已定,留待下轮):
- **P0-1 连接超时**`openai_compat.rs` Client 加 `connect_timeout(30s)` 防连接阶段无限 hang不设总 timeout避免 reqwest 总时长限制误砍流式长生成任务)
- **P0-2 流式 idle timeout**`stream_llm``tokio::time::timeout(120s)``stream.next()`,防"连上后中途静默"无限 hang
- **P0-3 断连检测丢弃残缺**:维护 `finished_received` 标志,流尽未收到 finished 信号 → emit AiError + **丢弃残缺响应不当完整入库**(防脏历史污染)
- **P0-4 停止生成**`AiSession.stop_flag: Arc<AtomicBool>` + 新 `ai_chat_stop` command + 前端停止按钮streaming 时切换为珊瑚红方块按钮run_agentic_loop/stream_llm 多检查点响应,停止后保留已生成文本
- **P0-5 切对话防护**`ai_conversation_switch` 生成中拒绝切换(防 active_conversation_id 被改导致旧 loop 的 save_conversation 串台写库)
**B. 前端既有类型错误修复14 处,让 `bun run build` 通过)**
- `types.ts`:删重复的 `WorkflowEventPayload`declaration merging 冲突)
- `stores/project.ts`:补 `invoke` import + `payload.event.data` 类型断言 + **return 包 `reactive()` 自动解包 computed**(一处解决 Dashboard/ProjectDetail 的 store.stats/pendingApproval 解包,消费端零改动)
- `Ideas/Tasks/ProjectDetail`:去掉 `parseInt(number)` 误用 → `new Date(timestamp)`
- `ProjectDetail.vue`:删 unused `nextTick` import
- `AiChat.vue`:删死代码 `TOOL_STATUS_MAP` + `toolStatusLabel`
**C. AI Chat 代码审查修复9 处ai.rs + openai_compat.rs** — 对 P0 代码做 /review 审查后修复cargo check ✓:
- 🔴① `finish_reason="length"`max_tokens 截断)纳入 finished — 修「大任务输出撞 4096 上限被误判断连、丢弃整段响应」(与 ④ 配合是本轮关键)
- 🔴② 路径校验最小加固:正斜杠→反斜杠规范化 + 拒 `..` 遍历 + 扩 `.aws`/`.gnupg`(根治 workspace 白名单 + canonicalize 待定边界后再做)
- 🔴③ tool_calls 按 index 排序assistant 消息 line506 + tool_result line709 两处),消 HashMap 迭代乱序
- 🔴④ max_tokens 4096→8192贴合大任务
- 🟡⑤ `ai_chat_stop` 在审批等待态清 pending_approvals + 复位 generating原 stop_flag 无人读取,停止按钮表面无反应、会话卡 generating=true
- ⚪⑨ 4 个 i18n 小函数language_instruction/capability_section/behavior_rules/context_label合并为 `system_prompt_parts`
- ⚪⑩ `extract_title` 单次 chars 遍历
- ⚪⑪ reqwest builder 降级加 `warn!`
**代码变更**df-ai/openai_compat.rs、src-tauri/{commands/ai.rs, lib.rs}、前端 7 文件(+ C 轮 reviewai.rs、openai_compat.rs
**验证**cargo check -p devflow ✓(仅既有 warning、vue-tsc --noEmit ✓、bun run build ✓built in 2.47s
**遗留问题 / 下一步**
1. **P1 token 控制(任务 #43 续)**:流式 usage 采集(`stream_options:{include_usage:true}` + SSE usage 字段)+ token 预算自适应窗口chars≈/3.5 启发式估算)+ 历史摘要压缩(早期摘要 + 近期全文)—— 设计已定,未实施。**⚠️ usage 采集 2026-06-11 用户叫停暂缓结构层写一半已回退P1 从 token 估算/裁剪/摘要续**
2. **实测验证**`cargo tauri dev` 跑起来验证停止按钮/超时/断连真实生效(本轮仅编译 + 类型验证)
3. 停止生成边界LLM 正常输出时停止立即生效(<1sidle无输出时最多等 120s idle timeout —— P2 可用 `tokio::sync::Notify` 优化为绝对即时
4. ~~Sprint 5 遗留的空白屏问题仍待排查~~ ✅ Sprint 7 已修复(用户实测确认)
### [Sprint 7] 2026-06-11 — 空白屏修复 + i18n 接入 + 剩余页面接 Store
**工作内容**
- **空白屏修复**(前端):`index.html` 加主题防闪烁脚本localStorage `df-theme` 渲染前置 `data-theme`+ 启动计时埋点 `window.__APP_T0` + body 背景 `#0c0e1a``main.ts``.use(i18n)` 并打印 mount 耗时日志。用户实测确认空白屏消失
- **i18n 接入**`main.ts` 注册 `i18n` 插件;`i18n/index.ts` 完整legacy:false / globalInjection / zh-CN 默认 + en fallback / localStorage `df-language` 持久化App.vue 导航与各 view 改 `$t()`
- **剩余 3 页面接 Store**`Knowledge.vue`/`Settings.vue`/`Decisions` 去硬编码 `ref([...])`,对接新建 `stores/{knowledge,settings,ai}.ts`
- **新路由**`/` redirect → `/ai-home`,新增 `AiHome.vue`(默认落地页)/`AiDetached.vue`(分离窗口);路由 9→11 条
- **df-nodes 实现度修正**:核对发现 `script_node.rs` 早为真实实现(接 df_execute Shell + 非零退出码判断),`human_node.rs` 半实现(发 `HumanApprovalRequest` 事件 + 超时循环,但审批响应 TODO 直接返回"同意")—— 非文档原记"全骨架"
**遗留问题 / 下一步**
1. **P1 token 控制(任务 #43 续)**仍待办usage 采集用户叫停,从 token 估算/裁剪/摘要续)
2. **条件表达式引擎**conditions.rs 仍 true/false 字面量)— P2 未动
3. ~~AI Node 实现(任务 #44~~ ✅ 本轮已实现:`ai_node.rs` 接 df-ai `OpenAICompatProvider`,从 `ctx.config` 读 base_url/api_key/model/prompt/system_prompt/temperature/max_tokens 调 `complete()`prompt 支持上游输入优先;`df-nodes/Cargo.toml` 加 df-ai 依赖;`state.rs` build_registry 注册 "ai"。cargo check ✓(未端到端实测真实 LLM 调用)
4. **df-stages** 11 个 execute() 全空骨架 — Phase 4
5. **HumanNode 审批响应闭环**:目前直接返回"同意",需前端审批弹窗回写结果
### [Sprint 8] 2026-06-12 — Anthropic 协议 + 切对话不中断 + 技能联想需求调研
**工作内容**
**A. aichat 升级 A 路线UX 快赢,已实现并验证)** — 详见 memory `aichat-roadmap-ab-split`
- **Anthropic 协议 Provider**:新增 `crates/df-ai/src/anthropic_compat.rs`,实现 `LlmProvider` trait 覆盖 Anthropic Messages API`x-api-key` + `anthropic-version`、顶层 `system`、必填 `max_tokens`、SSE event 类型解析、`content_block` tool_use。按 `provider_type` 路由分发(`run_agentic_loop` / `ai_node`)。支持 GLM 订阅端点 `https://open.bigmodel.cn/api/anthropic`**用户实测对话流式 OK**
- **切对话不打断生成**:后端 `AiChatEvent` 全变体加 `conversation_id`agentic loop spawn 前快照 conv_id所有 emit 填充;`ai_conversation_switch` 生成中只读返回;前端 `stores/ai.ts` 按 conversation_id 路由(后台对话事件不污染当前视图,完成/错误时刷新侧边栏)
- **审查项落地**:删全屏 Tool Approval Modal保留行内卡片审批、错误友好化`friendlyError` 正则映射 404/401/timeout/network → 中文提示 + `isError` 红色气泡)、智能滚动(`isNearBottom` < 80px 阈值、provider bar 点击切换、未配 provider 空状态引导、删死 class
- **B 路线(规划式多智能体)单独立项**:填 `coordinator.rs` + `conditions.rs` 空壳,详见 memory `aichat-decision-capability`
**B. 技能联想功能需求(本轮重点,未实现,需求阶段)**
- **需求**aichat 输入框输入 `/` → 联想列出本机 Claude 技能SKILL.md按输入过滤选中插入 `/name`;发送时后端读 SKILL.md 全文注入 system prompt / context
- **首批数据源 = Claude 3 类**SKILL.md frontmatter 统一 `name` / `description` / `user_invocable` / `metadata.argument-hint` / `triggers[]`,只取 `user_invocable: true`
1. Claude skills`~/.claude/skills/*/SKILL.md`23 个sleep / mission-control / idea / cpa 等)
2. Claude commands`~/.claude/commands/*.md`1 个idea
3. Claude plugins`~/.claude/plugins/marketplaces/**/skills/*/SKILL.md`caveman 全家、官方 frontend-design / skill-creator / mcp-server-dev、wuming prompt-optimizer`cache/``marketplaces/` 重复需按 path 去重)
- 加项目级 `.claude/skills` + `.claude/commands`DevFlow 暂无)
- **实现要点**:① 后端新 IPC `list_skills()` 扫 Claude 3 类来源解析 frontmatter + 按 path 去重,返回 `[{name, description, argument_hint, triggers, source}]`;② 前端输入框 `/` 触发联想浮层(名称 + description`/name` 发送 → 后端读 SKILL.md 注入 context④ 跨平台 home 路径dirs crate
**C. 多工具 skill 体系调研结论(仅记录,后续按需扩展)**
| 工具 | 本机状态 | skill 机制 | 是否纳入 |
|------|---------|-----------|---------|
| Claude Code | ✅ 已装 | SKILL.mdskills + commands + plugins 三类) | ✅ 首批数据源 |
| Codex (OpenAI) | ✅ 已装 | SKILL.md`~/.codex/vendor_imports/skills/skills/.curated/*/SKILL.md`39 个figma / notion / playwright / security / vercel·netlify·render-deploy / latex 等frontmatter 与 Claude 一致,可统一解析) | ⏳ 后续可扩展 |
| openclaw | ✅ 已装 | 多 agent gateway`~/.openclaw/openclaw.json` 注册 8 agent 绑各 workspace + glm-5经飞书 channel binding非 SKILL.md`agents/` 实体目录暂空 | ❌ 属 agent 选择层,非 skill 联想,暂不纳入 |
| opencode | ❌ 未装 | AGENTS.md + custom agents + slash commands机制待确认 | ⏳ 待装后调研 |
**代码变更**A 路线 — `crates/df-ai/src/{anthropic_compat.rs, lib.rs}``src-tauri/src/commands/ai.rs``crates/df-nodes/src/ai_node.rs``src/views/Settings.vue``src/stores/ai.ts``src/components/AiChat.vue``src/api/types.ts`
**遗留问题 / 下一步**
1. **技能联想B未实现** — 需求已记,首批聚焦 Claude 3 类,等排期(工作量中:后端扫文件 + IPC、前端联想浮层
2. **A 路线剩余场景实测**:切对话不中断(场景 2/3、错误友好化场景 4待用户实测
3. **B 路线(规划式能力)**coordinator / conditions 空壳,单独立项
<!--
### [Sprint N] YYYY-MM-DD — 简述
**工作内容**
- 具体做了什么
**代码变更**
- 修改了哪些文件/Crate
**遗留问题**
- 1. ...
**下一步**
- 1. ...
-->
---
## 七、开发约定
### 构建命令
```bash
# Rust 检查
cd E:/wk-lab/devflow && cargo check
# 前端开发
cd E:/wk-lab/devflow && bun run dev
# Tauri 开发(必须用这个,不能 cargo build
cd E:/wk-lab/devflow && bun run tauri dev
# Tauri 构建
cd E:/wk-lab/devflow && bun run tauri build
```
### 关键设计决策
1. **引擎不绑定业务** — Workflow Engine 只做 DAG 执行,阶段是插件
2. **无 panic** — 所有占位代码返回空/默认值,不使用 `todo!`/`unimplemented!`
3. **本地优先** — SQLite 嵌入,不依赖云服务
4. **想法第一公民** — 想法池独立于项目
5. **多任务/分支并行** — 同一项目多任务各绑 Git 分支
### 复用资源
| 资源 | 路径 | 复用点 |
|------|------|--------|
| u-desk-rust Tauri 经验 | `E:/wk-lab/u-desk-rust/` | Workspace + crate 拆分 + Tauri v2 |
| Rust proxy 工具链 | `E:/wk-oth/rust-work/` | 连接管理,内嵌调用 |
| Tauri 开发铁律 | Memory: `feedback_tauri_dev_rules` | 必须用 `cargo tauri dev/build` |