dsh-virtuoso
已验证dsh-virtuoso · v0.1.0 · MIT · Web 界面
Cadence Virtuoso integration for the DeepSeek Harness — bundles the virtuoso-cli agent skills, manages the daemon / tunnel / sessions from the settings panel. · DSH 的 Virtuoso 集成插件,把 virtuoso-cli 的 agent skills 与 daemon / tunnel / session 管理一并打包到 DSH 设置面板
安装
dsh plugin add dsh-virtuoso 用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。
源码
标签
作者
说明文档
dsh-virtuoso
English | 中文
dsh-virtuoso把 Cadence Virtuoso 的 EDA 集成带到 DeepSeek Harness: 把 virtuoso-cli 的 agent skills 全部打包, 让模型在 DSH 会话里就能直接驱动 SKILL、Maestro、Spectre、原理图、Verilog-A 与 SSH tunnel; 设置面板负责展示vcli健康度、tunnel 开关和 daemon 在读的VB_*配置。插件自身只是 DSH 对 virtuoso-cli 的一层薄壳 —— 所有执行路径都跑
vcli(老兼容也接受virtuoso)binary, agent 通过Bash调用;host half 不引入新远端、不引入新守护、不引入新进程, 只是把VB_*环境变量读出来展示。
安装
下面四种安装路径,任选一种。
A. 从 npm 发布的包
dsh plugin --profile web add dsh-virtuoso
npm publish 发布的是预构建的 lib/ 和 client/,用户端不需要 build,
也不需要为 prepare 脚本授权。代价是发布产物与具体版本绑定,bug 修复需要
bump 版本号再发。
B. 从本仓库,用 helper(开发期推荐)
npm install
npm run install:local # = node scripts/install-locally.mjs
# 加 --profile <name> 装到非 web profile;加 --no-clean 保留 tarball
install:local 把 dsh plugin add 不替你做的两步合上:先 npm pack
产出 dsh-virtuoso-<version>.tgz,再 dsh plugin add 那个文件。
少了 pack,pnpm 看到 ./dsh-virtuoso-0.1.0.tgz 报 ENOENT 直接挂掉 (#1)。
C. 从本仓库,手动(等价 B,两步走)
npm install
npm run build
npm pack # 产出 dsh-virtuoso-0.1.0.tgz
dsh plugin --profile web add ./dsh-virtuoso-0.1.0.tgz
D. 从 GitHub commit(不需要本地 checkout)
# `dsh plugin add` 能直接吃 git+https tarball,但 `github:owner/repo` 这种
# shorthand 是否可用取决于 dsh 版本。下面给一个稳的写法,引用你想要的 commit/tag:
DSH_VIRTUOSO_REF="$(git -C /home/user1/git/dsh-virtuoso rev-parse HEAD)"
dsh plugin --profile web add "https://codeload.github.com/deanyou/dsh-virtuoso/tar.gz/${DSH_VIRTUOSO_REF}"
无论走哪条路:
dsh web # 重启让新 bundle 生效
…然后打开 Settings → Virtuoso。
需要 dsh web 0.1.0-rc.7+。在更老的主机上,插件会静默退出而不渲染(避免在缺失的 primitives 上爆错): 如果 Settings → Virtuoso 菜单从未出现,通常是因为这个。
你拿到什么
- 打包的 agent skills —— 上游 virtuoso-cli
的每个 skill 都作为
bundled-skill/<id>/SKILL.md一起发布,DSH 的dsh-skill-filesystem会自动发现。共 18 个 skill:SKILL 执行、Maestro、仿真 setup/run/sweep/measure、 原理图生成、Verilog-A 设计、gm/Id 设计方法学、放大器 copilot、电路优化、 ocean netlist 重新生成、两个 gotchas(SKILL shell + Spectre netlist)、 spec-driven 设计流程、tunnel-connect 引导。从更新的 virtuoso-cli 同步后,新 skill 自然出现在模型上下文中。 - 设置状态面板 ——
vcli是否在 PATH、host/port/session、远端主机 / 跳板主机 / 超时 / 缓存 / 日志目录(全部从VB_*环境变量读出,与 daemon 自己读的一致)。 一眼看出:二进制有没有装?指向哪台 compute 主机?每行可点击复制直接粘进新 shell。 - Tunnel 控制 —— 面板里
Start tunnel/Stop tunnel/Ping daemon三个按钮,各自调用vcli tunnel start|stop与vcli session show。 设计意图是把手动 session 注册(vcli session list、手工编辑~/.cache/virtuoso_bridge/sessions/*.json)做成一键。 - Skill 清单 —— 面板的第三个 tab 镜像
bundled-skill/,带描述预览与字节数, 让模型侧的 skill 列表和 agent 实际能调的工具集保持一处可审计。 - 安装命令 —— 第四个 tab 把
cargo install virtuoso-cli与 SKILL bridge 的load(...)行送进剪贴板,字符与 virtuoso-cli'sramic_bridge.il完全一致。 - 插件配置卡片 —— dsh 0.1.0-rc.7+,在 Settings → Plugins → Plugin configuration
里管理插件自身:版本、
vcli是否检测到、打包 skill 个数。 把 Allow tunnel start 关掉以禁止在隔离环境创建 tunnel,把 Allow restart 关掉以让 systemd/launchd 接管重启。
工作原理
┌──────────────────────────────────────────────────────────────────────┐
│ DSH 会话 │
│ │
│ ┌──────────────────────┐ Bash(*/vcli *) ┌────────┐ │
│ │ agent (skill: │ ───────────────────────────▶│ vcli │ │
│ │ skill-exec, │ └────────┘ │
│ │ sim-run, ...) │ │ │
│ │ bundled-skill/) │ ▼ │
│ └──────────────────────┘ ┌────────────┐ │
│ │ vcli │ │
│ ┌──────────────────────┐ /dsh-virtuoso/{status, │ daemon │ │
│ │ 浏览器设置面板 │ ping, tunnel/*, skills} │ (独立 │ │
│ │ (client.js) │◀─────────────→ host half │ 进程) │ │
│ └──────────────────────┘ (本插件, Node) └────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────┘
- DSH 通过
dsh-skill-filesystem自动扫到bundled-skill/。 描述进入模型的上下文,跟其它 skill 没区别;正文指导 agent 跑vcli ...。 - agent 通过
Bash工具调vcli skill exec 'let(...)'之类。vcli是独立 Rust 进程;插件本身不派生子进程。 - 浏览器面板调
/dsh-virtuoso/{status, ping, tunnel/*}。 host half 每次点击调用vcli一次,返回统一形状{ ok, stdout, stderr, code, reason, durationMs }。 - 插件直接从
process.env读VB_HOST/VB_PORT/VB_SESSION/VB_REMOTE_HOST/VB_JUMP_HOST/VB_TIMEOUT等。设置面板展示的值 与vcli自己读的一致 —— 没有第二份真值。
安全
- 插件用 数组形式
spawn调用vcli(不走 shell)。 agent 在 SKILL 里输入的命令保持参数形式,不会被 shell 改写。 - 所有 POST 路由只接受 same-origin —— 恶意源能看到渲染出来的环境, 但执行不了任何命令。
- host half 不直接读
~/.cache/virtuoso_bridge。 tunnel / session 文件属于vcli自己,暴露它们的时机在 vcli 上游。 - 设置面板不导入剪贴板内容、不上传任何状态。「复制」按钮只调用
navigator.clipboard.writeText,内容是 agent 原本会敲的vcli命令字面值。 - 列出 bundled skills ≠ 背书上游。skill 跟插件包一起发布,
更新前请先翻一下
bundled-skill/<id>/SKILL.md。
同步上游
node scripts/sync-skills.mjs ../virtuoso-cli
scripts/sync-skills.mjs 是唯一会改 bundled-skill/ 的入口。
它清空目录,完整复制上游 skill 树,把每条 frontmatter 的 allowed-tools:
重写为 Bash(*/vcli *) Bash(*/virtuoso *) Read Write Edit,这样打包的 skill
走 vcli 路径(virtuoso 作为历史别名也接受)。脚本是幂等的:
同一上游连跑两次会产生字节级相同的 bundled-skill/。
下限 14 个 skill —— 上游若缩水到这之下,脚本会中止。
开发
npm install
npm run typecheck # tsc 跑 host (tsconfig.json) + client (tsconfig.client.json)
npm run build # tsc → lib/,tsdown → client/client.js,做 banner 校验
node scripts/validate-skills.mjs # 确认 bundled-skill/ 能解析
host half 跑在 dsh-cordis-host-runner 沙箱(Node + vm 隔离);
client half 跑在 dsh web bundle loader(浏览器 + 闭包工厂)。
两端类型检查都依赖 DSH 在 @deepseek-ai/cordis /
@deepseek-ai/dsh-settings / @deepseek-ai/dsh-client-ui-primitives 暴露的运行时类型。
许可
MIT。本插件是 virtuoso-cli 之上的薄翻译层, virtuoso-cli 本身是 deanyou 以 MIT 发布。