diff --git a/.blueprint/manifest.yaml b/.blueprint/manifest.yaml index f631488..8b09c98 100644 --- a/.blueprint/manifest.yaml +++ b/.blueprint/manifest.yaml @@ -511,9 +511,9 @@ modules: name: 三端客户端对等 area: infra status: in_progress - progress: 70 - updated: 2026-10-03 - note: "P1/P2/P3/P3b/P7/P9/P10 完成:三端(Claude Code、Codex 含 Desktop、DSH 含桌面 GUI)在 Enterprise 经 %USERPROFILE%\\.lian-jing 稳定入口连项目专用地址,人终验通过。Claude 条目经 claude CLI 写入、以 claude mcp get 为准;DSH 由托管块全局行(headless)+ 会话级插件(GUI/web/acp 按会话工作目录)路由;接入写入幂等;接入包改写块外带未提交改动的托管块文件时给出混合文件预警;P7 实测 MCP 服务器说明仅 Claude/DSH 带入模型上下文、Codex 不带,引导提示保留在 skill。2026-10-03 P8 一键接入设计定稿(docs/tasks/2026-10-03-p8-onboarding-oneclick-design.md):A1 不前置;P4 分 L0 静态 / L1 零模型 / L3 无头会话,P8 只依赖 L1(P4a);拆为 P8-0、P8a–P8g 与 P4-0、P4a–P4e(P8-0、P8a、P4-0 已完成,P8b 适配器注册表与三端结构化注入结果(PR #33,enterprise 实测两次注入三端 converged、零写入)、P8c 写入汇与写入前计划(PR #36)、P4a L1 零模型三端检查(PR #38,enterprise 三端 18 格 ready)、P8d 编排本体(PR #39)、P8e 投影(PR #40)、P8f register_project(PR #37)已完成,端到端:新登记项目 plan→onboard_project done、重复执行全收敛;P8a 把「已接入」统一为有项目 token;P4-0 实测六项假设,Codex 只在目录受信任时加载项目配置、Claude 用无效模型名可零额度取 init 并入 L1),P8 进行中;进度按拆分后卡数重算。待做 P5、P6(基于 P8c 的 WriteSink)。" + progress: 74 + updated: 2026-10-04 + note: "P1/P2/P3/P3b/P7/P9/P10 完成:三端(Claude Code、Codex 含 Desktop、DSH 含桌面 GUI)在 Enterprise 经 %USERPROFILE%\\.lian-jing 稳定入口连项目专用地址,人终验通过。Claude 条目经 claude CLI 写入、以 claude mcp get 为准;DSH 由托管块全局行(headless)+ 会话级插件(GUI/web/acp 按会话工作目录)路由;接入写入幂等;接入包改写块外带未提交改动的托管块文件时给出混合文件预警;P7 实测 MCP 服务器说明仅 Claude/DSH 带入模型上下文、Codex 不带,引导提示保留在 skill。2026-10-03 P8 一键接入设计定稿(docs/tasks/2026-10-03-p8-onboarding-oneclick-design.md):A1 不前置;P4 分 L0 静态 / L1 零模型 / L3 无头会话,P8 只依赖 L1(P4a);拆为 P8-0、P8a–P8g 与 P4-0、P4a–P4e(P8-0、P8a、P4-0 已完成,P8b 适配器注册表与三端结构化注入结果(PR #33,enterprise 实测两次注入三端 converged、零写入)、P8c 写入汇与写入前计划(PR #36)、P4a L1 零模型三端检查(PR #38,enterprise 三端 18 格 ready)、P8d 编排本体(PR #39)、P8e 投影(PR #40)、P8f register_project(PR #37)、P8g UI 一键接入面板(PR #41,2026-10-04)已完成,P8 agent_verify 全部达成、human_verify 待用户终验,端到端:新登记项目 plan→onboard_project done、重复执行全收敛;P8a 把「已接入」统一为有项目 token;P4-0 实测六项假设,Codex 只在目录受信任时加载项目配置、Claude 用无效模型名可零额度取 init 并入 L1),P8 进行中;进度按拆分后卡数重算。待做 P5、P6(基于 P8c 的 WriteSink)。" position: [3500, 950] - id: architecture-evolution diff --git a/.blueprint/modules/agent-client-parity.md b/.blueprint/modules/agent-client-parity.md index 38dfd61..c3a50be 100644 --- a/.blueprint/modules/agent-client-parity.md +++ b/.blueprint/modules/agent-client-parity.md @@ -331,8 +331,9 @@ skill 只是五个接入面之一,兼容层覆盖全部五面。 - review: "2026-10-03 独立只读审查 bd4ebaf,结论 fix_then_merge,10 条发现处置:M1 [中] MCP 入参原样落库(正斜杠、尾部分隔符、长路径前缀、8.3、`..`),scan_unregistered_projects 按字面比较会自相矛盾 → 已修:本体对 Windows 目录 canonicalize 后去长路径前缀落库,register_project_at 回执 path 为落库值、名称缺省按规范形式取目录名(相对路径不 canonicalize,交本体拒绝);scan 的已登记判定与父目录去重改用 registration_path_key。M2 [中] UI 不选目录的概念占位被取消,超出 P8f 范围且与 mcp-server 模块记录的用户用法冲突 → 已恢复原行为:本体新增 RootRequirement,UI 入口有效路径为空时只写 profile+workspace、不校验目录、不查重复,MCP 入口仍拒绝;是否改为显式占位概念交统筹会话问用户(需求澄清),本 PR 不预设答案。L1 [低] 已有登记两列都比,残留列误拦 → 已修:按 platform 只取有效根目录(registration_root),查询补 platform 列。L2 [低] 8.3、`..`、末尾点等漏判 → 已修:新目录在写事务外另算 canonical 键,两键比对已有行的字面键(已有行不读磁盘,写锁内无 I/O)。L3 [低] mount_repo 检查在插 profile 之后且无事务 → 已修:抽 mount_repo_records(连接注入),检查前移、整体 IMMEDIATE 事务;前端先 gitClone 再 mount 的白克隆属 UI 范围,未改。L4 [低] 路径比较键多份实现 → 部分修:registration_path_key 改为复用 mcp_inject::normalize_dsh_root + strip_verbatim_prefix(两函数改 pub(crate));normalize_trust_path、WSL 发行版查询与 UNC 换算的第三份拷贝统一抽 crate::path_key 转后续小修(会动 P4a/P8d 热点 mcp_inject.rs)。I1 [信息] update_project 仍可造同目录登记 → 转后续小修:UI 编辑整表提交,须「有效根目录实际变化才检查 + 排除自身」,否则存量重复登记(beast-mode)连改名都会被拦,单独做更稳。I2 [信息] project_root_with_conn 对 UNC 形式的 wsl_path 错误拼接(已有缺陷)→ 不在本 PR 改(mcp_inject.rs 热点),转后续小修;卡片与代码注释里「同口径」改为只指取列与 Linux 路径换算。I3 [信息] 重登目录遗留旧 context.json 无提示 → 已修:register_project_at 只读检查,project_id 不同时回执与摘要带 warning(不沿用旧 ID)。I4 [信息] 分发分支无测试 → 已修:分发抽成 register_project_call(conn, args),测试按 schema 声明的参数名构造入参;IMMEDIATE 并发仍无测试(见没验什么③)。" - mcp_verify: "PR #37 合并(55dc637);P8e 合并后经全局 MCP 实测链路 register_project → plan_onboarding → onboard_project 得 status=done(证据同 P8e mcp_verify);同目录换写法再登记被拒并给出已有 project_id。" -### 🔵 P8g — UI 一键接入 -- status: in_progress +### ✅ P8g — UI 一键接入 +- status: done +- merge_verify: "PR #41 CI passed(head c28caf72ee94a2ce9c749de941d9c43ffafc33ee,核对完整 SHA 后合并)→ master 3228b49:pnpm typecheck 通过;pnpm test 5 文件 29 passed(含 onboardView 13 条);全量 cargo test 414 passed / 0 failed / 6 ignored(另一测试二进制 1 passed)。agent_verify 全部达成;human_verify ①–④ 待用户终验。" - complexity: M - files: src/components/dashboard/OnboardPanel.tsx, src/components/dashboard/onboardView.ts, src/components/dashboard/onboardView.test.ts, src/components/dashboard/ProjectModal.tsx, src/components/dashboard/BatchAddModal.tsx, src/components/manage/NewProjectModal.tsx, src/components/dashboard/BlueprintModal.tsx, src/lib/commands.ts - depends: P8e diff --git a/docs/tasks/2026-10-03-coordination.md b/docs/tasks/2026-10-03-coordination.md index cd06ce7..77a58a3 100644 --- a/docs/tasks/2026-10-03-coordination.md +++ b/docs/tasks/2026-10-03-coordination.md @@ -61,11 +61,12 @@ | ~~3~~ | ~~P8d onboard_project 编排本体~~ ✅ | M | P8c、P4a 合并后 | 复用 `onboard::plan::write_project_files` 与 `onboard::clients::registry()`;apply 前先重算计划并核对 digest | | 4 | P8e 投影收口与契约同步 | S | P8d 后 | | | 5 | P8f register_project 控制面投影 | S | 已提前并行(只依赖 P8-0) | [MCP] 链路实测待 P8e 合并后做 | -| 6 | P8g UI 一键接入 | M | P8e 后 | human_verify 交用户 | +| ~~6~~ | ~~P8g UI 一键接入~~ ✅ | M | P8e 后 | human_verify 交用户 | | ~~并行~~ | ~~删除项目登记时一并解绑 Gitea 仓库~~ ✅ G8 | S/M | master | 来自重复登记排查会话的推荐任务卡(轮询会继续往已删除的项目 ID 写数据),主要改 projects.rs / gitea.rs,可并行 | | 后续 | P6(依赖 P8c)、P4c / P4d / P4e、A4→P4b、P5 | | | P8 完成后再排 | | 后续小修 | P8f 审查转入:L4 路径归一函数统一到 crate::path_key(含 Codex 信任路径、WSL 发行版与 UNC 换算)、I1 update_project 有效根变化才查重并排除自身、I2 project_root_with_conn 拼接 UNC 形式 wsl_path 的已有缺陷 | S | master | 碰 mcp_inject.rs,P8 主线后再做 | | 后续小修 | backfill_notes_archive 静默跳过非 UTF-8 旧笔记(dev-manager-tauri 有 4 条);PR #34 审查遗留 L3(保留他项目 Codex 块不留痕)、L4(沉默统计并列偏向非规范 ID,补测试)、I1(注释说明两处语义差异)、I2(沉默列表带 id) | S | master | 不碰 P8 热点文件的可并行 | +| 后续小修 | P8g 审查 ④:L1 格子由本体带 pending_user(目前 onboardView.ts 写死 codex_project_untrusted 着色);面板状态机(过期响应、refused 回预览)补组件测试 | S | master | 碰 probe_l1.rs / onboardView.ts | | 待用户 | beast-mode 同路径重复登记(beast-mode / 940dfbb4,无 Gitea 绑定) | — | — | 需写运行中 DB 与删除登记,按 U3 同法准备脚本后交用户执行 | ## 4. 派单与 PR 流水(统筹维护) @@ -80,7 +81,7 @@ | 10-03 | P4a L1 零模型三端检查 | 工作流 wf_b7092645-570(修复阶段被分类器拦截,统筹接手收尾) | PR #38(a79bcb7)→ cf2b5f0 | ✅ [MCP] 实测:enterprise 3.3 秒三端 18 格 ready;dev-manager-tauri 控制面 Claude/DSH not_applicable、Codex ready | | 10-03 | P8d onboard_project 编排本体 | 工作流 wf_004ffc20-7cb | PR #39(2f2a9f1)→ d018d44 | ✅ 审查 10 条已处置;master 402 passed;⑩ 统筹决定:Codex 未信任计 next_action 不计入 done(P8e 实现) | | 10-03 | P8e 投影收口与契约同步 | 工作流 wf_551dc525-270(修复阶段卡死 6 次,审查已可合并,统筹以 97578b2 开 PR) | PR #40 → d7f4816 | ✅ 端到端:新登记项目 done、重复执行全 converged;enterprise 因主工作区落后不 apply(偏差已报备) | -| 10-03 | P8g UI 一键接入 | 工作流 wf_531cfcda-b1a 实现阶段 6 次 180 秒无进展被判卡死(未产出代码,属执行方式问题、不计自验失败)→ 改派后台 Agent(无看门狗,分块写文件) | `feat/agent-client-parity-p8g` | 执行中 | +| 10-03 | P8g UI 一键接入 | 工作流 wf_531cfcda-b1a 实现阶段 6 次 180 秒无进展被判卡死(未产出代码,属执行方式问题、不计自验失败)→ 改派后台 Agent(无看门狗,分块写文件)也流卡死 → 10-04 新统筹会话主线程直做(续用半成品 onboardView.ts,分块写入) | PR #41(c28caf7)→ 3228b49 | ✅ 审查 merge、5 条:4 修 1 转后续小修(L1 格子带 pending_user);master typecheck 通过、vitest 29 passed、全量 cargo test 414 passed;human_verify 待用户 | | 10-03 | P8f register_project 控制面投影(含登记拒绝同路径,承接 PR #34 审查 L1/L2) | 工作流 wf_2462357e-604(与 P4a 并行,开 PR 前合并 master) | `feat/agent-client-parity-p8f` | PR #37(04470bd)→ 55dc637 已合并;审查 10 条:7 修、1 部分修、M2 恢复 UI 概念占位原行为(产品问题待用户澄清)、2 转后续;卡片 🔵,[MCP] 链路实测待 P8e 合并 | | 10-03 | 重复登记修复 U1/U2 | 会话 `local_d2e1c156…`(「排查炼境 dev-manager-tauri 疑似重复登记」) | PR #34 → fc280db | ✅ 独立审查可合并、已合并,炼境已重编译;审查遗留 L1/L2 归 P8f(登记拒绝同路径),L3/L4/I1/I2 列入后续小修 | | 10-03 | 重复登记数据合并 U3 | 同上(用户执行 DB 写入) | master 91017b6;主仓库 .codex/config.toml 升级为稳定 helper 格式 06f20db | ✅ 无 2c5b54ef 残留、同路径 1 条登记、Gitea 绑定 1 行;备份 dev-manager.backup-20261003-before-dedupe.db |