🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

酒馆角色卡导入 xiagaogaozi/dsh-silly-plugin

DeepSeek Harness
xiagaogaozi81 天前有提交已提供中文文档扫描:含敏感能力

导入 SillyTavern 角色卡并自动拆分建工作区

32.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xiagaogaozi/dsh-silly-plugin
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · other
装得上吗
静态安装检查有提示项,装前建议看一眼 README
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 81 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-tavern-mode(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/16 13:43:25

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 27 处,展示前 23 条)
  • 发起网络请求
    lib/client.js:17
    const response = await fetch(`/tavern/api/${method}`, {
  • 读取本地文件
    e2e-check.js:6
    const buf = fs.readFileSync('D:/github/deepseektavern/character-cards/COC7th通用KP主持卡.png')
  • 读取本地文件
    e2e-check.js:32
    const wb = JSON.parse(fs.readFileSync('D:/github/deepseektavern/character-cards/世界书-COC7th通用KP主持卡.json', 'utf8'))
  • 写入本地文件
    e2e-check.js:40
    fs.mkdirSync(wsDir, { recursive: true })
  • 写入本地文件
    e2e-check.js:41
    fs.writeFileSync(wsDir + '/card.json', JSON.stringify({ name: json.data.name, system_prompt: json.data.system_prompt }, null, 2))
  • 写入本地文件
    e2e-check.js:42
    fs.writeFileSync(wsDir + '/world.json', JSON.stringify(mergedWorld, null, 2))
  • 写入本地文件
    e2e-check.js:43
    fs.writeFileSync(wsDir + '/regex.json', JSON.stringify(ext.regex_scripts || [], null, 2))
  • 写入本地文件
    e2e-check.js:44
    fs.mkdirSync(wsDir + '/scripts', { recursive: true })
  • 写入本地文件
    e2e-check.js:47
    if (s.content) fs.writeFileSync(wsDir + '/scripts/' + base + '.js', s.content)
  • 读取本地文件
    e2e-check.js:50
    console.log(' 文件:', fs.readdirSync(wsDir).join(', '))
  • 读取本地文件
    e2e-check.js:51
    console.log(' scripts:', fs.readdirSync(wsDir + '/scripts').join(', '))
  • 读取本地文件
    e2e-check.js:52
    const card = JSON.parse(fs.readFileSync(wsDir + '/card.json', 'utf8'))
  • 读取本地文件
    png2json.js:142
    const buf = fs.readFileSync(src)
  • 写入本地文件
    png2json.js:158
    fs.writeFileSync(out, JSON.stringify(json, null, 2), 'utf8')
  • 读取本地文件
    split-card.js:46
    const json = JSON.parse(fs.readFileSync(src, 'utf8'))
  • 写入本地文件
    split-card.js:54
    fs.mkdirSync(path.join(outDir, 'regex'), { recursive: true })
  • 写入本地文件
    split-card.js:55
    fs.mkdirSync(path.join(outDir, 'world'), { recursive: true })
  • 写入本地文件
    split-card.js:56
    fs.mkdirSync(path.join(outDir, 'scripts'), { recursive: true })
  • 写入本地文件
    split-card.js:76
    fs.writeFileSync(path.join(outDir, 'card.json'), JSON.stringify(card, null, 2), 'utf8')
  • 读取本地文件
    split-card.js:117
    if (fs.existsSync(cand)) {
  • 读取本地文件
    split-card.js:119
    const wb = JSON.parse(fs.readFileSync(cand, 'utf8'))
  • 写入本地文件
    split-card.js:136
    fs.writeFileSync(path.join(outDir, 'world', 'world.json'), JSON.stringify(mergedWorld, null, 2), 'utf8')
  • 写入本地文件
    split-card.js:138
    fs.writeFileSync(
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-client-web-react@deepseek-ai/dsh-typert-protocol@deepseek-ai/dsh-fs@deepseek-ai/dsh-session@deepseek-ai/dsh-workspace@deepseek-ai/dsh-settings
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 导入角色卡
  • 拆分世界书正则脚本
  • 创建同名工作区

DSH 酒馆模式:导入 SillyTavern 角色卡(PNG/JSON),自动拆分世界书/正则/脚本并创建同名工作区(#dsh-plugin)

README

由 DeepSeek 最新模型翻译生成
酒馆模式(Tavern Mode)— DSH 角色扮演扩展 让 DeepSeek Harness 具备 SillyTavern 风格的角色扮演玩法。 文件清单 | 文件 | 说明 | | png2json.js | 工具:角色卡 PNG → JSON(解析 tEXt chunk 中的 chara/ccv3,支持 base64 包裹) | | split-card.js | 工具:角色卡 JSON → 四部分拆分(本体 / 世界书 / 正则 / 酒馆助手脚本),自动合并外部引用世界书 | | tavern-host.js | 插件 Host 半源码(与运行中 pkg-5 一致) | | tavern-client.js | 插件 Client 半源码(与运行中 pkg-5 一致) | | e2e-check.js | 端到端验证脚本(模拟导入链路) | 当前功能(pkg-4,运行中) 1. 总开关:设置 → 酒馆模式 → "启用酒馆模式"。真开关:关闭时 Host 拒绝所有业务 RPC。 2. 导入角色卡:页面内点击(弹系统文件选择器,在电脑里选文件)或直接拖拽文件到虚线区域。支持 PNG / JSON / Lorebook。
展开完整文档(README 剩余 1 节)
酒馆模式(Tavern Mode)— DSH 角色扮演扩展

让 DeepSeek Harness 具备 SillyTavern 风格的角色扮演玩法。

文件清单

| 文件 | 说明 |
| png2json.js | 工具:角色卡 PNG → JSON(解析 tEXt chunk 中的 chara/ccv3,支持 base64 包裹) |
| split-card.js | 工具:角色卡 JSON → 四部分拆分(本体 / 世界书 / 正则 / 酒馆助手脚本),自动合并外部引用世界书 |
| tavern-host.js | 插件 Host 半源码(与运行中 pkg-5 一致) |
| tavern-client.js | 插件 Client 半源码(与运行中 pkg-5 一致) |
| e2e-check.js | 端到端验证脚本(模拟导入链路) |

当前功能(pkg-4,运行中)

1. 总开关:设置 → 酒馆模式 → "启用酒馆模式"。真开关:关闭时 Host 拒绝所有业务 RPC。
2. 导入角色卡:页面内点击(弹系统文件选择器,在电脑里选文件)或直接拖拽文件到虚线区域。支持 PNG / JSON / Lorebook。
- 选中的文件内容以 base64 传给 Host → 解析 → 四部分拆分 → 写入工作区 → 注册
- 结果卡片显示:绑定世界书个数 / 正则条数 / 脚本个数 / 工作区路径
- 导入成功后自动建同名工作区并跳转(打开该工作区会话),也可点"打开工作区 →"

工作区结构

导入角色卡后,自动创建同名工作区(~/.dsh/tavern-characters/<角色名>/,注册到 harness 工作区列表):

~/.dsh/tavern-characters/<角色名>/ ├── card.json # 本体角色卡(name/description/scenario/first_mes/...) ├── world.json # 世界书(含自动合并的外部引用) ├── regex.json # 正则脚本列表 └── scripts/ # 酒馆助手脚本(.js + .meta.json)

样式约定

所有 UI 颜色只使用 harness 主题 token(--dsw-alias-*),不自创视觉。

Host RPC 接口(Client → Host,Package 私有)

| method | 参数 | 返回 |
| tavern:get | — | { enabled } |
| tavern:set | { enabled } | { enabled } |
| tavern:import-card | { fileName, base64 } | { ok, cardName, workspacePath, workspaceId, worldNote[], worldMerged, regexCount, scriptCount }(未启用拒绝) |

服务(供后续功能包读取)

- tavernMode(Host):isEnabled() / setEnabled(v) / getCharactersRoot()
- 后续功能(正则注入、HTML 渲染、快捷回复等)在 apply 时先检查 tavernMode.isEnabled(),未开启则不注册。

使用流程

1. 设置 → 酒馆模式 → 打开总开关
2. 点击虚线区域(或拖拽角色卡文件进去)
3. 系统文件选择器选角色卡(PNG / JSON)
4. 自动建同名工作区并跳转;结果卡片显示世界书 / 正则 / 脚本数量

命令行工具用法

PNG → JSON
node tavern-plugin/png2json.js character-cards/xxx.png
JSON → 四部分拆分(自动合并外部世界书)
node tavern-plugin/split-card.js character-cards/xxx.json

已知边界

- 动态插件不持久:进程重启后需重新 define/run。源码已落盘,后续可改造成持久 agent preset 或正式插件。
- PNG 解析支持 tEXt chunk(含 base64 包裹 JSON),zTXt/iTXt 暂不支持。
- 世界书若为外部引用(extensions.world 为字符串),需把同名文件(世界书-<名>.json / <名>.json)放入 character-cards\ 才能自动合并。
预览分享卡片长什么样 ↓xiagaogaozi/dsh-silly-plugin
分享 · DeepSeek Harness Hub
xiagaogaozi/dsh-silly-plugin

导入 SillyTavern 角色卡并自动拆分建工作区

这是你的仓库?认领条目

回到顶部