前言¶
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/chunktoken 级流式输出。 - 支持 API-key 认证,以及 GUI 设置卡片中的状态、软开关和密钥轮换。
- API 会话进入真实工作区,并在侧边栏分组显示。
- 支持会话发现、只读读取任意会话历史,以及接管 GUI 会话继续驱动。
- 将可见答案
text与思考reasoning分开返回。 - 在 Cordis 事件总线上发布以下事件:
gateway/session-createdgateway/session-releasedgateway/messagegateway/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 会话。
- 在服务端保存会话上下文,并继续向同一个会话追加消息。
- 只读获取某个会话的历史,用于日志、审计或二次处理。
- 把网关事件接入其他宿主插件。
- 需要在返回结果中区分
text和reasoning。
它更适合接入现有 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