前言¶
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__注入外部托管地址。