feat(onboard/parity): L1 零模型三端检查 probe_client_parity,处置独立审查(P4a) #38

Merged
lanrtop merged 4 commits from feat/agent-client-parity-p4a into master 2026-10-03 12:53:31 +08:00
Owner

做了什么(agent-client-parity P4a:L1 零模型三端检查)

  • 新增 src-tauri/src/onboard/probe_l1.rs(受 onboard 适应度测试约束):进程执行、HTTP、客户端定位经 ProcessRunner / McpHttp / ClientLocator 注入,三端并行、整次预算 9 秒。
  • 三端取证(零模型、零额度):Claude 用 claude mcp get 定生效条目,再用不存在的模型名做 init 自省(只挂生效条目、关闭全部 hooks、读到 system/init 即止);Codex 用 codex mcp get --json;DSH 静态读托管块白名单与会话插件 sha256。
  • 认证链重放:只执行炼境托管写法的 helper,在项目路由上依次 initialize(clientInfo=lian-jing-l1-probe)、tools/list(与 tools_list_result_for_project 比对)、get_diagnostics、list_project_dev_variables、read_project_test_account(LJ_PROBE_)。认证头只在炼境进程内使用,不进结果、日志与错误。
  • 矩阵 A–F × 三端,每格 state / cause / evidence(static < client_introspection < protocol);控制面项目 Claude 与 DSH 整列 not_applicable;未安装记 not_installed,不计失败。
  • 投影:MCP 工具 probe_client_parity(只在全局路由、readOnly)与 async Tauri command,src/lib/commands.ts 同步;契约同步 docs/ai-context/project-context.yaml。
  • mcp_server:探针 initialize 与检查期间本项目路由上的 initialize 不计入真实客户端(不抹 reload_required 证据)。

