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

SketchUp 桥接 summersummer-liu/dsh-su

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

让智能体直接驱动 SketchUp 会话建模并截图存档

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add summersummer-liu/dsh-su
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · tool
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 13 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件
查看扫描证据(共 27 处,展示前 18 条)
  • 读取本地文件
    index.js:55
    const PACKAGE_VERSION = JSON.parse(readFileSync(join(PACKAGE_ROOT, 'package.json'), 'utf8')).version
  • 读取本地文件
    index.js:120
    const info = await stat(target).catch(() => null)
  • 读取本地文件
    index.js:128
    const info = await stat(target).catch(() => null)
  • 写入本地文件
    index.js:132
    await mkdir(dirname(target), { recursive: true })
  • 读取本地文件
    index.js:156
    return (await readFile(join(PACKAGE_ROOT, 'sketchup', EXTENSION_DIR_NAME, 'VERSION'), 'utf8')).trim()
  • 读取本地文件
    index.js:165
    installedVersion = (await readFile(join(pluginsDirectory, EXTENSION_DIR_NAME, 'VERSION'), 'utf8')).trim()
  • 读取本地文件
    index.js:210
    if (!existsSync(paths.executable)) throw new Error(`SketchUp executable does not exist: ${paths.executable}`)
  • 读取本地文件
    lib/sketchup-extension.js:38
    return candidateSketchUpExecutables().find((candidate) => existsSync(candidate)) || null
  • 读取本地文件
    lib/sketchup-extension.js:42
    if (depth < 0 || !existsSync(root)) return
  • 读取本地文件
    lib/sketchup-extension.js:45
    entries = readdirSync(root, { withFileTypes: true })
  • 读取本地文件
    lib/sketchup-extension.js:78
    const direct = filtered.find((candidate) => existsSync(candidate))
  • 读取本地文件
    lib/sketchup-extension.js:88
    return candidateTemplatePaths().find((candidate) => existsSync(candidate)) || null
  • 读取本地文件
    lib/sketchup-extension.js:107
    if (!existsSync(sourceDir) || !existsSync(sourceLoader)) {
  • 写入本地文件
    lib/sketchup-extension.js:121
    await mkdir(targetRoot, { recursive: true })
  • 写入本地文件
    lib/sketchup-extension.js:138
    await mkdir(dataDirectory, { recursive: true })
  • 写入本地文件
    lib/sketchup-extension.js:140
    await writeFile(configPath, JSON.stringify({ port }, null, 2), 'utf8')
  • 执行外部命令固定命令
    lib/sketchup-extension.js:147
    const result = spawnSync('tasklist', ['/FI', 'IMAGENAME eq SketchUp.exe', '/FO', 'CSV', '/NH'], {
  • 执行外部命令来自配置/变量
    lib/sketchup-extension.js:171
    const child = spawn(executable, args, {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

SketchUp 2023 桥接插件,用于 DeepSeek Harness:通过 8 个智能体工具操控运行中的 SU 会话(Ruby 任务、.skp 保存、视口截图)。

README

由 DeepSeek 最新模型翻译生成
dsh-su — DeepSeek Harness 的 SketchUp 桥接 一个 DeepSeek Harness(DSH)插件,把常驻的 SketchUp Pro 会话变成智能体工具:跑 Ruby 任务脚本、查模型、存 .skp 文件、截视口图——全部走本地 JSON-lines TCP 桥接,配套的 SketchUp 扩展自动安装、自动更新。 一个把 SketchUp 2023 接入 DeepSeek Harness 的插件:DSH 智能体可以直接驱动一个常驻的 SketchUp 会话(跑 Ruby 脚本、查模型、存 .skp、截图),配套的 SketchUp 扩展由插件自动安装/更新。 screenshot 功能 - 8 个智能体工具 — su_status、su_install_extension、su_ensure、su_run、 su_eval、su_save、su_capture、su_stop。 - 常驻 SketchUp 会话 — 启动一次,之后每个任务只走一趟短桥接往返(通常 10–100 ms),不用重启应用。 - 自带 SketchUp 扩展 — 首次使用时装进 Plugins\ (也提供 .rbz 包);扩展自动启动桥接,并添加 Extensions → DSH Bridge 菜单(状态 / 日志 / 重启)。
展开完整文档(README 剩余 1 节)
dsh-su — DeepSeek Harness 的 SketchUp 桥接

一个 DeepSeek Harness(DSH)插件,把常驻的 SketchUp Pro 会话变成智能体工具:跑 Ruby 任务脚本、查模型、存 .skp 文件、截视口图——全部走本地 JSON-lines TCP 桥接,配套的 SketchUp 扩展自动安装、自动更新。

一个把 SketchUp 2023 接入 DeepSeek Harness 的插件:DSH 智能体可以直接驱动一个常驻的 SketchUp 会话(跑 Ruby 脚本、查模型、存 .skp、截图),配套的 SketchUp 扩展由插件自动安装/更新。

screenshot

功能

- 8 个智能体工具 — su_status、su_install_extension、su_ensure、su_run、 su_eval、su_save、su_capture、su_stop。
- 常驻 SketchUp 会话 — 启动一次,之后每个任务只走一趟短桥接往返(通常 10–100 ms),不用重启应用。
- 自带 SketchUp 扩展 — 首次使用时装进 Plugins\ (也提供 .rbz 包);扩展自动启动桥接,并添加 Extensions → DSH Bridge 菜单(状态 / 日志 / 重启)。
- 内置米制建模工具包 — 任务脚本 require 'su_kit' 即可用盒子、圆柱、拉伸、标签、材质、相机、截图和校验辅助函数(输入米,输出米)。
- 内置技能 sketchup-modeling — 工作流 + SketchUp 2023 / Ruby 2.7 踩坑指南。
- 默认安全 — 工具限定在工作区内,拒绝静默覆盖,也拒绝在另一个桥接已在运行时重置文档。

架构

DSH plugin (this package) SketchUp 2023 extension (bundled)
┌──────────────────────────────┐ TCP 47311 ┌────────────────────────────────────┐
│ index.js (8 tools) │ JSON lines │ dsh_su_bridge.rb (extension loader)│
│ lib/su-bridge.js │ ───────────▶ │ └─ dsh_su_bridge/server.rb │
│ lib/sketchup-extension.js │ ◀─────────── │ (TCP server on main thread) │
└──────────────────────────────┘ ok/result │ └─ dsh_su_bridge/su_kit.rb │
│ installs extension ─────────────────┐ └────────────────────────────────────┘
│ %APPDATA%\SketchUp\SketchUp 2023\ │
│ SketchUp\Plugins\ │ bridge data/logs:
└─────────────────────────────────────┘ %LOCALAPPDATA%\dsh-su\

SketchUp 的 Ruby API 是单线程的:socket 线程只做 I/O,模型命令通过 UI.start_timer 排到主线程执行。扩展还处理了 SketchUp 2023 的一个怪癖——欢迎界面开着时 Ruby 插件不会加载——所以插件启动 SketchUp 时带一个模板 .skp。

环境要求

- Windows 10/11
- SketchUp Pro 2023(开发和测试用 23.1.315,Ruby 2.7.7)
- DeepSeek Harness,带桌面配置档(~/.dsh/profiles/desktop)
- Node.js ≥ 22.12(DSH 自带)

安装

1. 添加 DSH 插件

$profile = "$env:USERPROFILE\.dsh\profiles\desktop"

In $profile/package.json:
dependencies += "dsh-su": "link:D:/path/to/dsh-su" (link: = live link, recommended)
or "dsh-su": "file:D:/path/to/dsh-su"
dsh.profile.bundles += "dsh-su"

Install with the Node/pnpm bundled with DSH:
$node = "$env:USERPROFILE\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies\node\bin\node.exe"
$pnpm = "$env:USERPROFILE\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies\pnpm\bin\pnpm.mjs"
Set-Location $profile
& $node $pnpm install --prefer-offline

重启 DeepSeek Harness。上面列出的工具会出现在工具集里,sketchup-modeling 技能也会完成注册。

2. SketchUp 侧(自动)

无需操作:su_ensure / su_install_extension 会把随包附带的扩展复制到 %APPDATA%\SketchUp\SketchUp 2023\SketchUp\Plugins\,版本变化时自动更新。已经打开的 SketchUp 实例必须重启一次,扩展才会加载。

手动替代方案:通过 Extension Manager 安装 dist/dsh-su-sketchup-<version>.rbz。用 python scripts/build-artifacts.py 构建它。

配置

通过插件的 cordis.patch.yml 或你的配置档 cordis.patch.yml 配置:

- id: su-modeling
name: dsh-su
config:
sketchupExecutable: 'C:\Program Files\SketchUp\SketchUp 2023\SketchUp.exe' # optional
templatePath: 'C:\Program Files\SketchUp\SketchUp 2023\Resources\en-US\Templates\Temp01a - Simple.skp' # optional
pluginsDirectory: '' # default: %APPDATA%\SketchUp\SketchUp 2023\SketchUp\Plugins
host: '127.0.0.1'
port: 47311
timeoutMs: 180000 # per bridge command
launchTimeoutMs: 240000 # wait for the bridge after launching SketchUp
maxOutputChars: 20000
restrictToWorkspace: true # su_run/su_save/su_capture stay inside the session workspace
autoInstallExtension: true
registerSkill: true

sketchupExecutable 和 templatePath 都是可选项:插件会探测常见安装位置(Program Files、D:\su、SU_EXE / SU_TEMPLATE 环境变量),并在 su_status 里报告探测结果。

工具

| 工具 | 作用 |
| su_status | 桥接健康状态、当前模型、扩展版本、探测到的路径、提示 |
| su_install_extension | 在 Plugins\ 中复制/更新 SketchUp 扩展 |
| su_ensure | 安装扩展,复用或启动 SketchUp,等待端口就绪,把单位设为米 |
| su_run | 在 SketchUp 内运行 .rb 任务脚本;返回 $dsh_result |
| su_eval | 执行一段 Ruby 代码;返回 $dsh_result |
| su_save | 把文档保存为 .skp(限制在工作区内,不静默覆盖) |
| su_capture | 写出视口 PNG(限制在工作区内,不静默覆盖) |
| su_stop | 退出持有桥接的 SketchUp 实例 |

典型流程:

su_status
su_ensure
su_run(script: "tasks/build_model.rb", args: { out: "deliver/model.skp" })
su_capture(output_path: "qa/hero.png", width: 1600, height: 1100)
用 read_image("qa/hero.png") 实际查看结果
su_save(output_path: "deliver/model.skp")

任务脚本在 SketchUp(Ruby 2.7)里运行,可以用自带的 kit:

require 'su_kit'

k = SuKit::Kit.new
k.reset # empty model, metres
k.tag('01-SOLID', 'C8BFA8')
k.box([0, 0, 0], 1.2, 1.2, 2.0, tag: '01-SOLID')
k.material('MAT-A', 'C8BFA8')
k.camera([3, -3, 2], [0.6, 0.6, 1.0], lens: 50)
k.zoom_extents
k.capture('preview.png', 1600, 1000)
$dsh_result = { 'counts' => k.counts, 'bbox_m' => k.bbox_m, 'summary' => k.summary }

su_kit API:reset units tag use_tag box cylinder polygon_extrude polyline arc_2d group erase_all smooth_curves material paint camera zoom_extents dolly_out capture bbox_m counts summary save export,另有辅助方法 Chrono box_f seg_box_f cyl_f sphere_f glass_f edge_hide! text3d white_studio! shadow_setup! frame_view! sanity_bounds!
deep_counts。

协议

通过 TCP(127.0.0.1:47311)传输,每行一个 JSON 对象:

{"id":"a1","cmd":"run","script":"C:/abs/task.rb","args":{}}
{"id":"a1","ok":true,"result":{"script":"...","elapsed_ms":53.4,"result":{}}}
{"id":"a2","ok":false,"error":"RuntimeError: ...","backtrace":[]}

命令:ping info setup reset run eval save capture open new reload quit。
扩展日志在 %LOCALAPPDATA%\dsh-su\logs\bridge.log;ready.json 记录当前端口和 SketchUp/Ruby 版本。

测试

no SketchUp needed: module shape, tool/skill registration, path guards
node test/unit.mjs

real SketchUp: extension install, launch, run, save, capture, quit
node test/integration.mjs

the same but through the actual plugin tools (needs SketchUp)
node test/tools-e2e.mjs

test/integration.mjs 和 test/tools-e2e.mjs 在另一个 bridge 正在应答时拒绝运行,所以绝不会碰你打开的文档;它们会启动并退出自己的 SketchUp 实例。设置 SU_EXE / SU_TEMPLATE / SU_PORT 可覆盖自动检测。

构建产物

python scripts/build-artifacts.py
dist/dsh-su-sketchup-<version>.rbz SketchUp extension (Extension Manager)
dist/dsh-su-<version>.zip DSH plugin package

scripts/build-artifacts.py 把扩展打包成 .rbz,把插件打包成 zip。扩展的 Ruby 文件已提交,所以构建是可选的。

仓库结构

dsh-su/
index.js DSH plugin entry (tools + skill registration)
cordis.patch.yml bundle registration
lib/su-bridge.js TCP JSON-lines client
lib/sketchup-extension.js extension install, path detection, launch/wait
sketchup/dsh_su_bridge.rb SketchUp extension loader
sketchup/dsh_su_bridge/ main.rb / server.rb / su_kit.rb / VERSION
skills/sketchup-modeling/ bundled agent skill
scripts/ build helpers
test/ unit + integration + end-to-end tests

卸载

1. DSH:从配置档 dependencies 和 dsh.profile.bundles 中移除 dsh-su,运行 pnpm install,重启 DSH。
2. SketchUp:在 Extension Manager 中卸载 DSH Bridge (SU + DSH),或删除 Plugins\dsh_su_bridge.rb 和 Plugins\dsh_su_bridge\。
3. 可选:删除 %LOCALAPPDATA%\dsh-su\。

限制

- 每台机器只能有一个桥接:一个 SketchUp 实例占用端口 47311;其他实例要接管,必须重启。su_ensure 会报告它何时启动了新实例。
- 只测试过 SketchUp 2023(Ruby 2.7)。更新的 SketchUp 版本应该大多能用,但未经验证。
- 桥接只在本机运行(127.0.0.1),没有身份验证:请把它当作同一用户运行的开发工具。

许可证

MIT — 见 LICENSE。
预览分享卡片长什么样 ↓summersummer-liu/dsh-su
分享 · DeepSeek Harness Hub
summersummer-liu/dsh-su

让智能体直接驱动 SketchUp 会话建模并截图存档

这是你的仓库?认领条目

回到顶部