管理多人设助理,私聊或组队协作讨论
35/100
综合分
5
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Nothing1024/dsh-bot该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · other
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 31 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-bot @ 0.1.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 17:45:07
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 78 处,展示前 66 条)
- 写入本地文件packages/dsh-bot-host/src/bots.ts:452
await mkdir(join(home, 'dsh-bot'), { recursive: true }) - 读取本地文件packages/dsh-bot-host/src/bots.ts:454
const raw = await readFile(file, 'utf8') - 写入本地文件packages/dsh-bot-host/src/bots.ts:567
await mkdir(dir, { recursive: true }) - 写入本地文件packages/dsh-bot-host/src/bots.ts:571
await writeFile(tmp, `${JSON.stringify(body, null, 2)}\n`, 'utf8') - 写入本地文件packages/dsh-bot-host/src/bots.ts:572
await rename(tmp, file) - 写入本地文件packages/dsh-bot-host/src/groups.ts:226
await mkdir(dirname(file), { recursive: true }) - 写入本地文件packages/dsh-bot-host/src/groups.ts:228
await writeFile(tmp, `${JSON.stringify(body, null, 2)}\n`, 'utf8') - 写入本地文件packages/dsh-bot-host/src/groups.ts:229
await rename(tmp, file) - 写入本地文件packages/dsh-bot-host/src/groups.ts:233
await mkdir(dirname(file), { recursive: true }) - 写入本地文件packages/dsh-bot-host/src/groups.ts:235
await writeFile(tmp, body, 'utf8') - 写入本地文件packages/dsh-bot-host/src/groups.ts:236
await rename(tmp, file) - 读取本地文件packages/dsh-bot-host/src/groups.ts:279
if (!existsSync(file)) return [] - 读取本地文件packages/dsh-bot-host/src/groups.ts:282
raw = await readFile(file, 'utf8') - 读取本地文件packages/dsh-bot-host/src/groups.ts:327
if (!existsSync(file)) return [] - 读取本地文件packages/dsh-bot-host/src/groups.ts:330
raw = await readFile(file, 'utf8') - 读取本地文件packages/dsh-bot-host/src/groups.ts:411
if (!existsSync(file)) return undefined - 读取本地文件packages/dsh-bot-host/src/groups.ts:412
const raw = await readFile(file, 'utf8') - 删除本地文件packages/dsh-bot-host/src/groups.ts:516
await rm(roomFilePath(home, room.roomId), { force: true }) - 删除本地文件packages/dsh-bot-host/src/groups.ts:583
await rm(roomFilePath(home, roomId), { force: true }) - 读取本地文件packages/dsh-bot-host/src/marks-cache.ts:26
const info = await stat(path) - 写入本地文件packages/dsh-bot-host/src/memory.ts:99
await writeFile(join(dir(botId), PROFILE_FILE), serializeProfile(rows), 'utf8') - 写入本地文件packages/dsh-bot-host/src/memory.ts:109
await writeFile(join(dir(botId), LOG_FILE), serializeLog(rows), 'utf8') - 写入本地文件packages/dsh-bot-host/src/memory.ts:141
await appendFile(join(dir(botId), LOG_FILE), serializeLog([entry]), 'utf8') - 删除本地文件递归packages/dsh-bot-host/src/memory.ts:179
await rm(dir(botId), { recursive: true, force: true }) - 读取本地文件packages/dsh-bot-host/src/memory.ts:352
return await readFile(path, 'utf8') - 写入本地文件packages/dsh-bot-host/src/memory.ts:361
await mkdir(dir, { recursive: true }) - 写入本地文件packages/dsh-bot-host/src/peers.ts:54
await mkdir(dirname(file), { recursive: true }) - 写入本地文件packages/dsh-bot-host/src/peers.ts:55
await appendFile(file, `${JSON.stringify(row)}\n`, 'utf8') - 读取本地文件packages/dsh-bot-host/src/peers.ts:60
if (!existsSync(file)) return [] - 读取本地文件packages/dsh-bot-host/src/peers.ts:61
const raw = await readFile(file, 'utf8') - 读取本地文件packages/dsh-bot-host/src/roster-layout.ts:58
if (!existsSync(file)) return DEFAULT_SECTIONS.map(row => ({ ...row })) - 读取本地文件packages/dsh-bot-host/src/roster-layout.ts:60
const parsed = JSON.parse(await readFile(file, 'utf8')) as { sections?: unknown } - 写入本地文件packages/dsh-bot-host/src/roster-layout.ts:80
await mkdir(dirname(file), { recursive: true }) - 写入本地文件packages/dsh-bot-host/src/roster-layout.ts:81
await writeFile(file, `${JSON.stringify({ version: 1, sections }, null, 2)}\n`, 'utf8') - 读取本地文件packages/dsh-bot-host/src/routines.ts:136
if (!existsSync(file)) return [] - 读取本地文件packages/dsh-bot-host/src/routines.ts:138
const raw = await readFile(file, 'utf8') - 写入本地文件packages/dsh-bot-host/src/routines.ts:144
await rename(file, bak) - 写入本地文件packages/dsh-bot-host/src/routines.ts:154
await mkdir(dirname(file), { recursive: true }) - 写入本地文件packages/dsh-bot-host/src/routines.ts:156
await writeFile(tmp, `${JSON.stringify(rows, null, 2)}\n`, 'utf8') - 写入本地文件packages/dsh-bot-host/src/routines.ts:157
await rename(tmp, file) - 读取本地文件packages/dsh-bot-host/src/session-voice-store.ts:24
await access(file) - 写入本地文件packages/dsh-bot-host/src/session-voice-store.ts:29
await mkdir(dirname(file), { recursive: true }) - 写入本地文件packages/dsh-bot-host/src/session-voice-store.ts:30
await writeFile(file, `${text}\n`, 'utf8') - 读取本地文件packages/dsh-bot-host/src/session-voice-store.ts:36
const raw = await readFile(fileOf(id), 'utf8') - 读取本地文件packages/dsh-bot-host/src/workbench-routes.ts:207
const info = await stat(file) - 读取本地文件packages/dsh-bot-host/src/workbench-routes.ts:216
const body = await readFile(file) - 发起网络请求packages/workbench-ui/src/api.ts:94
response = await fetch(`/dsh-bot/${method}`, { - 写入剪贴板packages/workbench-ui/src/jump.ts:23
await clipboard.writeText(sessionId) - 读取本地文件standards/validate.mjs:213
if (!existsSync(dir)) return out - 读取本地文件standards/validate.mjs:214
for (const entry of readdirSync(dir)) { - 读取本地文件standards/validate.mjs:216
const st = statSync(p) - 读取本地文件standards/validate.mjs:247
for (const pkg of readdirSync(PACKAGES_DIR)) { - 读取本地文件standards/validate.mjs:249
if (!existsSync(srcDir) || !statSync(srcDir).isDirectory()) continue - 读取本地文件standards/validate.mjs:249
if (!existsSync(srcDir) || !statSync(srcDir).isDirectory()) continue - 写入本地文件standards/validate.mjs:369
writeFileSync(BASELINE_PATH, JSON.stringify({ - 发起网络请求work/bot-production-smoke.mjs:3
const pages = await (await fetch('http://127.0.0.1:9230/json/list')).json() - 写入本地文件work/bot-production-smoke.mjs:124
} finally { await writeFile('work/bot-production-smoke-result.json',JSON.stringify({...result,errors},null,2));ws.close() } - 发起网络请求work/bot-real-browser.mjs:2
const pages = await (await fetch('http://127.0.0.1:9230/json/list')).json() - 读取本地文件work/bot-real-browser.mjs:11
const log = await readFile('/tmp/dsh-bot-implementation-gateway.log', 'utf8') - 写入本地文件work/bot-real-browser.mjs:21
await writeFile('/tmp/dsh-bot-production.png', Buffer.from(shot.data, 'base64')) - 发起网络请求work/bot-visibility-smoke.mjs:3
const pages = await (await fetch('http://127.0.0.1:9230/json/list')).json() - 写入本地文件work/bot-visibility-smoke.mjs:64
await writeFile('work/bot-visibility-smoke-result.json',JSON.stringify({...result,errors},null,2)) - 写入剪贴板work/sidebar-ui-migration-bundle/prototype.iife.js:55
`))},a))}return(0,z.jsx)(`div`,{className:`md`,children:n})}function rn(e){if(e===void 0)return;let t=e.trim().match(/^ agent *来自 *(.+?):/u)?.[1] - 发起网络请求work/sidebar-ui-migration-check.mjs:3
const pages = await (await fetch('http://127.0.0.1:9228/json/list')).json() - 写入本地文件work/sidebar-ui-migration-check.mjs:33
await writeFile(`/tmp/migration-theme-${theme}.png`, Buffer.from(shot.data, 'base64')) - 写入本地文件work/sidebar-ui-migration-check.mjs:111
await writeFile(`/tmp/migrated-components-${width}.png`, Buffer.from(shot.data, 'base64'))
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
1 张 · 点击查看大图README
由 DeepSeek 最新模型翻译生成DSH Bot
为 DeepSeek Shell 提供常驻对话能力的插件
管理多个 AI 人设,让它们独立对话或小组协作,构建属于你的 AI 助理团队。
依赖插件: dsh-session-tool(原 session-tool)。会话创建、标记和隐藏都走它。
为什么需要 DSH Bot
DeepSeek Shell 本身提供强大的 agent 能力,但缺少「常驻助理」的概念。DSH Bot 填补了这个空白:
- 始终在线 - 不用每次重新创建会话,助理一直在那里等你
- 多人设管理 - 为不同场景创建专门的助理(工作、生活、技术、创意...)
- 团队协作 - 让多个助理在小组中讨论同一个问题,获得多角度视角
- 跨会话记忆 - 助理记住你们之间的对话,形成长期的工作关系
- 程序化调用 - 其他 agent 可以通过 dsh_bot_ask 委托 bot 处理任务
核心功能
工作台界面:左侧管理多个人设,右侧进行对话
人设管理
在工作台左侧创建和管理多个 AI 助理,每个都有独立的:
- 人设描述(决定对话风格和专业领域)
- 头像标识(emoji 或首字母色块)
- 专属模型配置(可选,否则跟随全局设置)
- 跨会话记忆(自动积累对话历史中的重要信息)
人设分组管理:置顶、工作、生活 三个默认组,可拖拽移动。
展开完整文档(README 剩余 1 节)
DSH Bot
为 DeepSeek Shell 提供常驻对话能力的插件
管理多个 AI 人设,让它们独立对话或小组协作,构建属于你的 AI 助理团队。
依赖插件: dsh-session-tool(原 session-tool)。会话创建、标记和隐藏都走它。
为什么需要 DSH Bot
DeepSeek Shell 本身提供强大的 agent 能力,但缺少「常驻助理」的概念。DSH Bot 填补了这个空白:
- 始终在线 - 不用每次重新创建会话,助理一直在那里等你
- 多人设管理 - 为不同场景创建专门的助理(工作、生活、技术、创意...)
- 团队协作 - 让多个助理在小组中讨论同一个问题,获得多角度视角
- 跨会话记忆 - 助理记住你们之间的对话,形成长期的工作关系
- 程序化调用 - 其他 agent 可以通过 dsh_bot_ask 委托 bot 处理任务
核心功能
工作台界面:左侧管理多个人设,右侧进行对话
人设管理
在工作台左侧创建和管理多个 AI 助理,每个都有独立的:
- 人设描述(决定对话风格和专业领域)
- 头像标识(emoji 或首字母色块)
- 专属模型配置(可选,否则跟随全局设置)
- 跨会话记忆(自动积累对话历史中的重要信息)
人设分组管理:置顶、工作、生活 三个默认组,可拖拽移动。
1:1 私聊
点击某个人设进入专属对话界面:
- 所有对话历史都在这个人设下
- 右上角切换该人设的不同会话主题
- 消息右键「📌 记住这条」添加到长期记忆
- 会话头点击「🧠」查看和管理记忆内容
小组讨论
创建 2-6 人的小组,让多个人设协作讨论:
你:我们应该用 React 还是 Vue 做这个项目?
[第一轮] 前端工程师:从技术栈成熟度看,React 生态更丰富... 架构师:考虑团队熟悉度和长期维护成本... 项目经理:建议先做原型验证,两周内决定...
[第二轮] 前端工程师:@项目经理 原型可以用 Vite 快速搭建... 架构师:同意,技术选型应该基于实际验证...
讨论机制:
- 默认 3 轮讨论(可在小组设置中调整)
- 支持 @ 点名特定成员
- 引用某成员的消息时,该成员优先回应
- 讨论进行中发送的新消息会自动排队
- 点击「让他们继续聊」可以不发新消息让讨论继续
定时例程
为任何 bot 设置定时任务:
- 每天特定时间(支持时区设置)
- 每小时整点
- 自定义间隔(分钟)
- 高级 cron 表达式
到点后 bot 在专门的「例程 · 名称」线程里自动执行,没事干就回复 (silent),有事才落消息。窗口失焦时会触发系统通知。
Bot 间通信
Bot 可以通过 dsh_bot_send({toBot, text}) 工具给其他 bot 发消息:
- 发件人立刻收到 {accepted: true} 确认
- 收件人在「来自 <发件人名>」会话中处理
- 每 bot 每分钟限 3 条,防止消息轰炸
- 工作台「同事」页查看发送记录
委托工具
任何 DSH agent 都可以通过 dsh_bot_ask 委托 bot 处理任务:
// 在任何 agent 中调用 const result = await dsh_bot_ask({ message: "帮我分析这段代码的性能瓶颈", context: codeSnippet });
委托创建的会话默认隐藏(标题带 ~ 前缀),工作台需开启「包含隐藏」才显示。
快速开始
安装和启动
安装依赖
pnpm install
构建项目
pnpm run build
设置环境(第一次或配置变更后) sh env/setup.sh
启动服务 sh env/boot.sh
启动后访问:
- 主页:http://127.0.0.1:3084
- 工作台:http://127.0.0.1:3084/dsh-bot/ui
也可以在 DSH 官方 GUI 顶栏点击「Bot」进入工作台。
运行测试
完整测试(包含模型调用) bash scripts/manual-test.sh
只测配置和会话创建(不调用模型) bash scripts/manual-test.sh --no-write
测试覆盖:会话创建、委托工具、模型配置、标记查询、工作台 CRUD 操作。
配置
模型设置
Bot 默认使用 DSH 全局模型配置。如需为 bot 指定专属模型,在 settings 中配置:
dsh-bot:
model:
provider: deepseek
model: deepseek-chat
reasoningEffort: high # 可选
留空则完全跟随全局配置。配置变更热生效,无需重启服务。
记忆系统
默认启用自动记忆抽取。关闭方法:
dsh-bot:
memory:
enabled: false
记忆存储在 $DSH_HOME/dsh-bot/memory/<botId>/:
- profile.md - 长期事实
- log.jsonl - 时间线日志
项目架构
dsh-bot/
├── packages/
│ ├── tool-dsh-bot/ # 委托工具定义 │ ├── ui-dsh-bot/ # 官方 GUI 集成 │ ├── dsh-bot-host/ # 主服务:RPC、SSE、路由 │ ├── workbench-ui/ # 工作台前端(React) │ └── dsh-bot-shared/ # 共享类型和工具 ├── env/ # 独立的 DSH_HOME │ ├── dsh-bot/ # bot 注册表、小组、记忆 │ └── session-tool/ # 会话标记 ├── scripts/ │ └── manual-test.sh # 集成测试 ├── standards/ # 社区标准对齐 └── docs/ # 设计文档
开发指南
本地开发
类型检查
pnpm run typecheck
运行单元测试
pnpm test
监视模式
pnpm test:watch
社区标准检查
pnpm run standard:check
调试
用 dsh-plugin-debug skill 查看内部状态:
确认服务身份 ~/.agents/skills/dsh-plugin-debug/scripts/dsh-rpc-who.sh 3084
查看插件列表 ~/.agents/skills/dsh-plugin-debug/scripts/dsh-rpc.sh 3084 pluginInventory/list
查询会话标记
依赖插件: dsh-session-tool(原 session-tool)。下面的路径是本机邻仓目录,仓库名已是 dsh-session-tool。
DSH_HOME="$PWD/env" node ../../session-tool/plugin/packages/session-tool-cli/lib/bin.js marks list --mark app:dsh-bot
技术说明
会话管理
用 dsh-session-tool 管理会话,标记为 app:dsh-bot(过渡期双写 kind:dsh-bot)。
工作台实时更新
通过 Server-Sent Events (SSE) 推送更新:
- 私聊:SSE 连接后停止轮询
- 小组:每 5 秒拉取房间状态(识别成员变更)
- 断线时降级为 2 秒轮询
- 标签页隐藏时暂停(节省资源)
小组讨论机制
成员发言通过隐藏会话实现:
- 标题格式:~dsh-bot-group:<roomId>-<memberId>
- 标记为 kind:hidden,默认不在工作台显示
- 口吻在 write 时注入,不修改 bot 配置
- 不归档(避免 DSH 0.2.0-rc.1 的归档会话限制)
边界和限制
人设编辑:只对新会话生效。创建会话时快照人设,已有对话保持原口吻。
委托会话:dsh_bot_ask 创建的会话默认隐藏,需在工作台开启「包含隐藏」才能看到。
排队持久化:小组讨论的排队消息只在内存中,重启服务会丢失。
官方会话:在 DSH GUI 用「+ 新会话」创建的会话不归 DSH Bot 管理。
社区标准
本项目对齐 dsh-community-standard v0.15:
- packages/tool-dsh-bot/dsh-plugin.json - 工具插件 manifest
- packages/ui-dsh-bot/dsh-plugin.json - UI 插件 manifest
- standards/host-descriptor.json - Host 能力声明
- standards/ - 纯函数协商、fixtures、适配器基线
详见 standards/README.md。
品牌资源
brand/ 目录包含项目视觉资产:
| 文件 | 用途 |
| logo-primary.png | 主 logo,适合应用图标、文档封面 |
| icon-simple.png | 简化图标 (512×512),适合 favicon |
| banner-horizontal.png | 横向 banner (1536×512),适合 GitHub 头图 |
| screenshot-workbench.png | 工作台截图,用于文档演示 |
配色规范:
- 主色:蓝色渐变 #2196F3 → #1976D2
- 辅助色:橙色渐变 #FF9800 → #F57C00
- 设计风格:圆润友好、扁平化、渐变质感
文档
- 环境配置详解
- 任务包索引
- 归档材料
- v1 设计文档
- 工作台设计
许可
本项目为私有仓库,未明确授权不得复制或分发。
基于 DeepSeek Shell v0.2.0-rc.1预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Nothing1024/dsh-bot
管理多人设助理,私聊或组队协作讨论
相关插件 · 其他
模型破甲清洗YuJunZhiXue/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,148已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,266已汉化DSH
70.7
这是你的仓库?认领条目