让 AI 主持并扮演角色,陪你推进持久剧情
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/14 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Firefox2100/dsh-agentic-roleplay该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:待复验
是什么
dsh 原生插件 · tool
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 19 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 55 处,展示前 50 条)
- 读取本地文件eval/audit.mjs:18
const { dimensions } = JSON.parse(readFileSync(file, 'utf8')) - 发起网络请求eval/audit.mjs:110
const response = await fetch(`${url.replace(/ +$/, '')}/chat/completions`, { - 写入本地文件eval/audit.mjs:155
if (out !== undefined) writeFileSync(out, `${JSON.stringify(report, null, 2)}\n`) - 删除本地文件递归eval/audit.test.mjs:44
after(() => { server.close(); rmSync(folder, { recursive: true, force: true }) }) - 执行外部命令固定命令eval/fidelity.mjs:162
const readLog = (file) => execFileSync('/usr/bin/zstd', ['-dc', file], { maxBuffer: 1 << 30 }).toString('utf8').split('\n').filter(Boolean).map(line = - 读取本地文件eval/fidelity.mjs:171
const logs = readdirSync(sessions).flatMap(folder => readdirSync(join(sessions, folder)).filter(name => existsSync(join(sessions, folder, name, 'sessi - 读取本地文件eval/fidelity.mjs:171
const logs = readdirSync(sessions).flatMap(folder => readdirSync(join(sessions, folder)).filter(name => existsSync(join(sessions, folder, name, 'sessi - 读取本地文件eval/lib.mjs:15
const text = JSON.parse(readFileSync(join(starters, folder, 'world.json'), 'utf8')).opening_message - 发起网络请求eval/lib.mjs:24
const login = await fetch(url, { redirect: 'manual' }) - 发起网络请求eval/lib.mjs:31
const response = await fetch(`${this.base}/roleplay-api${path}`, { ...init, headers: { ...init.headers, cookie: this.cookie, 'content-type': 'applicat - 执行外部命令固定命令eval/lib.mjs:131
const ends = execFileSync('zstd', ['-dc', file], { maxBuffer: 1 << 30 }).toString('utf8').split('\n').filter(Boolean).map(line => JSON.parse(line)).fi - 执行外部命令固定命令eval/lib.mjs:140
const rows = execFileSync('zstd', ['-dc', file], { maxBuffer: 1 << 30 }).toString('utf8').split('\n').filter(Boolean).map(line => JSON.parse(line)) - 读取本地文件eval/lib.mjs:157
for (const folder of readdirSync(root)) { - 读取本地文件eval/lib.mjs:159
if (existsSync(file)) return file - 发起网络请求eval/player.mjs:60
const response = await fetch(`${this.url}/chat/completions`, { - 读取本地文件eval/run.mjs:22
for (const file of readdirSync(join(here, 'scenarios')).filter(name => name.endsWith('.mjs')).sort()) { - 写入本地文件eval/run.mjs:104
mkdirSync(join(here, 'results'), { recursive: true }) - 写入本地文件eval/run.mjs:106
writeFileSync(file, `${JSON.stringify(report, null, 2)}\n`) - 读取本地文件eval/run.mjs:115
const baseline = JSON.parse(readFileSync(baselineFile, 'utf8')) - 读取本地文件packages/dsh-agentic-roleplay-core/src/doctor.ts:46
if (id === undefined || !isSessionId(id) || !existsSync(sessionDatabase(sessionsDir(), id))) return undefined - 读取本地文件packages/dsh-agentic-roleplay-core/src/doctor.ts:68
return id !== undefined && isSessionId(id) && existsSync(sessionDatabase(sessionsDir(), id)) ? liveSettings(sessionFolder(sessionsDir(), id)).prompts. - 读取本地文件packages/dsh-agentic-roleplay-core/src/index.ts:165
const lorebookLibrary = new Lorebooks({ root: () => root.path, authoring: lorebookAuthoring, importMessage: lorebookImportMessage, get maxUploadBytes( - 读取本地文件packages/dsh-agentic-roleplay-core/src/index.ts:311
}, archive: id => archiveSession({ agent, sessionsDir: deps.sessionsDir }, id), restore: id => restoreSession({ agent, sessionsDir: deps.sessionsDir } - 读取本地文件packages/dsh-agentic-roleplay-core/src/index.ts:311
}, archive: id => archiveSession({ agent, sessionsDir: deps.sessionsDir }, id), restore: id => restoreSession({ agent, sessionsDir: deps.sessionsDir } - 读取本地文件packages/dsh-agentic-roleplay-core/src/index.ts:318
if (!isSessionId(id) || !existsSync(sessionDatabase(sessionsDir, id))) throw new SessionNotFoundError(`there is no session "${id}"`) - 读取本地文件packages/dsh-agentic-roleplay-core/src/index.ts:355
if (!isSessionId(id) || !existsSync(sessionDatabase(sessionsDir(), id))) throw new SessionNotFoundError(`no session "${id}"`) - 读取本地文件packages/dsh-agentic-roleplay-core/src/lorebook-authoring.ts:33
return directory !== undefined && existsSync(join(directory, 'lore')) && readdirSync(join(directory, 'lore')).length > 0 - 读取本地文件packages/dsh-agentic-roleplay-core/src/lorebook-authoring.ts:33
return directory !== undefined && existsSync(join(directory, 'lore')) && readdirSync(join(directory, 'lore')).length > 0 - 读取本地文件packages/dsh-agentic-roleplay-core/src/preset-authoring.ts:29
return preset !== undefined && existsSync(join(presetDirectory(library(), preset), PROMPTS_FOLDER)) - 写入本地文件packages/dsh-roleplay-state/src/sessions.ts:42
mkdirSync(sessionsDir, { recursive: true }) - 写入本地文件packages/dsh-roleplay-state/src/sessions.ts:44
mkdirSync(folder) - 删除本地文件递归packages/dsh-roleplay-state/src/sessions.ts:52
rmSync(folder, { recursive: true, force: true }) - 删除本地文件递归packages/dsh-roleplay-state/src/sessions.ts:64
rmSync(sessionFolder(sessionsDir, id), { recursive: true, force: true }) - 读取本地文件packages/dsh-roleplay-state/src/sessions.ts:87
ids = readdirSync(sessionsDir, { withFileTypes: true }).filter(entry => entry.isDirectory() && isSessionId(entry.name)).map(entry => entry.name) - 读取本地文件packages/dsh-roleplay-state/src/sessions.ts:127
if (!existsSync(snapshotPath(sessionsDir, fromId, name))) throw new NotFoundError(`session ${fromId} has no snapshot "${name}"`) - 写入本地文件packages/dsh-roleplay-state/src/sessions.ts:130
mkdirSync(target) - 写入本地文件packages/dsh-roleplay-state/src/sessions.ts:137
if ('snapshot' in source) copyFileSync(snapshotPath(sessionsDir, fromId, source.snapshot), file) - 写入本地文件packages/dsh-roleplay-state/src/sessions.ts:139
if (existsSync(join(from, 'settings.json'))) copyFileSync(join(from, 'settings.json'), join(target, 'settings.json')) - 读取本地文件packages/dsh-roleplay-state/src/sessions.ts:139
if (existsSync(join(from, 'settings.json'))) copyFileSync(join(from, 'settings.json'), join(target, 'settings.json')) - 写入本地文件packages/dsh-roleplay-state/src/sessions.ts:140
if (options.keep.length > 0) mkdirSync(join(target, SNAPSHOT_FOLDER)) - 删除本地文件递归packages/dsh-roleplay-state/src/sessions.ts:145
rmSync(target, { recursive: true, force: true }) - 删除本地文件packages/dsh-roleplay-state/src/sessions.ts:164
rmSync(aside, { force: true }) - 读取本地文件packages/dsh-roleplay-state/src/sessions.ts:173
return readdirSync(join(sessionFolder(sessionsDir, id), SNAPSHOT_FOLDER)).filter(file => file.endsWith('.sqlite')).map(file => file.slice(0, -'.sqlite - 删除本地文件packages/dsh-roleplay-state/src/sessions.ts:181
rmSync(snapshotPath(sessionsDir, id, name), { force: true }) - 读取本地文件packages/dsh-roleplay-state/src/sessions.ts:191
if (!existsSync(source)) throw new NotFoundError(`session ${id} has no snapshot "${name}"`) - 删除本地文件packages/dsh-roleplay-state/src/sessions.ts:195
for (const sidecar of ['-wal', '-shm', '-journal']) rmSync(`${database}${sidecar}`, { force: true }) - 读取本地文件packages/dsh-roleplay-state/src/sessions.ts:206
if (!existsSync(database)) return undefined - 读取本地文件packages/dsh-roleplay-state/src/store.ts:351
if (location !== ':memory:' && !existsSync(location)) throw new NotFoundError(`no session database at ${location}`) - 读取本地文件packages/dsh-roleplay-state/src/store.ts:381
if (existsSync(target)) return - 写入本地文件packages/dsh-roleplay-state/src/store.ts:382
mkdirSync(dirname(target), { recursive: true })
扫描于 2026/10/31(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 的智能体角色扮演套件
README
由 DeepSeek 最新模型翻译生成DSH Agentic Roleplay
为 DeepSeek Harness 打造的持久化、智能体驱动的角色扮演。这个包提供游戏主持人循环、自主角色智能体、持久的世界与会话状态、创作工具、多媒体服务,以及专用的角色扮演界面。
本项目由 Firefox2100 独立维护,不是 DeepSeek Harness 官方项目。
文档
- English documentation
- 简体中文文档
- 安装
- 世界创作
- 世界格式
- 插件开发
- 维护者指南
包
| 包 | 作用 |
| @dsh-agentic-roleplay/all | 可安装的完整包,包含全部体验。 |
| @dsh-agentic-roleplay/core | 界面、编排、创作、媒体,以及文件系统集成。 |
| @dsh-agentic-roleplay/state | 独立的 DSH 服务,负责会话数据库、仓库、回忆,以及面向模型的记录工具。 |
| dsh-roleplay-model | 私有的规范模型包,打包进已发布的插件。 |
安装
把完整包安装到 DSH 配置档:
dsh plugin --profile <profile> add @dsh-agentic-roleplay/all
重启配置档,然后在 Settings → Role Play 下配置存储根目录。
展开完整文档(README 剩余 1 节)
DSH Agentic Roleplay 为 DeepSeek Harness 打造的持久化、智能体驱动的角色扮演。这个包提供游戏主持人循环、自主角色智能体、持久的世界与会话状态、创作工具、多媒体服务,以及专用的角色扮演界面。 本项目由 Firefox2100 独立维护,不是 DeepSeek Harness 官方项目。 文档 - English documentation - 简体中文文档 - 安装 - 世界创作 - 世界格式 - 插件开发 - 维护者指南 包 | 包 | 作用 | | @dsh-agentic-roleplay/all | 可安装的完整包,包含全部体验。 | | @dsh-agentic-roleplay/core | 界面、编排、创作、媒体,以及文件系统集成。 | | @dsh-agentic-roleplay/state | 独立的 DSH 服务,负责会话数据库、仓库、回忆,以及面向模型的记录工具。 | | dsh-roleplay-model | 私有的规范模型包,打包进已发布的插件。 | 安装 把完整包安装到 DSH 配置档: dsh plugin --profile <profile> add @dsh-agentic-roleplay/all 重启配置档,然后在 Settings → Role Play 下配置存储根目录。AI 功能由兼容的服务商插件提供,详见 AI services。 开发 pnpm install pnpm run typecheck pnpm run test pnpm run build 需要 Node.js 22 或更高版本,以及 pnpm。改动持久化数据、智能体循环、提示词或 DSH 集成之前,请先看维护者指南。 协议 GPL-3.0-only
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Firefox2100/dsh-agentic-roleplay
让 AI 主持并扮演角色,陪你推进持久剧情
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 3,801已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,636已汉化DSH
72.2
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,082已汉化DSH
71.7
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,292已汉化DSH
71.3
智能体运行框架路由HarnessRouter/harnessrouter
智能体运行框架的统一接口。
★ 3,800已汉化DSH
71.2