用dsh-gal把DeepSeek Harness变成全屏视觉小说舞台

前言

DeepSeek Harness(简称 dsh)是 DeepSeek 开源的智能体框架,官方仓库的定位是「Everything is a Plugin」:模型、工具、会话、界面都可以作为 Cordis 插件挂上或换掉。社区里已经出现了不少独立目录站点,用来检索这类插件;其中 DeepSeek Harness 插件库 是社区维护的发现入口,和 DeepSeek / 幻方没有官方从属关系,不能把它当成官方应用商店。

在网页界面里用 dsh 写代码,常见体验是主会话一直刷工具调用和长回复。有人希望后台继续写代码、修 bug,前台却换成视觉小说式的全屏舞台:角色说话、换背景、抛选项。dsh-gal 就是冲着这个场景做的趣味插件。本文依据插件目录页、GitHub 仓库 README 与源码交叉核对后介绍它:它是什么、怎么装、怎么开场,以及使用时要注意的边界。

当前仓库版本为 0.3.0,npm 包名是 @loserfox/dsh-gal。截至 2026-08-17,GitHub 显示 19 star,目录页收录时显示 18 star;仓库默认分支 master 最近一次推送在 2026-08-13,目录页收录日期是 2026-08-15。

这是什么

dsh-gal 是一款由 LoserFox 维护的 趣味 类独立插件,目录页一句话概括是:把 vibe coding 做成全屏视觉小说的双 agent 舞台。前台用 flash 模型带着角色人格即兴演剧情,后台主会话 agent(pro)继续干真实活;需要推进剧情时,再派前台演一段并抛出选项。

仓库 README 的定位与目录页一致:Galgame 模式,视觉小说式全屏舞台做 vibe coding。插件声明了 dsh.bundle(指向 cordis.patch.yml),并带有 dsh.client 注入;platform 写的是 web,也就是面向网页界面,不是 TUI / headless 皮肤。

目录页和 README 把前台角色写成「小菁」(海边咖啡馆老板娘)。当前源码里的 GM 人格则是:公司茶水间的咖啡师,白天冲咖啡、准备下午茶,偶尔深夜写点代码,带一点赛博日常气质。后文按源码描述实际演出设定。

核心功能

插件按 host / client 两半拆开,这是仓库 README 里写明的结构。

双 agent 分工

1、前台 GM:固定调用 deepseek-v4-flashreasoningEffort=off,走一个只带 gal_stage 工具的轻量循环。它带着「小菁」人格即兴写台词、换场景、抛选项,不负责写业务代码。源码注释写明:这不是完整子代理栈,而是直接对流式 LLM 做工具循环,选项和自由输入会阻塞在 userQuestions 上,直到玩家作答。

2、后台 agent:主会话里的 pro 模型继续写代码、修 bug、查资料。插件会往系统提示词里插入一段「Galgame 模式(后台导演)」说明:自己不要写演出台词,需要推进剧情时调用 gal_gm,把「剧情进展摘要 + 用户原话 + 工作进展」交给前台;干完一段真实工作后,再调一次 gal_gm 把成果织进剧情。

3、开场不经过 pro:在输入框工具行点「🎬 Galgame」,客户端会发送 【gal:开场】 标记;host 监听到这条用户消息后,直接派 flash GM 跑开场简报。命令 /gal 同样会立刻开场。标题画面上的「让小菁开场」走的也是同一条标记。

舞台工具与事件

前台真正驱动画面的是 gal_stage,操作枚举是:

  • stage:开场景(背景 + 登场角色)
  • bg:换背景 / 站位(场景切换是 update,不会重开一场)
  • line:一句台词(说话人 + 文本 + 可选表情差分)
  • choose:抛 2~4 个选项,阻塞直到玩家选择
  • ask:自由输入,阻塞直到玩家提交
  • end:收场

这些操作会落到会话里的持久事件:gal/stagegal/bggal/linegal/end。负载只带 id(charId / emotion / bg),不带素材 URL;客户端再把 id 映射到打包素材。host 还会在 /gal/assets 下伺服立绘和背景,并做了路径穿越检查。

当前打包的背景 id 有 12 个:office(默认,公司茶水间)、meetingroombedroombedroomnightclassroomcorridorriversidestreetdusksupermarketcheckoutmallfoodcourt。角色 xiaojing 对应 20 张表情差分(idle、happy、smile、shy 等)。旁白说话人 id 是 narrator,无立绘、无名字标签。

全屏客户端

package.json 把客户端注入到 @deepseek-ai/dsh-client-runtime、会话 UI、slots 和 locale。会话里出现未结束gal-scene 节点时,覆盖层会自动全屏开舞台。README 和源码列出的操作包括:

  • 点击对话框推进台词(空格 / Enter 也可以)
  • 历史 LOG
  • CONFIG:文本速度、自动推进间隔、快进间隔、音效音量
  • 选项面板,以及「自己输入」
  • 自由输入(发给主会话)
  • AUTO / SKIP / EXIT

标题画面文案是「小菁的一天 / ~AI 即兴剧情的 galgame 舞台~」。聊天区里同一场戏会折叠成一个 gal-scene 节点,按事件序号重放。

安装与启用

