返回目录
其他 待识别

dsh-tavern

LingyeSoul/dsh-tavern

该仓库暂未提供项目说明。

Stars
5
Forks
0
Issues
0
更新
今天

PROJECT TOPICS

项目标签

PROJECT README

README

dsh-tavern

把 DSH(deepseek-harness)扩展成兼容 SillyTavern 生态的原生角色扮演工作区。

当前状态

第一版主线已经可用:插件复用 DSH 的 LLM 路由、默认模型、密钥管理、Web 容器和插件安装机制,同时在 DSH 原生侧边栏和 conversation 区域提供 Tavern 角色扮演体验。管理入口是独立的 Tavern 面板;设置页保留当前配置的快速切换,不再承载全部资产管理表单。

当前面向 DSH 0.1.0-rc.6 验证。Fabric 不在第一版运行路径中。

能力

  • Character Card V1/V2/V3:JSON、PNG chara/ccv3,以及 CHARX card.jsonembeded:// assets。
  • World Info / Lorebook:递归扫描、副键逻辑、概率、预算、inclusion group、sticky/cooldown/delay 和位置分发。
  • Chat Completion preset:prompts[]prompt_order[]、marker 和采样参数。
  • SillyTavern chat JSONL:header、messages、swipesswipe_idswipe_info
  • RP 交互:流式生成、Stop、消息编辑、swipe、regenerate、聊天创建、重命名和确认删除。
  • 消息分支 / bookmark:任意消息一键分支为新聊天,chat_metadata.bookmark_link 回链,视图可跳回父聊天。
  • Persona 管理:PNG 导入(内嵌描述提取)、头像、增删改、激活选择与 position/depth/role 注入。
  • 群聊:成员管理、自然(talkativeness 加权)/列表激活策略、成员点触发言、group_only_greetings、group nudge 和 {{group}} 宏。
  • 正则脚本:ST regex 扩展形态导入,全局 + 卡级合并,USER_INPUT/AI_OUTPUT/WORLD_INFO/REASONING placement、minDepth/maxDepthsubstituteRegextrimStrings
  • STscript:管道、变量(聊天局部 + 全局)、/if 条件、随机/掷骰和聊天动作(/send/trigger/regenerate/cut),composer / 前缀触发。
  • Text Completion / Kobold:context(story_string {{#if}} 子集)、instruct、textgen 采样器 preset 装配单串 prompt,KoboldAI/KoboldCpp SSE 流式 + 单发回退,端点/密钥/预设配置与连接测试。
  • Composer 模型选择:复刻 DSH 原生 model seat 的 provider 分组目录与 Effort 二级菜单,按 session 持久化,未选择时回落 DSH 默认模型。
  • 并发保护:聊天使用内容 revision 做 compare-and-swap;跨标签页冲突返回 409,客户端重新加载最新内容,不静默覆盖。
  • 可选的普通 Agent 人格注入,默认关闭。
  • 美化前端:助手消息中的完整 HTML 文档或 html 代码块会在隔离 iframe 中运行,支持内联 CSS、JavaScript 和常用 CDN 资源;普通文本与不完整流式内容仍按文本显示。

酒馆美化前端

把完整 HTML 文档、<head>/<body> 片段放进助手消息,或使用 html Markdown 代码块。消息保存后, Tavern transcript 会识别并挂载前端;流式生成和编辑消息时仍显示源码,避免半成品脚本被重复执行。

支持的输入形式:

  • 完整文档:<!doctype html>... 或同时包含 <html><head>/<body> 的文档。
  • HTML 片段:包含 <head><body> 的片段;缺少外层文档时,运行时会自动补齐 doctype、viewport 和基础样式。
  • Markdown fenced code block:代码块语言可以写成 html;普通代码块和不完整 HTML 仍按文本显示。

例如:

```html
<!doctype html>
<html>
  <body>
    <button id="counter">0</button>
    <script>
      let count = 0
      document.querySelector('#counter').onclick = () => {
        document.querySelector('#counter').textContent = String(++count)
      }
    </script>
  </body>
</html>
```

每个前端使用 sandbox="allow-scripts" 的独立 iframe,且不授予 allow-same-origin:脚本不能读取或操作宿主页面、 Cookie、window.parentTavernHelper 和 DSH API(高度回传仅使用受校验的 postMessage)。运行时 CSP 允许内联 CSS/JavaScript, 以及以下静态资源源:cdn.jsdelivr.nettestingcf.jsdelivr.netcdn.tailwindcss.comcdnjs.cloudflare.comunpkg.comesm.shfonts.googleapis.comfonts.gstatic.com;图片、字体和媒体 可使用 https:data:blob: URL。

以下能力明确不在运行时范围内:

  • fetch、XHR、WebSocket 等业务网络连接(connect-src 'none')。
  • 嵌套 iframe、object/插件、表单提交和访问宿主 DOM、Cookie、存储或 API。
  • 依赖 SillyTavern 宿主注入对象的脚本;需要这些对象时应改为自包含 HTML/JS。

iframe 高度由 ResizeObserver 回传,并限制在 80-1200px;超出部分在 iframe 内滚动。TUI/headless 仍显示原始消息文本,不执行前端脚本。

安装插件并重启 DSH 后,可以在 Tavern 聊天中发送上面的示例,或让模型生成一个带按钮的 html 代码块, 保存消息后点击按钮即可验证 HTML、CSS 和 JavaScript 是否正常运行。

Tavern 管理面板

点击 DSH 原生侧栏底部的 Tavern 按钮即可打开管理面板。面板采用与 DSH Settings 接近的两栏布局,左侧切换分区,右侧集中处理资产和行为配置;窄屏会自动将分区导航折叠为横向滚动栏。

面板包含以下分区:

  • 总览:查看当前角色、预设、人设、世界书开关和各类资产数量。
  • 角色卡:导入 PNG、CHARX、JSON;查看卡面;编辑名称、昵称、描述、性格、场景、开场白、示例对话、系统提示词、作者信息和高级 JSON;保存时尽量保留原始 PNG/CHARX 容器及内嵌资源;可导出原格式并删除角色及其聊天。
  • 世界书:导入和导出原生世界书 JSON;编辑世界书名称、条目关键词、次关键词、备注、正文、排序、深度、概率、启用、常驻和选择性匹配;支持新增、删除和搜索条目。
  • 预设:导入和导出原生 preset JSON;聊天补全预设可以编辑提示词堆栈、标识符、角色、内容和 marker;context、instruct、textgen sampler 等预设可以通过高级 JSON 编辑全部字段。
  • 聊天、群组、人设、正则、变量、生成:沿用原有管理能力,并统一放在同一面板中,避免在设置页堆叠长表单。

编辑器会显示未保存状态,取消离开时提示确认,页面关闭时提供浏览器级离开保护。角色卡、世界书和预设的保存都经过服务端格式校验,再写回 $DSH_HOME/tavern/

原生集成

插件保留独立的 RP prompt/生成循环,但 UI 进入 DSH 原生表面:

DSH slot 用途
conversation.view Tavern JSONL transcript
conversation.composer Tavern session 的 RP 输入框、模型选择与 Stop
conversation.session.header.actions 当前角色、regenerate 与原生 session stats
settings.section Active setup 快速切换与打开 Tavern 面板的入口
shell.overlay Tavern 管理面板 Modal,以及侧栏聊天树 adapter 的生命周期承载
sidebar.footer.action 常驻 Tavern 面板按钮,与原生 Settings 并列

DSH rc.6 没有可追加到原生 session tree 的正式 list slot。侧边栏因此使用一个集中、版本敏感但失败关闭的 DOM adapter:只匹配可见左侧 [role="tree"],隐藏 state.sessionBindings 中的 Tavern 行并插入具名 data-dsh-tavern-sidebar-host;宿主重绘或虚拟列表更新时会重新应用过滤,解绑后可逆恢复。面板入口本身走官方 sidebar.footer.action,不会替换 Settings,也不依赖 adapter 是否成功挂载。

每个 Tavern chat 绑定一个正式 DSH session。绑定 API 通过插件内部桥接追加 plugin notice marker,使 session 进入 active 状态而不调用模型;Tavern view、composer 和标题栏 action 仅接管带有效 Tavern marker 的 session,普通 DSH 会话保持原生表面。酒馆标题栏会局部隐藏 DSH 自带的 agent preset 标签,并在切换回普通会话时恢复;Tavern 自建生成循环会把 turn/step、流式 chunk、assistant message 和 provider usage 镜像进同一 session,因此标题栏直接复用 DSH 的 sessionStats / tokenUsage projection。删除聊天时会追加 close marker 并归档对应 DSH session。

Packages

Package 说明
@dsh-tavern/format 卡、PNG/CHARX、世界书、preset(chat completion / context / instruct / textgen)、群组文件、regex 脚本和 chat JSONL 的解析与无损往返
@dsh-tavern/lore World Info 激活和 timed effects 引擎
@dsh-tavern/macros 角色、时间、随机、变量等宏引擎
@dsh-tavern/pipeline preset 顺序、lore、persona、历史和 token budget 的 prompt 装配(chat completion + text completion + 群聊回合)
@dsh-tavern/script ST regex 脚本执行器与 STscript 解释器
@dsh-tavern/store $DSH_HOME/tavern/ 原子文件存储、revision 和 session binding
dsh-tavern 自包含 Node half、Web client half、安装元数据和 gates

安装

要求 Node.js 22+,并已安装 DSH。

首次安装

git clone https://github.com/LingyeSoul/dsh-tavern.git
cd dsh-tavern
pnpm install
pnpm run build:plugin
dsh plugin --profile web add ./packages/plugin
dsh --profile web

更新

dsh plugin add 以本地 link 方式挂载插件,因此代码更新后只需重新构建并重启 DSH:

cd dsh-tavern
git pull
pnpm install
pnpm run build:plugin
dsh --profile web

若遇到依赖残留或版本不一致,可先移除再重新添加:

dsh plugin --profile web remove dsh-tavern
dsh plugin --profile web add ./packages/plugin

验证

pnpm run check

打开 DSH 后:

  1. 点击侧栏底部的 Tavern 按钮,或从“设置 -> dsh-tavern”打开 Tavern 面板。
  2. 在“角色卡 / 世界书 / 预设”分区导入资产;导入后可以直接编辑、保存、搜索、设为当前或导出。
  3. 在原生左侧 Tavern 分支展开角色并创建或打开聊天。
  4. 在原生 Tavern tab 中对话、编辑、切换 swipe 或 regenerate。

插件 Node bundle 是单一 packages/plugin/index.mjs,五个纯库均已内联。无需用户额外安装公共 @deepseek-ai/* 运行时依赖;client closure 由 DSH profile 注入。

验证

pnpm run check

当前基线:18 个测试文件、140 项测试通过;package contract、patch reference、server bundle、client bundle、frontend runtime 和 client VM mount gates 通过。完整 pnpm run check 的 Node half mount 需要已安装并可解析的 DSH 官方运行时(@deepseek-ai/dsh-llm@deepseek-ai/dsh-home-paths)。

GUI 已在桌面和 390x844 移动视口验证,包括原生 sidebar、Tavern 管理面板、角色卡/世界书/预设编辑器、conversation view/composer、流式生成、Stop、edit、swipe、regenerate、rename/delete 和 revision 冲突。

文档

许可

GPL-3.0。项目只实现公开规范和可观察行为语义,不复制 SillyTavern 的 AGPL 源码。Fabric 与 dsh-ads 仅用于架构调研;第一版运行时不依赖它们。

CLASSIFICATION EVIDENCE

分类依据

项目类型待识别
功能分类其他
规则置信度

系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。