- Home
- Plugin
- Sviluppo e strumenti per plugin
- dsh-vscode-bridge (dsh-vscode-bridge)
dsh-vscode-bridge (dsh-vscode-bridge)
heyitaowml-ctrl/dsh-vscode-bridge/dsh-vscode-bridge
Sends a VS Code selection or file path into the open DSH conversation as an @path reference with its line range, inserted at the composer without sending it. Requires the companion VS Code extension shipped as a .vsix inside the bundle (one-click install from the composer, or install it by hand).
Installazione
dsh plugin --profile web add github:heyitaowml-ctrl/dsh-vscode-bridgeQuesto plugin si trova nella sottodirectory dsh-vscode-bridge del repository.
README
DSH ↔ VSCode 上下文桥接
把 VS Code 里选中的代码范围,或文件的绝对路径,直接添加到当前 DSH 对话的输入框。它不会自动发送消息,你可以继续在 DSH 里补充问题,类似 Cursor 的“Add to Chat”。
English — Right-click a selection or a file in VS Code and it lands in the open DSH conversation as an
@pathreference with its line range, at the composer caret. Nothing is sent for you. The DSH side is published to npm asdsh-vscode-bridge-heand installs withdsh plugin --profile <profile> add dsh-vscode-bridge-he; the VS Code side ships as a.vsix.
交付物
| 路径 | 内容 |
|---|---|
dsh-vscode-bridge/ | DSH bundle:Host HTTP/SSE 服务 + 浏览器端输入框注入 |
vscode-dsh-bridge/ | VS Code 扩展源码 |
dist/dsh-vscode-bridge.vsix | 可直接安装的 VS Code 扩展包(由官方 vsce 构建) |
dist/dsh-vscode-bridge-1.0.4.zip | DSH bundle 的单文件分发包(Windows 解压后安装) |
dist/dsh-vscode-bridge-1.0.4.tgz | 同一 bundle 的 tar.gz 分发包(带正斜杠路径,跨平台) |
dist/local-dsh-vscode-bridge-1.0.4.tgz | npm 格式 tarball,可托管到 Gitee 后用 URL 直接安装 |
scripts/build-vsix.ps1 | 重新构建 VSIX |
tests/bridge-e2e.mjs | Host 路由 / 队列 / SSE 回归测试 |
tests/test-extension.cjs | 用 mock vscode 走通扩展命令的集成测试 |
发布 VS Code 扩展
扩展现在用官方 vsce 打包(脚本:scripts/build-vsix.ps1),vscode-dsh-bridge/vsix/ 那套手工清单已删除——它把 Publisher="local" 写死了,也没法带 PNG 图标。
# 打包
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build-vsix.ps1
# 装到本机 VS Code
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build-vsix.ps1 -Install
上架 Marketplace 的一次性准备:
- 用 Microsoft 账号登录 https://marketplace.visualstudio.com/manage → Create publisher,
ID 填
heyitaowml(要和package.json里的publisher一致,建完不能改) - 到 https://dev.azure.com 建 Personal Access Token:Organization 选 All accessible organizations, Scopes 里勾 Marketplace → Manage
- 设置 Token 并发布:
$env:VSCE_PAT = '<你的 PAT>'
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build-vsix.ps1 -Publish
⚠️ 微软已宣布 Azure DevOps 全局 PAT 将于 2026-12-01 停用,之后要换成 Entra ID 认证 (
vsce publish --azure-credential)。现在用 PAT 仍然可以。
当前状态
- DSH bundle
@local/dsh-vscode-bridge@1.0.4已安装到desktopprofile,状态为active。 - 1.0.4 修复:客户端订阅从
conversation.composer.dock移到conversation.input.left,新会话 hero 区在发送第一条消息前也能收到 VSCode 路径。 - VS Code 扩展
local.dsh-vscode-bridge@1.0.0已通过 VSIX 安装。 - DSH 页面已重载,浏览器端客户端已连接(
clients: 1)。 - 已在真实 DSH 页面中验证:新会话未发送消息时,Host 收到附件后输入框直接出现
@C:\...\package.json (lines 1-5),且没有自动发送。 - VS Code 当时没有运行,因此右键菜单的实际渲染没有截图验证;但扩展的
package.json菜单贡献、命令注册、选区/文件参数计算和真实 HTTP 发送都已验证。
测试过程中写入输入框的示例引用已经清空。
使用
- 启动 DSH 桌面端,打开一个对话。
- 在 VS Code 中打开文件:
- 选中若干行 → 编辑器右键 → DSH: 发送选中代码到 DSH 对话
- 不选中内容 → 编辑器右键 → DSH: 发送文件路径到 DSH 对话
- 资源管理器中右键文件/文件夹 → DSH: 发送文件路径到 DSH 对话
- 切回 DSH。引用已经出现在当前对话的输入框,光标位置保持不变。
- 输入你的问题,正常发送。
发送示例:
@C:\project\src\main.ts (lines 12-28)
@C:\project\src\main.ts
@"C:\project\my folder\main.ts" (line 7)
- 代码段会以绝对路径 + 1-based 闭区间行号表示。
- 文件会以绝对路径表示;目录会带尾部
/。 - 路径包含空格时使用
@"..."形式。 - DSH Host 插件还注册了
vscode-references提示段,告诉模型(lines A-B)应该按范围读取,而不是只凭路径猜测。
如果 VS Code 已经在运行
安装 VSIX 后,VS Code 通常需要重载窗口才能出现新命令:
Ctrl+Shift+P → Developer: Reload Window
如果 DSH 页面是旧的
安装/重载 DSH bundle 后,刷新 DSH 页面即可。当前页面已由我们重载并连接成功;以后重启 DSH 会重新写入 token,扩展每次发送都会重新读取,不需要手动改配置。
上传到 Gitee 后如何安装 DSH 端
仓库地址:https://gitee.com/HYTWML/dsh-vscode-bridge
方式 A:用 npm tarball URL 直接安装(推荐)
把 dist/local-dsh-vscode-bridge-1.0.4.tgz 上传到 Gitee 仓库或 Release,取得可直接下载的 URL,然后让 DSH 执行:
plugin_manager install_bundle target="https://gitee.com/HYTWML/dsh-vscode-bridge/raw/master/dist/local-dsh-vscode-bridge-1.0.4.tgz"
也可以用 Gitee Release 附件的下载链接替换上面的 URL。这个文件是标准 npm tarball(根目录为 package/,内含 package.json、cordis.patch.yml、index.js、client.js 等),适合 DSH 的 tarball 安装。
- 仓库需要是公开可读的;私有仓库需要本机 Git/pnpm 已配置 Gitee 凭据。
- Gitee 的
raw链接如果返回 HTML 而不是文件,请改用 Release 附件链接。
方式 B:Git URL 安装
仅当仓库根目录就是 DSH bundle(根目录有带 dsh.bundle.patch 的 package.json)时:
plugin_manager install_bundle target="git+https://gitee.com/HYTWML/dsh-vscode-bridge.git"
当前工作区的 bundle 位于 dsh-vscode-bridge/ 子目录,因此直接对当前仓库根使用 Git URL 不会把子目录当成包;这种情况请使用方式 A,或单独建一个 bundle 根仓库。
方式 C:下载 zip/tgz 后本地安装
把 dist/dsh-vscode-bridge-1.0.4.zip 或 dist/dsh-vscode-bridge-1.0.4.tgz 下载并解压,然后把解压出来的 dsh-vscode-bridge 目录作为 target:
plugin_manager install_bundle target="C:\path\to\dsh-vscode-bridge"
VS Code 端
从 Gitee 下载:
https://gitee.com/HYTWML/dsh-vscode-bridge/raw/master/dist/dsh-vscode-bridge-1.0.0.vsix
然后安装:
Invoke-WebRequest -UseBasicParsing `
-Uri 'https://gitee.com/HYTWML/dsh-vscode-bridge/raw/master/dist/dsh-vscode-bridge-1.0.0.vsix' `
-OutFile "$env:TEMP\dsh-vscode-bridge-1.0.0.vsix"
code --install-extension "$env:TEMP\dsh-vscode-bridge-1.0.0.vsix" --force
本机当前安装的是
~/.dsh/bundles/local-dsh-vscode-bridge-1.0.4.tgz。如果改成从 Gitee 安装同一个包,需要先remove_bundle当前的@local/dsh-vscode-bridge,否则会报already-installed。
工作原理
VS Code 扩展
│ POST /dsh-vscode/attach(Bearer token)
▼
DSH Host 插件(本仓库 dsh-vscode-bridge)
│ 内存队列 + SSE /dsh-vscode/events
▼
DSH 浏览器插件(conversation.composer.dock 的隐藏组件)
│ InputActions.captureInsertion() + insertText()
▼
当前对话的输入框
- Host 插件在
~/.dsh/vscode-bridge.json写入{ url, token, channel }(可用DSH_VSCODE_BRIDGE_FILE覆盖)。文件以0o600模式写入;Windows 上的最终权限由用户目录 ACL 决定。 - VS Code 扩展每次发送前重新读取该文件,因此 DSH 重启/换端口后无需手动同步 token。
- 没有打开的 DSH 对话时,Host 会把引用放入内存队列(最多 100 条),下一个浏览器会话连接时按顺序补发。
- DSH Desktop 的页面运行在
dsh-app://app/。桌面壳会把非静态资源请求连同认证 Cookie 转发给 Host,因此浏览器端使用相对路径/dsh-vscode/*即可,普通浏览器标签页也兼容。 - 只接受回环地址(
localhost/127.0.0.1/::1),避免把 token 发到远端。
端点
| 方法 | 路径 | 鉴权 | 用途 |
|---|---|---|---|
| POST | /dsh-vscode/attach | Bearer token | 接收一条选区/文件引用 |
| GET | /dsh-vscode/events | token + channel query | 浏览器端 SSE 长连接 |
| GET | /dsh-vscode/config | 同源页面 / Desktop 转发的认证请求 | 给浏览器端下发 token/channel |
| GET | /dsh-vscode/health | 无 | VS Code “显示桥接状态”命令使用 |
排查
-
VS Code 提示找不到配置:确认 DSH 正在运行,且 DSH 侧 bundle 已启用;然后运行 DSH: 显示 DSH 桥接状态,或在 DSH 页面刷新一次。
-
VS Code 提示 401:DSH 重启后 token 会变化;扩展会自动重新读取。若仍失败,刷新 DSH 页面再试。
-
DSH 输入框没出现引用:运行 DSH: 显示 DSH 桥接状态;若显示
clients: 0,说明没有已打开的 DSH 对话,引用会排队,打开对话后自动补发。 -
查看 DSH 侧健康状态:
Invoke-RestMethod http://127.0.0.1:52094/dsh-vscode/health -
VS Code 日志:输出面板 →
DSH Bridge。
开发 / 重新构建
# 重新打 VSIX
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\build-vsix.ps1
# 同时安装到本机 VS Code
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\build-vsix.ps1 -Install
DSH bundle 是本地链接安装。修改 dsh-vscode-bridge/ 后,需要重新加载该 bundle 或重启 DSH;本地链接意味着这个工作区目录不能删除/移动。
卸载
- DSH:
plugin_manager→remove_bundle,目标@local/dsh-vscode-bridge。 - VS Code:
code --uninstall-extension local.dsh-vscode-bridge。 - 可选:删除
~/.dsh/vscode-bridge.json。
Plugin correlati
deepseek-harness
deepseek-ai/deepseek-harness
dsh-web (dsh-plugin-manager)
zhu1090093659/dsh-web
dsh-market
dsh-market/dsh-market
dsh-web
zhu1090093659/dsh-web