Commit Graph

27 Commits

Author SHA1 Message Date
lanrtop
fe0458fe97 fix(mcp/parity): P9 审查修复——受限子代理不挂载、条目 id 带版本、插件缺失守卫、规范路径键
All checks were successful
Push & PR Check / check (push) Successful in 1m6s
Push & PR Check / check (pull_request) Successful in 1m4s
对抗审查(11 个 agent,6 条成立,均 low):
- 受限子代理(toolFilter)会绕过限制:挂在子代理自己作用域的工具不受过滤。改为经 tools.view 判断,
  受限或无法判断即不挂;根会话与未受限子代理照常挂载
- 版本号只编进文件名时,运行中的 DSH 不会重载新插件(同 id 只改 name 不重载):条目 id 改为
  lianjing-session-mcp-v1,与文件名同一版本;新增内容哈希测试,改插件漏升版本即失败;块外手写按前缀拒绝
- 插件文件缺失时 DSH 0.1.x 启动失败:条目加 `disabled: !!js` 文件存在性守卫
- GUI 会话工作目录是 realpath:白名单同时写入登记路径的规范形态(junction、8.3 短名)
- 补测试:分层停止哨兵、取认证失败与超时(.cmd 夹具)、受限/未受限/无法判断的子代理
- 蓝图如实更正首轮端到端只有插件一行;补测完整托管块

验证:cargo test 247 passed;vitest 16 passed(插件 8 条)、typecheck 通过;完整托管块端到端在
DSH 0.2.0-rc.2 与 0.1.5-rc.2 上项目会话带认证连上项目地址、其他会话无请求;插件文件缺失时两版都正常启动。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:04:54 +09:00
lanrtop
f21345bf1a feat(mcp/parity): DSH 桌面 GUI 按工作区连项目地址(会话级插件,P9)
DSH 桌面版只有一个 Host 进程、启动目录固定,托管块的 !!js 只在启动时求值,拿不到会话信息;
web/acp 同样一个进程服务多个工作区。改由炼境分发一个会话级插件:会话创建(agent/created)时
按会话工作目录匹配炼境登记的项目白名单,命中才在该会话作用域挂连项目专用地址的 mcp-client,
同名工具覆盖全局 lian-jing,其他会话不受影响。

- 插件随二进制打包(resources/dsh/lianjing-session-mcp.v1.mjs),刷新 DSH 托管块时写到
  %USERPROFILE%\.lian-jing\dsh\;文件名带版本号(Node 按 URL 缓存 ESM)
- 托管块在全局行之后追加插件条目(port、shim、roots 以 JSON 写入);插件文件写失败时只保留全局行
- 插件防御:headless 交给全局行;特性探测不符即降级为全局;取认证 ≤3 秒、整次挂载 ≤5 秒;
  所有回调吞掉异常(Host 对未处理异常会崩溃,agent/created 串行失败会让会话创建失败)
- 块外手写的 lianjing-session-mcp 条目同样拒绝覆盖

验证:cargo test 246 passed;vitest 插件用例 6 条通过、typecheck 通过;端到端在 DSH 0.2.0-rc.2
与 0.1.5-rc.2 上,项目会话经真实稳定入口带认证连上项目地址,其他会话无请求。

Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 13:33:45 +09:00
lanrtop
019d81c60e fix(onboarding): 审查修复——JSON 按语义比较,CI workflow 与生成文件同内容不重写
All checks were successful
Push & PR Check / check (pull_request) Successful in 1m3s
对抗审查(9 个 agent,2 条成立):
- settings.json / context.json 改为按 JSON 语义比较:Claude Code 改写后键序与末尾换行不同,
  按文本比较仍会让每次注入整文件重排
- plan_cicd_workflow 忽略行尾判 noop:原按字节比较,autocrlf 检出的同内容 workflow 会被判 update,
  并请用户确认一次无变化的写入;apply 与 generate_workflow 只在内容变化时落盘
