前言¶
用 DSH 跑智能体时,一个反复出现的动作是「在另一个客户端里打开当前工作区文件夹」。DSH 原生自带 “Open In…” 控件,但它把应用写死在编译期的目录表里,第三方没法往里面加 CodeBuddy。如果你的日常主力是 CodeBuddy,每次都得手动切到文件管理器或终端敲启动命令,再指定目录。
下面介绍的插件就是解决这个问题的:gokucai 维护的 dsh-open-in-codebuddy,它在 Session 头部加一个 CodeBuddy 按钮,点击后用当前 Session 的工作区目录启动 CodeBuddy。分类为客户端,星标 0,许可证 MIT。注意,社区目录是独立站点,与 DeepSeek / 幻方没有官方从属关系,这个插件也不是官方出品。
这是什么¶
一句话:这是 DSH 的一个客户端插件,由 gokucai 维护,在 Session 头部 DSH 原生 “Open In…” 控件旁边插入一个 </> CodeBuddy 按钮,点击即在当前 Session 的工作区目录启动 CodeBuddy。
它不是把 CodeBuddy 加进原生下拉菜单,而是在旁边的独立槽位里放一个并排的按钮,不改动 DSH 自带控件。当前 workspace 目录由 DSH 在调用时传给后端,插件不做目录猜测。
核心功能¶
安装后的变化:
- Session 头部出现
</> CodeBuddy按钮,与 DSH 自带的[ ⧉ | ▾ ]控件并排,几何尺寸一致。 - 点击后以当前 Session 的 workspace 文件夹为目标启动 CodeBuddy。
- 启动过程中按钮显示忙态;失败时按钮旁出现错误提示,六秒后自动消失。
- 检测不到 CodeBuddy 时,按钮完全不渲染,不会出现一个点了没反应的控件。
各平台的行为:
| 平台 | 启动方式 |
|---|---|
| macOS | 优先调用 CodeBuddy 自带 CLI Contents/Resources/app/bin/code -n <dir>,把目录作为工作区在新窗口打开;该 CLI 不存在时回退到 open -a |
| Windows / Linux | 在 PATH 中查找 codebuddy、cbc 或 codebuddy-code,以该目录为工作目录运行 |
macOS 上还会校验 bundle id 必须是 com.tencent.codebuddycn。这样做的目的是:安装被改名时仍能正常启动,同时在某个同名路径上放着无关应用时不会被误启动。
安装与启用¶
从 GitHub 源安装:
dsh plugin --profile <your-profile> add github:gokucai/dsh-open-in-codebuddy
或者用 npm 预构建包,不需要走构建审批:
dsh plugin --profile <your-profile> add dsh-open-in-codebuddy
<your-profile> 要替换成你实际使用的 profile 名称。这个包声明了 dsh.bundle,所以 DSH 安装时会把它作为一个 profile bundle layer 接纳,不需要手工改 cordis.patch.yml 或 package.json。
安装前先确认一件事:插件以当前 DSH 进程的权限运行,会读取应用安装位置并启动一个本地进程;README 声明它不做网络请求、不读 workspace 文件、不接触凭据。但安装第三方插件前仍应自己过一遍源码和许可证,MIT 只约束使用条款,不保证代码内容符合你的预期。
典型用法¶
装完重启 DSH 即可,没有额外的配置步骤。
- CodeBuddy 装在本机标准位置(macOS 的
/Applications或~/Applications下的CodeBuddy CN.app或CodeBuddy.app,Windows / Linux 在PATH里)。重启 DSH 后,Session 头部会出现按钮,点它即以当前 workspace 启动 CodeBuddy。 - 如果 CodeBuddy 不在标准位置,export 环境变量并重启 DSH:
export CODEBUDDY_APP_PATH="/path/to/CodeBuddy CN.app"
- 不用了就卸载:
dsh plugin --profile <your-profile> remove dsh-open-in-codebuddy
适用场景与注意¶
适合这样的使用者:主力编辑器是 CodeBuddy,同时用 DSH 跑会话,希望贴着当前会话上下文直接进 IDE,而不是先退出再手动打开目录。也适合想研究「一个客户端插件如何在 DSH slot 系统里安全占位」的人——这个仓库的 README 讲清了它为什么用独立的 cell id,而不是复用原生控件的 cell id。
限制和注意点:
- 按钮依赖后端探测到本机装了 CodeBuddy 才会渲染,没装就是没按钮,属预期行为。
- macOS 非标准路径要用
CODEBUDDY_APP_PATH指过去,否则探测不到。 - 插件请求体上限 64 KiB,必须是
application/json,且传入的路径必须是真实存在的绝对目录;参数按 argv 传递、detached、不走 shell,也不带 stdio 管道。 - 宿主侧的两条路由
GET /open-in-codebuddy/status和POST /open-in-codebuddy/open都排在 DSH 的连接信任围栏之后,未认证和跨域调用会在探测和启动之前被拒。 - 该插件以当前 dsh 进程权限运行,安装前检查源码与许可证。
结尾¶
这个插件的价值在于它没有试图改 DSH 原生的下拉菜单,而是在旁边的槽位里放了一个并排按钮,装完即用,卸载后干净回退,原生控件不受影响。如果你的日常流程是 DSH 会话与 CodeBuddy 编辑交替进行,值得试一下。
- 目录页:https://www.skillhub.cn/plugins/gokucai/dsh-open-in-codebuddy
- GitHub:https://github.com/gokucai/dsh-open-in-codebuddy