前言¶
在 DSH 里跑 Galgame、海龟汤或剧本杀,常见做法是各自开一个会话、把剧情口头同步,或者用外部聊天工具旁路协作。模型上下文不共享,GM 难以统一控场,角色本和汤底也很难做到「只给该看的人看」。
dsh-story-party 是社区维护者 miaonuo-lingran(B站:喵诺澪染)发布的 DSH 工作流类插件:在宿主进程里挂房间服务,用共享消息流、房间级 LLM 会话和浏览器房间页,把多人剧情收进同一套 API 与页面。v0.2.0 起支持剧本杀(角色本、私聊、阶段机)、海龟汤私有汤底,以及主代理自动点名子代理;阶段 1(服务端)与阶段 2(房间页)已完成,阶段 3(与 galgame 舞台结合)尚未开始。
这是什么¶
插件全名 dsh-story-party,在 SkillHub 目录分类为「工作流」。一句话定位:DSH 多人联机剧情房间——AI 主持、共享故事线,支持 Galgame / 海龟汤 / 剧本杀,可导入剧情包、子代理与地图。
技术形态可以概括为:
房间服务(本插件自己的端口,默认 7302)
├─ 房间生命周期:建房 / 凭邀请令牌加入 / 职位 / 踢人 / 关闭
├─ 共享消息流:用户与 AI 的消息同一条 seq,SSE 广播 + ?since= 增量拉取
├─ 私聊:剧本杀里玩家 ↔ GM 的私密消息,第三方与 SSE 都收不到
├─ 发言调度:玩家/GM 发言防抖合并成一轮,AI 自己判断接不接话(<silent>)
├─ 角色本:每个角色一份 secret,只下发给扮演者与 GM
├─ 阶段机:阅读 → 自我介绍 → 搜证 → 讨论 → 投票 → 复盘
├─ 房间页:/room/<房号>?t=<邀请令牌>,浏览器直接进
└─ 房间独立上下文:每个房间一份 system + 消息历史,sessionId = galgame-room:<房号>
许可为 MIT,作者要求保留署名;项目开源免费,README 明确未授权售卖。
运行环境(见 package.json):Node >=22,DSH >=0.2.1-rc.2 <0.3.0。
核心功能¶
房间与联机¶
房主通过开房页创建房间,成员凭邀请链接加入。邀请链接形如:
http://<这台电脑的局域网 IP>:7302/room/<房号>?t=<邀请令牌>
进入后选择昵称与「玩家 / 观众」;观众发言带「不进剧情」标记,不触发模型。房主可复制邀请链接、改成员职位、踢人、用「推进剧情」强制 AI 开口,或关闭房间。可选房间密码:仅存 scrypt 哈希,不进邀请链接。
另支持 自我游玩:单人房间,可选 cosplay 卡或剧情包;不展示邀请链接,他人 join 会被拒(403)。
剧本杀、海龟汤与 Galgame 向玩法¶
- 剧本杀:角色本(
secret)只发给扮演者与 GM;玩家与 GM 可私聊;阶段机按阅读 → 自我介绍 → 搜证 → 讨论 → 投票 → 复盘推进。 - 海龟汤:
pack.json的truth仅 GM 与 AI 可见;揭晓需 GM 发起投票、全员同意后 AI 揭底。 - 联机 Galgame:房间 API、独立 LLM 会话、广播与网页房间已就绪;与 galgame 舞台深度结合属后续阶段。
剧情包(.zip)¶
类似整合包:世界观、人物卡、可选素材打成 zip,导入后即可开房。格式要点:
story-pack.zip
├─ pack.json
├─ scenario.md
├─ characters/1.json
└─ assets/...(可选)
pack.json 使用 format: "dsh-galgame-pack",mode 区分角色扮演 / 海龟汤 / 剧本杀等。人物卡兼容酒馆 v2 字段,并扩展 secret、playerBrief、playedBy(ai / human / either)等。制作页地址:http://<本机>:7302/make,可在浏览器端打包或「装进本机」。
导入限制(防 zip 炸弹):上传 ≤ 8MB,解压后 ≤ 24MB,条目 ≤ 200;拒绝加密与 zip-slip。
制作页还支持 地图(层级地点、路线、拖动摆位)与 人物关系图,打包进 map 与人物卡 relations,进房间系统提示。
与 cosplay 人设卡联动¶
开房页「人设卡」下拉读取当前 profile 里 cosplay 插件的 config.roles(缓存约 15 秒)。选中后卡的描述、人格、system_prompt、rules、behavior、mes_example 等进入房间 system;scenario 作世界观,first_mes 作开场白。修改 cosplay 角色库后需 重载插件(关→开),仅刷新页面不够。
DSH 客户端集成¶
插件在 DSH 浏览器侧提供「联机模式」标签页(iframe 嵌房间页),核心房间逻辑在 src/room-server.js,与 standalone 入口共用,可对房间服务做零 DSH 依赖的自检。
安装与启用¶
下面三种方式均来自仓库 README,任选其一。
方式一:GitHub(推荐)
DSH 桌面版:设置 → 插件 → 添加插件,填写:
https://github.com/miaonuo-lingran/dsh-story-party
或从仓库 Releases 下载 dsh-story-party-*.tgz,在「添加插件」中选择本地文件。
方式二:npm(发布后可用)
dsh plugin --profile desktop add dsh-story-party
方式三:本地目录(开发)
path/to/dsh-story-party
安装并重载插件后,房间服务默认监听 7302(可在开房页「开放端口」调整)。想给朋友用的邀请链接,请先用本机局域网 IP 打开开房页,避免复制到 127.0.0.1。
典型用法¶
浏览器开房与双窗口自测¶
- 浏览器打开
http://<本机局域网 IP>:7302/。 - 选「创建房间」,填房间名与 GM 昵称;创建后以 GM 进入房间页。
- 「复制邀请链接」发给同伴;对方选「加入房间」粘贴链接,或以玩家/观众身份进入。
- 同一浏览器可开两个窗口(其一可用无痕)分别进房,互发消息验证 SSE 与旁白展示。
房主控制条含「推进剧情」「关闭房间」;消息流中 AI 旁白有单独样式,参与者列表显示在线与职位。
不启动完整 DSH 的接口验收¶
用于验证建房、加入、发言调度、历史与 SSE,README 提供 standalone 与 PowerShell 验收脚本:
cd dsh-story-party
$env:GALGAME_ROOM_PORT = '7302'
node src/standalone.js
另开终端:
Invoke-Expression (Get-Content -Raw -Encoding UTF8 'dsh-story-party\scripts\acceptance.ps1')
脚本会演示建房、玩家/观众加入、带问句时 AI 接话、观众与闲聊时 AI 沉默、增量拉取与成员列表等。无浏览器时可跑:
node scripts/smoke-events.mjs
剧情包、剧本杀、海龟汤、cosplay 卡分别有 pack-test.mjs、mystery-test.mjs、soup-test.mjs、card-test.mjs 等脚本,可按 README 在本地核对行为。
剧情包导入与建房¶
- 打开
http://<本机>:7302/make填写包信息并下载.zip,或在开房页直接「导入 .zip」。 - 开房页在「角色」下拉选择「剧情包 · xxx(n 人)」分组中的角色。
- 按包类型(海龟汤 / 剧本杀等)建房后,系统提示会追加对应规则;海龟汤揭晓走全员投票流程。
适用场景与注意¶
适合谁:需要在局域网或本机组织多人 AI 剧情、且希望 GM 控场、角色本与汤底权限分明的小队;也适合单人用剧情包或 cosplay 卡「自我游玩」。
权限与安全:插件以当前 DSH 进程权限运行,房间数据与导入的剧情包落在 $DSH_HOME 相关目录;安装前建议阅读源码与 MIT 许可证,确认作者署名要求。机器码仅用于同浏览器认回身份,不是安全边界。
生态说明:DSH 奉行「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。本插件当前 GitHub 星标为 0,功能与边界以 README 与发布版本为准。
调试:开房页可勾选「记录 AI 思维链」(默认关),思维链仅存房主本机 debug 字段,不进公开消息与 SSE,且会增加 token 消耗。
结尾¶
dsh-story-party 把多人剧情从「多个会话 + 外部同步」收成房间服务、共享 seq 与浏览器房间页,并用剧情包、地图与子代理扩展海龟汤与剧本杀场景。若要查看简介与分类,可打开目录页;源码、安装说明与验收脚本见 GitHub 仓库。
- 目录页:https://www.skillhub.cn/plugins/miaonuo-lingran/dsh-story-party
- GitHub:https://github.com/miaonuo-lingran/dsh-story-party