前言¶
DSH 的 Web GUI 本身只提供會話和一個「插件」面板,工作間隙想摸個魚沒有順手的入口;把遊戲做成覆蓋整個客戶端的彈層,又會影響看日誌和跑命令。下面介紹的 dsh-1024-game 走的是面板路線:入口放在左側欄,和「插件」並排,點進去是一個獨立的主面板頁面,棋盤、計分和按鍵說明都在同一個頁面裏。
這個插件由 akiwu 維護,是一個純前端的客戶端插件,不需要聯網,也不參與 agent 的對話與計費。目標是讓 DSH 裏也能像在網頁上一樣玩 1024:方向鍵、WASD、觸摸滑動都支持,最高分和殘局存在本機,切面板或刷新都不丟。
這是什麼¶
一句話定位:在 DeepSeek Harness Web GUI 裏直接玩 1024(2048 的 4×4 變體,合成出 1024 即達成)的客戶端插件。
插件分兩半:
- 宿主半包
lib/index.js,apply是空的,只爲讓瀏覽器半包被 client-modules 發現。 - 瀏覽器半包
lib/client.js,包含__ModuleLoader__工廠式 bundle、遊戲邏輯和兩個 slot 掛載。
不發佈 npm 也能被安裝:DSH 的插件管理器直接從 GitHub 裝,Release 裏還有預打包 tarball;lib/ 是提交進倉庫的預構建產物,從 git 安裝不需要任何構建步驟。
核心功能¶
玩法規則:
- 兩個同值方塊相撞合併成它們的和並計分;一次移動裏每塊只合並一次。
- 每走一步隨機多出一個 2 或 4;棋盤塞滿且沒有可合併的相鄰方塊時本局結束。
- 合成出 1024 即達成,可以繼續挑戰。
操作方式:
| 按鍵 | 作用 |
|---|---|
← ↑ → ↓、W A S D |
讓所有方塊朝該方向滑到底 |
R |
重新開局 |
⌘ / Ctrl + Z |
撤銷一步,最多回退 32 步 |
| 在棋盤上拖動(觸屏/觸控板) | 滑動移動 |
持久化方面,最高分與殘局寫入 localStorage,鍵名分別是 dsh-1024-game/best 和 dsh-1024-game/state:切到別的面板再回來、刷新頁面都不丟局。
鍵盤監聽只在面板掛載時存在。這一點值得留意:遊戲面板的「返回會話」調用 ctx.layout.selectPanel(null),回到會話後不會搶輸入框的按鍵。
安裝與啓用¶
先確認前提:DSH 0.2.x(桌面版或 dsh web 都行),裝完需要重啓一次 DSH——宿主 Loader 的包解析在啓動時定型。
三種裝法按省事程度排。
方式 1,一行 spec,粘到 DSH 插件頁的安裝入口 / dsh plugin add / agent 的 plugin_manager.install_bundle:
github:akiwu/dsh-1024-game
等價的長寫法也可以,想鎖版本時在後面加 #v0.1.2 之類的 ref:
git+https://github.com/akiwu/dsh-1024-game.git
方式 2,預打包 tarball。不拉倉庫、不需要構建授權,適合網絡不穩:
https://github.com/akiwu/dsh-1024-game/releases/latest/download/dsh-1024-game.tgz
在安裝入口粘貼這個 URL,或者下載後粘貼文件的絕對路徑。
方式 3,市場一鍵安裝(收錄之後):在 dsh-market 或 DSH 的 Discover 裏搜「1024」,點安裝。DSH 沒有內置的官方市場,Discover 頁讀的是自己添加的索引 URL。
命令行等價操作:
dsh plugin add "github:akiwu/dsh-1024-game"
如果只對某個 profile 裝:
dsh plugin --profile web add "github:akiwu/dsh-1024-game"
注意桌面版的 profile 由 App 自己管理,不要在終端裏對 web profile 安裝,那裏裝了桌面版看不到。
本機開發用本地路徑安裝,DSH 會 link: 到項目目錄,改完代碼重新加載即生效:
plugin_manager install_bundle { target: "/path/to/DeepSeek1024" }
裝完重啓 DSH,左側欄「插件」下面會出現「1024 小遊戲」。卸載時在插件頁停用並移除 dsh-1024-game,或從 profile 的 package.json 刪掉該依賴與 dsh.profile.bundles 裏的條目。
裝完沒看到入口,常見原因是沒重啓,或者插件頁裏 dsh-1024-game 不是啓用狀態;頁面仍是舊界面時刷新一次。
典型用法¶
不裝 DSH 也可以先本地點着玩,確認遊戲本身的行爲:
npm test # 22 個用例:合併規則、四方向、勝負、撤銷、持久化、包契約
node preview/build.mjs # 生成 preview/bundle.js(借用同級項目的 esbuild + react)
open preview/index.html # 本地預覽樁,直接跑真實 bundle
preview/ 與 scripts/ 只服務本地開發,不發佈。插件本身零運行時依賴,只 require("react"),react 來自 DSH 平臺基座模塊表。
如果想改行爲,遊戲邏輯都在純函數里:slideLine / moveBoard / spawnTile / canPlay / applyMove / undoMove,全部有單測;組件只負責渲染與事件。改完跑 npm test 就能驗證。
實現要點¶
兩個掛載點是理解這個插件的關鍵:
main(keyed,key = "1024-game")——主面板本體,只有被選中時才掛載,鍵盤/觸摸監聽隨掛載存亡。sidebar.panellist(list,id = "1024-game")——左側欄面板列表裏的圖標入口,與「插件」並列;點擊由側邊欄調用ctx.layout.selectPanel(id)。
樣式通過 ctx.effect 注入 <style>,並在卸載時移除;配色讀 --dsw-alias-* 主題變量,淺色/深色主題都跟隨。狀態用模塊內單例 store 配合 useSyncExternalStore 訂閱。組件兼容 React 18/19,只用 createElement 和 18 起可用的 hooks。
適用場景與注意¶
適合想把 DSH 當單一入口、偶爾在工作間隙玩一局的用戶,尤其是已經用桌面版 Web GUI 的人。它也適合想看客戶端插件怎麼拆分宿主半包和瀏覽器半包的開發者——目錄結構簡單,兩個 slot 的掛載方式有參考價值。
需要留意的限制:
- 只面向 Web 平臺(Desktop 內置的也是 Web GUI),終端 TUI 不顯示。
- 無聯網、無宿主工具,純前端小遊戲;不參與 agent 的對話與計費。
- 打開遊戲面板會替換中間欄的會話視圖(和「插件」頁一樣),會話本身不受影響。
安全方面要注意兩點。第一,插件運行時擁有當前 DSH 進程的權限,所以安裝前應檢查源碼與許可證——本插件是 MIT 許可,源碼在 GitHub 上可直接讀。第二,DSH 的社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係,不是官方應用商店,從第三方索引安裝前同樣建議確認來源。
結尾¶
這個插件的價值在於把遊戲收進面板體系而不是彈層:入口和「插件」並列,鍵盤監聽隨掛載存在,不會干擾會話輸入;最高分和殘局本地保存,零運行時依賴、免構建。想直接用的話,一行 github:akiwu/dsh-1024-game 粘進插件頁的安裝入口,重啓 DSH 就能在側邊欄找到它。
目錄頁:https://www.skillhub.cn/plugins/akiwu/dsh-1024-game
GitHub:https://github.com/akiwu/dsh-1024-game