dsh-open-in-codebuddy:在 DSH Session 头部一键用 CodeBuddy 打开工作区

前言

用 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 在调用时传给后端,插件不做目录猜测。

核心功能

安装后的变化:

  1. Session 头部出现 </> CodeBuddy 按钮,与 DSH 自带的 [ ⧉ | ▾ ] 控件并排,几何尺寸一致。
  2. 点击后以当前 Session 的 workspace 文件夹为目标启动 CodeBuddy。
  3. 启动过程中按钮显示忙态;失败时按钮旁出现错误提示,六秒后自动消失。
  4. 检测不到 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 即可,没有额外的配置步骤。

  1. CodeBuddy 装在本机标准位置(macOS 的 /Applications 或 ~/Applications 下的 CodeBuddy CN.app 或 CodeBuddy.app,Windows / Linux 在 PATH 里)。重启 DSH 后,Session 头部会出现按钮,点它即以当前 workspace 启动 CodeBuddy。
  2. 如果 CodeBuddy 不在标准位置,export 环境变量并重启 DSH:
export CODEBUDDY_APP_PATH="/path/to/CodeBuddy CN.app"
  1. 不用了就卸载:
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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