baa-conductor

git clone 

baa-conductor / plans / archive
im_wower  ·  2026-03-28

BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md

  1# 浏览器桥接持久化新需求
  2
  3## 状态
  4
  5- `已落地(T-S017``T-S024` 已完成主线收口)`
  6- 优先级:`high`
  7- 记录时间:`2026-03-26`
  8
  9## 关联文档
 10
 11- [FIREFOX_BRIDGE_CONTROL_REQUIREMENTS.md](/Users/george/code/baa-conductor/plans/archive/FIREFOX_BRIDGE_CONTROL_REQUIREMENTS.md)
 12- [DISCUSS-FIREFOX-BRIDGE-CONTROL.md](/Users/george/code/baa-conductor/plans/discuss/DISCUSS-FIREFOX-BRIDGE-CONTROL.md)
 13
 14## 背景
 15
 16当前 Firefox 插件已经能发现登录态、账户和 API 端点,但 `conductor` 侧更偏内存态浏览器桥接摘要。
 17
 18新的目标不是保存原始凭证,而是把“哪些机器上的哪个浏览器已经具备可用登录态”持久化下来,供后续调度、状态判断和浏览器请求代发使用。
 19
 20## 核心结论
 21
 22- `conductor` 允许持久化 `account`
 23- `conductor` 只持久化“凭证指纹”和端点元数据
 24- `conductor` 不持久化原始 `cookie`、`token`、`header` 值
 25- 浏览器侧只保留一个空壳标签页,不承载真实对话 UI
 26- 业务请求走已拦截和已验证过的 API 端点,由浏览器侧代发
 27- 首版以 `client_id` 作为执行侧唯一标识;`host` / `browser` 先作为元数据保存,不在首版参与复杂调度
 28
 29## 需求目标
 30
 311.`conductor` 长期知道:
 32   - 哪台机器
 33   - 哪个浏览器
 34   - 哪个平台
 35   - 哪个 `account`
 36   - 当前是否存在可用登录态
 372. 让这些信息在 `conductor` 重启后仍然存在。
 383. 让浏览器桥接从“页面对话驱动”收口到“登录态和 API 代理驱动”。
 39
 40## 必须持久化的内容
 41
 42- 平台:如 `claude` / `chatgpt` / `gemini`
 43- 机器标识:如 host、node、device identity
 44- 浏览器标识:如 `firefox`
 45- 浏览器 client 标识
 46- `account`
 47- 凭证指纹:
 48  - 仅用于判断“是否变更”
 49  - 不可逆
 50- 观测时间:
 51  - `captured_at`
 52  - `last_seen_at`
 53- 新鲜度和状态:
 54  - `fresh`
 55  - `stale`
 56  - `lost`
 57- 已发现且可用的 API 端点列表
 58- 端点最近验证时间
 59
 60## 明确不持久化的内容
 61
 62- 原始 `cookie`
 63- 原始 `token`
 64- 原始请求头值
 65- 原始请求体
 66- 页面内对话历史
 67- 页面 UI 状态
 68- 标签页业务语义
 69
 70## 浏览器侧需求
 71
 72- 每个平台最多维持一个空壳标签页或等价页面壳,用于保持登录环境和请求来源环境
 73- 不再依赖页面对话功能作为正式能力
 74- 插件继续负责:
 75  - 发现登录态
 76  - 发现 `account`
 77  - 发现 API 端点
 78  - 用原始凭证在浏览器本地代发请求
 79- 插件向 `conductor` 上报的是元数据、指纹和端点,不是原始凭证值
 80
 81## 空壳页定义
 82
 83- 空壳页必须是目标平台的一方页面,不能是 `about:blank` 或扩展自定义页
 84- 目标是同时满足:
 85  - 继承平台登录态
 86  - 能注入页面内 fetch/SSE 执行环境
 87  - 不承载真实对话 UI 作为主能力
 88- 首版每个平台最多维护一个空壳页
 89- 空壳页是否存活、是否需要恢复,由 Firefox 插件持续检测并向 `conductor` 上报
 90- 默认健康检查应至少覆盖:
 91  - tab 生命周期事件
 92  - `30s` 周期巡检
 93- 空壳页的控制和恢复语义,统一以控制方案文档为准
 94
 95## 凭证指纹规范
 96
 97- 指纹在 Firefox 插件侧生成,`conductor` 不接触原始凭证值
 98- 指纹输入是插件本地可见的认证材料规范化结果:
 99  - 参与认证的 cookie
100  - 参与认证的 auth/header 值
101  - 其他平台特有会话字段
102- 规范化后按稳定顺序拼接,再做 `SHA-256`
103- 上报给 `conductor` 的是十六进制摘要,不是原始值
104- 指纹变化表示登录态已更新:
105  - 更新 `captured_at`
106  - 更新 `last_seen_at`
107  - 状态保持 `fresh`
108
109## 首版执行标识
110
111- 首版浏览器代发和调度以 `client_id` 作为唯一执行者标识
112- `host`、`browser`、`account` 继续持久化,但短期只用于:
113  - 查询
114  - 展示
115  - 审计
116- 多浏览器、多 client 的复杂调度留作后续扩展,不作为首版必做范围
117
118## `conductor` 侧需求
119
120- 提供持久化的浏览器登录态记录
121- 允许按平台、机器、浏览器、`account` 查询当前可用桥接能力
122- 能判断某条登录态记录是否过期、失联或被替换
123- 能关联“哪个浏览器 client 可以为哪个平台/账户代发请求”
124
125## 运行边界
126
127- 真正的上游请求仍由浏览器侧发起
128- `conductor` 不应因为数据库泄露而直接泄露会话凭证
129- 如果浏览器 client 断开,`conductor` 仍保留最近一次持久化记录,但要把状态标成非新鲜或离线
130
131## 不在本轮范围内
132
133- 完整的页面自动化
134- 页面聊天 UI 编排
135- 多标签并行对话管理
136- 多 client 全局最优调度
137- 把原始凭证迁移到 `conductor` 端直接发请求
138
139## 当前优先级判断
140
141- 这是新的主方向,优先级高于:
142  - `4318` wrapper 删旧
143  - `status-api` 共享模块提取
144
145## 后续建议
146
1471. 先补一张专门任务卡,定义登录态记录模型和持久化位置。
1482. 再拆插件上报协议:
149   - 指纹
150   - `account`
151   - 端点
152   - freshness
1533. 最后再收口 `conductor` 查询面和浏览器代发面。