DeepSeek Harness Web Bundle 插件:dsher 社區面板

前言

DeepSeek Harness (DSH) 的設計理念之一是“一切皆插件”。在本地運行 dsh web 進程時,我們可以通過插件擴展界面能力。針對 bbs.dsher.cn 論壇,開發了一個 bundle 插件,旨在將論壇的瀏覽、搜索、發帖等功能集成到 DSH 的 Web 面板中,避免在瀏覽器標籤頁和 DSH 界面之間頻繁切換。

插件介紹

這是一個 DeepSeek Harness Web 的 bundle 插件,由 kimirong 維護。安裝後,它在 dsh web 界面右下角生成一個常駐的懸浮按鈕(“dsher 社區”),點擊即可打開面板,直接與 bbs.dsher.cn 交互。

安裝與啓用

前提:機器上已安裝 DeepSeek Harness(帶 dsh 命令),並已啓動 dsh web。

1. 安裝插件

從 GitHub 倉庫直接安裝,無需先發布到 npm:

# 將插件加入 web profile bundles
dsh plugin --profile web add github:kimirong/dsher-bbs-plugin

2. 重啓服務

安裝完成後,必須完全重啓 dsh web 進程(不是刷新瀏覽器頁面),插件纔會生效。

dsh web

重啓後,頁面右下角會出現一個藍色的膠囊按鈕,點擊即可進入社區面板。

3. 常見問題

如果安裝時遇到 ERR_PNPM_ADDING_TO_ROOT 錯誤,這是因爲 pnpm 8+ 對 workspace 根目錄的 add 操作進行了校驗。可以在 ~/.dsh/profiles/web/.npmrc 中添加一行配置解決:

echo 'ignore-workspace-root-check=true' >> ~/.dsh/profiles/web/.npmrc
dsh plugin --profile web add github:kimirong/dsher-bbs-plugin

4. 更新與卸載

dsh plugin --profile web update @kimirong/dsher-bbs-plugin   # 更新到新版本
dsh plugin --profile web remove @kimirong/dsher-bbs-plugin   # 卸載(自動從 bundles 剔除)

功能特性

  • 右下角懸浮入口:藍色膠囊按鈕常駐頁面右下角,不佔用側欄空間,隨時可點。
  • 瀏覽與搜索:支持版塊分類瀏覽、帖子列表(分頁)、帖子詳情查看。搜索框直接集成在瀏覽頁頂部。
  • 發帖與互動:面板內支持發帖、回帖和點贊,正文支持 Markdown 渲染。
  • 圖片上傳:支持在正文或回覆框直接粘貼截圖(自動轉碼上傳),或點擊“🖼 上傳圖片”按鈕。
  • 一鍵登錄:通過彈窗走論壇的 GitHub / Google OAuth 流程,會話自動接入,無需手動複製 Cookie。

典型用法

安裝並重啓 dsh web 後,直接點擊右下角的懸浮按鈕即可使用。典型操作流如下:

  1. 點擊懸浮按鈕,瀏覽或搜索帖子。
  2. 點擊“發帖”或回覆框,輸入 Markdown 內容。
  3. 粘貼截圖或點擊上傳按鈕發佈內容。
  4. 點擊“一鍵登錄”按鈕,完成 OAuth 認證。

架構與技術實現

該插件採用 Host/Client 分離架構,通過 HTTP 路由實現通信,而非 DSH 官方的 @Remote 機制。

Host 半(服務端)

負責與論壇交互,暴露 JSON RPC 接口。
- 文件位置:src/host/index.ts、src/host/forum.ts
- 職責:
- src/host/index.ts:註冊 ctx.webServer 路由 /api/dsher-bbs/*,將論壇能力暴露爲本機 JSON RPC。
- src/host/forum.ts:使用 Node 全局 fetch 訪問論壇,通過 HTML 正則解析帖子列表和詳情(論壇爲 Hono + htmx 服務端渲染,無公開 JSON API)。

Client 半(瀏覽器端)

負責 UI 渲染與用戶交互。
- 文件位置:src/client/index.ts、src/client/Panel.tsx、src/client/rpc.ts
- 職責:
- src/client/index.ts:插件入口,通過 ctx.inject(['slots']) 註冊 shell.overlay 槽位。
- src/client/Panel.tsx:React 組件,渲染懸浮按鈕和麪板 UI,通過同源 fetch('/api/dsher-bbs/<method>') 調用 Host。
- src/client/rpc.ts:對 fetch 進行封裝。

通信模式

不使用 @deepseek-ai/dsh-api-remotes 的 @Remote 機制,原因在於官方的客戶端裝配是靜態白名單(只 import 官方包的 /remote),第三方獨立包的 remote 不會被自動掛載。因此本包採用自建 HTTP 路由:Host 半註冊 webserver 前綴路由,Client 半同源 fetch,這是獨立 bundle 插件的通用可交付模式。

限制與注意事項

  1. 限流規則:論壇對寫操作有限流限制,請注意:
    - 5 帖/小時
    - 30 回帖/小時
    - 60 點贊/小時
    - 20 上傳/小時
  2. HTML 解析脆弱性:論壇正文用 marked 渲染且未 sanitize,存在 XSS 風險。雖然 forum.ts 做了基礎淨化,但渲染第三方內容仍有風險。且論壇改版後,正則解析邏輯可能失效,需同步更新。
  3. 鑑權與安全:
    - /api/dsher-bbs 路由無鑑權,與 DSH 頁面同源同權限。任何能訪問該 DSH 頁面的人都能調用。
    - 會話 Cookie 僅存在於 Host 進程內存,不落盤、不外發。
    - 一鍵登錄依賴論壇側部署 src/routes/dsh-login.tsx,且該頁只接受 localhost / 127.0.0.1 來源。
  4. 開發構建:
    - 運行 npm install 安裝依賴。
    - 執行 npm run build 編譯(產物爲 lib/index.mjs 和 lib/client.js)。
    - 執行 npm run typecheck 進行類型檢查。

許可證

MIT。

項目地址:https://github.com/kimirong/dsher-bbs-plugin

羽毛球分组比赛记分
小程序二维码

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

小夜