新增: 批次工作落地(推进链/评估闭环/事件总线/并发/加固) + 技术债清理 + 文档整理

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

清理:
- aichat 技术债(误报 allow/死导入/过时注释 30 项)
- URGENT.md 删除(11 项加急全解决/迁 todo)
- 文档整理(todo/待决策/待审查/ARCHITECTURE/INDEX + 总线/技术债审查新文档)
This commit is contained in:
2026-06-21 20:51:26 +08:00
parent 330bb7f505
commit bd6a41fe6e
111 changed files with 11932 additions and 1034 deletions

View File

@@ -51,7 +51,7 @@ candidate ──→ pending_review ──→ published ──→ archived
|---------|------|
| `knowledge_list(status?)` | 列表,默认仅 publishedlibrary 纯已发布F-260616-02 决策 a显式传 status 按该状态过滤(含 archived |
| `knowledge_get(id)` | 单条查询 |
| `knowledge_search(query, kind?, limit?)` | LIKE 检索top-N≤3 |
| `knowledge_search(query, kind?, limit?)` | LIKE 检索,默认 top-3`limit.clamp` 上限 20`min(20)` |
| `knowledge_create(input)` | 创建status=candidate|
| `knowledge_update_status(id, status)` | 状态转换(含合法矩阵校验)|
| `knowledge_record_reuse(id)` | reuse_count +1 |
@@ -68,9 +68,8 @@ candidate ──→ pending_review ──→ published ──→ archived
```rust
pub struct KnowledgeConfig {
pub auto_extract: bool, // 提炼总开关,默认 true
pub trigger_mode: ExtractTrigger, // on_complete | on_idle | manual_only
pub trigger_mode: ExtractTrigger, // on_complete | manual_only(OnIdle 已下线,见 KP-2)
pub min_messages: u32, // 守卫:最少消息数,默认 4
pub idle_timeout_ms: u64, // 闲置触发超时,默认 30000
pub auto_inject: bool, // 聊天注入开关,默认 true
pub vector_enabled: bool, // 向量检索开关,默认 false
pub embedding_provider_id: Option<String>, // 仅 openai_compat 类型
@@ -78,7 +77,7 @@ pub struct KnowledgeConfig {
}
```
存储:`AppState.knowledge_config: Arc<Mutex<KnowledgeConfig>>`(内存,重启恢复默认值)。
存储:`AppState.knowledge_config: Arc<Mutex<KnowledgeConfig>>` 为内存真相源,并通过 `SettingsRepo` KV 表key=`df-knowledge-config`)持久化;`knowledge_save_config` 落库、`AppState::init` reload 恢复KP-1 已修复)。
---
@@ -140,24 +139,34 @@ Tier 1+ 目标MCP Shell 封装(`mcp-server` 转发 IPC外部工具使
## 已知问题2026-06-16 审查)
> 来源全量源码逐行审查knowledge.rs / knowledge_inject.rs / knowledge_timeline.rs / stores/knowledge.ts / Knowledge.vue / agentic.rs / commands.rs / state.rs
>
> **修复进度汇总2026-06-21**
> - ✅ 已修复:**KP-1** 配置持久化 / **KP-2** OnIdle 下线;跨审查项 **R-P1-4** `build_provider` 统一工厂secret::build_provider_for、**CR-28** error 通道AiError emit 覆盖 build_provider_for Err 分支)、**CR-29** 审批等待态竞态B-260615-26 guard disarm + try_continue generating 复位重检)。
> - 🔧 本 workflow 修复中:**KP-3**try_continue 知识注入)/ **KP-5**(编辑生命线事件)/ **KP-6**(嵌入失败重试/标记)。
### 🔴 P0 严重
#### KP-1: KnowledgeConfig 不持久化 — 重启丢失全部配置
#### KP-1: KnowledgeConfig 不持久化 — 重启丢失全部配置 ✅ 已修复
> **状态已修复P0 设置走查-2026-06-21。** `knowledge_save_config` / `knowledge_get_config` 现读写 `SettingsRepo` KVkey=`df-knowledge-config`JSON 序列化);`AppState::init` 增加 `reload_knowledge_config` 恢复。下方原文保留供溯源。
- **位置:** `state.rs:208` 初始化 + `knowledge.rs:knowledge_save_config`
- **现象:** `knowledge_save_config` 仅写入内存 `Arc<Mutex<KnowledgeConfig>>`,未落库。应用重启后 `AppState::init` 永远用 `KnowledgeConfig::default()`
- **影响:** 用户配置的向量检索 provider、提炼参数等关闭应用后全部丢失。系统已有 `app_settings` KV 表和 `SettingsRepo` 可用,但未接入
- **修复方向:** `knowledge_save_config` / `knowledge_get_config` 读写 `SettingsRepo`key=`knowledge_config`value=JSON
#### KP-2: OnIdle 触发模式完全未实现 — 配置项为死代码
#### KP-2: OnIdle 触发模式完全未实现 — 配置项为死代码 ✅ 已修复(下线)
> **状态已修复OnIdle 下线)。** `ExtractTrigger` 仅保留 `OnComplete` / `ManualOnly` 两变体,`OnIdle` 变体与 `idle_timeout_ms` 字段已从 `state.rs` 移除(`idle_timeout_ms` 在 `src-tauri` 内零残留)。`trigger_mode` 取值同步收敛。下方原文保留供溯源。
- **位置:** `state.rs` 定义 `ExtractTrigger::OnIdle` + `idle_timeout_ms``knowledge_inject.rs:maybe_spawn_extraction`
- **现象:** `maybe_spawn_extraction` 仅检查 `trigger_mode == OnComplete``OnIdle``ManualOnly` 都直接 `return Ok(())``idle_timeout_ms` 在整个 `src-tauri` 中零引用
- **影响:** 用户选择 `OnIdle` 模式后,知识提炼永远不会触发(与 ManualOnly 行为相同但无任何提示)
- **修复方向:** 要么实现 idle 定时器tokio::time::interval 轮询 AiSession 最后活动时间),要么移除 OnIdle 变体并在前端隐藏该选项
#### KP-3: 审批恢复循环路径缺失知识注入
#### KP-3: 审批恢复循环路径缺失知识注入 🔧 本 workflow 修复中
> **状态:本 workflow 修复中。** `try_continue_agent_loop`agentic/mod.rs现已在续跑轮重建 system prompt 时调用 `build_knowledge_context` 注入知识库上下文(参考代码 :1420-1444 区段注释)。下方原文保留供溯源。
- **位置:** `agentic.rs:try_continue_agent_loop` vs `commands.rs:ai_chat`
- **现象:** `ai_chat` 首次消息时调用 `build_knowledge_context` 注入 system prompt`try_continue_agent_loop`(审批通过后恢复循环)仅调用 `build_system_prompt`**未调用** `build_knowledge_context`
@@ -174,14 +183,18 @@ Tier 1+ 目标MCP Shell 封装(`mcp-server` 转发 IPC外部工具使
- **影响:** 知识库 Tab 列表加载的是 `list_non_archived()`(含 candidate/pending_review/published但搜索只能命中 published导致列表显示条目数 > 可搜索条目数,体验矛盾
- **修复方向:** 前端搜索走独立的 `knowledge_list` + 前端过滤,或后端新增 `search_all_status()` 方法供前端使用
#### KP-5: 编辑操作缺失生命线事件
#### KP-5: 编辑操作缺失生命线事件 🔧 本 workflow 修复中
> **状态:本 workflow 修复中。** 计划在 `knowledge_timeline.rs` 新增 `EVENT_UPDATED` + `KnowledgeTimeline::record_updated()`,并接入 `knowledge.rs:knowledge_update`:375-411。下方原文保留供溯源。
- **位置:** `knowledge.rs:knowledge_update`
- **现象:** `knowledge_create``record_created``knowledge_update_status``record_status_change`,但 `knowledge_update`(编辑 title/content/tags 等)**无任何 Timeline 调用**
- **影响:** 知识被编辑修改后,生命周期时间线中不显示编辑记录,审计追踪存在断档
- **修复方向:** 新增 `EVENT_UPDATED` 事件类型 + `KnowledgeTimeline::record_updated()` 方法
#### KP-6: 嵌入生成失败无重试/标记 — 可能永久无向量索引
#### KP-6: 嵌入生成失败无重试/标记 — 可能永久无向量索引 🔧 本 workflow 修复中
> **状态:本 workflow 修复中。** 计划在 `knowledge_inject.rs:spawn_embedding_for_knowledge`:91-118增加失败标记/重试,配合 `migrations.rs`knowledges 表)`embedding IS NULL` 补偿。下方原文保留供溯源。
- **位置:** `knowledge_inject.rs:spawn_embedding_for_knowledge`
- **现象:** 发布时 fire-and-forget 生成嵌入,失败只 `warn log`,无重试机制、无失败标记