- 同类遗漏统一改用 write_if_content_changed:agent_infra 生成文件(未变时报 skipped)、notes-archive 回填
- lib.rs 抽出 same_text_ignoring_eol,与 write_if_content_changed 共用同一比较规则

验证:cargo test 245 passed / 5 ignored(新增 JSON 语义与 CI CRLF 回归断言)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 11:51:33 +09:00
lanrtop
d098905f28 fix(onboarding): 接入写入幂等——内容不变不重写,Codex 托管块不再累积空行
enterprise 未提交改动归属梳理发现两处炼境侧缺陷:
- Codex 托管块自带结尾换行,又原样保留 END 之后的换行,每次注入多一个空行(enterprise 已累积 16 行)
- sync_blueprint_rules 与注入在内容不变时也用 LF 重写文件:子项目开 core.autocrlf,CRLF 检出的
  同内容文件被 git status 误报为改动,修改时间也被刷新,干扰改动归属判断

修复:
- lib.rs 新增 write_if_content_changed(忽略行尾比较,内容不变不写)
- sync_blueprint_rules 的 CONVENTIONS 与 AGENTS/CLAUDE 托管块、context.json、.claude/settings.json、
  Codex 托管块统一改用它;托管块未变时返回 unchanged
- Codex 托管块写入吸收 END 之后的空行,块外后续内容以一个空行分隔
- 蓝图记 P3b(本修复)、P10(接入包升级前检测块外未提交改动,待做),P9 补可行性实测记录

验证:cargo test 246 passed;实测 enterprise 注入后 .codex/config.toml 末尾空行 16→0,
再次注入四个托管文件修改时间均不变。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 11:35:18 +09:00
lanrtop
c4241f075d fix(mcp/parity): 更正 Codex Desktop 取认证失败的根因,撤销基于错误前提的 exe 副本逻辑
All checks were successful
Push & PR Check / check (push) Successful in 1m37s
Push & PR Check / check (pull_request) Successful in 1m2s
2b0a55a 判断「Codex Desktop(MSIX)看不见其安装后在 AppData 下新建的顶层目录」是错的:当时的对照
目录本身也是在 Claude 桌面版的包环境里建的。真正原因:worktree 版炼境由 Claude 桌面版(MSIX)里的
agent 启动,继承了其包环境,写到 %LOCALAPPDATA%\lian-jing 的入口被重定向进
%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Local\,只有 Claude 的进程树看得到。
对照:经 WMI 启动的非包进程在 AppData 下新建的顶层目录,Codex 包内可见;%USERPROFILE% 根不做重定向。

- 入口迁至 %USERPROFILE%\.lian-jing\bin 仍是正解(与炼境在什么环境里启动无关),保留
- 撤销「exe 在 AppData 下就复制副本」逻辑及其测试:exe 总在真实路径上,前提不成立(按「退出」原则)
- 更正代码注释、verify_onboarding 的 Legacy 提示、契约文档与蓝图 P3 返工记录

验证:cargo test 243 passed / 5 ignored(删去 2 个只测副本逻辑的测试)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 11:31:59 +09:00
lanrtop
cca3bf9db1 fix(mcp/parity): 审查修复——shim 单行退出、副本刷盘后改名、DSH 仅 headless 按目录路由
All checks were successful
Push & PR Check / check (push) Successful in 1m28s
Push & PR Check / check (pull_request) Successful in 1m5s
对抗审查(14 个 agent,3 条核实成立)与 DSH 桌面版只读调研的修复:

- shim 改为调用与退出同一行(`& call exit /b %%ERRORLEVEL%%`):cmd 在命令返回后按字节偏移重读
  批处理,入口恰在 helper 运行期间被改写时,分行写法会执行到错位片段(实测 exit 9009)
