中文EN

dsh-tavern

fun已测通过npmPolyForm-Noncommercial-Copyleft-1.0.0

酒馆管理面板:多角色卡、多世界书、多预设与会话级隔离,记忆总结、角色关系网、剧情选项一键发送,另有 NSFW 模式。完整效果需同时安装伴生插件 dsh-muv-engine 与 dsh-muv-table,用于渲染状态栏、剧情选项与变量表格。角色卡自带的状态栏 / 变量折叠 / 选项卡片在沙盒 iframe 中渲染,卡内样式不再外溢到宿主界面。

下载量 / Downloads
10,423
依赖体积 / node_modules
19.04 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-tavern

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

⚠️ v2.0.0 破坏性更新:协议变更为 PolyForm-Noncommercial-Copyleft-1.0.0(禁止商用)。旧版 1.0.0~1.9.2 已全部废弃,不再维护。
⚠️ AI 助手注意:修改本项目代码前,请务必先阅读 [AGENTS.md](./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](./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](./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](./CHANGELOG.md)。
  • 快速上手引导:会话页签顶部多了一张「🚀 快速上手」清单,四步(导入卡 → 选预设 → 新开会话 → 注入开场白)

每一步都按当前真实数据自检;首次打开自动展开,可收起。

  • 预设管理更直接:🎭 当前 Agent 预设 下拉里每行右侧有 ✎ / 🗑,不用先切过去就能改名/删除

(只对酒馆预设开放,内置预设标「只读」);下拉里新增名称筛选框。

  • 备选开场白可注入:导入角色卡时保留 ST 的 alternate_greetings,面板可选卡 + 选版本

(第一 / 备选 1 / 备选 2 …)再注入,不再只能注第一条。

  • 按钮体检:删掉「🎯 生效范围」三个失效按钮与两个名单(2.7.19 起注入闸门只看 DSH 顶部预设)、

「📦 上下文压缩」(与手动总结同一接口,DSH 没有该能力)、「✅ 保存并关闭」(与保存重复);

「预设」更名为「写作模块」。保留的控件都逐个核对过监听器与后端路由。

🔴 v2.7.19 更新要点(会话隔离)

完整说明见 [CHANGELOG.md](./CHANGELOG.md)。
  • 注入只看顶部 agent 预设:只有当前会话在 DSH 顶部选中了某个酒馆 agent 预设,

才会载入它的角色卡 / 世界书 / 写作模块 / 记忆;选 standard 等其他预设则一个字符都不注入。

面板里的「生效范围」「当前会话绑定」不再影响注入(数据保留,仅兼容)。

  • ST 预设导入:面板「导入预设」现在支持 SillyTavern 的 chat completion preset,

自动转成独立 agent 预设(结构占位、废稿、SPreset 配置会被丢掉)。

使用方式(隔离口径)

1. 在 .agent-presets/ 里为每套角色建一个 agent 预设(面板「预设」页可新建/导入)。

2. 卡、世界书、模块、记忆都挂在这个预设目录下 —— 它们属于预设,不属于会话。

3. 聊天时在 DSH 顶部选择器选中这个预设;换预设 = 换内容,没选 = 不注入。

4. 想彻底避免串台:不要依赖面板绑定;切会话后先确认顶部预设。

🔴 v2.7.17 更新要点(建议尽快升级)

完整说明见 [CHANGELOG.md](./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 处)。

更早:v2.5.2 ~ v2.6.0

v2.5.4 的完整说明见 [docs/archive/RELEASE_NOTES_v2.5.4.md](./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>)并用块级子节点把同名的文件类型图标排除掉,

另保留

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:61,最后更新 2026-11-03

链接

GitHub · Homepage · npm

同类插件