前言¶
DeepSeek Harness(命令名 dsh)是 DeepSeek AI 開源的智能體運行時,目前仍是開發者預覽。它的核心理念是「一切皆插件」:模型、工具、技能、會話、沙箱和界面都可以用插件替換或組合。社區裏還有一份獨立的插件目錄站點 deepseek-harness-plugin.com,它和 DeepSeek / 幻方沒有官方從屬關係,收錄的是帶 dsh-plugin 話題的社區倉庫。
內測收官時,參與者往往想做一件很具體的事:證明「我當時在場」,再留下一句短留言。公開倉庫不能把真實名單攤開,現役組織成員表也會隨公開化和人員進出而變化。SenmuuuuW 維護的 dsh-group-photo 就是爲這個場景做的拍立得合影牆:用零權限 GitHub OAuth 證明身份,用凍結白名單決定誰能入鏡。
dsh-group-photo 是什麼¶
dsh-group-photo 是一款面向 DeepSeek Harness 的趣味插件,由 SenmuuuuW 維護,倉庫地址是 SenmuuuuW/dsh-group-photo。社區目錄把它歸在「趣味」分類,許可證爲 MIT,主要語言是 HTML。倉庫 package.json 裏的版本號是 1.0.0,要求 Node.js ≥ 20。截至 2026-08-17,GitHub 顯示 17 顆星;目錄頁當時仍標註 15 顆,以倉庫頁面爲準。
它解決的問題很窄:給 dsh-external 內測成員做一面拍立得牆。成員用 GitHub 登錄(授權頁不申請任何 scope),只有命中凍結白名單的身份才能瀏覽合影、入鏡並留下一句話。倉庫自帶的 skill/SKILL.md 寫得很明確:本體是零依賴的獨立 Node 站點,不是 Cordis 插件;目錄頁仍按 DSH 插件收錄,並提供 dsh plugin add 安裝命令,倉庫裏另有一份 DSH Skill 包裝,方便智能體按文檔啓動、凍結白名單或導出紀念版。
核心功能¶
按倉庫 README 與 skill/SKILL.md 交叉覈對,已經落地的能力如下。
1、拍立得合影牆。前端是純 HTML/CSS/JS(public/index.html):頭像卡片、NO.xxx 編號、留言、入鏡時間,帶即時更新、綵帶和移動端適配。留言上限 140 字,按 GitHub 用戶 id 去重,作者可以改自己的那一句。
2、零權限 OAuth。授權 URL 不帶 scope 參數,登錄只用來證明「你是這個 GitHub 用戶」,不申請倉庫或組織權限。Skill 文檔還寫明不走 Device Flow。
3、凍結白名單。資格名單是內測私有期的快照(whitelist.json),運行時不會再去查現役組織成員。匹配順序是 GitHub 用戶 id 優先,用戶名(大小寫不敏感)其次。組織後來公開、成員進出,都不會改寫這面牆的入場資格。
4、瀏覽同樣上鎖。GET /api/members 沒有會話 cookie 就返回 401,未登錄只能看到人數。會話令牌是 48 位隨機十六進制,Cookie 帶 HttpOnly。
5、Fail-closed。白名單缺失或讀失敗時,所有登錄都被拒絕(gate_error),不會放行。
6、零 npm 依賴。服務端是 server.js,只用 Node 內置模塊;啓動命令是 npm start(等價於 node server.js),默認端口 8808。
7、靜態紀念版。node export-archive.js 會生成單文件 archive/index.html,可雙擊打開,也可以放到 GitHub Pages 等靜態託管。導出後不再依賴服務端登錄。
8、代表作映射。成員卡會展示該用戶在 dsh-external 組織里的代表作倉庫,數據來自 works.json(按倉庫首筆 commit 作者映射)。
公開倉庫是「安全演示版」:members.json、whitelist.json、works.json 和 archive/index.html 都是虛構成員。真實名單和留言放在私有數據層(README 舉例爲 SenmuuuuW/dsh-group-photo-data),用文件掛載或環境變量注入,不進入公開 Git 歷史。
安裝與啓用¶
社區目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端裏運行即可:
dsh plugin add github:SenmuuuuW/dsh-group-photo
需要可復現安裝時,按目錄頁說明固定 commit 哈希:
dsh plugin add github:SenmuuuuW/dsh-group-photo#commit
把 #commit 換成實際的 commit SHA。目錄頁同時提醒:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼;安裝前應檢查源碼倉庫和許可證。
把合影牆真正跑起來,以倉庫 README 爲準。前置是 Node.js ≥ 20,沒有 npm 依賴需要安裝。README 的 clone 示例寫的是 https://github.com/dsh-external/dsh-group-photo.git,目前會轉到同一倉庫 SenmuuuuW/dsh-group-photo。
git clone https://github.com/SenmuuuuW/dsh-group-photo.git
cd dsh-group-photo
# 1. 在 GitHub 創建 OAuth App,回調地址填:
# http://localhost:8808/auth/callback
# 2. 環境變量注入密鑰(不要寫進倉庫)
export GH_CLIENT_ID=你的ClientID
export GH_CLIENT_SECRET=你的ClientSecret
export GH_ORG=dsh-external
# 3. 啓動(等價於 node server.js)
npm start
瀏覽器打開 http://localhost:8808。/auth/login 會跳到 GitHub,/auth/callback 換 code、查白名單,命中後寫入會話 cookie。
密鑰也可以寫進 config.json 的 clientId / clientSecret,倉庫裏這兩項默認是空字符串。支持的環境變量還有 PORT,以及自定義數據路徑:GH_DATA_FILE、GH_WHITELIST_FILE、GH_WORKS_FILE、GH_SOCIAL_FILE。
GitHub OAuth App 只允許註冊一個回調地址,而且必須精確匹配:本地用 http://localhost:8808/auth/callback;走公網隧道則填 https://<隧道地址>/auth/callback,換地址就要改 OAuth App。
典型用法¶
本地入鏡¶
完成上一節的 OAuth 配置並啓動服務後,用白名單裏的 GitHub 賬號登錄。不在快照裏的賬號過不了門;白名單文件本身不可用時,所有人都進不去。公開倉庫自帶的是演示名單,要用真實內測數據,需要維護者從私有數據層複製 whitelist.json、members.json、works.json、social.json。
臨時公網訪問¶
README 給出的隧道命令是:
cloudflared tunnel --protocol http2 --url http://localhost:8808
目錄頁和 README 在活動期間還寫過一條 Cloudflare 臨時地址:https://rio-palm-cfr-benz.trycloudflare.com/,並標明僅 dsh-external 內測成員可入鏡。隧道地址會變,活動結束後應以倉庫裏的 archive/index.html 爲準,不要把臨時 URL 當成永久入口。
重新凍結白名單¶
運行時不讀 PAT。只有重新生成快照時,才把帶 read:org 的 classic PAT 寫進 config.json 的 pat 字段(或環境變量 GH_PAT):
node freeze-whitelist.js
生成或更新 whitelist.json 後立刻 revoke 這個 PAT。服務端按文件 mtime 熱加載白名單,不用重啓。
導出靜態紀念版¶
node export-archive.js
產物是 archive/index.html:單文件、無登錄、可靜態託管。Skill 文檔提醒:members.json 和 sessions.json 寫在 server.js 旁邊,臨時磁盤的部署平臺在重新發布前要先備份。
交給 DSH Skill¶
skill/SKILL.md 的觸發說明是:用戶想啓動合影牆、重新凍結白名單、導出紀念版,或解釋這套安全模型時使用。它描述的是同一套 Node 站點,不會把合影牆變成 Cordis 裏的界面插件。
適用場景與注意事項¶
適合這幾類人:參加過 dsh-external 內測、想在收官之夜入鏡的成員;活動維護者,需要把名單和留言與公開倉庫拆開;想複用這套「零權限 OAuth + 凍結快照」門禁,給自己的社區做類似紀念頁的人。
不適合指望它去增強 DSH 的編碼能力。它不提供模型、工具或 Web UI 皮膚,也不會在 dsh web 裏掛出一塊合影面板。公開倉庫裏的演示數據不能當成真實內測名單。
使用前還要注意:
- 插件以當前
dsh進程權限運行,安裝前應閱讀源碼和 MIT 許可證。 - 密鑰只放環境變量或本機
config.json,不要提交進 Git。 - 資格只認凍結快照,不認現役組織成員;白名單壞了就全員拒絕。
- OAuth App 的回調地址只有一個,本地和隧道不能共用同一條配置湊合。
- 真實成員數據屬於隱私,README 要求永不進入公開倉庫。
小結¶
dsh-group-photo 把 DSH 內測收官收成一面拍立得牆:零權限登錄證明身份,凍結白名單卡住入場資格,再把結果導出成一張可永久保存的靜態頁。它不是 Cordis 能力插件,而是帶 DSH Skill 包裝的獨立站點;目錄按趣味插件收錄,源碼和許可證都可以直接覈對。
- 目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-group-photo/
- GitHub:https://github.com/SenmuuuuW/dsh-group-photo
- DeepSeek Harness:https://github.com/deepseek-ai/deepseek-harness