Skip to content

feat(dashboard): 提供脱敏运行摘要并加固登录令牌 - #793

Merged
deepcoldy merged 4 commits into
deepcoldy:masterfrom
LucasIcarus:feat/dashboard-public-api-hardening
Aug 9, 2026
Merged

feat(dashboard): 提供脱敏运行摘要并加固登录令牌#793
deepcoldy merged 4 commits into
deepcoldy:masterfrom
LucasIcarus:feat/dashboard-public-api-hardening

Conversation

@LucasIcarus

Copy link
Copy Markdown
Contributor

改动内容

  • 新增 GET /api/dashboard/v1/summary,以版本化、正向白名单的结构返回 fleet 健康状态、在线 bot 数、活跃/待关注会话数和排程摘要;任一 live daemon 快照失败或格式异常时返回 503,不用伪造的零值掩盖缺失状态。
  • 为匿名 summary 请求增加 Dashboard 进程全局的滚动限流(10 秒 5 次),第 6 次在 fan-out 前返回 429 和 Retry-After;携带当前 Dashboard 登录态的请求不受匿名配额影响。
  • 修正 stalled 会话未计入 attention、daemon snapshot 字段未做最小运行时校验等摘要口径问题,并补齐中英文 API 契约、鉴权边界和 fleet/core-only 模式说明。
  • 调整 Dashboard CLI:裸 botmux dashboarddashboard current 获取或首次创建当前 token,已有 token 时不轮换;只有 dashboard rotate 显式替换 token。--help 出现在任意位置、未知子命令和多余参数都不会触碰凭证端点。
  • 将 token 文件设为多 Dashboard 进程共享的唯一权威源:首次创建和轮换走同一跨进程锁,凭证以 0600 durable 落盘且拒绝叶子 symlink;持久化失败返回 500,不发布未落盘的新 token。Dashboard、worker、tunnel、daemon report 与 Desktop 都按需读取当前值,读取竞态按未认证 fail-closed。

改动目的

普通 fleet 模式缺少一个适合外部健康页、监控和编排器消费的稳定摘要接口。直接消费现有 sessions/events 会暴露过多会话细节,也会让匿名高频轮询放大为对每个在线 daemon 的实时 IPC。本次新增的强脱敏 summary 契约用于更安全地把 Botmux 的普通 Dashboard facade 作为常驻服务观测入口,并用前置限流约束 fan-out 成本;它不改变 botmux serve --api-only 的 core-only 接口。

原有裸 botmux dashboard 会无条件轮换 token,导致 dashboard rotate --help 等只读意图也可能让旧链接失效。随着 token 已持久化并跨重启复用,默认“获取可用链接”、显式 rotate 才撤销旧链接更符合用户预期;首次尚无 token 时仍会安全创建一个,避免为了取链接再多走一步。持久化和跨进程加固保证返回给用户的链接就是所有本机 Dashboard 进程共同认可的 durable 凭证。

影响面

  • 涉及 Dashboard HTTP 聚合、CLI 本机 HMAC 端点、Dashboard token 文件、Desktop 定位结果及对应文档。
  • summary 只读取现有 daemon sessions/schedules IPC,不修改任何会话、排程或 IM 状态。
  • 不修改 CLI adapter、PTY/Tmux/Herdr/Zellij/Zmx 后端或会话类型语义;共享 Node 路径同时适用于 macOS/Linux,凭证文件复用仓库既有 secure-host 与 file-lock 实现。
  • 无 Dashboard 页面布局或视觉变更,因此无新增截图。

验证

  • pnpm build:通过(TypeScript、Dashboard bundle、domain/dist audit)。
  • pnpm exec vitest run test/dashboard-auth.test.ts test/dashboard-command.test.ts test/dashboard-endpoint.test.ts test/dashboard-summary.test.ts test/dashboard-summary-endpoint.test.ts test/terminal-write-auth.test.ts test/desktop/desktop-ipc-runtime-monitor.test.ts:7 files,162/162 通过。
  • pnpm test:13,994 passed,37 skipped;并行全量运行中 2 个既有重负载用例超时,随后独立重跑:
    • pnpm exec vitest run test/codex-app-runner.integration.test.ts:42/42 通过。
    • pnpm exec vitest run test/cost-calculator-cache.test.ts:49/49 通过。
  • BOTMUX_DOCS_BASE=/botmux/ BOTMUX_DOCS_ASSET_PREFIX=/botmux/ ./node_modules/.bin/rspress builddocs-site/):通过,包含页面渲染与死链检查。
  • 12 进程并发首次创建 token 回归测试通过;额外隔离的 ensure/rotate 同闸竞争验证收敛到最终已提交凭证。

@LucasIcarus
LucasIcarus requested a review from deepcoldy as a code owner August 8, 2026 19:52
@deepcoldy
deepcoldy merged commit 51f63b9 into deepcoldy:master Aug 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants