Chuyển đến nội dung chính

dsh-rpg-workstation

Đã xác minh

dsh-rpg-workstation · v0.3.0 · MIT · Giao diện web

Game-ify your DeepSeek Harness: earn XP per conversation turn, level up, unlock achievements and keep daily streaks, with a floating RPG dashboard in the web UI.

Cài đặt

dsh plugin add dsh-rpg-workstation

Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.

Mã nguồn

Thẻ

Tác giả

Readme

dsh-rpg-workstation

把 DeepSeek Harness 变成一个 RPG 工作台:每次完成一个对话回合就获得经验值,升级、解锁成就、保持每日连击,右下角浮动的游戏面板实时展示你的“战绩”。

Game-ify your DeepSeek Harness usage — earn XP per completed conversation turn, level up, unlock achievements and keep daily streaks, with a floating RPG dashboard in the web UI.

截图: alt text


环境要求

依赖 版本 说明
Node.js ≥ 18 构建与运行
pnpm 任意较新版本 dsh plugin 命令需要(没有也能手动安装,见下文)
DeepSeek Harness web profile 插件面向 dsh web 界面

安装

前置:先全局安装 dsh 命令行工具。没有它就没有 dsh plugin / dsh web 这些命令:

npm install -g @deepseek-ai/dsh

之后一条命令安装本插件:

dsh plugin --profile web add dsh-rpg-workstation

dsh plugin add 会自动把包加入 profile 层叠(包声明了 dsh.bundle.patch),无需手写补丁。

安装完成后重启 dsh web,界面右下角就会出现 RPG 面板。

卸载:

dsh plugin --profile web remove dsh-rpg-workstation

原理:dsh 的 profile 由一层层补丁拼装。cordis.patch.yml 里的 - insert: 是标准补丁写法,id 是该行的稳定句柄,name 是 loader 要解析的 npm 包名(必须先装进 profile 的 node_modules)。客户端 bundle 由 dsh 的 dsh.client 扫描自动打包,所以 lib/ 产物 + dsh 两个字段就够用了。


使用方法

面板挂在右下角(shell.overlay 插槽),一切都是自动的——聊着聊着就攒经验:

操作 效果
正常对话 / 让 AI 干活 每完成一个回合 +10 XP;回合内每调用一次工具额外 +2 XP(上限 +20)
点击面板头部 折叠 / 展开
按住头部拖动 把面板移到任意位置
点击成就圆点区 展开详情:本周柱状图、每日任务、统计、成就列表、存档导入/导出
升级瞬间 等级数字轻放大 + 「升级 Lv.N」浮出(里程碑等级 5/10/15 有专属彩蛋)
全成就解锁 称号变「圆满」+ 高亮彩蛋

功能一览

  • 经验与等级 — 每回合 (10 + min(20, 工具数×2)) × 连击加乘level = floor(sqrt(xp/100)) + 1
  • 连击加乘 — 连击 3 / 7 / 30 天 → XP ×1.1 / ×1.25 / ×1.5
  • 14 个成就 — 对话数、等级、工具调用、文件写入、连击、单日回合、深夜/清晨各成一档
  • 每日任务 — 对话达人 / 工具狂人 / 保持连击,每完成一个 +20 XP,次日刷新
  • 称号系统 — 新手 → 学徒 → 冒险者 → 勇者 → 大师 → 传说(全成就时「圆满」)
  • 每周报告 — 最近 7 个自然日柱状图(以 XP 为高度)+ 周汇总
  • 存档导出 / 导入 — 一键下载 rpg-data-YYYY-MM-DD.json,导入自动归一化(旧版/手改存档不留空洞)
  • 持久化~/.dsh/rpg-data.json(尊重 $DSH_HOME),原子写入 + 串行队列,崩溃不损坏
  • 界面克制 — 宿主主题变量、无 emoji 噪音、prefers-reduced-motion 支持

架构

┌─ Host (Node.js) ────────────────────────────────────────────┐
│ apply(ctx)                                                  │
│  ├─ ctx.on('session/event')  → turn/end(completed)          │
│  │     → registerCompletedTurn()  (+XP, 连击, 成就, 任务)     │
│  │     → updateWeekHistory()     (按活跃日累计周历史)          │
│  │     → saveSoon()              (timer.debounce + ctx.effect)│
│  └─ webServer.register × 3                                   │
│       ├─ /rpg-workstation/state.json → computeSnapshot       │
│       ├─ /rpg-workstation/export     → 原始存档 JSON          │
│       └─ /rpg-workstation/import     → normalize + 落盘      │
└──────────────────────────┬──────────────────────────────────┘
                           │ 同源 fetch(纯 JSON)
┌─ Client (Browser) ───────▼──────────────────────────────────┐
│ apply(ctx)                                                  │
│  ├─ styles 注入 style.css(命名空间隔离)                      │
│  └─ slots.inject('shell.overlay')                            │
│        → <Dashboard/> 每 2s 轮询                              │
│             ├─ 等级/称号/经验条/连击/每日任务/周报/成就          │
│             └─ 升级轻提示 + 圆满彩蛋                           │
└─────────────────────────────────────────────────────────────┘
  • Host 面src/index.ts)负责后端:监听会话事件、算分、落盘、状态/导出/导入路由。
  • Client 面src/client/)负责界面:插槽注册、样式注入、轮询渲染。
  • 两端类型src/shared/types.ts)单一定义快照结构,改一处另一侧立刻类型报错,防止漂移。

玩法公式

项目 公式
每回合经验 (基础 +10 + 工具加成 min(20, 工具数 × 2)) × 连击加乘turn/endreason.kind === 'completed'
连击加乘 连击 3 / 7 / 30 天 → ×1.1 / ×1.25 / ×1.5
等级 level = floor(sqrt(xp / 100)) + 1
升下一级阈值 level² × 100xpAtLevel(level+1)
当前级跨度 (2·level − 1) × 100(进度条分母)
连击 当天首次 → 1;连续每天 → +1;中断一天 → 归零
称号 1-2 新手 / 3-4 学徒 / 5-6 冒险者 / 7-9 勇者 / 10-14 大师 / 15+ 传说
行为统计 累计工具调用(tool/call)、文件写入(write/edit)、今日回合

License

MIT