dsh-tavern-v2
chen731215-dev/dsh-tavern-v2
DeepSeek Harness용 Tavern 관리 패널입니다. 캐릭터 카드, 세션별로 격리된 월드북과 프리셋, 기억 요약, 캐릭터 관계도, 원클릭 플롯 옵션, NSFW 모드를 제공합니다. 전체 기능에는 상태 표시줄·플롯 옵션·변수 표를 그리는 보조 플러그인 dsh-muv-engine 및 dsh-muv-table도 필요합니다. 카드가 제공하는 상태 표시줄, 변수 접기, 선택 카드가 샌드박스 iframe 안에서 렌더링되어 호스트 UI로 카드 스타일이 새지 않습니다.
설치
dsh plugin --profile web add github:chen731215-dev/dsh-tavern-v2README
⚠️ v2.0.0 破坏性更新:协议变更为 PolyForm-Noncommercial-Copyleft-1.0.0(禁止商用)。旧版 1.0.0~1.9.2 已全部废弃,不再维护。
⚠️ AI 助手注意:修改本项目代码前,请务必先阅读 AGENTS.md(或
.cursorrules/CLAUDE.md),了解代码规范、测试方法、提交规范和常见坑。未通过语法检查和重启验证的代码不要提交。
⚠️ 旧仓库已归档:本仓库的旧版本(MIT 协议)已归档在 dsh-tavern,只读。本仓库使用 PolyForm-Noncommercial-Copyleft-1.0.0 协议。
dsh-tavern-v2
🎴 为 DeepSeek Harness 打造的角色卡 / 世界书管理插件,导入角色卡就能开始角色扮演。
🟢 v2.8.0 更新要点(角色卡渲染兼容 · 沙盒架构)
角色卡(
chara_card_v3)把状态栏、变量更新折叠、选项卡片这些「渲染层」写在卡自带的regex_scripts里。旧版导入只保留基础字段,规则在导入那一刻就丢了,插件只能靠硬编码 的白名单去猜——每张新卡都要补一条。2.8.0 不再猜:把卡自己的规则跑起来。
- 导入保真:
regexScripts随卡一起保存;保存时的正文清洗会跳过正则键 (那里的{{…}}/<!-- … -->是语法,不是模板宏)。 - ST 式正则引擎:
placement/markdownOnly/promptOnly/minDepth/maxDepth/trimStrings/$1..$9/{{char}}等语义对齐 SillyTavern。 - 沙盒渲染(三层):① 内容识别(整页 / 片段 / 折叠 / 纯文字)
② 沙盒核心(
iframe sandbox="allow-scripts allow-forms",不含allow-same-origin) ③ 外壳适配(消息内嵌 / 可拖动缩放的浮窗)。 卡里的 CSS 不再外溢到面板和别的消息,不同卡之间也不互相污染。 - 提示词侧裁剪:按卡里的
promptOnly规则,把历史里的状态栏占位符、旧变量块删掉再发送, 省上下文、避免模型照抄上一轮变量。cardRegex: false可一键关闭。 - 状态栏置底 + 漏写补齐:状态类内容统一落到消息末尾;模型漏写占位符时用卡自己的规则补一次。
⚠️ 升级提示:以前导入过的角色卡需要重新导入一次(同名会提示替换), 才能把卡里的渲染规则带进来。完整说明见 CHANGELOG.md。
🔴 v2.7.27 更新要点(选项点击 / 标签块渲染 / 代码块保护)
2.7.27 修复:① 选项按钮点不动(作用域 bug:发送函数在看它的作用域外被调用); ② 标签块刚生成完是碎的、切一次会话才对(
<options>与<option>被 markdown 拆到不同文本节点); ③ 代码块里的<details>/<options>示例被当成真标签渲染(漏跳pre/code)。
2.7.24 修复:
<options>/<option>/<details>/<game>不再原样露出尖括号;选项渲染成可点按钮、折叠块默认收起,切会话不重复渲染。
2.7.23 修复:快速上手引导收起后,「展开引导」按钮不再被一起隐藏,随时可以再展开。
完整说明见 CHANGELOG.md。
- 「📤 导出」卡片(内容页签):勾选角色卡 / 世界书 / 预设,选范围(当前预设 / 全部酒馆预设),
点「📁 选择文件夹并导出」——弹系统原生文件夹选择框,导出到
<你选的目录>/酒馆导出-<时间戳>/<预设名>/{角色卡,世界书,预设}。 - 双格式:角色卡给 ST
chara_card_v2(备选开场白一起带)+ 原生 JSON; 世界书给原生.json和 ST 的.st.json;预设给preset.yml/agent.cordis.yml/st-preset.json(可再导入)。 - 附带
manifest.json与说明.txt(写清怎么导回来)。导出只读预设目录,不改任何原文件。
🔴 v2.7.21 更新要点(上手引导 / 预设管理 / 备选开场白 / 按钮体检)
完整说明见 CHANGELOG.md。
- 快速上手引导:会话页签顶部多了一张「🚀 快速上手」清单,四步(导入卡 → 选预设 → 新开会话 → 注入开场白) 每一步都按当前真实数据自检;首次打开自动展开,可收起。
- 预设管理更直接:
🎭 当前 Agent 预设下拉里每行右侧有 ✎ / 🗑,不用先切过去就能改名/删除 (只对酒馆预设开放,内置预设标「只读」);下拉里新增名称筛选框。 - 备选开场白可注入:导入角色卡时保留 ST 的
alternate_greetings,面板可选卡 + 选版本 (第一 / 备选 1 / 备选 2 …)再注入,不再只能注第一条。 - 按钮体检:删掉「🎯 生效范围」三个失效按钮与两个名单(2.7.19 起注入闸门只看 DSH 顶部预设)、 「📦 上下文压缩」(与手动总结同一接口,DSH 没有该能力)、「✅ 保存并关闭」(与保存重复); 「预设」更名为「写作模块」。保留的控件都逐个核对过监听器与后端路由。
🔴 v2.7.19 更新要点(会话隔离)
完整说明见 CHANGELOG.md。
- 注入只看顶部 agent 预设:只有当前会话在 DSH 顶部选中了某个酒馆 agent 预设,
才会载入它的角色卡 / 世界书 / 写作模块 / 记忆;选
standard等其他预设则一个字符都不注入。 面板里的「生效范围」「当前会话绑定」不再影响注入(数据保留,仅兼容)。 - ST 预设导入:面板「导入预设」现在支持 SillyTavern 的 chat completion preset, 自动转成独立 agent 预设(结构占位、废稿、SPreset 配置会被丢掉)。
使用方式(隔离口径)
- 在
.agent-presets/里为每套角色建一个 agent 预设(面板「预设」页可新建/导入)。 - 卡、世界书、模块、记忆都挂在这个预设目录下 —— 它们属于预设,不属于会话。
- 聊天时在 DSH 顶部选择器选中这个预设;换预设 = 换内容,没选 = 不注入。
- 想彻底避免串台:不要依赖面板绑定;切会话后先确认顶部预设。
🔴 v2.7.17 更新要点(建议尽快升级)
完整说明见 CHANGELOG.md。
注:当前包版本 2.7.18 是纯文档修正版——运行时代码与依赖声明均未改动,仅版本号抬到 2.7.18, 功能内容止于 v2.7.17,所以下面的要点仍以 v2.7.17 为准。
- v2.7.17:修「装了插件却一个修复都拿不到」——两个伴生插件的依赖范围都钉死在旧版本。
原先声明
dsh-muv-table: ^0.2.2/dsh-muv-engine: ^0.3.2,而 0.x 的 caret 锁的是 minor (^0.2.2实为>=0.2.2 <0.3.0),实测satisfies('0.3.1', '^0.2.2')= false, 所以从 npm 装到的始终是muv-table@0.2.12+muv-engine@0.3.x—— table 0.3.1 的「世界书 JSON initvar 读不出 ⇒ 状态栏恒『未知』」等修复全部到不了用户手里。 已抬到^0.3.1/^0.4.1。本次只动版本号与依赖声明,运行时代码一字未改。 - v2.7.16:
tavern:card的正文组装搬进lib/server/assemble.js。另随本版一并发出两批改动:- 修正 4 个从未定义的
--dsw-*CSS 令牌——写法合规(名字格式、语法都对)所以三道闸门全放行, 但运行时静默失效。用户可见的修复:违禁词弹层「保存」按钮恢复背景色、世界书条目编辑器输入框 恢复边框、关系网标题改为跟随主题。面板panelHTML段内还有多处同类令牌,留待后续处理。 - 10-10 四笔修复:
presetStatus双 setter、golden 测试临时目录治理、 字符串字面量工具去重、pre-commit 钩子退出码三态。
注:后两批在 CHANGELOG 里仍挂在「未发布」标题下,属标题滞后——它们已随 2.7.16 的 tarball 发出(实测包内
setPresetStatusHtml由 2.7.2 的 0 处变为 6 处:lib/client.manager.bundle.js内 5 处、包内CHANGELOG.md内 1 处)。 - 修正 4 个从未定义的
更早:v2.5.2 ~ v2.6.0
v2.5.4 的完整说明见 docs/archive/RELEASE_NOTES_v2.5.4.md。
- v2.5.3(严重):修掉「开场白播种把会话日志写坏到永久打不开」——
报错特征是
SessionFormatError: system/message requires a protected first surface head。 根因:会话日志要求受保护 head 只能由「还没有任何 surface 事件时出现的system/message」 建立,而旧版播种抢先写了assistant/message。现在三处写入点共用闸门canAppendGreetingSurface():日志里已有system/message才允许再写。 已损坏的会话可以救回(删掉日志里那条抢跑消息即可,见 release notes)。 - v2.5.2:修掉「点 🎓 技能 的按钮后聊天输入框点不动」——技能卡片不再反复触碰宿主工具注册表,
且内容没变时不再重写
SKILL.md;另加输入框遮挡守卫(下次会直接说出是谁挡住了输入框)。 - v2.5.4:把已不可能生效的「自动播种开场白」整套机制删除(含状态位
greetingSeedEnabled)。 - v2.5.5:隐私清理 —— 仓库与发布包里残留的本机预设 id / 预设名 / 角色卡名已全部替换为虚构占位,无行为变更。
- v2.6.0:恢复成人向提示段的机制:面板「🎲 玩法 → 🔞 成人向提示段」可自行填写正文(存在本机
state.nsfwPrompt,不进代码/发布包、升级不覆盖),按会话注入并过统一生效范围闸门;默认关闭 + 空正文 ⇒ 升级零行为变化。
⚠️ 行为变化:新会话不再自动出现角色卡开场白;请用面板 「📌 开场白 → ➕ 注入开场白到会话末尾」 注入(要求该会话已经跑过至少一个回合)。
升级后请重启一次 DSH。
🆕 v2.4.0 更新内容
渲染职责交割给 dsh-muv-engine
本插件原先自带一套剧情/状态美化(beautifyContentEl),而 dsh-muv-engine 另有一套
更完整的状态栏级联。两套渲染器同时运行会互相覆盖:酒馆这套把 『』 表头与
- 😋 名字 当作对话行平铺,覆盖掉 muv-engine 结构化后的卡片,用户看到的是半成品。
现在渲染归 dsh-muv-engine,本插件只负责面板与数据:
- 三处调用点统一走
delegateBeautify(msgEl)→window.MuvEngine - 未安装 muv-engine 时静默跳过,本插件仍可单独使用
beautifyContentEl定义保留作为回退,但不再被调用
消息定位改用结构匹配
DSH 的消息容器类名是 CSS Modules 生成的哈希(历史上是 Sxvs8a_root,后来是
_markdown_kcgor_5),每次 DSH 重建 Web 资源都会变。写死任何一个哈希,都会在
某次 DSH 升级后静默失效——选择器匹配不到任何消息,整条美化链路全部不执行,而页面上
看不出任何报错。
现在按形状匹配(_markdown_<hash>_<n>)并用块级子节点把同名的文件类型图标排除掉,
另保留 [data-role="assistant"] 等显式标记退路。
其他修复
- 新建/复制预设后同步刷新预设绑定与 DOM 标签,修复「新建预设后添加角色卡/世界书 写进了另一个预设」
⚠️ 配套版本(随 v2.7.17 更新):当前需配合 dsh-muv-engine ^0.4.1 与 dsh-muv-table ^0.3.1。 注意 0.x 的
^锁的是 minor,装旧版伴生插件会拿不到已发布的修复。
📜 许可证
Copyright (c) 2026 chen731215-dev
本项目采用 PolyForm-Noncommercial-Copyleft-1.0.0 协议。
- ✅ 免费用于非商业用途
- ✅ 修改后必须使用相同协议开源
- ❌ 商业用途需要单独授权
完整协议文本见 LICENSE。
🔗 伴生插件
| 插件 | 说明 | 当前配套版本 |
|---|---|---|
| dsh-muv-table | MUV 变量表格编辑器 | ^0.3.1 |
| dsh-muv-engine | MUV 正则引擎 + 变量追踪 | ^0.4.1 |
📦 v2.3.0 更新(2026-08-31)
- 🎯 状态栏移到消息底部:世界/状态/状况/sese 状态卡渲染后统一追加到消息末尾(虚线分隔),剧情正文在前
- 🎯 选项交互修复:剧情选项点击改为 document 级事件委托(永不失效),输入框查找增强
- 🐛 转义标签还原:
<choices>/<Drama>/<style>等转义形态还原成真实标签再渲染,不再裸奔显示 - 🐛 预设单一事实来源:编辑器/选择栏/MUV 表格永远读同一份权威数据,保存后从磁盘重建描述、孤儿预设自动清理
- 🎨 CSS 统一 DSH 变量:背景/边框/文本/品牌色全部跟随主题
🚀 3 步开始
- 安装:DSH 插件市场搜索
dsh-tavern安装,重启 DSH - 导入:设置 → 酒馆管理 → 把角色卡 PNG/JSON 拖进去
- 开聊:点「💾 保存并注入」,直接开始聊天
AI 会自动读取角色卡和世界书,不需要手动贴设定。
✨ 能做什么
核心功能
-
🎭 角色卡管理 — 支持 SillyTavern 格式(PNG/JSON),多角色卡
-
📚 世界书 — 智能关键词注入,全局条目常驻、角色条目按需触发,省 60% 上下文
-
⚙️ 多预设 — 每个会话独立保存角色卡/世界书,切换对话自动加载
-
🎭 状态栏美化 — AI 回复中的「状态栏:」格式自动渲染为紫色状态卡(日期/时间/地点/用户列表)
-
✂️ 清理 — 自动剥离 AI 输出中的 草稿容器标签,正文干净
-
➕ 新建空白预设 — 新建预设默认完全空白(不复制上一个预设),另有一键「复制当前预设」
可选功能(默认折叠)
- 🧠 记忆总结 — 手动/自动总结对话,AI 能看到之前的剧情
- 🔗 角色关系网 — 总结时自动提取角色关系,可视化图谱
- 🎬 剧情选项 — AI 每次回复输出 3 个选项,点击继续
- 🔥 成人模式 — 强破限注入,需搭配成人词条预设使用
📦 安装
方法一:插件市场(推荐)
- 打开 DSH 设置 → 插件
- 搜索
dsh-tavern - 点击安装,重启 DSH
方法二:npm
dsh plugin add dsh-tavern
方法三:本地
下载源码复制到 DSH 插件目录,重启 DSH。
🎮 使用指南
1️⃣ 在酒馆面板设置角色卡 / 世界书 / 预设
打开 设置 → 酒馆管理,你会看到三个卡片区:
| 区域 | 作用 | 操作 |
|---|---|---|
| 🎭 角色卡 | 定义角色的人设、性格、说话方式、首条消息 | 拖入 PNG / JSON 角色卡文件(SillyTavern 格式),可导入多份 |
| 📚 世界书 | 定义世界观、场景、NPC、规则(按关键词触发省 token) | 拖入 JSON 世界书文件,或点「+ 新增条目」手动建 |
| ⚙️ 预设 | 预置写作风格、破限词条、行为模块 | 拖入 JSON 预设文件,或点「+ 新增条目」手动建 |
保存:三个区域的内容会自动写入当前预设的目录文件,无需手动保存。
💡 新建空白预设:点「+ 新建」创建的是完全空白的预设(无任何角色卡/世界书/词条),方便从零搭建;想基于现有预设改造就点「⧉ 复制」。
2️⃣ 生成 Agent 预设
角色卡/世界书/预设设置好后,该预设就是一个完整的「Agent 预设」——它同时具备:
- DSH 原生 Agent 预设:在 DSH 聊天顶部的预设选择器里可见、可选
- 酒馆注入内容:角色卡文本、世界书条目、预设词条会在每次请求时自动注入系统提示
切换「完整角色卡本体」请用聊天顶部预设选择器选择后新开会话;酒馆面板里的下拉只让 世界书/记忆/关系网 跟随。
3️⃣ 新建聊天并选择 Agent 预设
- 点 + 新会话(新建一个聊天)
- 在聊天顶部的预设选择器里,选中你要用的 Agent 预设(比如刚才配好的那个)
- 开始聊天——AI 会自动读取该预设的角色卡/世界书/词条,无需手动粘贴设定
⚠️ 关键:Agent 预设是在会话创建时绑定到聊天的(DSH 事件流记录)。所以先选预设,再开始聊。
4️⃣ 对已经生成的聊天修改角色卡/世界书,会有什么效果?
这是最容易困惑的一点,说清楚:
| 操作 | 对已有聊天的影响 |
|---|---|
| 修改角色卡(如改人设、加描述) | ✅ 立即生效:下一次生成回复时,AI 会用新角色卡。但历史已生成的消息不变(不会重写) |
| 修改世界书(加条目、改关键词) | ✅ 立即生效:后续请求按新世界书注入。历史消息不变 |
| 修改预设词条(加破限、改风格) | ✅ 立即生效:后续生成用新词条 |
| 切换当前会话绑定的预设 | ⚠️ 需在聊天顶部选择器切换(会写 DSH 事件流);酒馆面板的下拉只影响 世界书/记忆/关系网 跟随 |
| 删除/重命名预设 | ⚠️ 已绑定该预设的会话:删除后绑定失效(回退默认);重命名不影响绑定(按 id 绑定) |
一句话总结:修改角色卡/世界书/预设 = 对后续生成即时生效,历史消息保持不变。
5️⃣ 使用建议
- 想保持角色一致性:建好角色卡后尽量少改;要调整时直接改酒馆面板,下一次回复就生效,不用重开聊天
- 想开新剧情/新角色:用「+ 新建」建空白预设,配新角色卡,新开会话选择它——老会话的角色不受影响
- 角色卡和世界书分开管理:角色卡管"是谁",世界书管"世界长什么样",分开维护更清晰
- 记忆让剧情连贯:配合「记忆总结」功能,AI 会记住之前的剧情,修改角色卡后依然保持连贯
- 成人内容:在酒馆面板启用「成人模式」,并搭配成人词条预设(如破限词条)使用
📖 详细教程
见 TUTORIAL.md — 包含世界书配置、记忆总结、预设管理等详细说明。 (注:插件曾内置「成人模式强破限注入」与「通用增强层」,均已移除 —— 破限与文风请写在你自己的 ST 预设里。)
📄 许可协议
PolyForm-Noncommercial-Copyleft-1.0.0(源码公开 / 非商业共享)
Copyright (c) 2026 chen731215-dev
- ✅ 免费用于任何非商业用途(个人学习、研究、使用、修改、非商业分发)
- ✅ 可以自由修改,但修改后的衍生作品必须以相同协议开源(Copyleft)
- ❌ 禁止任何商业用途(含收费、广告、接外包、打赏变现等);商业用途需向作者单独获取授权
- 📝 分发时必须保留版权声明与协议全文,不得移除或更改
完整协议文本见 LICENSE。
因含非商业条款,不符合 OSI 对"开源软件"的严格定义,准确表述为"源码公开 / 非商业共享"。
作者:chen731215 | 仓库:https://github.com/chen731215-dev/dsh-tavern-v2