diff --git a/Cargo.lock b/Cargo.lock index 9670bb2..04e9e6f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1039,7 +1039,7 @@ dependencies = [ [[package]] name = "devflow" -version = "0.1.3" +version = "0.1.5" dependencies = [ "anyhow", "async-trait", diff --git a/crates/df-ai/src/ai_tools.rs b/crates/df-ai/src/ai_tools.rs index f5e57d8..003bcab 100644 --- a/crates/df-ai/src/ai_tools.rs +++ b/crates/df-ai/src/ai_tools.rs @@ -488,10 +488,7 @@ pub fn object_schema(properties: Vec<(&str, &str, bool)>) -> Value { let mut required = Vec::new(); for (name, type_str, is_required) in properties { - props.insert( - name.to_string(), - serde_json::json!({ "type": type_str, "description": "" }), - ); + props.insert(name.to_string(), serde_json::json!({ "type": type_str })); if is_required { required.push(name.to_string()); } @@ -579,6 +576,9 @@ mod tests { let schema = object_schema(vec![("name", "string", true), ("age", "integer", false)]); assert_eq!(schema["type"], "object"); assert_eq!(schema["properties"]["name"]["type"], "string"); + // 空属性描述不落盘:序列化输出不含 "description" 键(省 LLM 请求白携带) + let serialized = serde_json::to_string(&schema).unwrap(); + assert!(!serialized.contains("description")); let required = schema["required"].as_array().unwrap(); assert_eq!(required.len(), 1); assert_eq!(required[0], "name"); diff --git a/docs/02-架构设计/devflow-core抽取-设计-2026-10-22.md b/docs/02-架构设计/devflow-core抽取-设计-2026-10-22.md new file mode 100644 index 0000000..1029af4 --- /dev/null +++ b/docs/02-架构设计/devflow-core抽取-设计-2026-10-22.md @@ -0,0 +1,64 @@ +# devflow-core 抽取设计(云化阶段2) + +> 任务 711e1390 · 2026-10-22 · 勘察依据:workspace 9 个 crate Cargo.toml 实测 + +## 一、现状 crate 依赖图(实测) + +``` + df-types (零依赖: serde/thiserror/chrono/uuid) + ┌────┴──────────────────────┐ + df-ai-core df-workflow + (零tauri, trait层) (DAG/条件引擎, 仅依赖df-types) + │ │ + df-storage ←──df-ai─────┐ df-nodes ──┐ + (rusqlite+keyring, (reqwest流式) (聚合5crate) │ + 依赖df-types/df-ai-core) │ │ + └──────┬───────────┴──────────────┘ + ▼ + src-tauri (Tauri 壳, 68 IPC commands) + + 隧道链: df-tunnel(出站WS) → df-relay(云端中继镜像) → df-im-gateway(IM适配) + 工具链: df-execute(零依赖) / df-mcp / df-ideas / df-project(依赖df-types) +``` + +## 二、核心发现:devflow-core 已基本存在,无需「抽取」只需「收口」 + +关键事实:**UI 无关的 crate 已经全部独立**——df-types/df-ai-core/df-workflow/df-storage/df-ai/df-nodes/df-project/df-execute/df-tunnel 均零 tauri 依赖,tauri 只在 src-tauri 壳层。昨天的「抽取」假设(需要从 8-crate 里剥离 UI 耦合)不成立,工作量大幅下降。 + +## 三、设计(三步收口,非重构) + +### S1. 虚拟 target:workspace 内定义 `devflow-core` 集合(0.5 天) +不建新 crate,先以约定划界:`crates/df-{types,ai-core,workflow,storage,ai,nodes,project,execute}` = core 集合。云端服务直接 path 依赖这组 crate。**零代码改动**。 + +### S2. 存储层 trait 化(2-3 天,唯一实质改造) +- 现状:df-storage 直用 rusqlite(bundled),SQL 内嵌 +- 改造:定义 `StorageProvider` trait(项目/任务/工作流/知识 CRUD 切面),SQLite 为默认实现;PostgreSQL 实现放独立 `df-storage-pg`(feature-gated,云端服务才编译) +- 保留双库分歧模式(devflow.db / devflow-dev.db 的 cfg! 分支语义) +- 风险:rusqlite 与 sqlx-tokio-postgres 的异步模型差异 → trait 方法全部 async(workspace 已有 async-trait) + +### S3. AI Provider 双模式(1 天) +- df-ai/df-ai-core 已是 trait 层(reqwest 直连,key 本机)——天然支持云端托管:新增 `RemoteProvider` 实现(key 由 df-cloud-server 下发),编译期 feature 切换,个人版行为零变更 + +### 云端落地形态(阶段2 末期) +- `df-cloud-server`:新 crate(或独立仓),path 依赖 core 集合 + df-storage-pg,Axum/actix 暴露 HTTP+WS,部署同主机 Nginx 后 +- 复用 df-tunnel 协议与 u-relay 管道层,拓扑不变 + +## 四、迁移步骤 + +1. S1 约定划界 + `cargo check` 全绿验证(不动代码) +2. S2 StorageProvider trait 引入,SQLite 实现先行,桌面端切到 trait 调用(行为零变更,IPC 68 commands 不动) +3. df-storage-pg 新 crate + 集成测试(本地 docker postgres) +4. S3 RemoteProvider feature +5. df-cloud-server 骨架(healthz + 只读任务查询先行) + +## 五、风险 Top3 + +| 风险 | 缓解 | +|---|---| +| rusqlite 同步 API vs PG 异步驱动的 trait 撕裂 | trait 全 async + SQLite 实现内 spawn_blocking | +| df-storage 依赖 df-ai-core(ModelConfig 反序列化)造成边界混杂 | 接受(同属 core 集合,不跨集合) | +| 与阶段1 联调互踩 src-tauri | S2 改动收敛在 df-storage 内部 + 调用方,分批提交攒批 | + +## 六、工作量总估 + +S1 0.5d + S2 2-3d + S3 1d + cloud-server 骨架 1-2d ≈ **5-7 天**(远低于原「抽取重构」预期)。 diff --git a/docs/02-架构设计/devflow云化架构-2026-10-21.html b/docs/02-架构设计/devflow云化架构-2026-10-21.html new file mode 100644 index 0000000..4b7cd68 --- /dev/null +++ b/docs/02-架构设计/devflow云化架构-2026-10-21.html @@ -0,0 +1,143 @@ + + + + + +DevFlow 云化架构 — 2026-10-21 + + + +
+ +

DevFlow 云化架构方案

+
拍板日期 2026-10-21 · 阶段1 已在飞书实机闭环验证 · 状态源:任务 711e1390 / 6e13f49b
+ +

一、核心决策(已拍板)

+
+ +
+ +

二、部署拓扑总览

+
  用户四端                ┌─────────────────── 云端(已有云主机复用,不新购)──────────────────┐
+  ┌────────┐             │                                                                 │
+  │ 飞书   │──WS 长连接──┼──▶ ┌─────────────────────────────┐                              │
+  │ 钉钉   │─Stream Mode─┼──▶ │ df-im-gateway (Rust, 新增)   │                              │
+  │ 企微   │──WS 长连接──┼──▶ │ · 四端协议适配(验签/AES/卡片)  │                              │
+  │ Web    │─HTTPS/WSS───┼──▶ │ · WS Commander 身份          │                              │
+  └────────┘             │    │ · 审批转发                    │                              │
+                         │    └────────────┬────────────────┘                              │
+                         │                 │ df-tunnel 协议                                │
+  u-relay :9180  ◀──────┼─────────────────┘  (纯中继:WS 长连接管理/路由/Commander 注册表)   │
+                         │                                                                 │
+                         │    Nginx :443 (TLS 终结 + 反代, 后续挂 df-cloud-server 用)         │
+                         │                                                                 │
+                         └────────┬──────────────────────────────┬──────────────────────────┘
+                                  │ 出站 WS(穿透 NAT)             │ 出站 WS
+                                  ▼                              ▼
+                   ┌── 用户本机 ─────────────────────────────────────────────────┐
+                   │  DevFlow 桌面端 (Tauri 2, 唯一执行引擎 + 状态源)              │
+                   │  · AI Provider 直连 (GLM/DeepSeek, key 本机)                 │
+                   │  · SQLite (任务/对话/审批 全量状态)                           │
+                   │  · 8-crate workspace (+未来第9 crate df-im-gateway)          │
+                   └─────────────────────────────────────────────────────────────┘
+ +

三、数据流

+ + + + +
方向路径用途
下行指令IM/Web → df-im-gateway → u-relay → 桌面端发消息 / 审批 / 停止
上行事件桌面端 → u-relay → df-im-gateway → 各端流式回复 / 状态广播
+
⚠ 桌面端全程主动出站,不开任何入站端口——NAT 友好,家里/公司网络都能用;云端被攻破也拿不到业务数据(无状态管道)。
+ +

四、阶段路线

+
+
+

阶段1 · IM 远程接入 进行中·飞书实机

+
    +
  • 飞书单端 E2E 闭环(握手→事件→卡片流式→审批回调→流式回复)——代码已全落地,实机验证中
  • +
  • df-im-gateway 作为 workspace 第 9 crate 承载
  • +
  • 钉钉/企微/Web = 后续扩展,不阻塞
  • +
  • 唯一动 u-relay 的点:Commander 身份注册(配置级)
  • +
+
+
+

阶段2 · devflow-core 抽取 设计启动

+
    +
  • UI 无关 crate 界定为 devflow-core(工作流引擎/任务管理/存储层)
  • +
  • 存储 trait 双实现:SQLite(本地)/ PostgreSQL(云端)
  • +
  • AI Provider 双模式:key 本机直连(个人版)/ 云端集中托管(团队版)
  • +
  • 同主机 Nginx 后追加 df-cloud-server,管道层不动
  • +
+
+
+

阶段3 · 完整云端化 预留

+
    +
  • 云端接管全部业务逻辑,桌面端降级薄客户端
  • +
  • 多用户 / 多设备 / 团队协作(任务池/审批/知识库共享)
  • +
  • 可选本地引擎保离线能力
  • +
+
+
+ +

五、组件清单与状态

+ + + + + + + +
组件形态部署位置状态
u-relay :9180Rust 二进制(已有)云端主机,systemd 原子切换✅ 复用零改动
df-im-gatewayRust crate(新增,方案A先驻 workspace)联调期本机 → 常驻期云端主机✅ 飞书端已通,实机验证
Nginx :443TLS 终结 + 反代(已有)云端主机✅ 复用
DevFlow 桌面端Tauri 2 应用用户本机✅ 唯一状态源
df-cloud-serverRust 服务(规划)云端主机,Nginx 后阶段2 拍板后立项
+ +

六、风险与关键点

+
+ +
+ +
DevFlow 云化架构 · 生成于 2026-10-21 · 依据知识库拍板记录 978a3cf0 · 相关任务 6e13f49b / 711e1390
+
+ + diff --git a/docs/todo.md b/docs/todo.md index 8b5c3c1..c4bf8ac 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -418,6 +418,10 @@ - [ ] 913 ✅转待办 验收:auto 模式审批架空语义收敛——auto_takeover_all 触发高危工具(run_command 等)须按 S2/信任分级处置(拦截或旁路留痕);审计表可查 auto 会话审批触发/旁路记录,产品语义写入设计档。 - [ ] 观察进化系统只写不读:knowledges 1033 条/embedding 全 NULL/83.6% 零复用/knowledge_search 仅 5 次 - [ ] 915 ✅转待办 验收:知识库由「只写不读」转读写闭环——embedding_status 回填(或明确弃用向量路径),≥半数知识进检索候选,knowledge_search 调用与复用率实测上升(复用率 >50%、检索调用非个位数);口径=同库 DB 查询核验。 + - [~] **P0 治理批已落地(2026-10-23,用户拍板「推进落地」)**:①写入防重融合——提炼前按窗口关键词查已有知识 top5 随 prompt 附给 LLM,schema 增 action=new|update+target_id 协议,重复经验覆盖融合(target_id 校验候选集防幻觉 id),knowledge_insert 工具同口径(update_target_id);②淘汰机制——repo.archive_stale(零复用+low+超龄→archived,UPDATE RETURNING 批量)+knowledge_archive_stale command(逐条留痕 status_changed),检索面 status 白名单天然排除 archived,检索排序加 confidence 决胜键(两处 SQL);③向量路径「明确弃用检索用途」已声明(注释+实测 0/1688,阶段3 改职建边引擎)。验收:cargo test -p df-storage 242 passed(含 3 新测:update_content_merged 融合轨迹/archive_stale 三条件筛选/search_keywords 置信决胜)+cargo check -p devflow EXIT 0+knowledge 58 passed+tool_registry 50 passed(工具数未破)。✅ **存量清理批已执行(2026-10-23 用户授权「1」)**:先备份(backup API 快照 1688 条核对一致)后变更,判据校准 low→非high(生产实证 LLM 置信系统性偏高 low 仅 1/1688,原判据命中 0 形同虚设),归档 62 条(published 1550→1488)+knowledge_events 逐条留痕可回滚;**未执行档**:零复用+超龄不看置信 632 条(84% high 已无区分度,规模大待单独拍板)。台账:temp/数据变更台账.md。诊断与终局设计见 temp/知识库治理审查-20261023.md 与 temp/知识中枢终局设计-20261023.md(五阶段路线:0治节点→1连边→2图召回→3自动建边→4中枢共享,百万级换挡表已实测留档)。 + - [~] **阶段1 连边已落地(2026-10-23 续批,用户「继续」)**:①V54 迁移 knowledge_edges 边表(kind/weight/origin/last_verified_at,双列索引,LATEST_SCHEMA_VERSION 53→54);②repo 边 CRUD——insert_edge(双向去重幂等+触验)、list_related(双向 JOIN+对端展开,archived 不展示);③提炼链 related_ids 协议——prompt 规则 7(new 时列最多 3 个强相关已有条目),解析循环建 similar 边(origin=llm-tag,target 校验候选集防幻觉);④knowledge_insert 工具 related_ids 同口径+knowledge_search 返回补 id 字段(agent 引用已有条目的前提);⑤详情页「关联知识」区块——knowledge_get_detail payload 直带 related,折叠 section+点击跳对端(open-related→selectKnowledge),双语 i18n。验收:cargo test -p df-storage 243 passed(V54 迁移幂等门+边 CRUD 新测)+cargo check -p devflow EXIT 0+vue-tsc --noEmit EXIT 0。阶段2(图召回激活扩散)待下批。 + - [~] **治理续批(2026-10-24 用户「自主推」+「蒸馏压缩合并/打包换装」)**:①激进档已执行——自主授权(可逆+留痕+备份),归档 570 条零复用超龄(置信不限),累计 archived 632/published 1550→918,备份 devflow.db.bak-知识库淘汰批二-1024,台账已登记;②存量蒸馏合并功能落地——knowledge_distill.rs(archived 按 kind 分组 limit 20→LLM 合订本 candidate→merges 边 origin=distill 连组内全部条目,strip_code_fence/candidate_record_from_item pub(crate) 复用)+repo.list_by_status_kind(created_at 升序最老优先)+knowledge_distill_group command;③版本 0.1.3→0.1.4,打包换装 package-devflow.ps1 -Mode full 执行中。验收:cargo test -p df-storage 244 passed(含 list_by_status_kind 新测)+cargo check EXIT 0。蒸馏批生产执行(app 内按 kind 逐组人工触发)与阶段2图召回待下批。 + - [~] **渐进披露批(2026-10-24 /swarm 四执行者+主控核查,用户「披露式按需召回加载」+「不牺牲缓存命中」)**:D1 文档探索策略段 11.9K 全文常驻→路标 260 字符常驻+全文按需(URL/文档词触发,fingerprint 含门位,全文进 volatile 侧——缓存安全主控核查通过);D2 技能清单 120条×80字→60条×40字;D3 devflow.md 投影目录化(纪律分区全文保留,其余目录+read_file 按需,总闸 6000→3000);D4 工具 schema 属性级空串 description 清理(81 工具×~4 属性,~10KB/轮);驳回工具两跳披露(冻结集跨轮字节前缀稳定约束>收益)。**附带修复目标切换失忆(用户实证「切换目标两三轮后拉回老目标」)**:G1 钉扎段加仲裁行「用户最近指令>登记目标」——根因=system 级老目标压过对话流新意志。验收:cargo test -p devflow --lib 932 passed+df-storage 244+df-ai 605+cargo check EXIT 0。**换装 0.1.4 完成**(装机 exe 版本实测 0.1.4/PID 存活);⚠️ 登记换装脚本验证缺陷:swap 启动验证只查进程存活+读 mtime,build 期间旧进程复活锁文件致 NSIS 静默安装失败仍报「换装成功」——验证应加装机 exe 版本核对(待修)。新会话提示词静态底座 16.2K→~4.5K 字符+工具载荷省 ~10KB/轮。 - [ ] 观察多模态未走通:贴图落"[图片已忽略]"占位,实际靠 run_command 外部 vision CLI 绕路 - [ ] 917 ✅转待办 验收:贴图走原生视觉路径不落占位——非视觉模型收图时明确拒绝或切视觉模型,视觉模型直接出识别结果,不再靠 run_command 调外部 vision CLI 绕路;实测贴图会话零"[图片已忽略]"占位。 - [ ] 观察编排面零使用:workflow/node_executions/ai_plans 等 9 张表全 0 行;四会话分工 origin 89/89 全 NULL @@ -776,11 +780,13 @@ - [ ] M4-b UX 小批(i18n 补键/token 化/aria/loaded/Esc/队列带图标记)——未动,留板 - [x] **收尾令(用户 2026-10-18 21:41 飞书下达到 AI-Ops,转登记)**:M1 销账后——①按 G3 提交本批改动并 push origin main(推送令已拍板,限本批范围);②启动 dev 模式运行验证(重点验 M4 反口水话与 M1 恢复链);③完成信息经飞书推送用户。若 AI-Ops 监测到 M1 已销账而本条未执行,AI-Ops 代执行。——✅ 23:0x AI-Ops 执行完毕:四笔分组提交(05d0f89 上下文P1批/302c4bc 飞书闭环/25ec9cf 前端令牌批/fb83339 文档)已 push(3bb662f..fb83339);验收 cargo test 2281 passed 0 failed+vue-tsc EXIT 0;dev 已跑(vite:1420 HTTP 200);完成信息已飞书推送。 -### 💡 2026-10-19 上下文管理对标 u-claw·大批量并行差距(AI-Ops 分析,待领单) -> 用户战略令(10-18 飞书):DevFlow 上 Linux 替代 u-claw+CC,第一门槛=上下文管理三命题(丢记忆/历史召回/token 高效),大批量多会话并行是常态场景。详情:[02-架构设计/专项设计/上下文管理对标u-claw与大批量并行差距分析-2026-10-19.md](../02-架构设计/专项设计/上下文管理对标u-claw与大批量并行差距分析-2026-10-19.md) -- [ ] P0-A usage 真值采集:stream_options.include_usage 三口径(input/cache_read/cache_creation),6 月 P1 设计复活(当时暂缓,结构层已回退干净) -- [ ] P0-B 压缩触发改 token 水位主判据(≈窗口 70% 可配,体积兜底;u-claw 86e9216 同款,治压缩/请求比 4.8 偏频),依赖 P0-A -- [ ] P1-A 跨会话归档检索(/history 等价):消息全文搜索(FTS5 或 LIKE 起步)+检索指令+AI 检索指引进 sop -- [ ] P1-B boundary/loop_state 写入闭环(代语义显式化+换代通知推送) -- [ ] P2-A 大内容外置纪律(大结论写盘 out/+回复给路径,system prompt 处理规则) -- [ ] P2-B 并行资源治理(全局 token 预算视图/多会话压缩协防)——与 Linux 化/远程容器方向合流设计 +### 💡 2026-10-19 上下文管理对标 u-claw·大批量并行差距(10-21 已批次化,待领单) +> 用户战略令(10-18 飞书):DevFlow 上 Linux 替代 u-claw+CC,第一门槛=上下文管理三命题(丢记忆/历史召回/token 高效),大批量多会话并行是常态场景。详情:[02-架构设计/专项设计/上下文管理对标u-claw与大批量并行差距分析-2026-10-19.md](../02-架构设计/专项设计/上下文管理对标u-claw与大批量并行差距分析-2026-10-19.md)。**10-21 勘察批**:分析落 temp/分析-P0A/P0B/P1A/P1B-P2A-2026-10-21.md+temp/待完成六条-汇总方案-2026-10-21.md。 +- [x] **T1 批 P0-A usage 口径统一**(S-M,无依赖,推荐首批):考古实锤=三口径列已齐(V38 864c696 prompt/completion+V39 a031521 cache_hit/cache_miss/reasoning,ai_messages;V5 ai_conversations 累加),include_usage 已注入——**真缺口=两栈口径漂移**:openai_compat.rs:542-549 缺失全零静默入库(三路走查:85)vs Anthropic 缺失硬失败、anthropic cache 段少记 prompt;修=缺失回退估算+is_estimated 标记+cache 段口径对齐 u-claw 三口径(input/cache_read/cache_creation)。拍板:缺失回退策略确认——✅ **2026-10-22 落地**:anthropic_helpers usage 整段+字段双层 serde default(端点不回 usage 不再炸帧,全零下行走既有估算轨 round_usage_effective 打 is_estimated;openai 臂既有 serde default 同口径零改动)+cache 三口径归一(prompt=input+cache_read+cache_creation 对齐 openai 全量输入语义,apply_anthropic_event 归一点)+round_is_estimated 全链透传(stream_relay→loop→completed_event)。df-ai 603 绿 +- [x] **T2 批 P0-B 压缩水位判据**(S 级两阶段,Phase1 无硬依赖可首批并行):方案实锤=temp/分析-P0B-压缩水位判据-2026-10-21.md——现行判据 context_lifecycle.rs:117-138(history>0.6×(budget−sys)+保护区 6 条);窗口分母已解决(model_context.rs:31 三级来源,budget 模型感知零新增管道);Phase 1=判据行加分支(KV `df-ai-compress-watermark` 默认关+`-ratio` 默认 0.70,分子维持估算,开关关逐字节等价)/Phase 2=分子换 usage 真值(usage_anchor 锚点,缺失自动回退);与 W1-W4 交互=触发后移缓存净增(W3 可验),红线 trigger+max_round_growthratio×budget 严格大于,替换语义不并联)+parse_watermark_ratio 钳位 [0.3,0.95](prompt.rs:775,保 headroom≥5% budget,debug_assert 契约)+KV 开关默认关+S1 同轴挂点注释钉死实施序;Phase2 usage 真值分子待 T1 数据观察后另批 +- [x] **T3 批 P1-A 跨会话检索**(核心 2.5d/含前端 3.5d,无依赖可并行):方案已实锤=temp/分析-P1A-跨会话检索-2026-10-21.md(终版含生产库实测)——**实测:ai_messages 32,349 行/117 会话,content 39.5MB,compressed 消息原文完整保留=全量账本,archive jsonl 仅派生副本,检索面盖 ai_messages 即全覆盖,零迁移零回填**;LIKE 实测 113ms/单关键词——LIKE+复用知识库分词(extract_query_keywords,knowledge_inject.rs:115)起步,FTS5 开箱可用(bundled SQLite 3.45)但中文按字切分召回差+仓内两先例拍过不上,升级条件(>50 万行/P95>500ms)留档;**双入口分期**:AI 工具 history_search 先行(两跳式瘦身:首跳每会话 120 字片段/深查二跳 conversation_id,对齐 2K 预算纪律 namespace_store.rs:32;无参降级列最近 10 会话;基线 tool_registry.rs:1520 断言 80 工具+1),前端侧栏升级同批可选;sop 指引 prompt.rs:161-163 guidance 行+:251 父子同源(先例 :385)。拍板 6:①入口分期(AI 先行+前端可选)②两跳式瘦身 ③无参列会话内置降级 ④tool 角色默认排除检索 ⑤无摘要会话摘要降级链 ⑥FTS5 阈值留档——✅ **2026-10-22 AI 工具入口落地**:message_repo 跨会话关键词检索(MessageSearchHit+snippet 命中点前后 200 字截 500,FTS5 升级触发条件注释留档)+idea_repo escape_like 升 pub(crate) 单一实现复用+tools/history.rs 声明式注册 history_search(两跳式/无参降级列最近会话/tool 角色排除)+tool_registry 接线+prompt guidance 双语(严禁 run_command 查 sqlite 代查+压缩史 read_file archive 路径引导)。df-storage 227 绿;前端侧栏入口未做(分期可选,待令) +- [x] **T4 批 P1-B 代语义闭环**(M,无依赖):boundary/loop_state 填充率 0 的挂点补齐——四事件挂点=压缩完成/停靠(emit_task_parked agentic/mod.rs:~1464)/恢复链快照/会话清空;换代通知接飞书既有推送通道(审批/停靠通知同范式);DDL 待勘察(T4 分析回收后定 V54+)——✅ **2026-10-22 三件套落地**(零 DDL,status 列 V50 既有):件一 status 终局补写(emit_ai_completed_once 顺写 completed/emit_fatal_error 写 error/ai_chat_clear 事务内归位 loop_state=NULL+status=active+boundary_json=NULL 防复活)+件二 run_generation_notifier 飞书推卡(订阅 AiTaskParked/AiAutoCompressed,停靠去重+换代 30s 聚合)+件三 DELIVERY_GUIDANCE_PROMPT 渠道段注入(cache_on 分流)+watcher 交付缺口补(快任务兜底路径早退漏调 reply_deliveries)。进度=temp/三件套-代语义闭环与飞书推送-进度-2026-10-21.md;devflow 930 绿 +- [ ] **T5 项 P2-A 大内容外置纪律**(S,轻,可搭车 T3/T4):system prompt 处理规则段(u-claw #3:大结论写盘 out/,回复给路径+3 行结论);write_file 权限语义+out/ 目录约定随批定 +- [x] ~~P2-B 并行资源治理~~ → **不立项,占位留 Linux 化**(temp/分析-P2B-并行资源治理占位-2026-10-21.md:前置=P0-A 预留 per-conversation 聚合口径+P1-B 挂点不堵死;触发=Linux 化立项启动) + +**批次推进序**:T1+T3 并行首批 → T2(依赖 T1)+T4 → T5 搭车;P2-B 留合流。挂账提醒:T1-T5 开工前先清 6 文件拖拽落盘攒批(等提交令)。 diff --git a/scripts/package-devflow.ps1 b/scripts/package-devflow.ps1 index 12b5e5e..d69a698 100644 --- a/scripts/package-devflow.ps1 +++ b/scripts/package-devflow.ps1 @@ -59,8 +59,16 @@ Start-Sleep -Seconds 2 Start-Process $bundle.FullName -ArgumentList "/S" -Wait if (-not (Test-Path $exe)) { Write-Host "[失败] 安装后未找到 $exe"; exit 1 } +# 版本核对(2026-10-25 实证修复):NSIS 静默安装可能因文件锁静默失败,旧进程复活锁文件时 +# 曾出现「报换装成功但装机 exe 仍是旧版」。装机版本必须与本次构建一致才算换装成功。 +$wantVer = (Get-Content "$repo\src-tauri\tauri.conf.json" | ConvertFrom-Json).version +$gotVer = (Get-Item $exe).VersionInfo.ProductVersion +if ($gotVer -ne $wantVer) { + Write-Host "[失败] 静默安装未生效:装机 exe 版本 $gotVer != 构建 $wantVer(疑似安装器被文件锁/旧进程拦截),请手工运行安装包后重试" + exit 1 +} $exeTime = (Get-Item $exe).LastWriteTime -Write-Host "[4/4] 启动验证(装机 exe 时间: $exeTime)..." +Write-Host "[4/4] 启动验证(装机 exe $gotVer,时间: $exeTime)..." Start-Process $exe Start-Sleep -Seconds 6 $proc = Get-Process devflow -ErrorAction SilentlyContinue diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index 4c4c8ef..9d3c3b4 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -1,7 +1,7 @@ { "identifier": "default", "description": "DevFlow default permissions", - "windows": ["main", "ai-detached", "ai-detached-*", "fe-detached-*", "approval-popup"], + "windows": ["main", "ai-detached", "ai-detached-*", "fe-detached-*"], "permissions": [ "core:default", "core:event:default",