dsh-godot-play:在 DeepSeek Harness 中一键构建并试玩 Godot Web 导出

前言

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 懒加载;构建日志尾环;幂等安装/卸载脚本。

前置要求

  1. 本机安装 Godot,并安装 Web 导出模板。
  2. 目标 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 会话生效。

典型用法

  1. 确保当前 DSH 工作区是 Godot 项目,GUI 右下角出现「▶ 试玩游戏」按钮。
  2. 点击按钮打开面板,点击「🔄 构建并加载」。
  3. 状态芯片显示进度,展开「日志」查看 Godot 输出。
  4. 构建成功后,iframe 自动带缓存戳重载,直接试玩。
  5. 想重新开始当前游戏点「↻ 重新启动」(只重载游戏);点「清空日志」清掉构建日志。

配置说明

插件默认全自动,配置项在 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__ 注入外部托管地址。

参考资料

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

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

小夜