前言¶
DeepSeek Harness (DSH) 的核心理念是“一切皆插件”。在本地開發 Godot Web 導出時,通常需要打開終端執行構建命令,等待完成後再手動打開瀏覽器調試,流程割裂且容易打斷思路。dsh-godot-play 插件將構建與試玩流程整合進 DSH Web GUI,實現一鍵構建、零外部進程、瀏覽器內直接試玩。
核心功能¶
- Web GUI 面板:瀏覽器右下角浮動「▶ 試玩遊戲」面板,包含構建按鈕、狀態芯片與構建日誌。
- 宿主服務注入:宿主注入
webServer、subprocess、webRuntime、workspaceRegistry四個服務,直接運行godot --headless --export-release並以同源前綴託管靜態文件。 - 工作區門控:只有當前工作區是 Godot 項目(目錄含
project.godot)時才顯示入口按鈕;非 Godot 工作區自動收起。 - 目標跟隨工作區:構建與託管的目標自動跟隨當前 DSH 工作區,無需手動選擇項目。
- 多項目支持:老客戶端回退爲「項目」下拉 + 手動登記。
- 隨手控制:支持「↻ 重新啓動」(重載 iframe)與「清空日誌」。
- 技術實現:純 DOM,零框架依賴;iframe 懶加載;構建日誌尾環;冪等安裝/卸載腳本。
前置要求¶
- 本機安裝 Godot,並安裝 Web 導出模板。
- 目標 Godot 項目裏存在 Web 導出預設(編輯器:項目 → 導出 → 添加… → Web,並保存)。
安裝與啓用¶
使用官方 CLI 安裝:
dsh plugin --profile <profile> add dsh-godot-play
本地開發可直接指向倉庫目錄:
dsh plugin --profile <profile> add /path/to/dsh-godot-play
或手動執行:
bash install.sh
注意:桌面端 CLI 要求先完全退出桌面端再執行,否則會撞上文件鎖。安裝後重啓對應的 dsh 會話生效。
典型用法¶
- 確保當前 DSH 工作區是 Godot 項目,GUI 右下角出現「▶ 試玩遊戲」按鈕。
- 點擊按鈕打開面板,點擊「🔄 構建並加載」。
- 狀態芯片顯示進度,展開「日誌」查看 Godot 輸出。
- 構建成功後,iframe 自動帶緩存戳重載,直接試玩。
- 想重新開始當前遊戲點「↻ 重新啓動」(只重載遊戲);點「清空日誌」清掉構建日誌。
配置說明¶
插件默認全自動,配置項在 cordis.patch.yml 的 config 下:
* projectRoot:留空則跟隨當前工作區;填寫則鎖定目標。
* godotBin:自動探測環境變量或路徑。
* exportPreset:自動從 export_presets.cfg 讀取首個 Web 預設。
* webRel:顯式覆蓋輸出目錄(默認自動跟隨 Web 預設的 export_path)。
* workspaceGate:控制是否只在工作區是 Godot 項目時顯示按鈕。
* allowRemote:允許非 loopback 遠程訪問(需配合 trustedHosts)。
工作區門控與目標跟隨¶
- 門控邏輯:瀏覽器半區通過宿主
GET /api/godot-play/probe判定當前工作區是否含project.godot。若宿主未裝或不可達,按鈕常顯;若檢測到非 Godot 項目,按鈕隱藏。 - 目標跟隨:瀏覽器半區將當前工作區路徑上報宿主,宿主構建與託管即以此爲準。換工作區即換目標。若配置了
projectRoot鎖定,則面板顯示鎖定狀態,不再跟隨。 - 優先級:鎖定 > 跟隨 > 上次選擇(持久化)> 智能默認。
安全與跨域¶
- 安全:寫操作受信任圍欄限制(loopback 或顯式開啓
allowRemote)。無任意命令執行面,argv 固定拼接。靜態託管有路徑穿越防護,只服務當前目標導出目錄。 - 跨域隔離:Godot 4 Web 導出若開啓線程,需要 iframe 具備 cross-origin isolation(響應頭帶
Cross-Origin-Embedder-Policy: require-corp)。若遊戲無法啓動,可關閉導出預設中的線程,或使用window.__GODOT_PLAY_URL__注入外部託管地址。