Files
cad-agent/ai.memory/feedback_preferences.md
T
gjm d4a9442e30 feat(review): 几何干涉检查 find_collisions(BVH 粗筛 + 容器过滤)
C++(cad_mcp_plugins):
- 新增 bvh.h:header-only 2D BVH(质心中位分割,叶<=4,SelfPairs 交叉对枚举)
- 新增 find_collisions.cpp:粗筛 AABB 相交实体对,附重叠盒 + 逐轴重叠比 ratio
  (= 逐轴重叠长/较短长 之积,退化轴取 1.0),按 ratio 降序 + 分页;
  narrow=true 只对返回页跑 intersectWith 细筛(附 exact)
- 容器过滤(关键):图框块/分区边界会与一切相交,用重叠【度】判定
  deg >= max(exclude_container_deg=8, exclude_container_frac=0.25 * 其他实体数),
  与图幅/缩放无关;被剔除者在 excluded_containers 里如实报告
  (初版用面积判据对多图框并排失效:3 框只占并集 27/13/7% 全部漏过,
   全模型 163 对噪声;改度判据后图框 deg=35/25/23 vs 其余 deg<=3,分离干净)
- cmakelists.txt + 两个 mcp_config.json 注册(28 工具)

agent 侧(Python):
- cad_tools.READ_ONLY_TOOLS += find_collisions(受控子循环可调用)
- checks.check_collisions + run_deterministic_checks(受 CHECK_COLLISIONS 开关,默认关)
- config += CHECK_COLLISIONS=False / COLLISION_MIN_OVERLAP=0.5
- checklist.py / review_checklist.json += 「干涉/碰撞」类别(high)+ 提示词协议
  (先 find_collisions 拿候选 → inspect_region 目视确认;AABB 相交 != 真干涉)

验证:
- verify_collisions.py 17/17 PASS:全模型候选 163→80(全部 ratio=0.000),
  min_overlap=0.5 → 0 对;逐图框 0 对;narrow top-5 中 4 条 exact=true;
  --inject 注入深重叠矩形报出 ratio=0.902 并清理 2/2
- pytest 355 passed(新增 12 项)
- 端到端:LLM 主动调用 find_collisions{min_overlap:0.2,narrow:true,window:<图框>},未误报
2026-10-16 19:46:44 +08:00

93 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: 用户协作偏好
description: 用户在本项目中明确的工作方式偏好(调试版本、模型、代码组织、配置文件等)
type: feedback
---
# 用户协作偏好
## 【最高优先级】提交与推送流程(Gitea PR)
- 规则:**今后所有提交都 commit 到当前分支 `home-ai-dev`**,然后**自动推送**到代码服务器并
**创建 PR**。推送**必须严格使用**如下格式:
```bash
git push origin HEAD:refs/for/main/<你的分支名称>
```
- **绝对禁止**使用常规的 `git push origin <branch_name>`。
- **Why:** 必须带 `refs/for/main/` 引用格式,才能触发 **Gitea 的自动 PR 创建机制**。
其中 `main` 是**目标主分支**,`<你的分支名称>` 是当前工作的**临时特性分支**名。
- **How to apply:** 例:当前分支为 `home-ai-dev` 时执行
`git push origin HEAD:refs/for/main/home-ai-dev`。每次提交后自动完成推送 + 建 PR,无需再问。
注意 `home-ai-dev` 的 upstream 常显示 `[gone]`(合并后源分支被删),这不影响该推送方式。
## CAD 没开就自己打开,别问(自动加载已配好)
- 规则:需要 CAD 在线(慢层 `verify_*.py` / 端到端 `python -m dwg_review`)而
`127.0.0.1:8080` 未监听时,**自己启动 CAD,不要先问用户**。
- **Why:** 用户(2026-10-14)明确要求:「以后遇到 cad 没有运行的情况,就直接打开,
运行你的测试就行,我已经设置好了自动加载」。自动加载确实已配好。
- **How to apply:** PowerShell 里
`Start-Process "C:\Program Files\Autodesk\AutoCAD 2020\acad.exe" -ArgumentList '/p','SHS-ENVI2026','e:\desktop\agent_test.dwg'`,
再轮询 8080(实测**数秒内**即监听,AutoCAD 2020 热启动很快)。自动加载链路:
`bin/Debug-R230/acad.rx`(内容一行 `cad_mcp_frame.arx`)+ 该目录已在 CAD 的搜索/信任路径中。
**`/p SHS-ENVI2026` 不可省**——否则 Plant 3D 自定义实体(`AECDBEW*`)**不显示**,
截图里是空的;`e:\desktop\agent_test.dwg` 是标准真实测试图纸(3 图框 / 86 实体)。
**注意**:不带图纸参数时 CAD 打开的是**空模板**(0 图元、无图框),端到端审查会因
「未识别到任何图框」提前退出。
**重建插件后必须先 `Stop-Process acad -Force`**(DLL 被占用会 LNK1168),再重启。
另:AutoCAD 2019(R23.0)也装了同名 profile,但**实际使用的是 2020(R23.1)**——
MRU 里 `E:\desktop\agent_test.dwg` 属 2020。
## 调试用 R230 + Debug,不用 Release
- 规则:涉及 CAD 版本的调试**只用 R230**,且配置用 **Debug**(非 Release)。
- **Why:** 用户明确要求;Release 曾造成误解(只构建了插件目标、没见基座 `.arx`)。
- **How to apply:** 任何联调/构建验证默认 `--config Debug` + `--preset R230`;
需要交叉验证时可另编 R243。
## 视觉模型用 `deepseek-flash`
- 规则:审查脚本调用的模型是 **`deepseek-flash`**,已确认支持视觉。
- **How to apply:** 脚本默认模型名保持 `deepseek-flash`;不要擅自换成其它模型。
## 插件代码集中在 `cad_mcp_plugins`
- 规则:DLL 工具的开发**全部实现在 `cad_mcp_plugins` 工程内**,便于统一管理。
- **How to apply:** 新增审查工具放进该工程;不要散落到其它目标。
## 封装常用函数
- 规则:编写代码时注意**封装常用函数**,避免重复。
- **How to apply:** 公共逻辑进 `dwg_review_common`;同类工具复用同一 helper。
## `mcp_config.json` 是注册工具的枢纽
- 规则:`mcp_config.json` 是向「基座」注册工具的**关键文件**,必须编辑它才能让工具生效。
- **How to apply:** 新增工具要同步更新模板 `src/cad_mcp_frame/cad-mcp-frame.json`
与运行时 `bin/<Config>-R230/mcp_config.json`;注意 `plugin_directory` 相对 `.arx` 目录解析。
## 命名前缀用 `dwg_review`
- 规则:审查相关源码前缀用 **`dwg_review`**,不用 `review_`(不够明确)。
## `ai.memory/` 要入库并推送到服务器,**不要**加进 `.gitignore`
- 规则:`CadProject/ai.memory/` 目录**不加入 `.gitignore`**,应作为 **`CadProject` 仓库的一部分**
提交并推送到远程服务器(`cad-agent.git`),以便 AI 在其它机器上接手记忆。
- **Why:** 用户希望记忆可跨机器共享/接管。
- **How to apply:** 不要建议把 `ai.memory/` 加入 `.gitignore`;提交/推送时正常包含它。
- 现状:`ai.memory/` **已入库**(提交 `chore(memory): 新增 ai.memory 记忆库`),随 `home-ai-dev`
正常提交并推送。(`CadProject` 已独立为单独仓库,远程 `cad-agent.git`。)
## 【重要】新建的 C++ 源文件必须存为 **UTF-8 with BOM**
- 规则:`src/` 下新增的 `.cpp` / `.h` 必须带 **UTF-8 BOM**(文件头 `EF BB BF`),与既有工程文件一致。
- **Why:** 工程未加 `/utf-8` 编译开关;无 BOM 的 UTF-8 文件会被 MSVC 按系统代码页(GBK)解析,
中文注释字节错位后会**吞掉紧随其后的声明/代码**,报出一堆离奇的
`C2447` / `C2039: 'xxx': is not a member of ...` / 行号错位错误,极难定位。
- **How to apply:** 用 Write 新建源文件后,立即补 BOM:
`printf '\xef\xbb\xbf' > f.tmp; cat f >> f.tmp; mv f.tmp f`(或确认 `head -c3 f | xxd -p` == `efbbbf`)。
既有文件(如 `dwg_review_*.cpp`、`StdAfx.h`)都带 BOM,可对照。