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 會話。
  • 在服務端保存會話上下文,並繼續向同一個會話追加消息。
  • 只讀獲取某個會話的歷史,用於日誌、審計或二次處理。
  • 把網關事件接入其他宿主插件。
  • 需要在返回結果中區分 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
羽毛球分组比赛记分
小程序二维码

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

小夜