DeepSeek Harness Hub
← 返回列表

liwuzhan/cad-tool

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

CAD CLI v2.0 - 模型包架构

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/7 · 已提供中文文档
综合分
29.6
GitHub 分
29.6
用户评分
★ Stars
1
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add liwuzhan/cad-tool
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/18(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

CAD CLI v2.0 - 模型包架构

AI 原生 CAD 命令行工具,支持模型包(.456d)

v2.0 的新特性

主要改进

1. 模型包(.456d) - 自包含的包结构,取代 .cad 目录
2. STEP 产物 - 使用可靠的 STEP 文件,取代不稳定的 pickle 缓存
3. JSON 元数据 - 渲染输出包含相机参数和时间戳
4. JSONL 历史记录 - 以 JSONL 格式高效记录提交历史
5. 产物管理 - 可配置的清理策略,用于管理存储
6. 装配包 - kind=assembly、多实体验证、聚合指标,以及感知组件的无头 PNG
7. 可选标准件 - 渐进式 cadparts 目录查询和可复用的装配代理
8. 模型导向的审查图纸 - 可选的尺寸标注、引线标注、隐藏线和剖视图,且不改变模型

从 v1.0 迁移

v1.0 已归档至 src/cad_cli/v1/。不提供自动迁移——请以 v2.0 重新开始。

安装

Codex 插件

codex plugin marketplace add liwuzhan/cad-tool --ref main
codex plugin add cad-tool@cad-tool

安装后请启动新的 Codex 会话。该插件本身没有安装钩子;在首次真正的 CAD 请求时,它会检查本地运行时,并在创建隔离依赖环境之前进行询问。

DSH 插件包

这个自包含包将 16 个 Host 工具、浏览器结果卡片以及完整的 Python CLI 打包在一个 tarball 中。该插件尚未在 DSH 市场上架,因此请直接安装最新的 GitHub Release:

macOS / Linux
curl -fL https://github.com/liwuzhan/cad-tool/releases/latest/download/dsh-cad-studio.tgz \
-o dsh-cad-studio.tgz
dsh plugin --profile  add ./dsh-cad-studio.tgz

Windows PowerShell
Invoke-WebRequest
-Uri https://github.com/liwuzhan/cad-tool/releases/latest/download/dsh-cad-studio.tgz
-OutFile dsh-cad-studio.tgz
dsh plugin --profile  add ./dsh-cad-studio.tgz

latest URL 始终指向最新发布的包。在市场条目被接受后,CAD Studio 也可以从 DSH 插件市场安装。包源码仍位于 packages/dsh-cad-studio。

无头 Linux 会自动使用进程安全的 Matplotlib 渲染器,并分别对装配实体着色。在不稳定的 Windows 远程/熄屏会话中,请设置 CAD_RENDER_BACKEND=matplotlib。仅当自动化应完全省略 PNG 时,才使用 CAD_SKIP_RENDER=1;几何检查、STEP、指标和历史记录仍保持启用。

一行安装

git clone https://github.com/liwuzhan/cad-tool
cd cad-tool
bash install.sh          # macOS / Linux
Windows: powershell -ExecutionPolicy Bypass -File install.ps1

该脚本需要 Python 3.11–3.14,会在仓库内创建一个隔离的 .venv
(约 300 MB 下载:build123d + OCP + pyvista),通过冒烟测试验证安装,并且绝不触碰你的全局 site-packages。

可选: 将此仓库旁边的 cad-parts 参数化标准件库克隆下来——install.sh(以及 DSH 插件的 cad_env_bootstrap)会自动检测并将其作为软依赖安装(可用 CAD_PARTS_ROOT=/path 覆盖)。没有它一切也能正常工作;有了它,模型脚本可以直接 from cadparts import gear, deep_groove_bearing, ...,并通过 cadparts CLI 查询目录。

AI 辅助安装

将这段提示粘贴给任何编码代理(Claude Code、DSH、Cursor……)——它可以通过阅读此 README 自行完成安装:

安装 CAD CLI 工具:
1. git clone https://github.com/liwuzhan/cad-tool && cd cad-tool
2. macOS/Linux:运行  bash install.sh
Windows:     运行  powershell -ExecutionPolicy Bypass -File install.ps1
(需要 Python 3.11-3.14。该脚本会构建一个隔离的 .venv;请勿
pip 安装到全局环境。)
3. 验证:.venv/bin/cad --help  (Windows:.venv\Scripts\cad.exe --help)
然后通过创建并运行一个临时包来对 CLI 进行冒烟测试:
cad init /tmp/smoke.456d --name=smoke && cd /tmp/smoke.456d && cad run
4. 报告已安装的版本以及冒烟测试结果。
如果 install.sh 失败,请遵循其打印的提示(Python 版本、pip 镜像)
并重试;不要一次尝试后就放弃。

手动安装

使用 conda
conda create -n cad-cli python=3.12
conda activate cad-cli
conda install -c conda-forge build123d pyvista
pip install -e .

或者在 venv 中使用普通 pip
python3.12 -m venv .venv && source .venv/bin/activate
pip install -e .

快速开始

1. 创建模型包

cad init my_gear --name="Spur Gear"
cd my_gear.456d

对于装配体,请显式选择装配体模板:

cad init bearing_block --name="Bearing block assembly" --kind assembly

装配体工作流将组件保留为带标签的 Compound 子项,并允许多个有效实体。有关坐标、接口、标准件、验证和评审约定,请参见 docs/assembly_workflow.md。
如果普通的多视图评审发现某个区域存在歧义,请使用
docs/review_drawing.md 中描述的可选标注图纸输入。它仅生成证据;
它不是强制关卡,也不是自动设计结论。

这会创建:
my_gear.456d/
├── manifest.json              # 包元数据
├── src/
│   └── main.py                # 你的 CAD 脚本
├── vcs/
│   └── commits.jsonl          # 提交历史
├── artifacts/                 # 构建产物
└── runlog/                    # 执行日志

2. 编写你的模型

编辑 src/main.py:

from build123d import *

创建你的模型
result = Box(100, 50, 20)

3. 运行并测试

执行脚本(内存中,无产物)
cad run
验证几何体
cad validate

检查属性
cad inspect --prop=volume
cad inspect --prop=bounds

对于无法从普通视图中定位的问题,请求选定的尺寸、标注或剖视图,而不更改源模型:

cad review --commit  --drawing-spec review-request.json

请求格式和中性测量输出记录在
docs/review_drawing.md 中。

4. 提交你的工作

完整构建工作流:执行 + 验证 + STEP + 缩略图 + 指标
cad commit -m "Initial gear design"

这会在 artifacts// 处创建产物:
- model.step - STEP 文件(持久化)
- thumb_.png - 缩略图渲染
- thumb_.json - 渲染元数据
- metrics.json - 几何指标
- validate.json - 验证结果

5. 版本控制

显示提交历史
cad log

检查当前状态
cad status

检出之前的版本(加载 STEP)
cad checkout abc123

导出到文件
cad export --format=step --output=gear_v1.step

6. 管理产物

列出所有产物及其大小
cad artifacts list

清理旧产物(使用清单策略)
cad artifacts clean

命令参考

项目管理

- cad init  --name= - 创建新的模型包
- cad status - 显示仓库状态
- cad log [--limit=N] - 显示提交历史

建模工作流

- cad run [script] - 执行脚本(仅内存中)
- cad build [script] - 构建工作流但不提交
- cad commit -m "msg" [script] - 完整构建 + 提交
- cad validate [script] - 验证几何体
- cad checkout  - 加载提交的 STEP 产物

检查

- cad inspect --prop= - 查询几何属性
- 属性:volume、area、bounds、faces、edges、vertices
- cad inspect --list-targets - 列出所有拓扑目标
- cad inspect --target=face[0] --target-prop=center - 查询特定目标

输出

- cad render [--views=top,front,iso] - 生成渲染
- cad export --format= --output= - 导出模型

产物管理

- cad artifacts list - 列出产物及其大小
- cad artifacts clean [--policy=] - 清理产物
- 策略:all_commits、latest_per_branch、releases_only

分支管理

- cad branch list - 列出所有分支
- cad branch create  - 创建新分支
- cad branch switch  - 切换到分支(恢复 STEP + 脚本)
- cad branch delete  - 删除分支

模型包结构

.456d/
├── manifest.json              # 包元数据
│   ├── name, version
│   ├── head (current commit)
│   ├── branches
│   ├── artifact_policy
│   └── render settings
│
├── src/
│   └── main.py                # 主脚本
│
├── vcs/
│   └── commits.jsonl          # 线性提交历史
│
├── artifacts/
│   └── /
│       ├── model.step         # STEP 产物
│       ├── thumb_.png        # 缩略图
│       ├── thumb_.json       # 渲染元数据
│       ├── metrics.json       # 几何指标
│       └── validate.json      # 验证结果
│
└── runlog/
└── .jsonl         # 执行日志

配置

编辑 manifest.json 进行配置:

{
"name": "My Model",
"unit": "mm",
"timeout_seconds": 60,
"artifact_policy": "latest_per_branch",
"render": {
"default_views": ["top", "front", "right", "iso"],
"resolution": [800, 600],
"image_format": "png"
}
}

输出格式

所有命令输出 JSONL(JSON Lines):

{"event": "run_start", "ts": "2026-01-31T10:30:00", "payload": {"script": "src/main.py"}}
{"event": "run_success", "ts": "2026-01-31T10:30:01", "payload": {"metrics": {...}}}

脚本约定

脚本必须将最终形状赋值给 result 变量:

from build123d import *

Create geometry
box = Box(100, 50, 20)
cylinder = Cylinder(30, 100)

Assign to result
result = box - cylinder

特征级检查点

检查点是检测布尔运算失败的可靠方法。在每个特征操作之后添加检查点:

from build123d import *
from cad_cli.feedback import Checkpoint

Checkpoint.reset()

with BuildPart() as part:
Cylinder(30, 10)
Checkpoint(part, "base").expect_volume(28274, tolerance=100).expect_solids(1).verify()

Cylinder(10, 10, mode=Mode.SUBTRACT)
Checkpoint(part, "hole").expect_volume_decreased().expect_solids(1).verify()

result = part.part

检查点方法

| 方法 | 描述 |
|--------|-------------|
| .expect_volume(value, tolerance=1.0) | 断言特定体积 |
| .expect_volume_decreased() | 断言体积较上一个检查点减少 |
| .expect_volume_increased() | 断言体积较上一个检查点增加 |
| .expect_solids(count) | 断言实体数量(始终验证 = 1) |
| .expect_faces(count) | 断言面数量 |
| .expect_bbox_size(x, y, z, tolerance=1.0) | 断言边界框尺寸 |
| .verify() | 执行所有检查,失败时抛出异常 |

检查点结果在 JSONL 输出中显示为 checkpoint_passed 或 checkpoint_failed 事件。

测试

运行测试套件:

pytest                           # All tests
pytest --cov=cad_cli             # With coverage
pytest test/test_package.py -v   # Specific test

架构亮点

v2.0 与 v1.0

| 特性 | v1.0 | v2.0 |
|---------|------|------|
| 项目结构 | .cad/ 目录 | .456d 包 |
| 形状缓存 | Pickle(不可靠) | STEP 产物 |
| 提交存储 | 单个 JSON 文件 | 单个 JSONL 文件 |
| 渲染元数据 | 无 | 带相机参数的 JSON |
| 产物清理 | 手动 | 基于策略 |
| 复杂模型 | 超过 150 个面时失败 | 使用 STEP 时可靠 |

错误代码

- E-SYNTAX - Python 语法错误
- E-RUNTIME - 运行时错误
- E-CONSTRAINT - 约束违反
- E-BREP - BRep 验证失败
- E-RENDER - 渲染错误
- E-IO - 文件 I/O 错误

开发

pip install -e ".[dev]"   # 安装开发依赖
pytest                     # 运行测试
black src/ test/           # 格式化代码
mypy src/                  # 类型检查

要求

- Python 3.11+
- build123d 0.5.0+
- cadquery-ocp 7.7.0+
- pyvista 0.43.0+
- click 8.1.0+
- numpy 1.24.0+

许可证

MIT

故障排除

“未找到模型包”
确保你位于 .456d 目录中,或先运行 cad init。

“未找到 STEP 工件”
该提交可能已被清理。请检查 cad artifacts list。

渲染失败
确保已安装 pyvista:pip install pyvista

导入错误
确保已安装 build123d:conda install -c conda-forge build123d

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群