dsh-ide-bridge
DSH (Harness) 插件,让 IDE 和 Harness 双向联通
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 20, 2026
- Updated
- Aug 20, 2026
Introduction
IDE Bridge(dsh-ide-bridge)— IDE ↔ Harness 双向桥
DSH (Harness) 插件,让 IDE 和 Harness 双向联通:
- IDE → Harness:在 IDE 里触发动作,把文件引用(
@路径#L行号)追加到 GUI 当前会话 的输入框草稿。只填不发送——回车权在你。 - Harness → IDE:模型回复中的文件引用渲染为可点击链接,点击后由配置的 IDE 打开 文件并跳到对应行;页面右上角 toast 提示,不开新标签页。
下文用
<插件目录>指代本仓库的绝对路径,用<用户名>指代你的 Windows 账户名。 例如<插件目录>可能是D:/tools/RiderSendToHarness——请按自己的环境替换。
组成
| 部分 | 位置 | 职责 |
|---|---|---|
DSH 插件 dsh-ide-bridge(双面) | dsh-ide-bridge/ | host 面:/ide-bridge(投递)、/open-in-rider(跳转)、/ide-bridge/links-config(开关);client 面:草稿追加、链接点击拦截 + toast、设置页 |
| Rider 原生插件 HarnessBridge | rider-plugin/ | 编辑器右键 Send to Harness(Ctrl+Alt+H)→ 调 ps1;Settings → Tools → IDE Bridge 配脚本路径 |
| IDE 侧脚本 | Send-ToHarness.ps1 / .bat / send-to-harness.sh | 文件名+行范围计算 → POST /ide-bridge(ps1 全功能;bat 精简;sh 跨平台) |
安装(DSH 插件)
dsh plugin --profile web add <插件目录>/dsh-ide-bridge
官方流程自动 pnpm 安装并登记 bundles 层。改动后需重启 dsh web + 刷新浏览器页面。
IDE → Harness
Rider(原生插件)
右键菜单首项 Send to Harness / Ctrl+Alt+H。脚本路径在
Settings → Tools → IDE Bridge 配置(默认 <插件目录>/Send-ToHarness.ps1)。
源码 rider-plugin/,改码后 powershell -File rider-plugin\build.ps1 + 重启 Rider。
Visual Studio(工具 → 外部工具)
命令 powershell.exe,参数:
-NoProfile -ExecutionPolicy Bypass -File "<插件目录>/Send-ToHarness.ps1" -FilePath "$(ItemPath)" -LineNumber "$(CurLine)" -ProjectDir "$(ProjectDir)" -Selection "$(CurText)"
VS Code(任务 + 快捷键)
.vscode/tasks.json 里 command: powershell.exe,args 用 ${file} / ${lineNumber} /
${workspaceFolder} / ${selectedText};keybindings 绑 workbench.action.tasks.runTask →
Send to Harness(建议 Ctrl+Alt+H)。
其他平台
Send-ToHarness.bat(cmd + 内置 curl,不做选区范围);send-to-harness.sh
(macOS/Linux,首尾行锚点定位)。任何能以 文件路径+行号 调命令行的工具都能接。
Harness → IDE(可点击链接)
模型在回复中输出 [Foo/Bar.cs:42](http://127.0.0.1:3080/open-in-rider?file=<绝对路径>&line=42),
点击后:捕获阶段拦截 → fetch(JSON 模式)→ host 按配置拉起 IDE
→ 右上角 toast(成功 ~2.6s,失败 ~5s 红边框)。修饰键/右键新标签不拦截(HTML 提示页兜底)。
IDE 命令配置(设置页 "IDE 打开命令")
Settings → dsh-ide-bridge 页可配置多个 IDE,每张卡片三行:
| 字段 | 说明 |
|---|---|
| 名称 | 显示名;选中左侧单选 = 默认 IDE。id 由名称自动生成(VS Code → vscode),链接可用 ?ide=<id> 指定 |
| 命令 | 可执行文件完整路径,必填——不做自动探测 |
| 参数 | 必填;支持 {file} {line} {project} 占位符。仅首次打开设置页时 Rider / VS Code / Visual Studio 三行会预填参数与占位命令;保存后以你的配置为准(未改动的占位符行不会保存) |
设置保存到 ~/.dsh/ide-bridge-ides.json,立即生效(无需重启)。
Rider
名称: Rider
命令: <Rider安装目录>/bin/rider64.exe
参数: {project} --line {line} {file} (设置页已预填此行)
- 找路径:右键桌面/开始菜单的 Rider 快捷方式 → 属性 → "目标",去掉末尾的启动参数,
指向的
rider64.exe就是。典型位置:C:/Program Files/JetBrains Rider <版本>/bin/rider64.exe或任意盘的自定义安装目录。 - 参数中的
{project}会从文件向上找.idea/.sln定位项目根(--line前必须有项目目录, 这是 rider64 的要求);找不到项目时自动退化为不带行号直接打开。
VS Code
名称: VS Code
命令: C:/Users/<用户名>/AppData/Local/Programs/Microsoft VS Code/bin/code.cmd
参数: -g {file}:{line} (设置页已预填此行)
- 找路径:默认安装即上面位置;也可在 VS Code 里
Ctrl+Shift+P→ "Shell Command: Install 'code' command in PATH" 后,于任意终端where code查看。 -g打开文件并跳到行;.code-workspace跨文件夹工作区同样适用。
Visual Studio
名称: Visual Studio
命令: C:/Program Files/Microsoft Visual Studio/<年份>/<版本>/Common7/IDE/devenv.exe
参数: {file} (设置页已预填此行)
- 找路径:
<年份>是 2019/2022 等,<版本>是 Community/Professional/Enterprise, 只填你实际装的那个。开始菜单 VS 图标 → 右键 → 打开文件位置,进Common7\IDE即见devenv.exe。 - VS 的 devenv 命令行不支持行号,点击链接只打开文件后需手动跳行(CLI 层面无解)。
其他编辑器
任何"命令行打开文件"的编辑器都能配——Sublime({file}:{line})、
Vim/Neovim(+{line} {file})等,按各自 CLI 语法填参数模板即可。
开关(DSH 设置界面)
Settings 面板 → 导航 dsh-ide-bridge 页"可点击文件链接"节:
- 全局开关:开 / 关 两态。关(默认)= 删全局块;开 = 写全局块(
~/.dsh/AGENTS.md)。 - 单独启用的工作区:白名单列表,只显示显式启用的(各自
<工作区>/AGENTS.md)。 “+ 添加工作区”从 DSH 已注册工作区中挑选(已启用的不重复出现),“移除”删块。 未列出的工作区跟随全局开关——几十个工作区也不臃肿。 - 语义:开 = 写启用指令块(v2 标记,端口固定 3080);关/移除 = 删除块。 历史遗留的 v1(SendToHarness 时代)块不再被识别——若升级前开过,重开一次开关即可写入 v2 块。
脚本化走同一通道:
GET /ide-bridge/links-config # 全局状态
GET /ide-bridge/links-config?enabled=1 # 全局状态 + 已启用工作区白名单
GET /ide-bridge/links-config?path=<工作区> # 附带单个工作区状态
POST /ide-bridge/links-config {"scope":"global"|"workspace","path":"...","state":"on"|"off"|"clear"}
修改对新会话立即生效;旧会话在下次文件触碰时刷新。
行为细节
- 选区定位优先级(ps1):精确匹配 → 空白不敏感匹配(应对换行拍平/引号拆散)→ 光标行兜底。
- 草稿追加而非覆盖:引用新起一行拼在末尾;已有文字与引用 chip(U+FFFC)原样保留。
- 投递请求 30 秒未被浏览器取走会被丢弃(页面刷新不回放)。
- 脚本可选参数:
-Url http://127.0.0.1:3080(覆盖地址);-Debug/--debug(诊断入参与定位方式)。 - IDE 拉起统一经 PowerShell
Start-Process(完全分离,不会拖挂 dsh web 服务)。 - 未配置/未填命令时点击链接会 toast 明确提示,不会瞎猜。
- 聊天渲染器只放行 http/https/mailto,故走本路由(jetbrains:// 深度链接实测不可用)。
卸载 / 更新
dsh plugin --profile web remove dsh-ide-bridge # 卸载 DSH 插件
# 改 dsh-ide-bridge/ 代码无需重装(link 依赖),重启 dsh web + 刷新页面即可
沿革
rider-send→dsh-send-to-harness→dsh-ide-bridge(双向桥后更名)。- AGENTS.md 指令块当前使用 v2 标记;v1 时代(SendToHarness 命名)的块需重开一次开关迁移。