让智能体直接驱动 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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 13 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
summersummer-liu/dsh-su
让智能体直接驱动 SketchUp 会话建模并截图存档
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,330已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,311已汉化DSH
71.4
智能体运行框架路由HarnessRouter/harnessrouter
智能体 harness 的统一接口。
★ 3,984已汉化DSH
71.3
这是你的仓库?认领条目