- helper exe 副本 sync_all 后再改名:避免断电留下残缺副本却因同名被一直复用
- 旧副本改为入口写好之后再清理;旧位置入口写失败时暂不清理,避免入口悬空
- DSH 托管块只在 headless profile 按启动目录路由:web/acp/tui 一个进程可服务多个工作区,
  按启动目录会让别的工作区会话连到该项目并带上认证(跨项目越权);profile 取 profileContext.name,
  DSH 0.1.x 无该服务时退回看启动参数
- AGENTS.md 入口路径补全反斜杠;蓝图立 P9(DSH 桌面 GUI 会话级插件,待人确认)

验证:cargo test 245 passed;shim 认证成功 exit 0 / 92 字节、错误 digest exit 1;DSH url 表达式按
Loader 方式求值 7 种情形均符合预期;四路零凭据探针(Codex 包内、Codex 包外、Claude、DSH 无头)复跑通过。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:06:14 +09:00
lanrtop
2b0a55adcd fix(mcp/parity): helper 入口迁至 %USERPROFILE%,修复 Codex Desktop(MSIX)取认证失败
人终验发现 Codex Desktop 会话里 lian-jing 完全未加载,Codex 日志为 headers helper exit 1。
根因:Codex Desktop 是 MSIX 打包应用,看不见它安装之后在 %LOCALAPPDATA% / %APPDATA% 下新建的
顶层目录(Invoke-CommandInDesktopPackage 在包上下文对照实测:lian-jing 与新建对照目录均不可见,
与 ACL 无关;已有目录内的新文件、%USERPROFILE% 下的新目录可见)。原验收用包外的 codex exec,未覆盖。

- shim 迁至 %USERPROFILE%\.lian-jing\bin\;Codex 配置、Claude local 条目、DSH 托管块统一引用新入口
- 炼境 exe 位于 AppData 下(安装版默认位置)时,按大小+修改时间指纹复制到入口目录,清理旧副本;
  复制失败退回直接调用当前 exe 并记 warn
- 旧 %LOCALAPPDATA% 入口迁移期同步写入;verify_onboarding 把旧写法报 Legacy 引导 inject_mcp 升级
  (测试断言随之由 Ready 改为 Legacy,理由同上)
- 新增 helper 副本与 AppData 判定测试

复验:Codex 包内(等价 Desktop)、Codex 包外、Claude、DSH 无头四路零凭据探针均返回「开发需求未登记」
(修复前 Codex 包内为「工具不可用」);cargo test 245 passed / 5 ignored。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 18:58:50 +09:00
lanrtop
0a92a5b695 fix(mcp/parity): 收尾审查修复——Claude 现状以 claude mcp get 为准,接入命令移出界面线程
收尾对抗审查指出:只读扫描 ~/.claude.json 的结论不能代表 Claude 在项目目录实际生效的条目
(共享项目键、worktree、目录迁移下会误删他项目条目或漏写),且同步 CLI 调用会阻塞界面线程。

- 快路径只认「项目根或其祖先目录键下」的一致托管条目;其余一律在项目目录执行
  `claude mcp get lian-jing` 取实际生效条目,按归属决策:本项目托管条目 → 刷新/移除
  (写入失败用原条目回滚);他项目托管条目或手写条目 → 不碰并记录;无 local 条目 → 写入
- 输出无法识别、CLI 出错或目录不存在时一律不写,只记 warn
- 全局迁移需 claude CLI 与 git-bash 均可用才置完成标记;批量重注入的成员复查失败计入错误
- 删组/移出组先删成员关系再清 MCP 配置,避免并发重注入把项目加回;调 CLI 前释放数据库连接
- delete_group / add_group_member / remove_group_member / delete_project / update_settings /
  apply_blueprint_buff 改为 #[tauri::command(async)],在线程池执行
- 新增 parse_claude_mcp_get / lianjing_project_of / key_covers_root 单元测试