自验

  • 合并 master(含 P8f)后:cargo test 377 passed / 0 failed / 6 ignored,pnpm typecheck 通过。
  • 首版变异验证 8 组全部被测试捕获;实机冒烟(#[ignore] 测试,连运行中的炼境、不经 MCP 投影):enterprise 三端 18 格 ready(1.35–1.64 秒),dev-manager-tauri 控制面 Claude/DSH not_applicable、Codex ready,未接入的 LiteLLM 归因正确;输出均不含 Bearer 与 64 位十六进制串。

审查处置

独立审查 11 条(3 中、5 低、3 信息)全部处置:持续输出绕过超时、读超时按 io::ErrorKind 归因、探针抹掉 reload 证据、F 文案绑定真实 read_test_account、Codex enabled/disabled_tools 过滤、三处归因边角、hooks 关闭与 helper 白名单等已修并补测试(新增 11 条)。改断言报备:Claude 未连上时 F 由 ready 改为 blocked(审查要求的口径),已写入卡片。

交接说明

修复阶段的 agent 在安全分类器拦截(变异 sed、git fetch、cargo test 被判风险)后按规则停止、未绕过;统筹会话接手完成提交、合并 master、冲突解决(mcp_tools.rs 与 project-context.yaml 的相邻插入,保留双方)、全量回归与开 PR。

没验什么

  • [MCP 全局] 两项 acceptance(enterprise 10 秒内三端适用格 ready;dev-manager-tauri 上 Claude/DSH not_applicable)待合并、运行中的炼境重编译后由统筹会话实测。
  • 本轮审查修复未做变异验证(拦截前已完成的测试改动只经全量回归)。
  • 探针运行 claude -p 会让 Claude 在 ~/.claude.json 记录被检查项目的 projects 键(关不掉,已写入 known_limits)。
  • Codex 执行 helper 的环境白名单未复刻;npm 全局安装的 codex.cmd 识别不到;DSH GUI 会话只核对插件哈希。
  • 进程超时清理未用 Job Object(留给 P4d)。

🤖 Generated with Claude Code

## 做了什么(agent-client-parity P4a:L1 零模型三端检查) - 新增 `src-tauri/src/onboard/probe_l1.rs`(受 onboard 适应度测试约束):进程执行、HTTP、客户端定位经 ProcessRunner / McpHttp / ClientLocator 注入,三端并行、整次预算 9 秒。 - 三端取证(零模型、零额度):Claude 用 `claude mcp get` 定生效条目,再用不存在的模型名做 init 自省(只挂生效条目、关闭全部 hooks、读到 system/init 即止);Codex 用 `codex mcp get --json`;DSH 静态读托管块白名单与会话插件 sha256。 - 认证链重放:只执行炼境托管写法的 helper,在项目路由上依次 initialize(clientInfo=lian-jing-l1-probe)、tools/list(与 tools_list_result_for_project 比对)、get_diagnostics、list_project_dev_variables、read_project_test_account(LJ_PROBE_<nonce>)。认证头只在炼境进程内使用,不进结果、日志与错误。 - 矩阵 A–F × 三端,每格 state / cause / evidence(static < client_introspection < protocol);控制面项目 Claude 与 DSH 整列 not_applicable;未安装记 not_installed,不计失败。 - 投影:MCP 工具 `probe_client_parity`(只在全局路由、readOnly)与 async Tauri command,`src/lib/commands.ts` 同步;契约同步 `docs/ai-context/project-context.yaml`。 - mcp_server:探针 initialize 与检查期间本项目路由上的 initialize 不计入真实客户端(不抹 reload_required 证据)。 ## 自验 - 合并 master(含 P8f)后:cargo test 377 passed / 0 failed / 6 ignored,pnpm typecheck 通过。 - 首版变异验证 8 组全部被测试捕获;实机冒烟(#[ignore] 测试,连运行中的炼境、不经 MCP 投影):enterprise 三端 18 格 ready(1.35–1.64 秒),dev-manager-tauri 控制面 Claude/DSH not_applicable、Codex ready,未接入的 LiteLLM 归因正确;输出均不含 Bearer 与 64 位十六进制串。 ## 审查处置 独立审查 11 条(3 中、5 低、3 信息)全部处置:持续输出绕过超时、读超时按 io::ErrorKind 归因、探针抹掉 reload 证据、F 文案绑定真实 read_test_account、Codex enabled/disabled_tools 过滤、三处归因边角、hooks 关闭与 helper 白名单等已修并补测试(新增 11 条)。改断言报备:Claude 未连上时 F 由 ready 改为 blocked(审查要求的口径),已写入卡片。 ## 交接说明 修复阶段的 agent 在安全分类器拦截(变异 sed、git fetch、cargo test 被判风险)后按规则停止、未绕过;统筹会话接手完成提交、合并 master、冲突解决(mcp_tools.rs 与 project-context.yaml 的相邻插入,保留双方)、全量回归与开 PR。 ## 没验什么 - [MCP 全局] 两项 acceptance(enterprise 10 秒内三端适用格 ready;dev-manager-tauri 上 Claude/DSH not_applicable)待合并、运行中的炼境重编译后由统筹会话实测。 - 本轮审查修复未做变异验证(拦截前已完成的测试改动只经全量回归)。 - 探针运行 claude -p 会让 Claude 在 ~/.claude.json 记录被检查项目的 projects 键(关不掉,已写入 known_limits)。 - Codex 执行 helper 的环境白名单未复刻;npm 全局安装的 codex.cmd 识别不到;DSH GUI 会话只核对插件哈希。 - 进程超时清理未用 Job Object(留给 P4d)。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
lanrtop added 4 commits 2026-10-03 12:49:33 +08:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(onboard/parity): L1 零模型三端检查 probe_client_parity(P4a)
All checks were successful
Push & PR Check / check (push) Successful in 1m3s
5b804bb967
新增 onboard::probe_l1:不调用模型、零额度,按 Claude Code、Codex、DSH
各自实际生效的配置给出 A–F × 三端矩阵,每格带状态、证据等级与归因。

- 客户端自省:Claude 在项目目录 claude mcp get 取生效条目,再以坏模型名
  跑 claude -p(只挂该条目、读到 system/init 即止)取 skills/工具/连接状态;
  Codex 用 codex mcp get --json(看不到条目而项目有配置 → codex_project_untrusted);
  DSH 读托管块白名单并核对会话插件 sha256,版本读安装包 app.asar。
- 认证链重放:按客户端方式执行稳定 shim 取认证头(只在进程内使用),
  在该端配置的地址上 initialize(clientInfo=lian-jing-l1-probe)、tools/list
  (与 tools_list_result_for_project 比对)、get_diagnostics、
  list_project_dev_variables、read_project_test_account(LJ_PROBE_<nonce>)。
  归因 shim_missing / helper_failed / auth_failed / unreachable / route_global 等;
  未安装记 not_installed,控制面 Claude 与 DSH 记 not_applicable,均不计失败。
- 进程、HTTP、客户端定位经 ProcessRunner / McpHttp / ClientLocator 注入;
  ClientAdapter 新增 l1_facts;本体入口 mcp_inject::probe_client_parity。
- 投影:MCP probe_client_parity(仅全局路由,readOnly)、Tauri async command、
  commands.ts 类型与封装;mcp_server 不把 l1 探针计入真实客户端初始化。
- T1:project-context.yaml 补 MCP 工具与 Tauri command 契约;蓝图 P4a 记实现与验证。

cargo test 349 passed / 0 failed / 6 ignored;pnpm typecheck 通过;
实机冒烟 enterprise 三端 18 格 ready(1.4–1.6 秒)。

Rules-Applied: R01
Feature-Confirmed: true
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
独立审查 11 条发现处置(修复 agent 在分类器拦截前完成并暂存,统筹会话接手提交):
- SystemRunner 每轮按剩余时间等待,收到行也查超时;单行与 stderr 限长
- 读超时沿 error source 链按 io::ErrorKind 判定,不依赖英文子串
- probe 期间 quiet_project_initializes 守卫,探针的 initialize 不计入真实客户端
- F 格绑定真实 read_test_account 文案;Codex enabled/disabled_tools 过滤
- Claude 作用域回查 helper、Codex 项目表与生效地址不一致记 untrusted、
  helper 无 Authorization 记 auth_header_missing、Claude 未连上时 D–F 记 blocked
- init 加 --settings disableAllHooks;--mcp-config 只带 type/url/headersHelper;
  只执行托管写法 helper,其余记 unknown(manual_config)
- 改断言报备:Claude 未连上时 F 由 ready 改为 blocked(审查要求的口径),已写入卡片

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chore(merge): 合并 master(含 P8f register_project)到 P4a,解决 mcp_tools.rs 与 project-context.yaml 相邻插入冲突
All checks were successful
Push & PR Check / check (push) Successful in 1m4s
Push & PR Check / check (pull_request) Successful in 1m2s
a79bcb7fca
两边各自新增全局路由工具(probe_client_parity / register_project):清单插入、
is_project_scoped_tool 排除、STRUCTURED_TOOLS 与摘要分支均保留双方;契约文档合并两段说明。
合并结果 cargo test 377 passed / 0 failed / 6 ignored,pnpm typecheck 通过。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lanrtop merged commit cf2b5f0dc2 into master 2026-10-03 12:53:31 +08:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: lanrtop/dev-manager-tauri#38
No description provided.