- Accueil
- Plugins
- Juste pour le plaisir
- dsh-liketavern
dsh-liketavern
amakurai/dsh-liketavern
Un plugin DeepSeek Harness (dsh) — transforme dsh web en frontend de jeu de rôle de style SillyTavern : cartes de personnage, presets de prompt, lorebooks, personas, mémoire long terme BM25, deltas d’état du monde et opérations de sol réversibles, le tout sur le runtime d’agent dsh.
Installer
dsh plugin --profile web add github:amakurai/dsh-liketavernREADME
dsh-liketavern
DeepSeek Harness(dsh)插件 —— 把 dsh web 变成 SillyTavern 式的角色扮演前端
适配宿主版本:dsh 0.1.2-rc.1
中文 | English
角色卡(V1/V2/V3,PNG/JSON)、提示词预设、世界书、人设、正则、BM25 长期记忆、世界状态变化层、可回滚的楼层操作——全部建立在 dsh 的 agent 运行时之上,不另起发信通道。
体验上近乎 dsh 原生:提示词走宿主的 system-prompt 瀑布(稳定段对齐 DeepSeek 前缀缓存),楼层分支就是真实的 dsh 会话 fork,界面全部挂在宿主原生 slot 上、复用同一套 UI 原语与设计令牌,界面语言默认跟随宿主。会话世系面包屑、工作区、定时计划、中断恢复等宿主能力在 Tavern 会话里照常工作——更像 dsh 自带的一个模式,而不是外挂的前端。
功能
- 角色卡:导入 / 导出 SillyTavern V1/V2/V3 角色卡(PNG 内嵌或 JSON),支持多开场白 swipe、卡内嵌世界书、正则脚本(
regex_scripts),交互卡(HTML 封面)在沙箱 iframe 中渲染。 - 提示词预设:导入 ST 预设 JSON,按 Prompt Manager 语义组装;提示词走 dsh 的 system-prompt 瀑布(稳定段 + 每轮 runtime context),不在前端拼包直发。
- 内置 EJS 模板:条件、循环、异步表达式、剧情与按消息变量、JSON/YAML 初值、JSON Patch、Zod 校验与世界书装饰器;支持主动激活、跨来源正则、sticky 跨轮注入和闭包、头像上下文、Lodash、Faker 与历史查询。正常完成回复中的脚本只处理一次,重启、分支与楼层回滚保持变量和计数一致。无需另装 ST-Prompt-Template;兼容范围与示例列出接口及宿主差异。
- 世界书:全局 / 角色 / 会话三级,关键词触发、常驻条目;另有「变化层」支持剧情中的世界状态增改与失效。
- 长期记忆:BM25 检索 + 时间衰减,模型可通过工具主动读写;超容量时 idle 期自动异步压缩。
- 人设(Persona):
{{user}}默认值与描述注入。 - 楼层事务:记忆、世界状态等写入走 WAL(楼层号 + 序号),回退 / 重新生成 / 编辑 = fork 前缀 + 逆序回放 WAL + 子会话续跑;同一楼层 fork 出的分支支持 ‹ n/m › 兄弟导航。
- AI 代答 / 续写:代答结果复制到剪贴板;续写不改历史,直接 followup。
- 模型工具(7 个):记忆检索 / 写入 / 更新、世界书按条读取、世界状态更新、资产列表 / 读取,供多步 agent 循环按需调用。
交互卡的变量接口仅兼容当前卡面内的临时读写,不等同于 SillyTavern 的持久存储。使用变量的卡片会显示“卡内临时数据 · 备份与恢复”:生成备份后复制保存;重新打开卡片时,在卡片下方点“恢复卡内备份”并粘贴。备份不包含尚未保存的表单输入,大小上限为 1 MiB,也不会写入角色资产或剧情记忆。
管理页编辑有离开确认和浏览器刷新/关闭保护。角色、预设、世界书、用户、正则、记忆和设置的未保存编辑会自动暂存到数据目录的 editor-drafts/;看到“草稿已暂存”后,在同一浏览器标签页刷新或重新打开管理页可恢复正文、页签及角色/剧情选择。点击保存才会应用修改,明确放弃会清除对应草稿。浏览器仅保存随机标签页标识,不存编辑正文;禁用浏览器存储或关闭标签页后不保证找回。单份草稿上限 2 MiB,暂存失败会保留页面内容并提供重试。
手机上的 Tavern 设置导航改为顶部横向导航,正文、表单和弹窗底部按钮适配窄屏与短屏。聊天正文使用可用宽度;第三方交互卡内部排版由卡片自身决定。
要求
- Node.js ≥ 24
- 已安装 dsh CLI(
0.1.2-rc.1),并跑过一次dsh web(首次运行会初始化webprofile) - PATH 中有
pnpm(dsh plugin命令内部经 pnpm 管理 profile 的插件依赖)
安装
插件以**组合包(bundle)**形式安装进 profile。本包在 package.json 声明了 dsh.bundle.patch,安装后 dsh 会自动把它的 patch 层追加进 profile 的 bundles 列表。
dsh plugin --profile web add github:Amakurai/dsh-liketavern
dsh web # 重新启动后生效
检查安装结果:
dsh plugin --profile web list --depth 0
两点说明(对应官方文档打包与安装插件):
- git 安装拉的是源码而非构建产物,pnpm 不会替你跑
build。本仓库把构建产物lib/刻意入库,因此从 GitHub 直接安装即可用。建议锁定 commit(github:Amakurai/dsh-liketavern#<sha>),避免后续推送悄悄改变实际运行的内容。 - 安装依赖:使用
zod、quickjs-emscripten、yaml、lodash、jsonrepair、@faker-js/faker、ejs和showdown,提供不需要原生构建的模板沙箱、初值解析、编译和格式化兼容。@deepseek-ai/*全部是 peer 依赖,由 profile 里已安装的 dsh 宿主满足。如遇 pnpm 构建脚本拦截,按 dsh 报错核对 profile 中宿主依赖的allowBuilds配置。 - 也可以走 tarball:作者侧
npm pack(prepack会先构建),用户侧dsh plugin --profile web add ./dsh-liketavern-0.1.1.tgz。
版本兼容:本包以 peerDependency 锁 dsh 0.1.2-rc.1;dsh 处于预发布阶段,升级 dsh 后需同步换装适配的插件版本。版本对应关系见 CHANGELOG.md。
运行时数据(角色卡、记忆、会话绑定等)落在 $DSH_HOME/dsh-tavern/,与本仓库无关。
使用
- 在 dsh web 中新建会话,于英雄区选择「Tavern 模式」并点选角色卡绑定。
- 在设置面板的
dsh-tavern命名空间下管理角色卡、预设、世界书、人设、正则与采样参数。 - 对话中可对任意 assistant 楼层重新生成、编辑、回退、续写或让 AI 代答。
插件界面默认英文;如需中文,在 Tavern 设置页「界面 / Interface」子组切换「界面语言 / Language」,立即生效并自动保存(只影响本插件 UI,不影响宿主界面)。
剧情状态升级
每个会话及分支现在有独立 storyId。新会话复制角色的初始状态,重新生成在新分支副本内回滚,原会话状态保留。记忆面板先选角色,再选剧情;“初始状态”只用于未来新会话。
旧绑定首次打开会复制旧共享状态,原目录保留、迁移幂等。此前已经混在一起的多分支事实无法可靠自动拆开,请在迁移后核对各剧情。编辑 AI 回复会撤销该层及后续旧事实,不自动推断新事实或续跑。
自动摘要可能遗漏信息;归档原文与来源链保留,BM25 可检索活跃摘要对应的原文。异常、截断或超时的模型流不会归档。分支快照和归档会增加磁盘占用,当前不自动删除旧剧情。
平台限制
受 dsh 宿主当前能力所限,以下行为与 SillyTavern 原版不同,属已知边界而非 bug:
- 采样参数:只有
temperature、maxTokens、stop与按模型公布的「深度思考」档位会真正送达模型;top_p与惩罚系数在面板中仅作记录,不生效。 - 提示词位置与正则:静态深度注入进 standing;动态 @D 与作者注释进 runtime context。宿主历史不改写;input/send、prompt/assemble、prompt/send 只用于 ST 模拟和代答,live 展示用 output/render。预览新增“最近宿主请求”(适配器转换前);其他页签是 ST 模拟。
- 会话日志不可删:重新生成 / 回退 / 编辑楼层会 fork 出分支会话并在其中续跑,原会话完整保留在会话列表里;同层分支可用操作条上的 ‹ n/m › 导航。
- AI 代答:宿主输入区没有插件可写的 API,代答结果只能复制到剪贴板后手动粘贴。
- 多会话与分支:各自隔离记忆、世界状态、笔记、聊天世界书、定时器和 WAL。角色资产共享;不支持多个宿主进程同时写同一数据目录。
开发
npm install # 安装开发依赖(公开 npm,精确版本)
npm run build # tsc 编译 src/ → lib/,再由 esbuild 打 client 单文件 bundle
npm test # vitest run(例数随改动浮动,不写死在这里)
npm run dev # dsh web --patch ./cordis.patch.yml(需先把仓库挂进 profile,见下)
本地调试:把仓库挂进 profile 的 node_modules(需先跑过一次 dsh web 使 profile 初始化),然后 npm run dev。Windows 用 junction,macOS / Linux 用 symlink:
# Windows(PowerShell)
New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\node_modules\dsh-liketavern" -Target "C:\path\to\dsh-liketavern"
# macOS / Linux(在仓库根目录执行)
mkdir -p ~/.dsh/profiles/node_modules
ln -s "$(pwd)" ~/.dsh/profiles/node_modules/dsh-liketavern
注意:
lib/是交付物,刻意入库;改代码后必须重新npm run build。- 真实角色卡、运行期 JSON、图片、会话与记忆不要提交进 Git;测试用手写工厂数据。
代码结构
src/
├── core/ 纯函数层(无 I/O,全部可单测):组装、世界书触发、正则、宏、BM25、分词等
├── state/ 存储层(文件 I/O,落 $DSH_HOME/dsh-tavern/):卡 / 预设 / 世界书 / 记忆 / WAL / 工作区
├── node/ host 运行时:配置、服务、管线、楼层、工具、记忆压缩
├── client/ 浏览器 React UI(设置面板、操作条、芯片、英雄区、交互卡渲染)
├── index.ts host 入口
├── agent.ts agent 面入口(system-prompt 组装、采样合入、工具注册)
└── remote.ts typert RPC 契约
仓库内的开发约定详见 AGENTS.md。
License
MIT
Plugins associés
dsh-web-ui (dsh-pet)
zhu1090093659/dsh-web-ui
dsh-pet (dsh-pet)
pc2005-cloud/dsh-pet
dsh-ads
nagi-ovo/dsh-ads
dsh-ads
dsh-external/dsh-ads