实测(enterprise):稳态注入 174ms 不起 CLI;条目缺失 → 写入;过期 helper → 刷新;
手写条目 → 保留;三种情况 claude mcp get 均为 Local 且 Connected;经 shim 零凭据探针认证通过。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 16:55:28 +09:00
lanrtop
5f6ea586f8 fix(mcp/parity): 最终审查修复——Claude 条目写入回归 claude CLI,只读扫描认领
最终审查指出直接编辑 ~/.claude.json 须复刻 Claude 私有机制(git 根 / worktree→主仓库 /
NFC 键推导、.claude.json.lock 锁协议、CLAUDE_CONFIG_DIR 与旧版 .config.json、BOM/符号链接/
fsync/键顺序),随 Claude 升级易失效,违背「标准优先、私有机制只进适配层」。

- 写入一律经 claude CLI(cwd=项目目录,同步、带 20 秒超时),由 Claude 自己负责键、锁与路径
- 只读扫描按 URL 中 /mcp/projects/<id> 认领炼境托管条目(不依赖键推导);已一致则不起 CLI
  (实测稳态注入 0.04 秒),手写条目不碰;项目目录已不存在时只记录残留、不写文件
- 全局注册只读确认已存在就跳过 CLI;配置路径按 Claude 规则解析,容忍 BOM
- 批量重注入在锁内复查组成员关系,已移出组的项目不再注入、不重建 token

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 15:38:36 +09:00
lanrtop
fc8492b88b fix(mcp/parity): 第三轮审查修复——Claude 条目改为直接编辑配置,接入操作加进程锁
- Claude local 条目不再经 claude CLI(cwd=项目目录)+ 后台队列管理,改为直接编辑
  ~/.claude.json 中本项目键下的 mcpServers.lian-jing:同步、毫秒级、原子替换,只动该字段;
  不依赖项目目录存在,消除删除本地文件夹时的竞态、目录移动后旧条目无法清理、队列丢任务/卡死
- 项目键用真实长路径(实测 8.3 短路径键不被 Claude 识别);手写条目不碰
- 注入、移除、根目录迁移在进程锁内串行;移除时最先删 token,后续清理收集错误统一返回
- 根目录迁移:旧根解析不出也迁移;重新注入失败归入 mcp_inject 并补刷 DSH;DSH 补丁写入加锁

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:37:37 +09:00
lanrtop
e4214cd839 fix(mcp/parity): 第二轮审查修复——串行同步队列、白名单持久剔除、诊断分类
- Claude local 同步统一投递到单个后台串行队列(注册与移除同队列、按提交顺序),
  消除并发 claude CLI 竞态与「注入后立即移除」留下孤儿条目;移除路径不再阻塞界面
- DSH 白名单只收有项目 token 的项目,退组/移除后剔除持久;控制面项目写 null 停止哨兵,
  不再越过它匹配到已登记的上级目录;Rust 与 JS 两端键规范化对齐(重复分隔符、盘符根、UNC)
- 客户端侧同步日志改为 mcp_client_sync 分类,不覆盖诊断中每个项目的注入结果
- 批量重注入只在末尾刷新一次 DSH;启动刷新移到后台线程
- 项目根目录/平台变更时迁移客户端配置(清旧根 Claude 条目,已接入项目在新根重新注入)
- SSE 消息路由仅在会话属于该项目时才移除;注入模块的进程调用统一 silent_cmd

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:39:23 +09:00
lanrtop
0c40e1a5c9 fix(mcp/parity): 对抗审查 9 项修复——控制面保留全局、DSH 改登记白名单
- 控制面项目(context.json mcp_scope=global,炼境自身已声明)不写 Claude local 条目、
  不入 DSH 白名单,避免遮蔽全局注册与跨项目工具(审查 high)
- DSH 托管块内嵌炼境登记的「项目根目录→project_id」白名单,不再以任意目录里的
  context.json 作为取 token 依据;LOCALAPPDATA/SystemRoot 须为绝对路径
