dsh-api-gateway:把 DeepSeek Harness 暴露为 REST + SSE 接口

前言

DSH 的插件生态里,很多能力已经通过 Web UI 和宿主进程跑起来了,但第三方脚本、命令行工具、浏览器端服务,或者其他客户端,往往还需要一条稳定的 HTTP 通道。dsh-api-gateway 就是为这个场景做的 DSH 插件:它把运行中的 DeepSeek Harness 暴露为 HTTP API,让外部客户端创建会话、发送消息,并通过 SSE 接收流式回复。

这个插件由 litestartup-com 维护,许可证为 MIT。它提供的不是独立推理服务,而是围绕当前 DSH 会话和 agent 的 HTTP 接入层。

这是什么

dsh-api-gateway 是一个 DeepSeek Harness 插件,用于给任意第三方客户端提供简单的 REST + SSE 接口。

它解决的主要问题是:

  • 已有 DSH 会话和 agent 能力,但外部程序不能直接调用。
  • 需要把 Web UI 中创建的会话暴露给脚本或服务。
  • 需要流式读取回复,而不是只等待最终结果。
  • 需要区分可见答案和模型思考内容。
  • 需要把网关事件发布到宿主事件总线,方便其他插件集成。

核心功能

下面列出的能力来自插件说明和已核实事实。

  • 将运行中的 DeepSeek Harness 暴露为 HTTP API,让第三方客户端创建会话并流式接收回复。
  • 提供 REST + SSE 接口,README 明确 10 个端点,并支持 assistant/chunk token 级流式输出。
  • 支持 API-key 认证,以及 GUI 设置卡片中的状态、软开关和密钥轮换。
  • API 会话进入真实工作区,并在侧边栏分组显示。
  • 支持会话发现、只读读取任意会话历史,以及接管 GUI 会话继续驱动。
  • 将可见答案 text 与思考 reasoning 分开返回。
  • 在 Cordis 事件总线上发布以下事件:
  • gateway/session-created
  • gateway/session-released
  • gateway/message
  • gateway/turn-end
  • 支持 Linux、macOS、Windows 客户端,包括 PowerShell;服务端对 GBK 宽容。

安装与启用

package.json 要求 Node >=20。安装前建议先检查源码与 MIT 许可证。插件运行在 DSH 宿主进程中,会接触当前进程可访问的会话和工作区上下文,因此安装前最好确认你信任这个代码来源。

从 GitHub 安装

下面是官方安装命令:

dsh plugin --profile web add github:litestartup-com/dsh-api-gateway

这个安装方式无需额外的 build approval,因为 lib/ 已提交。构建脚本仅在 packing/publishing 的 prepack 时运行。

从本地 tarball 安装

如果你已经下载或打包了插件文件,也可以用本地文件安装:

dsh plugin --profile web add ./dsh-api-gateway-0.1.0.tgz

卸载

如果确认不再需要,可以用下面的命令移除:

dsh plugin --profile web remove dsh-api-gateway

典型用法

先确认 DSH 已运行,并且插件已经加载。然后用示例脚本发起一条提问:

./examples/ask.py "introduce yourself"

在 Windows PowerShell 中可以使用:

.\examples\ask.ps1 "introduce yourself"

这两个示例命令的目标相同:向本地网关发送一条提示,并接收回复。

如果想直接看底层 HTTP 调用,可以按下面的顺序执行。先声明网关基础地址:

BASE=http://127.0.0.1:3080/api-gw/v1

POST /key 用于引导获取 API key。按 README 说明,第一次调用后会关闭,之后应使用已生成的 key。

KEY=$(curl -s -X POST $BASE/key | jq -r .apiKey)

创建一个会话:

SID=$(curl -s -X POST $BASE/sessions -H "Authorization: Bearer $KEY" | jq -r .sessionId)

先挂接 SSE 流:

curl -sN $BASE/sessions/$SID/stream -H "Authorization: Bearer $KEY" &

再发送消息:

curl -s -X POST $BASE/sessions/$SID/messages -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' -d '{"content":"hello"}'

这里的顺序比较重要:先挂接流,再发送消息。流式输出通过 SSE 返回,消息发送接口负责把内容提交给会话。

会话、并发与管理注意

使用网关时,有几个和会话生命周期相关的配置与行为需要留意。

  • maxSessions 限制并发会话数,达到上限后创建失败。
  • DELETE /sessions/:id 会释放 maxSessions 槽位,并结束该会话的 SSE 流,但保留历史。
  • 接管 co-driven GUI 会话时,不会 dispose GUI 的 agent,Web UI 保留该会话。
  • adminKey 示例值为 change-me,用于启用 admin 端点和卡片控制。
  • API key 通过 POST /key 引导获取,README 说明第一次调用后关闭。

对于按任务创建会话的客户端来说,及时释放会话槽位比单纯删除消息更关键。否则并发达到上限后,后续创建会话会受到影响。

适用场景

这个插件适合以下几类使用方式:

  • 用命令行脚本驱动 DSH agent。
  • 让 Python、Shell、PowerShell 或其他客户端接入现有 DSH 会话。
  • 在服务端保存会话上下文,并继续向同一个会话追加消息。
  • 只读获取某个会话的历史,用于日志、审计或二次处理。
  • 把网关事件接入其他宿主插件。
  • 需要在返回结果中区分 textreasoning

它更适合接入现有 DSH 运行环境,而不是单独部署一个完整 agent 平台。使用前仍应检查源码、许可证和网关暴露面,尤其是 API key、admin key、并发上限和 CORS 等配置项。

相关链接

  • 目录页:https://www.skillhub.cn/plugins/litestartup-com/dsh-api-gateway
  • GitHub:https://github.com/litestartup-com/dsh-api-gateway
羽毛球分组比赛记分
小程序二维码

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

小夜