目录页给出的安装命令如下,在 DeepSeek Harness 终端中运行即可:

dsh plugin add github:LoserFox/dsh-gal

官方 CLI 的完整形态是 dsh plugin --profile <profile> add ...,会转发到该 profile 目录里的 pnpm。本插件的客户端 platformweb,README 也写的是装进 web profile。更稳妥的写法是:

dsh plugin --profile web add github:LoserFox/dsh-gal

如需可复现安装,目录页建议固定 commit 哈希。截至 2026-08-17,master 最新提交是 fd7154767000b25c58e13f3d2fe52bd235dd76d2

dsh plugin --profile web add github:LoserFox/dsh-gal#fd7154767000b25c58e13f3d2fe52bd235dd76d2

本地开发时,README 用的是 link 安装:

dsh plugin --profile web add link:/path/to/dsh-gal

README 注明:这是 bundle 类插件,注册后需要重启 dsh 实例才生效。仓库已经提交了 lib/index.jslib/client.jspackage.json 里目前没有 prepare 脚本。如果 pnpm ≥10 仍然拦截 git 依赖的构建脚本,第一次 add 可能失败,按 CLI 提示把包名写进该 profile 的 pnpm-workspace.yamlallowBuilds 后再执行一次即可。这是 DeepSeek Harness 官方文档对 GitHub 安装的通用说明,不是本插件独有的步骤。

目录页的安全提示需要认真对待:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应检查源代码仓库和许可证。package.json 声明许可证为 MIT;GitHub 仓库目前没有单独的 LICENSE 文件,GitHub API 因此也不显示许可证元数据。

典型用法

下面的步骤来自 README 和源码,不是虚构的操作流程。

1、确认已经在 web profile 下跑着 DeepSeek Harness 网页界面,并且当前会话能调用 deepseek-v4-flash(前台 GM 写死了这个模型名;provider 默认取会话请求头里的配置,缺省为 deepseek-official)。

2、安装并重启 dsh 之后,打开一个会话。输入框左侧会出现 Galgame 按钮;点它,相当于发送:

【gal:开场】

也可以在命令里执行 /gal。host 会立刻派 flash GM 开场:默认背景 office,角色 xiaojing 站在中央,先铺日常茶水间氛围,走到分叉口才抛 choose

3、全屏舞台打开后,点击对话框推进台词。走到选项时,点其中一个标签,或选「自己输入」。需要跟后台说话(例如「把刚才那个测试修一下」)时,用舞台上的自由输入;主会话 pro 会继续干活,并在合适的时机调用 gal_gm

4、右上角快捷菜单(鼠标移到舞台上才会显示)可以开 AUTO、SKIP、LOG、CFG,EXIT 会关掉当前场景。新的未结束场景出现时,舞台会再次打开。

仓库本地构建命令是 pnpm install 后执行 pnpm buildtsc -b && tsdown),一般用户从 GitHub 安装时不需要自己跑。

适用场景与注意事项

适合已经在用 DeepSeek Harness 网页界面、想给 vibe coding 加一层视觉小说外壳的人。它解决的是「前台怎么演、后台怎么干活」的分工,不是通用 galgame 引擎,也不能在 TUI / headless profile 里当皮肤用。

使用前建议先看清这些边界:

1、平台dsh.client.platformweb,全屏舞台挂在 conversation.input.dock 上。没有网页客户端就没有这套 UI。

2、模型:前台写死 deepseek-v4-flash。若当前 provider 调不到这个模型,开场和 gal_gm 都会失败。后台用哪一个 pro 模型,由主会话自己的配置决定,插件没有改写。

3、素材是打包好的:事件只传 id,客户端映射到仓库 assets/ 里的立绘和背景。源码里的 GM 提示词也要求 bgemotioncharId 落在这套枚举内。不能把它当成「任意上传立绘就能开新游戏」的工具。

4、剧情是即兴的:没有固定剧本,只有人格、开场简报和舞台工具。GM 循环有最少台词数(整场低于 5 句会续演;台词太少就抛选项会被拒绝)。具体演什么,每次会话都会不一样。

5、权限与许可:插件和当前 dsh 进程同权,能注册 HTTP 路由、往会话写事件、调模型。安装前阅读 源码;许可证以 package.json 的 MIT 声明为准,仓库根目录目前没有独立 LICENSE 文件。

6、文档不完全同步:目录页 / README 仍写「海边咖啡馆老板娘」,源码人格已改成茶水间咖啡师;目录页安装命令没有写 --profile web,README 则强调 web profile 和重启。冲突处以仓库源码和官方 CLI 文档为准。

小结

dsh-gal 把 DeepSeek Harness 的「一切皆插件」用到了趣味方向:host 半部提供 gal_stage / gal_gm/gal 和素材伺服,client 半部把未结束的 gal-scene 变成全屏视觉小说。前台 flash 负责演戏,后台 pro 继续写代码,两者靠会话事件和一次阻塞式的选项问答接起来。

它不是官方捆绑插件,也不是通用游戏编辑器。如果你已经在用 dsh 的 web profile,可以按目录页命令安装,固定 commit 后重启实例,再点一次开场按钮看舞台是否拉起。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-gal/

GitHub:https://github.com/LoserFox/dsh-gal

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

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

小夜