DSH Agent RP 是运行在 DSH 上的原生角色扮演 Runtime。角色会直接作为顶层 Agent 行动;Persona、世界、提示策略、状态和记忆都是可以独立选择、复用与组合的一等资源,而不是某张角色卡的附属设置。
Character Card、Chat Completion 预设、World Info、MVU、EJS 和 Tavern Helper 是目前优先接入的内容格式。它们让已有创作可以进入这套 Runtime,但不会反过来定义它的能力边界。
- 从统一的「开始游玩」入口选择角色对话或世界场景,再组合 Persona、世界、提示策略与开场;已知的外部资源权限会在启动前一次处理。
- 导入 PNG、JSON、CHARX 角色卡,以及 World Info、Chat Completion 预设和 SillyTavern JSONL 聊天记录;角色、Persona、世界与预设可以分别保存和复用。
- 连续游玩一段可回溯的故事:重新生成、续写、切换回复版本、修改输入并创建分支,同时保存明确状态与长期记忆。
- 运行更复杂的社区内容:MVU、同步 EJS、世界书正则、显示正则、轻量 HTML 前端及一部分 Tavern Helper 脚本会进入各自受限的兼容环境,单项失败不会拖垮整段会话。
- 在沉浸视图与调试视图之间切换,查看实际生效的提示、世界召回、状态和运行诊断。
角色本身就是顶层 Agent。这里没有额外的旁白、协调器或 Character 子代理,角色对话直接发生在普通会话中。
一轮中的工作按用途分开:搜索等写作前工具会把结果交还角色,并继续使用当前角色与预设完成正文;正文后生成的图片只进入精简的呈现交接,不会再次注入整套酒馆写作提示;MVU 状态在正文结束后由独立后台请求结算。玩家明确要求保存长期记忆时,角色可以在可见回复末尾调用 remember,保存成功后直接结束本轮,不再为工具回执重写一次正文。自动剧情总结、大纲维护与通用多 Agent 调度尚未启用,后续需要根据真实游玩反馈单独设计。
需要 Node.js 22.19+ 或 24+,以及 pnpm 11。没有 pnpm 时可以先运行 npm install --global pnpm@11。安装器会准备经过验证的 Agent Host、安装或更新 Agent RP,并保留 ~/.dsh 中已有的角色与会话;它不会静默安装全局工具。
DSH Desktop 使用自己封装的 Node、pnpm、DSH Host、数据目录和当前激活的 profile,不会复用下面的 Windows Agent Host。当前正式版 DSH Desktop 2.0.2 及其仓库中的 2.0.3 开发版本均固定在未包含安全插件事件写入能力的官方 DSH 0.1.1-rc.2;把 Agent RP 安装进 Desktop profile 只能按纯对话兼容路径看待,不能完整保存 Agent/MVU 回合。
若只需协助验证纯对话兼容,可以从 Desktop 托盘打开它自带的 DSH Terminal,在当前激活的 profile 中安装插件后重启 Desktop:
dsh plugin add github:hewzhew/dsh-agent-rp#main这条路径尚未列为完整支持入口。不要运行下面的 Windows 安装器来“覆盖” Desktop;它会创建一个独立 Agent Host,而不会修改 Desktop 安装包内部的运行时。完整支持需要 Desktop Host 提供与 Agent Host 等价的安全插件事件接口,或允许 Desktop 连接到经过验证的外部 Host。
$installerPath = Join-Path $env:TEMP 'install-dsh-agent-rp.ps1'
Invoke-WebRequest 'https://raw.githubusercontent.com/hewzhew/dsh-agent-rp/main/scripts/install-windows.ps1' -OutFile $installerPath
powershell -NoProfile -ExecutionPolicy Bypass -File $installerPath -Start当前 Agent Host 固定在官方 DSH 0.1.1-rc.2,并通过 pnpm 的可审计补丁机制补上插件私有事件写入能力;依赖版本和补丁哈希都由锁文件约束,安装器还会实际导入 Session 模块验证能力已经生效。官方 DSH 发布等价接口后会移除这层补丁。直接运行官方 @deepseek-ai/dsh@0.1.1-rc.2 仍可使用纯对话兼容模式,但不能完整保存 Agent/MVU 回合记录;官方 runner 与 Agent Host 显示相同的 DSH 版本号,不能只按版本号判断能力。
安装器会在默认 DSH 数据目录生成稳定的 Agent RP 专用启动入口。以后更新时重新运行同一安装器;平时启动使用:
& "$env:USERPROFILE\.dsh\bin\dsh-agent-rp.ps1"设置过 DSH_HOME 时,安装器会打印该数据目录中的实际启动路径。不要改回 npx -p @deepseek-ai/dsh@latest dsh --profile web;这会重新进入尚未包含插件事件能力的官方 runner。若界面提示当前 Host 缺少安全插件事件能力,请关闭旧 DSH 后从上述专用入口启动。安装器发现默认端口 3080 已被其他进程占用时不会停止它或再启动第二个 DSH,而会显示进程 PID 和后续命令。
国内 npm registry 较慢时,可在安装器最后一行加 -ChinaMirror。这个选项只改变本次安装使用的 npm registry;下载 runner 文件或 Agent RP 源码时访问的是 GitHub,切换 npm 镜像不会修复这一段。
普通 Linux 桌面或服务器使用独立安装器。请以以后实际运行 DSH 的非特权用户执行;默认会在 ~/.dsh/bin/dsh-agent-rp 创建稳定入口:
installer_path="$(mktemp)"
curl -fsSL https://raw.githubusercontent.com/hewzhew/dsh-agent-rp/main/scripts/install-linux.sh -o "$installer_path"
bash "$installer_path" --startDebian/Ubuntu 若缺少原生构建工具,可先安装 build-essential 与 python3。使用自定义 DSH_HOME 时必须传入绝对路径;启动器会从自身位置恢复同一个数据目录,不会退回另一个 ~/.dsh。更新时以同一用户重新运行安装器。
无桌面服务器、systemd、Cloudflare Tunnel 和反向代理部署见 Linux 服务器部署。--trusted-host 只允许指定 Host authority 通过 DSH 的可达性围栏,不提供账号、登录或访问控制;对公网暴露时必须另配认证层。
贡献者需要修改源码时,才应克隆仓库并在仓库根目录运行 pnpm install、pnpm run build,再让 Agent Host 的 dsh plugin --profile web add . 指向本地目录。
早期安装器写入的版本不会自动迁移。若启动错误中出现 .dsh\plugins\dsh-agent-rp,请先把该目录移出 plugins 目录作备份,确认 DSH 能启动后,再按上面的 profile 命令安装。不要删除整个 .dsh,会话数据与旧插件目录不是一回事。
不要把未验收的 DSH 版本强行套用到当前 Host 补丁,也不要在 Issue 或日志里公开自己的 NPM Token。
Termux 路线面向 ARM64、Android 11 及以上设备,目标是在手机本机运行、不让电脑保持开机。旧预览已经验证过安卓原生依赖、图片解码后备模块和本地启动,但当前安装入口正在迁移。
手机安装器仍固定在旧的 DSH 0.1.0-rc.6,尚未迁移到当前 Agent Host runner,因此不适用于当前 main 的完整 Agent/MVU 回合。现有安装不要为了追随桌面版本而手工覆盖 DSH 包;新的 Termux 安装与更新暂缓,等安卓原生模块和 patched runner 一起完成实机验收后再恢复下面的正式命令。
旧安装仍可运行原来已经落盘的版本,但不要重新执行旧安装器更新到当前 main。
若启动或导入角色卡时遇到问题,运行 dsh-agent-rp-doctor 即可得到一份可直接贴到 Issue 的脱敏体检结果。它只检查版本、模块和 Android 文件系统能力,不读取令牌、角色卡或会话内容。
运行旧安装后仍可在同一部手机的浏览器打开 http://127.0.0.1:3080。角色卡和会话位于 ~/.dsh;不要删除这个目录。当前路线不把老设备上的 bash 沙箱或编码 Agent 计入手机预览范围。
需要长时间把页面留在后台时,可以先在 Termux 运行 termux-wake-lock,结束后运行 termux-wake-unlock,避免系统过早挂起本地服务;这不会绕过 Android 的电池优化设置。
页面正常打开后,可以在 Chrome 或 Edge 的菜单中选择“添加到主屏幕”或“安装应用”。DSH 已提供全屏 Web App 清单,图标启动后仍会连接 Termux 中的本地服务;重启手机后需要先重新运行 dsh-agent-rp --port 3080。
- 在 DSH 中新建空白会话。
- 打开 Agent RP,选择「开始游玩」。
- 选择「角色对话」或「世界场景」。
- 组合角色或场景、Persona、世界与提示策略;角色模式还可以选择开场白。
- 启动前检查已知权限,然后进入游玩。会话中仍可打开资源库、设置与调试视图。
导入后的角色、Persona、世界和预设会分别进入资源库。预设可以在资源中心改名或移除;移除只删除可复用副本,不影响已经开始的会话。开始游玩后,“会话设置 → 预设”可以调整提示模块与预设正则的开关;修改只属于当前会话。
无需预先选择某个 Agent 预设;从空白的标准会话选择角色时,插件会自动进入角色会话。已经有聊天内容的普通会话不会被修改。
要迁移旧聊天,可在角色会话中附加一份 SillyTavern JSONL;将对应角色卡和 JSONL 放在同一条消息中,可以一次迁移角色身份与历史记录。导入会创建新的角色对话,不会修改源文件或来源会话。
这个里程碑优先完成可靠的单角色与世界场景闭环,而不是按功能数量追赶另一套前端。群聊、多人互动、多 Agent 编排和重前端/独立前端还没有完成。
需要脚本或远程 HTML 的内容会在启动前检查已知的脚本、样式、字体、图片、媒体、嵌入页与数据连接,并把许可限制在对应角色、预设、脚本和来源;动态出现的新能力仍会在实际触发时确认。可执行 HTML、Tavern Helper、EJS 与世界书正则运行在不同的受限环境中,不会获得 DSH Host 的文件、进程、凭据或页面 DOM。兼容层仍在依据真实内容补全,但新增能力会优先沉淀为可复用接口,不按单张卡片堆特例。
需要 OAuth 或其他回执的外部登录不会给角色卡 iframe 增加弹窗、同源或顶层导航权限。轻前端或 Tavern Helper 脚本发起绝对 HTTPS 窗口请求后,DSH 会展示目标站点;玩家确认后通过独立中转窗口打开登录页,只把有界的登录回执送回发起请求的隔离运行时。中转界面会区分“回执通过安全检查”和“请求运行时已确认接收”,成功后只提供关闭操作,不会继续诱导重复登录。要求 Discord 身份、论坛会员或角色组资格的服务必须继续使用原有第三方 OAuth 与服务端授权判断;DSH 不会以本机身份替代、增加第二登录方式或自动回退。
不依赖既有第三方账号资格的开放服务可以选择接入 DSH 本机身份。玩家在 Agent RP 设置中创建身份后,已接入的轻前端、Tavern Helper 脚本或它们嵌入的 HTTPS 页面可请求一份五分钟有效、绑定目标来源、服务 nonce 和当前卡片或脚本身份的 ES256 证明;显示名称需要单独授权,私钥始终由 Host 保管。这项能力不是 Discord 或其他第三方 OAuth 的替代凭据。协议与接入限制见 安全扩展能力协议。
更具体的格式支持与降级方式见 SillyTavern 兼容说明。
需要比较大型卡片改动时,可运行不含社区卡片内容的 合成兼容基准与本地真实卡、预设验收流程。EJS 的可执行与保留范围见 EJS 兼容表;后续世界书与插件生态遵循 安全扩展能力协议。
如果一张卡片的纯文本部分、世界书、预设或轻前端在 DSH 中表现不对,欢迎提交 Issue。请说明卡片格式、预期表现、实际表现与最小复现步骤;不要上传无权公开的角色卡、私有社区内容、Token 或完整 Session Log。
代码、兼容样本、交互设计和文档改进都欢迎。开始前请阅读 贡献指南。
本项目采用 MIT License。