mira_account:DSH 账号池、会话绑定与入站路由

前言

在 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye