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

5.4 KiB
Raw Blame History

name, description, type
name description type
用户协作偏好 用户在本项目中明确的工作方式偏好(调试版本、模型、代码组织、配置文件等) feedback

用户协作偏好

【最高优先级】提交与推送流程(Gitea PR)

  • 规则:今后所有提交都 commit 到当前分支 home-ai-dev,然后自动推送到代码服务器并 创建 PR。推送必须严格使用如下格式:

    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,可对照。