reverse-cli-anything
开源 · 逆向工程 · Agent 工具

Shapr3D native CLI pilot#

Native CAD automation and evidence (English) · 原生建模与证据

Shapr3D CAD automation through a native CLI for AI agents. This reverse-cli-anything pilot demonstrates mounting-plate modeling, parameter edits, a through-hole and native project/STL export on Windows x64 with Shapr3D 26.180.11926.0. It does not implement arbitrary sketch construction, general project navigation or STEP export. Project overview · Automation FAQ.

Watch the English CLI demo · 0:56 — build a plate, edit thickness and hole spacing, drill a center hole, and export the native model and STL. Shared demo gallery and provenance.

Windows x64 26.180.11926.0 的首个原生建模闭环已验收:正常新建项目 → 导入软件自带阀门模型副本 → 修改原生拉伸历史 → 保存并关闭 → 重开 → 原生 STL 导出。

新增 前台可见建模与钻孔:CLI 在当前打开的项目中建立双孔固定板,修改厚度和孔距,再增加 Ø8 mm 中心贯穿孔。49 秒连续实录包含从空模型到最终成品的全过程;独立网格验收 78 项通过。演示、命令与限制 · 验收摘要。

已整理 56 秒英文演示版:无片头,直接从空白模型开始;采用与 CapCut、Axure 一致的“软件画面 + 底部命令栏”,展示 28 条完整 CLI 调用语法及独立验收命令。视频与复用说明。

这是范围受限的试验适配器。已验证项目协议链接可经正常前台流程打开本机测试项目,也可附加已经打开的可编辑项目进行钻孔。通用项目列表/导航 CLI、任意草图构造以及 STEP 导出尚未实现;本次草图输入是 CLI 生成的二维 DXF,实体和孔洞由 Shapr3D 原生建模工具计算。

For CAD users evaluating Shapr3D scripting, the reproducible starting task is the demonstrated plate: change thickness and hole spacing, then compare the saved native model with the exported STL geometry. See the workflow acceptance guide before extending this pilot.

已验收结果#

安装、账号登录、首次引导是前置设置,账号和引导由用户完成。验收中的建模、保存、关闭、重开、导出均通过原生调用完成,没有鼠标点击、键盘 UI 自动化或直接写项目数据库。

实现#

REA 分析发行包和 WinMD,恢复了真实 C++/WinRT 接口及 ABI。Python/Frida 附加正在运行的桌面进程;通过 CoreDispatcher.RunAsync 在应用 UI 线程调用业务对象。它是 JSON CLI + 进程内原生桥接,没有 MCP 服务。

三个发行二进制文件均校验 SHA-256。参数包含数值和表达式两种表示,距离内部值为米,CLI 表达式显式带单位。

重要的生命周期发现:单独调用 CloseProject/OpenProject 曾导致 SKSelectionInterface::UpdateHover 崩溃。最终采用临时 COM 对象按命令释放、Defocus、切换 ActiveEditor=None 并等待、关闭重开、切换回 Model 并 Focus 的组合,两次重开复测成功。不能把效果单独归因于其中某一步。

运行#

需要 Python 3.12、Frida 17.23.3 和已登录且完成引导的指定 Shapr3D 版本。依赖优先安装到本目录 .native-tools,pip 缓存放 D 盘;本机也可复用 capcut-cli/.native-tools 的 Frida。

$env:PIP_CACHE_DIR = 'D:\Caches\pip'
python -m pip install --target .\shapr3d-cli\.native-tools frida==17.23.3

# 等应用完成启动,再开启持久桥接会话。将进程 ID 替换为实际值。
python .\shapr3d-cli\pilot.py start --pid 12345

返回的 session 路径用于后续命令。后台会话串行处理磁盘上的 JSON 请求;不监听网络端口。不要在会话中同时手动切换项目。

$session = 'D:\ChatGPT\reverse-cli\shapr3d-cli\.runtime\sessions\返回的会话ID'
python .\shapr3d-cli\pilot.py call --session $session --json '{"operation":"create-project"}'
python .\shapr3d-cli\pilot.py call --session $session --json '{"operation":"import-native","path":"D:/可被应用读取的目录/airvalve.shapr"}'
python .\shapr3d-cli\pilot.py call --session $session --json '{"operation":"history"}'
python .\shapr3d-cli\pilot.py call --session $session --json '{"operation":"history-set","step":"Cover ear extrusion","parameter":"距离","expression":"-3 mm"}'
python .\shapr3d-cli\pilot.py call --session $session --json '{"operation":"project-close"}'
python .\shapr3d-cli\pilot.py call --session $session --json '{"operation":"project-reopen"}'
python .\shapr3d-cli\pilot.py call --session $session --json '{"operation":"history"}'
python .\shapr3d-cli\pilot.py call --session $session --json '{"operation":"export-stl","directory":"D:/可被应用写入的目录","name":"airvalve-modified"}'
python .\shapr3d-cli\pilot.py call --session $session --json '{"operation":"session-close"}'

Windows 打包应用对文件访问有边界。本次使用 D 盘实际承载的应用 LocalState 目录暂存输入、输出。可用 (Get-Item "$env:LOCALAPPDATA\Packages\Shapr3D.Shapr3D_dvv5p1vgwv6mp\LocalState").Target 查找实际路径。导出后按字节复制到项目输出目录并校验哈希,未经过外部 CAD 内核重建。

name 不带 .stl 后缀;CLI 拒绝覆盖已有输出。参数标签随应用语言变化,应先读取 history。project-reopen 只支持本会话通过正常 NewProject 获取的项目访问对象;它不会伪造访问令牌。会话结束后无法凭旧句柄重新打开项目。

ok、原生完成回调、重开后的参数和导出几何是不同层次的证据。超时或部分失败时先读状态和请求回执,不要盲目重放。会话关闭会等待原生回调释放,避免留下悬空函数指针。

文件#

没有修改应用文件、认证机制、许可状态或导出权限。试验使用正常账号可用的低分辨率 STL;不宣称支持无桌面运行或任意 Shapr3D 版本。

在 GitHub 查看本页源文档