feat(projects/parity): register_project 控制面投影,登记拒绝同目录重复登记并落库规范目录(P8f) #37
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/agent-client-parity-p8f"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
做了什么
P8f:给 agent 补上「登记项目」的控制面投影,并让所有新建登记入口拒绝同一目录的重复登记(承接 PR #34 审查 L1/L2)。
projects::register_project_records(conn, input, requirement)(连接注入):UIcreate_project与 MCPregister_project共用。只写数据库,不建目录、不执行 git init、不接入。拒绝空 ID、空路径、相对路径、不存在的目录、空名称、同一目录已登记、已存在的 ID。workspace 插入由INSERT OR IGNORE改为INSERT,ID 冲突不再静默成功。重复检查和插入在同一个 IMMEDIATE 事务里;目录校验和比较键在事务外计算,因为要读磁盘。register_project:只在全局路由开放(is_project_scoped_tool显式排除,项目路由调用返回 scope_violation)。入参是path(Windows 绝对路径)和可选的name;project_id 由炼境生成 UUID,归入当前空间。返回 structuredContent(project_id / name / 落库的规范目录 / space_id / 可选的 warning)。描述里要求调用前先向用户列出目标并取得确认。registration_path_key,和 DSH 白名单共用normalize_dsh_root。新目录同时算字面键和 canonical 键(canonicalize 后去掉\\?\前缀),所以 8.3 短名和..段也能识别。错误信息给出已有的 project_id。mount_repo_records本体:检查放在任何写入之前,profile 和 workspace 在同一事务里写入。scan_unregistered_projects改用同一比较键。docs/ai-context/project-context.yaml已同步。Tauri command 签名没变,src/lib/commands.ts不用改。自验
cargo test:342 passed / 0 failed / 5 ignored,编译 0 warning(master 是 325:首版新增 10 条,审查处置又新增 7 条)。pnpm typecheck通过。\\wsl.localhost唤起本机 WSL。审查处置(独立只读审查 bd4ebaf,结论 fix_then_merge,10 条)
RootRequirement::ExistingDirOrPlaceholder),MCP 入口仍拒绝空路径。是否改为显式的占位概念,需要统筹会话问用户pub(crate))。统一抽crate::path_key转后续小修,因为会动 P4a / P8d 的热点文件 mcp_inject.rsregister_project_call(conn, args),按 schema 声明的参数名构造入参来测试待用户决定
没验什么
..段。\\wsl$和\\wsl.localhost两种写法也没有归一。详见卡片 known_limits。后续小修建议
/开头的 wsl_path 原样使用(I2)。crate::path_key,统一登记、DSH 白名单、Codex 信任判断、WSL UNC 换算(L4)。🤖 Generated with Claude Code
卡片保持 🔵:acceptance 的 [MCP 全局] register_project → plan_onboarding → onboard_project 依赖 P8e 才有的两个 MCP 工具。另记行为变化(UI 添加项目改为拒绝空路径、相对或不存在的路径、 ID 冲突)、其他登记入口的取舍、没验什么、known_limits 与有意偏差。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>