🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

平板图纸转CAD jackControls/dsh-noBS-CAD-step

DeepSeek Harness
jackControls33 天前有提交已提供中文文档扫描:含敏感能力

这是一个 DeepSeek Harnessdsh插件,把平板零件的 2D 工程图纸转成 noBS CAD 脚本和…

30.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add jackControls/dsh-noBS-CAD-step
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · tool
装得上吗
静态安装检查有提示项,装前建议看一眼 README
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 33 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-nobs-cad-step(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 14:19:50

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 38 处,展示前 35 条)
  • 读取本地文件
    lib/index.js:100
    const stat = statSync(path)
  • 执行外部命令来自配置/变量
    lib/index.js:113
    const child = spawn(probe.path, args, { env: { ...process.env }, stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true })
  • 读取本地文件
    lib/index.js:139
    if (statSync(jsonPath).mtimeMs >= statSync(stepPath).mtimeMs) return jsonPath
  • 写入本地文件
    lib/index.js:143
    writeFileSync(jsonPath, JSON.stringify(value))
  • 读取本地文件
    lib/index.js:175
    for (const entry of readdirSync(registry)) {
  • 读取本地文件
    lib/index.js:178
    try { stat = statSync(file) } catch { continue }
  • 读取本地文件
    lib/index.js:182
    const beat = JSON.parse(readFileSync(file, 'utf8'))
  • 读取本地文件
    lib/index.js:214
    const raw = readFileSync(join(skillDir, 'SKILL.md'), 'utf8')
  • 发起网络请求
    lib/client.js:263
    const response = await fetch(API + path, { ...(init || {}), headers: panelHeaders(init?.headers) })
  • 发起网络请求
    lib/client.js:278
    const response = await fetch(url, { headers: panelHeaders() })
  • 写入本地文件
    lib/cad.js:100
    writeFileSync(path, data)
  • 读取本地文件
    lib/cad.js:128
    const source = readFileSync(scriptPath, 'utf8')
  • 读取本地文件
    lib/cad.js:164
    await client.interface('execute', { group: groups.solid_import_step, operation: 'solid_import_step', arguments: { file_name: basename(stepPath), data_
  • 读取本地文件
    lib/cad.js:183
    await client.interface('execute', { group: groups.solid_import_step, operation: 'solid_import_step', arguments: { file_name: basename(stepPath), data_
  • 读取本地文件
    lib/host-utils.js:24
    try { return statSync(path).isFile() } catch { return false }
  • 读取本地文件
    lib/host-utils.js:41
    if (!windows) { try { accessSync(candidate, fsConstants.X_OK) } catch { continue } }
  • 读取本地文件
    lib/host-utils.js:51
    try { accessSync(path, fsConstants.X_OK) } catch { try { chmodSync(path, 0o755) } catch {} }
  • 写入本地文件
    lib/host-utils.js:51
    try { accessSync(path, fsConstants.X_OK) } catch { try { chmodSync(path, 0o755) } catch {} }
  • 读取本地文件
    lib/host-utils.js:104
    try { names = readdirSync(dir) } catch { return pids }
  • 读取本地文件
    lib/host-utils.js:108
    const record = JSON.parse(readFileSync(join(dir, name), 'utf8'))
  • 执行外部命令固定命令
    lib/host-utils.js:119
    const run = spawnSync('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', `(Get-Process -Id ${pid} -ErrorAction Stop).Path`], { encoding:
  • 执行外部命令固定命令
    lib/host-utils.js:124
    const run = spawnSync('readlink', ['-f', `/proc/${pid}/exe`], { encoding: 'utf8', timeout: 3000 })
  • 执行外部命令固定命令
    lib/host-utils.js:128
    const run = spawnSync('ps', ['-o', 'comm=', '-p', String(pid)], { encoding: 'utf8', timeout: 3000 })
  • 执行外部命令固定命令
    lib/host-utils.js:143
    const run = spawnSync('reg.exe', ['query', 'HKCU\\Software\\Classes\\nbcad\\shell\\open\\command', '/ve'], { encoding: 'utf8', timeout: 5000, windowsH
  • 读取本地文件
    lib/host-utils.js:188
    return createHash('sha256').update(readFileSync(path)).digest('hex')
  • 读取本地文件
    lib/routes.js:56
    if (!existsSync(dir) || !statSync(dir).isDirectory()) throw new Error(`not a directory: ${dir}`)
  • 读取本地文件
    lib/routes.js:56
    if (!existsSync(dir) || !statSync(dir).isDirectory()) throw new Error(`not a directory: ${dir}`)
  • 写入本地文件
    lib/routes.js:64
    mkdirSync(dirname(file), { recursive: true })
  • 写入本地文件
    lib/routes.js:65
    if (bytes !== null) writeFileSync(file, bytes)
  • 读取本地文件
    lib/routes.js:74
    try { names = readdirSync(folder) } catch { continue }
  • 读取本地文件
    lib/routes.js:80
    const stat = statSync(file)
  • 读取本地文件
    lib/routes.js:119
    if (resolve(source) !== target) writeFileSync(target, readFileSync(source))
  • 写入本地文件
    lib/routes.js:119
    if (resolve(source) !== target) writeFileSync(target, readFileSync(source))
  • 读取本地文件
    lib/routes.js:120
    return sendJson(res, 200, { ok: true, path: target, bytes: statSync(target).size })
  • 执行外部命令来自配置/变量
    lib/mcp-client.js:23
    this.child = spawn(serverPath, args, { stdio: ['pipe', 'pipe', this.logFd ?? 'ignore'], windowsHide: true })
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-tools@deepseek-ai/dsh-skill@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 2D板件图纸转CAD脚本
  • 生成STEP文件
  • 原生打印探测

DeepSeek Harness 插件:把 2D 板件打印转成 noBS CAD 脚本和 STEP 文件(技能 + CAD 工具 + 原生打印探测)

README

由 DeepSeek 最新模型翻译生成
dsh-noBS-CAD-step npm 包 dsh-nobs-cad-step,插件 id nobs-cad-step。2026-09-28 从 dsh-nbcad-plate(插件 id nbcad-plate)改名而来:先把旧包从配置档里移除,再添加这个包,同时改掉所有配置覆盖里的 id。 这是一个 DeepSeek Harness(dsh)插件,把平板零件的 2D 工程图纸转成 noBS CAD 脚本和 STEP 文件。 它注册了: - 技能 nobs-cad-step:平板零件的标准工作流,从十孔支架到八十孔的密集板都适用(图纸勘察、标注清点、角点原点坐标系、链式算术、每个零件一个脚本、按孔数验证、出报告),附带两个已验证的示例脚本: skill/plate-example.nbcad.jsonc 用坐标定位孔,展示了所有建模惯用法;skill/plate-example-chains.nbcad.jsonc 用构造链建同一块板(从板边出发、长度取自图纸的线段,孔锚定在线段端点),让引擎去做算术,审阅者可以把构造链和图纸对照; - 五个工具,驱动无头 noBS CAD 引擎和图纸:
展开完整文档(README 剩余 1 节)
dsh-noBS-CAD-step

npm 包 dsh-nobs-cad-step,插件 id nobs-cad-step。2026-09-28 从 dsh-nbcad-plate(插件 id nbcad-plate)改名而来:先把旧包从配置档里移除,再添加这个包,同时改掉所有配置覆盖里的 id。

这是一个 DeepSeek Harness(dsh)插件,把平板零件的 2D 工程图纸转成 noBS CAD 脚本和 STEP 文件。

它注册了:

- 技能 nobs-cad-step:平板零件的标准工作流,从十孔支架到八十孔的密集板都适用(图纸勘察、标注清点、角点原点坐标系、链式算术、每个零件一个脚本、按孔数验证、出报告),附带两个已验证的示例脚本: skill/plate-example.nbcad.jsonc 用坐标定位孔,展示了所有建模惯用法;skill/plate-example-chains.nbcad.jsonc 用构造链建同一块板(从板边出发、长度取自图纸的线段,孔锚定在线段端点),让引擎去做算术,审阅者可以把构造链和图纸对照;
- 五个工具,驱动无头 noBS CAD 引擎和图纸:
- nbcad_run_script(script_path, step_path):在空白文档里运行版本 1 的 .nbcad.jsonc 脚本,导出 STEP,返回引擎的特征摘要和警告(positions 里漏掉的位置、重叠的孔、跑到实体外的孔、比实体还深的盲孔深度、没用上的绑定),以及找到的孔,或者失败的那一步和原因;
- nbcad_inspect_step(step_path):重新导入 STEP 文件,返回同样的摘要,用于验证;
- nbcad_check(step_path, expected, tolerance_mm?):通过引擎把模型的特征表和 STEP 对比:匹配的孔、缺失的孔、多出的孔及其偏移量,还有包围盒;
- nbcad_print_probe(action, print_path, ...):原生像素工具包(Rust,native/print-probe,为每个平台打包成二进制)。它自己读 PDF、PNG 和 JPG 图纸:render(页面或某个窗口的 PNG,窗口用页面比例给出,dpi 任意:模型就是这样读图纸的)、info,以及给定板尺寸后的 calibrate、带毫米网格和孔叠加层的 crop、ring-score(每个模型孔处或附近画了什么)、symbols(某个区域内找到的圆和点,与模型比对)。页面渲染完成后,每次调用远不到一秒;渲染结果会缓存;
- nbcad_overlay_print(print_path, step_path, out_png, length_mm, width_mm, region?, dpi?):把模型的孔画到图纸的俯视图上(整块板,或者某个毫米窗口的高分辨率裁剪图),这样每一组都能和画出的孔符号对照检查。

模型自己读图纸(通过探针的 render 和 crop 图像),写脚本,运行脚本,把孔列表和自己的清点结果对比并补上缺的部分。一切都走普通的 noBS CAD 脚本解释器,没有第二条建模路径。

Web UI 里的「2D → 3D」面板

在 web 配置档下,插件会在侧边栏的面板列表里加一个 2D → 3D 入口。面板会:

- 每两秒刷新一次,显示 noBS CAD 引擎(nbcad-mcp)是否可达、noBS CAD 桌面端是否在运行(从桌面端的会话注册表读取:<temp dir>/nbcad-sessions/ 下存在 30 秒以内的 heartbeat.json,规则与 MCP 服务器一致),以及本机的打印探测二进制文件是否存在;
- 接收一份打印件(PDF、PNG 或 JPG),可以从浏览器上传,也可以给出它在运行 dsh 的机器上的路径;探测程序三种格式都能直接读取;
- 在选定的工作区里启动新会话,带上制版工作流简报,用零件名给会话命名,并跟踪它:Open conversation 会切过去;
- 列出本次运行在 <workspace>/out/ 下产出的所有 STEP 文件(以及报告),并保存到你选的位置(Save STEP as…,能用浏览器保存对话框就用,否则走下载)。

面板支持中英双语,跟随 dsh 的全局语言设置(Settings → General → Language,存在 settings.yaml 的 locale.preference 里);切换语言会立刻重新渲染面板和它的侧边栏入口。UI 为中文时,简报还会要求模型用中文回答并写 report.md;脚本和字段名保持英文。

这里没有任何环节绕过模型:面板只负责准备工作区、发送简报、收集文件。宿主端在 dsh 自己的 Web 服务器上,于 /dsh-nbcad/api 下提供面板的路由;无头配置档不会挂载它们。

路由接受什么:每个请求都必须带一个每次启动都会更新的密钥;dsh 把它写进页面,面板再回传,因此浏览器里的其他页面和机器上的其他进程都会拿到 401。请求里指定的工作区必须是 dsh 中已注册的;未注册工作区之外的内容不会被列出、读取或写入。dsh 的 Web 服务器默认绑定 127.0.0.1,除非另有配置,而且这些路由仍然假定是本机、单用户环境。

环境要求

- dsh 0.1.5 到 0.2.0,含 alpha 和 release candidate(按 node-semver 的要求,peer 范围会逐条列出每个预发布线),配置档基于 headless、tui 或 web;Node 22 或更高版本。在 0.2 线上,面板的客户端部分从运行时自带的包里取所需服务(ui-renderer 提供 slots,ui-layout 提供 layout 和 main 面板槽位,ui-sidebar 提供 sidebar.panellist,ui-workspace 提供 uiWorkspace,api-controllers 提供 sessions 和 workspaces),由 dsh.client.inject 指定名称;某个运行时没有提供的名称,会被客户端模块图忽略。
- noBS CAD。应用本身提供 stdio MCP:插件这样启动它 --headless,所以装好的 noBS CAD(Windows 上是发布 zip,macOS 上是 app,Linux 上是 deb)就是引擎。nbcad-mcp 的开发构建(在 noBS CAD 检出目录里执行 cargo build --manifest-path mcp-server/Cargo.toml)也能用,而且不需要任何参数。

别的什么都不需要:不用 Python,不用 poppler,不用 Rust 工具链。打印探针以二进制形式打包在 bin/ 下,覆盖 macOS(Apple 芯片和 Intel)、Linux(x64 和 arm64)和 Windows(x64),它自己就能渲染 PDF、解码 PNG 和 JPG 打印件。

bin/SHA256SUMS 列出了打包的探针二进制。没列出的、或者校验不匹配的打包二进制会被拒绝(状态条会说明原因),插件随后回退到 config.probe、NBCAD_PRINT_PROBE、native/print-probe 下的本地 cargo build --release,或者 PATH 上的 print-probe。由 probe binaries 工作流产出的构建带有 GitHub 来源证明:gh attestation verify bin/darwin-arm64/print-probe --repo jackControls/dsh-noBS-CAD-step。

每个会话都会检查引擎:它的 cad_interface 工具必须提供 script、summary 和 check 动作(noBS CAD 0.2.1 或更新),否则工具会直接报一条清楚的错误,而不是跑到一半才失败。

读数的局限:nbcad_run_script、nbcad_inspect_step 和 nbcad_check 从建模引擎报告的垂直圆柱面取孔(中心相差 0.3 mm 以内归为一组,最小半径是孔,最大的是沉孔)。倒角孔、锥孔、孔边倒圆、槽和斜孔,在它们眼里都不算孔,而且引擎出错时,检查的两侧看起来一模一样。打印件才是独立的检查:ring-score、symbols 和 nbcad_overlay_print 拿模型和图纸本身做对比。

安装

从 GitHub 装进你自己的配置档(插件就是纯 JavaScript 加打包好的二进制,所以不需要构建审批;把模板换成 web 而不是 headless,就能拿到面板):

dsh --profile nbcad --from-default-profile headless --dump-config >/dev/null
dsh plugin --profile nbcad add github:jackControls/dsh-noBS-CAD-step

或者从本地检出安装:

dsh plugin --profile nbcad add file:/path/to/dsh-nobs-cad-step

引擎会自动找到,顺序如下:config.server 或 NBCAD_MCP;PATH 上的 nbcad-mcp、nbcad 或 noBS-CAD;正在运行的 noBS CAD 的可执行文件(从它的会话注册表读取);已安装的应用程序(Windows 上是 noBS CAD 首次正常启动时注册的 nbcad:// 处理器,macOS 上是 /Applications/noBS CAD.app,Linux 上是 /usr/bin/nbcad)。面板的状态条会说明用的是哪一个。要固定下来,就在配置档的 cordis.patch.yml(~/.dsh/profiles/nbcad/cordis.patch.yml)里设置:

- id: nobs-cad-step
config:
server: /Applications/noBS CAD.app/Contents/MacOS/nbcad # or .../nbcad-mcp
serverArgs: ['--headless'] # the default for the application; none for nbcad-mcp
probe:(或 NBCAD_PRINT_PROBE)用你自己构建的 print-probe 二进制替换打包好的版本;在已打包的平台上不需要它。用 dsh --profile nbcad --dump-config 检查 nobs-cad-step 条目是否已挂载。

使用

在包含打印件的工作区里执行:

dsh --profile nbcad "Model scratch/PART.pdf as a STEP file. Load the nobs-cad-step skill first."

技能会要求在工作区里给出脚本、STEP 文件、特征表和一份简短报告。每个任务只跑一个零件;密集的板件允许跑多次脚本。

Windows

插件在 Windows 上无需额外工具即可运行;每次 push 时,smoke 工作流都会在 windows-latest 上跑一遍宿主代码和打包好的 print-probe.exe。Windows 上的引擎就是 noBS CAD 发行版本身:解压 noBS-CAD-<version>-windows-x64.zip,正常启动一次 noBS-CAD.exe(这会注册插件读取的 nbcad:// 处理器),插件就能找到它,并在每次运行时用 --headless 启动它。如果想固定路径,直接写 .exe 本身(.cmd 或 .bat 包装脚本无法被 spawn),用正斜杠或带引号的字符串:

- id: nobs-cad-step
config:
server: C:/Users/me/noBS-CAD/noBS-CAD.exe

只写名字时,会通过 PATHEXT 在 PATH 上查找。

桌面端检测会读取 %TEMP%\nbcad-sessions\,noBS CAD 桌面端在 Windows 上就是在这里发布心跳的;probe 会把页面渲染缓存到 %TEMP%\print-probe-cache\ 下(PRINT_PROBE_CACHE 可以改位置)。Windows on ARM 会在模拟下回退到 x64 probe。打印件名和零件名可以用任何文字(中文文件名原样保留)。

目录结构

lib/index.js plugin entry: skill, the five tools, engine and probe discovery
lib/routes.js the panel's web routes (per-boot secret, registered workspaces only)
lib/cad.js engine helpers: run a script, export STEP, inspect a STEP, summarise
lib/mcp-client.js newline JSON-RPC client for nbcad-mcp (plain Node)
lib/client.js the "2D → 3D" panel (browser half)
bin/<platform>/ packed print-probe binaries (darwin-arm64, darwin-x64, linux-x64, linux-arm64, win32-x64)
native/print-probe/ Rust source of the probe (PDF rendering by hayro, PNG/JPG by image)
skill/SKILL.md the workflow (also usable as a plain filesystem skill)
skill/plate-example.nbcad.jsonc validated example with every idiom
tools/make-example.mjs regenerates (--write) and validates (--validate) the coordinate example
tools/make-chains-example.mjs the same for the construction-chain example
.github/workflows/probe-binaries.yml builds the probe for every packed platform
cordis.patch.yml bundle patch that mounts the plugin

probe 的查找顺序是:config.probe、NBCAD_PRINT_PROBE、bin/<platform>/print-probe、本地 native/print-probe/target/release 构建,最后是 PATH 上的 print-probe。

开发

NBCAD_MCP=/path/to/nbcad-mcp node tools/make-example.mjs --validate
NBCAD_MCP=/path/to/nbcad-mcp node tools/make-chains-example.mjs --validate

要为这台机器重新构建探测程序: bash
cargo build --release --manifest-path native/print-probe/Cargo.toml
cp native/print-probe/target/release/print-probe bin/<platform>/

probe binaries 工作流会在 GitHub 上构建全部五个打包平台;跑完一次后,执行 gh run download <run-id> -D dist,再把每个 dist/print-probe-<platform> 复制到 bin/<platform>/。

改完插件后,用 dsh plugin --profile nbcad update dsh-nobs-cad-step 刷新已安装的副本(也可以先删掉再重新添加;记得先升版本号,同版本重新添加会保留旧副本)。
预览分享卡片长什么样 ↓jackControls/dsh-noBS-CAD-step
分享 · DeepSeek Harness Hub
jackControls/dsh-noBS-CAD-step

这是一个 DeepSeek Harnessdsh插件,把平板零件的 2D 工程图纸转成 noBS CAD 脚本和…

这是你的仓库?认领条目

回到顶部