- remove_project_mcp 同步清理 Claude local 条目并剔除 DSH 白名单;SSE 消息路由复核登记
- Claude local 只替换炼境托管条目,手写不覆盖,替换失败回滚;改走 silent_cmd 并移至后台线程
- 手写 DSH 条目改用 serde_yaml 检测(引号/注释/流式写法),无法解析时保守拒绝
- shim 中 exe 路径的 % 转义为 %%;注入日志 context 统一为 JSON,诊断查询防御非 JSON 行

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:48:41 +09:00
lanrtop
ebf43d71c0 feat(mcp/parity): 三端经稳定 helper 入口连项目专用地址
- P3:炼境启动写 %LOCALAPPDATA%\lian-jing\bin\lianjing-mcp-header.cmd 指向当前 exe;
  Codex 项目配置改为引用该入口,不再写本机 exe 绝对路径;verify_onboarding 对旧写法报可升级
- P1:inject_mcp 以 local scope 为 Claude 注册项目专用地址 + headersHelper(不进仓库);
  DSH 机器级补丁写托管块,!!js 按启动目录选项目地址并经 cmd 调用同一入口,项目外回退全局
- 服务端:scoped route 拒绝未登记的 project_id(404,数据库不可用同样拒绝)

Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 10:40:08 +09:00
lanrtop
2b65c18193 feat(resource/dev-variables): add protected project variable core and scoped MCP
Keep values in Windows Credential Manager, require a project bearer for single-value reads, and preserve existing non-secret MCP behavior.

Feature-Confirmed: true

Rules-Applied: R01,R03,R05,R06,R07,R10,R12,R13
2026-09-26 16:46:55 +09:00
lanrtop
327f3d78ab feat(agent/access): 强化项目级运行态接入
MCP 改为 loopback 并绑定项目 scope,补齐越界拒绝、风险元数据和结构化状态。

新增分层 readiness、配置迁移与设置页投影;正式安装版可选择登录自启动,debug 与非安装路径明确拒绝。

Feature-Confirmed: true

Rules-Applied: R01,R06,R07,R08,R10,R12,R13
2026-09-23 03:21:38 +09:00
lanrtop
167fcf9880 feat(agent-context): add canonical project context
Feature-Confirmed: true
2026-09-21 18:16:32 +09:00
lanrtop
ed83f2874a feat(onboarding): add Codex MCP project integration
All checks were successful
Push & PR Check / check (pull_request) Successful in 57s
Push & PR Check / check (push) Successful in 1m3s
Feature-Confirmed: true
2026-09-21 12:35:10 +09:00
lanrtop
6d02b12e9f feat(mcp): notes 档案分片双写 + backfill_notes_archive 自愈工具
project_notes 是全系统唯一不在 git 的原创资产(可拆除性唯一硬违规)。
append_project_note 现双写到项目 .blueprint/notes-archive.jsonl(JSONL 可重放
重建 DB=重生配方);双写失败不回滚仅记日志,backfill_notes_archive 全量重建自愈。
归宿按项目分片(辩证翻转集中式设计,理由见蓝图卡留痕)。
死登记路径复用 validate_registered_path 防护;project_root 重构出 DI 版。
cargo test 110 全绿(新增 3:双写匹配/回填幂等+死登记跳过/并发不交错)。

Feature-Confirmed: true
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-11 22:22:59 +09:00
lanrtop
cbc1d46c4e fix(mcp-inject): inject 链路空路径单点防护——补齐 07-15 空路径事故第二入口
All checks were successful
Push & PR Check / check (push) Successful in 52s
辩证收缩实战产出:清理污染文件时追问「删文件是不是正确动作层」,
发现 473cf7e 只拦了 apply 链路,inject 链路 project_root() 对空串
win_path 穿透(ok_or_else 拦 NULL 不拦空串),settings.json/
liangjing.json 正是经此写进 src-tauri/。

- validate_registered_path 单点校验:拒空串/空白/相对路径(顺带堵
  相对路径解析到 cwd 的边角),WSL 分支拒空 wsl_path
