dsh 也能进 Discord 了:我给 DeepSeek Harness 写了个适配器

dsh 也能进 Discord 了:我给 DeepSeek Harness 写了个适配器

TL;DR

dsh-discord:给 DeepSeek Harness 写的 Discord 适配器。@机器人下任务,thread 即开,审批按钮直接送到手机。

为什么自己动手写一个

上回那篇《从聊天窗口到工作台:这半年,我的 Agent 工作流换了一代》里说过,我的 Agent 工作台已经统一到了 Discord:云上的 Hermes 原生支持 Discord,本地的 OpenCode 通过 Kimaki 接入,一个 thread 一个任务,thread 就是 session 的边界。

缺的一块是 dsh。DeepSeek Harness 是我最近用下来很顺手的 harness agent,尤其是插件系统——不用 fork,不用改源码,一个插件挂进 profile 就能扩展它的能力面,这是我最喜欢的样子。但官方入口只有 Web 页面,试过几个社区做的 Discord 插件,要么把整个会话糊在单频道里,要么 thread 状态管理形同虚设——Discord 最有价值的 channel 和 thread 结构,在这几个插件里基本没有被当成一回事。

工作台缺的这一块,与其等,不如自己补上。上周末动手,借助 dsh、OpenCode、zcode 和 omp,配合 GPT 和 GLM 交叉开发调试,OpenSpec 加 agent-skills 管着实现边界,出了初始版本。

插件的形态也省事:dsh-discord 不是独立进程,它就是一个 DSH 插件,直接挂载到 dsh web profile 上。会话状态仍在 DSH 里,适配器只负责 Discord 这一侧的进出。

它做了什么

@提及即会话。 在工作区频道里 @机器人描述任务,适配器锚定一条 thread——你的消息就是首帖——创建 DSH 会话并提交任务,一条 thread 就是工作区里的一个新会话。之后在 thread 里直接追加消息就能排队,不用再 @。发图也能带着走:适配器从 Discord CDN 下载后作为 image parts 交给多模态模型。

流式渲染。 回答在单条头消息里原地编辑,每个工具调用是一行活动记录,长答案按代码围栏自动分段。turn 结束,活动消息删除,thread 里只剩最终结果。

审批和提问都是按钮。 DSH 需要确认时,ask 帧渲染成按钮、下拉菜单或文本弹窗送到频道里,手机上点一下就完事。所有权有校验:谁发起谁点击,超时按拒绝处理,绝不默认放行。

会话控制齐全。 /steer 插话、/stop 取消、/queue 管理排队、/model select 切模型(provider → 模型 → 推理强度逐级选)、/session resume 恢复历史会话、/project bind 绑定工作区并创建工作区频道。

双语开箱即用。 所有 Discord 可见文案都有中英两份,跟随 DSH 语言偏好,也可以钉死。

安全是设计出来的,不是补出来的。 显式服务器白名单加 deny-first 授权,白名单外零响应、零调用;mention 双重抑制;任务提交至多一次,结果不明的投递绝不盲目重发;绑定持久化,重启不丢。

用起来只要五步

前置条件:dsh CLI 0.1.1-rc.2 以上、Node.js 22.19+ 或 24+,以及一个开了 MESSAGE CONTENT 特权 intent 的 Discord 应用。

  1. 装插件,dsh CLI 会自动注册 bundle:
dsh plugin --profile web add @addozhang/dsh-discord
  1. 重启 dsh web,刷新浏览器。
  2. Settings → Discord,贴入 bot token,点 Connect。token 进凭据服务,不落设置也不进日志。
  3. 填服务器白名单——白名单外的一切都会被忽略。
  4. 在 general(管理频道)里用 /project bind 绑定 dsh 工作区,会自动创建一个工作区频道;之后在工作区频道里 @机器人下第一个任务,一个任务一条 thread,就是工作区里的新会话。

常用命令速查:

命令位置作用
/project bindgeneral(管理频道)绑定 dsh 工作区,自动创建工作区频道(管理员)
/steer、/stop会话 thread插话 / 取消当前 turn
/model select会话 thread切换模型
/session resume工作区频道恢复历史会话

收尾

初始版本已经挂上 npm(@addozhang/dsh-discord),装法就是上面一条命令。/preset、/skill 这几个命令还在路上,路由支持后就上线。

上回那篇的结论是:Agent 的交互容器,决定了它能不能真正变成工作流。dsh-discord 算是把这句话往 dsh 上又落了一步。造轮子的过程还是老配方:人定结构和边界,agent 轮班写代码,OpenSpec 管 spec,agent-skills 管实现纪律,GPT 和 GLM 交叉调试互相抓 bug。从想法到 npm,一个周末。

仓库在这里:addozhang/dsh-discord,MIT,issue 和 PR 都欢迎。

乱世浮生微信公众号二维码

(转载本站文章请注明作者和出处乱世浮生,请勿用于任何商业用途)