Back to home@yLong765

dsh-ide-bridge

DSH (Harness) 插件,让 IDE 和 Harness 双向联通

Stars
0
Language
JavaScript
Created
Aug 20, 2026
Updated
Aug 20, 2026
GitHub repo

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 原生插件 HarnessBridgerider-plugin/编辑器右键 Send to HarnessCtrl+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.jsoncommand: powershell.exe,args 用 ${file} / ${lineNumber} / ${workspaceFolder} / ${selectedText};keybindings 绑 workbench.action.tasks.runTaskSend 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 Codevscode),链接可用 ?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-senddsh-send-to-harnessdsh-ide-bridge(双向桥后更名)。
  • AGENTS.md 指令块当前使用 v2 标记;v1 时代(SendToHarness 命名)的块需重开一次开关迁移。