- 2 条回归测试驻军(纯函数无 DB,cargo test 105 全绿)
- 台账同步:污染文件已移出、两条空路径僵尸登记已注销

Rules-Applied: R06,R07
2026-07-18 10:24:03 +09:00
lanrtop
0d1427f4e9 fix(mcp-inject): git-bash 路径多位置探测——修复 Scoop 安装 Git 时 claude CLI 调用全挂
All checks were successful
Push & PR Check / check (push) Successful in 1m32s
迁移实测发现:CLAUDE_CODE_GIT_BASH_PATH 回退路径硬编码
C:\Program Files\Git\bin\bash.exe,Scoop 安装的 Git 不在该位置,
导致 claude mcp add/remove 全部非零退出(存量 bug,组级时代同样存在)。

- find_git_bash():env(校验存在)→ Program Files / Scoop → where git.exe 推导
- try_register_globally 返回 bool;同名 already exists(exit 1)视为成功,
  不再每次 inject 刷 warn 日志
- migrate_to_single_server 标记位改以注册成功为条件——CLI 链路不通时
  不落标记,下次启动重试(幂等)
2026-07-06 20:10:53 +09:00
lanrtop
a41161f7d1 feat(mcp): 单一全局 lian-jing 服务器——组级挂载收敛(T1-T3+T5)
All checks were successful
Push & PR Check / check (push) Successful in 1m4s
T1 服务器层:新增全局 /mcp + /mcp/messages 路由,process_rpc 组上下文
Option 化;旧 /mcp/group/:gid 路由保留过渡,T6 移除。驻军测试 2 条。
T2 工具层:resolve_project_root 按 project_id 直查 project_workspaces,
删除 3 处组归属校验(实测无隔离价值);list_group_projects 改显式传参。
T3 注入层:settings.json 收敛为单 "lian-jing" key(URL /mcp),注入时
清理旧 lian-jing:group-* key;liangjing.json 主动删除 group_id;
启动时一次性迁移(重注入全量 + 清理旧全局注册两种命名格式,标记位防重)。
T5 同步:git-workflow 文档/模板、retro-catchup 技能 Python 兜底、
设置页 URL 展示、mcp-config-inject 模块取代注记。

收益:MCP 客户端配置成本 O(N组)→O(1),授权一次永久生效;
group_id 缺失/过期/移组同步一整类问题从根上消失。
2026-07-06 19:30:01 +09:00
lanrtop
bce9a0a37c fix(mcp-inject): liangjing.json 改为合并写入,重注入可回填缺失的 group_id
All checks were successful
Push & PR Check / check (push) Successful in 1m18s
旧版注入的项目 liangjing.json 缺 group_id,外部 agent 每个会话都要
先调 list_all_projects 反查归属组(多一次探路调用 + 权限弹框)。
group_id 写入已在 2116e54 补上,本次将整文件覆盖改为读取-合并-写回:
只更新 project_id / group_id / mcp_port 三个字段,保留文件已有其他字段。
存量修复路径:对旧项目重新执行 inject_mcp 即可回填。
文档同步说明:移入新产品组时自动刷新;group_id 缺失/过期时重新注入。
2026-07-06 18:43:44 +09:00
lanrtop
2116e54e29 feat(mcp-inject): 注入时同步注册全局 ~/.claude.json + liangjing.json 补 group_id
- inject_project_mcp 末尾新增 try_register_globally 调用,通过
  find_claude_bin 自动定位 claude CLI 并执行 claude mcp add -s user,
  让新接入项目的产品组 MCP 立即对 Claude Code 可用
- write_liangjing_context 增加 group_id 参数,子项目读取后可直接
  构造 lian-jing-{group_id} ToolSearch 查询,无需额外推断
- try_register_globally 为 best-effort:CLI 未找到或调用失败时
  仅写日志,不影响 settings.json 注入结果
