前言¶
在 DSH 里接 QQ、微信、B 站等 bot,常见做法是各写一套「账号是谁、消息进哪个会话、Outbound 走哪条路」。插件一多,映射表、去重和限流就会重复实现,bot 起来了却发不出去也更难查。下面介绍 Stella-Mira 维护的 mira_account:把账号池、绑定、路由、去重和限流收在一处,bot 插件只做协议适配器;它也是 mira_qqbot 等插件声明的硬依赖,缺了就不会加载。
这是什么¶
mira_account 是 DSH 的账号管理框架(npm 包名 mira_account,当前 README 配套版本 0.1.0,MIT 许可证)。分类上属于工作流类插件:通过 ctx.provide('miraAccount', api) 向生态暴露统一 API,并注册 8 个管理工具。
它解决的核心问题是:哪个平台账号、哪个 peer、由哪个 DSH 会话应答——只有这一份真相;qq / 微信 / B 站 bot 不再各自维护 session 映射。
核心功能¶
账号池与落盘¶
数据写在 $DSH_HOME/mira_config/mira_account/(DSH_HOME 缺省为 ~/.dsh):
| 路径 | 作用 |
|---|---|
accounts.json |
账号池(不含凭据本体) |
bindings.json |
会话绑定表(损坏时可丢弃重建,不影响账号池) |
creds/<id>.json |
凭据本体,权限 600,不回显、不进日志、不进工具返回 |
seen/<platform>.json |
按 message_id 去重,带 TTL |
账号池为空不算配置错误:插件仍会加载;需要账号的工具会返回 account/none 并提示去登记文件。框架不会自动创建账号、自动登录或自动探测。
会话绑定与入站路由¶
绑定关系区分 taker(应答方)与 observer(旁听)。入站一律走 inbound(),出站一律走 send()——bot 插件不得自行维护 session 映射(契约 A/B)。
无绑定时行为由账号上的 inboundPolicy 决定:create 新建会话、default 投 defaultSessionId、drop 丢弃并计数。
去重与限流¶
- 去重:入站路径推荐
verdict→ 投递 →recordSeen;dedup.ttlMs默认 30 分钟,dedup.maxEntries默认 5000。 - 限流:按账号维度的令牌桶,
limits.read/limits.write支持{ perMinute, perHour, perDay },默认 0 表示不限。
健康巡检与断线重连¶
定时调用各平台适配器的 adapter.status(),避免 state 永远停在 connect 时的「假在线」。默认每 30s 一轮(health.intervalMs);error / offline 账号按指数退避重连(reconnect.minMs × 2ⁿ,封顶 reconnect.maxMs)。
虚拟平台 vtuber¶
vtuber 无需对外连接:登记后直接视为 online,用于给「形象」当权限主体(peer 类型 avatar),同一形象可对应一个 taker 与多个 observer,供如 muse_vtuber 一类消费方使用。
管理工具¶
| 工具 | 说明 |
|---|---|
mira_account_list |
账号清单(含凭据是否存在、权限是否合规) |
mira_account_status |
只读诊断:路径、连接态、绑定、适配器、去重表、限流余量等 |
mira_account_bind / mira_account_unbind / mira_account_bindings |
绑定管理 |
mira_account_add / mira_account_remove / mira_account_toggle |
登记、删除、启停账号行 |
没有通过工具写入凭据的接口——工具参数会进入会话记录,凭据只能手填 creds/<id>.json。
与 bot 插件的关系¶
README 明确:mira_account 是 mira_qqbot / mira_bilibili / mira_wxbot 的前置依赖。只装 bot、不装本插件时,会因 inject: ['miraAccount'] 不满足而不加载(工具消失)。可用 mira_account_status 自证服务在跑。
安装与启用¶
DeepSeek Harness 生态里插件以 Cordis bundle 形式挂载;本仓库的 cordis.patch.yml 插入条目 id / name 均为 mira_account。
SkillHub 目录页(stella-mira/mira_account)给出的 Harness 安装话术如下(页面正文在「先读取…」处截断,完整步骤以目录页为准):
请安装 DSH 插件 Stella-Mira/mira_account。
安装后可在 profile 里为该插件行配置 config(均可省略),例如临时关闭服务:
enabled: true
autoConnect: true
health:
enabled: true
intervalMs: 30000
reconnect:
enabled: true
minMs: 5000
maxMs: 300000
limits:
read: 0
write: 0
dedup:
ttlMs: 1800000
maxEntries: 5000
enabled: false 时不注册工具、不提供服务,但插件行仍保留,便于临时关闭。
典型用法¶
1. 登记账号行¶
用工具登记账号(不含凭据),或手改 accounts.json(schemaVersion 必须为 1):
{
"schemaVersion": 1,
"accounts": [{
"id": "qq-main",
"platform": "qq",
"label": "主号",
"enabled": true,
"state": "offline",
"error": null,
"inboundPolicy": "create",
"defaultSessionId": "",
"createdAt": "2026-10-26T15:00:00.000Z",
"lastLoginAt": null
}]
}
platform 支持 qq / wx / bilibili / vtuber(新平台需先在 lib/store.js 的 PLATFORMS 登记)。
2. 手填凭据¶
创建 creds/qq-main.json,权限设为 600:
{
"schemaVersion": 1,
"platform": "qq",
"kind": "token",
"fields": { "access_token": "…" },
"updatedAt": "2026-10-26T15:00:00.000Z"
}
kind 可为 cookie / token / qrcode;fields 键名由平台适配器定义。读不到文件时错误码为 creds/missing。
3. 绑定会话与 peer¶
登记 vtuber 形象并绑定两个会话的示例(来自 README):
mira_account_add { id: "vtuber-main", platform: "vtuber", label: "形象" }
mira_account_bind { sessionId: "会话A", accountId: "vtuber-main", kind: "avatar", peerId: "main", mode: "taker" }
mira_account_bind { sessionId: "会话B", accountId: "vtuber-main", kind: "avatar", peerId: "main", observer: true }
4. 诊断¶
加载 bot 插件前,先调用 mira_account_status 确认路径、适配器注册、账号连接态与 warnings。账号池空时 mira_account_list 返回 account/none。
适用场景与注意¶
适合谁:要在 DSH 里稳定跑多平台 bot、或需要统一账号/绑定/路由的多会话工作流;准备装 mira_qqbot、mira_bilibili、mira_wxbot 时,应先装并配好 mira_account。
运行权限:插件与当前 DSH 进程同权限,能读写 DSH_HOME 下配置与凭据文件。安装前请自行审阅 GitHub 源码 与 MIT 许可证,勿把 token 写进 profile 或工具参数。
单实例:README 说明存在进程锁 $DSH_HOME/mira_config/mira_account/.lock;两个 DSH 进程同时加载会导致 plugin/instance,同一账号可能收到双份回复。
常见错误码(节选):account/not-found、account/disabled、binding/conflict、platform/unsupported、delivery/failed 等,均可在 README 错误码表中对照。
SkillHub 为社区目录站点,与 DeepSeek / 幻方无官方从属关系;插件星标以目录页展示为准(当前线索为 0)。
小结¶
mira_account 把多平台 bot 共用的账号池、绑定、taker/observer 路由、message_id 去重和令牌桶限流做成一层框架,bot 只实现适配器契约。经过上面的步骤登记账号与凭据、必要时绑定会话,再用 mira_account_status 验证,即可在装 bot 插件前把底座搭稳。
- 目录页:https://www.skillhub.cn/plugins/Stella-Mira/mira_account
- 仓库:https://github.com/Stella-Mira/mira_account