2026-07-04 13:29:40 +09:00
lanrtop
8432aa4f45 feat(cicd+mcp): PR 事件追踪 + create_pull_request MCP 工具 + CI/AI 审查模板 + bypassPermissions 注入
炼境子项目工作流全链路打通:
- mcp_server: 新增 create_pull_request MCP 工具(凭证代理,子项目无需持有 token)
- mcp_server: webhook 路由拆分 push/pull_request,PR 事件写入 pr_events 表
- mcp_inject: 注入 bypassPermissions + 写入 liangjing.json(project_id + mcp_port)
- db: 新增 pr_events 表 + idx_pr_events_project 索引
- gitea.rs: gitea_api_create_pull_request() pub 函数;webhook 订阅补 pull_request 事件
- onboarding/git-workflow: v1.2.0,新增 PR 创建通过炼境 MCP 的说明与禁止条款
- cicd: 新增 pr_ci(PR 质量检查)+ deepseek_review(AI 代码审查)模板 + 4 项测试
- CicdModal: 类型选择器扩展为 4 项,deepseek_review 加 Secrets 提示面板
2026-07-03 16:57:36 +09:00
lanrtop
8c06aa5e44 feat: 飞轮智能阶段二完成——MCP SSE 传输 + 复盘覆盖率 + usage.json 扩展采集
- MCP Server 新增 GET/SSE 端点,Claude Code 原生 MCP 打通
- 项目导师面板显示复盘笔记覆盖率统计与缺口提醒
- usage.json 快照新增 complexity_dist、rework_count 等扩展字段
- 独立项目自动创建产品组并注入 MCP
- 新增 retro-catchup 技能用于批量补写历史复盘笔记
- 补全飞轮存量函数单元测试
- NewProjectModal 支持更灵活的模板参数配置
2026-04-13 01:49:56 +09:00
lanrtop
eb346ae1fd feat: add runtime diagnostics, health center, and project mentor
运行时可观测性:
- 新增 runtime_logs SQLite 表,提供全局 log_event 写入函数(保留最近 500 条)
- mcp_server/mcp_inject/groups 关键路径接入结构化日志
- MCP 新增 get_diagnostics 工具,返回注入摘要与近期错误
- add_group_member 注入失败时前端显示黄色 toast 警告

健康中心:
- 新增 run_health_check 命令(6 项并行检查:MCP/Git 路径/项目路径/GitHub Token/编辑器/DB 延迟)
- 新增质量指标聚合(休眠项目/孤立项目/注入异常组/无路径项目)
- 侧边栏新增健康中心页面,支持手动刷新和诊断报告复制
- 设置页 MCP 状态改为真实 HTTP ping 检测

项目导师:
- 新增 get_mentor_context 后端命令,聚合健康状态/蓝图摘要/近期错误
- MCP 新增 get_project_mentor_context 工具(含产品组归属校验)
- 项目卡片底部新增 🎓 导师按钮,面板支持复制结构化 Markdown 报告
- 修复 WSL 项目路径识别:wsl_path 存 UNC 格式时自动提取 distro 和 Linux 路径,改用 wsl 命令检查路径存在性(规避 Path::exists() 对 \wsl.localhost\... 不可靠的问题)

AI 工作流:
- 新增 AI-WORKFLOW.md、.claude/skills/ 技能体系配置
- 更新 CLAUDE.md 补充蓝图驱动开发规范
2026-04-04 19:58:49 +09:00
lanrtop
c598c9b05b feat: add BlueprintPromptModal for blueprint management and sync functionality
- Implemented BlueprintPromptModal component to handle blueprint prompt generation and rule synchronization.
- Added BlueprintStatusBadge to display the current status of blueprints in ProjectCard.
- Integrated blueprint status fetching and synchronization in ProjectCard.
- Enhanced SettingsPage with a new section for MCP service configuration and batch sync for blueprint rules.
- Updated commands to include new blueprint-related functionalities and types.
- Changed application name from "Dev Manager" to "炼境" in various components.
2026-04-04 10:47:27 +09:00