baa-conductor

git clone 

commit
12310df
parent
2ce8d18
author
codex@macbookpro
date
2026-03-26 11:41:31 +0800 CST
docs: prioritize browser bridge persistence
3 files changed,  +162, -1
A plans/BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md
+109, -0
  1@@ -0,0 +1,109 @@
  2+# 浏览器桥接持久化新需求
  3+
  4+## 状态
  5+
  6+- `TODO`
  7+- 优先级:`high`
  8+- 记录时间:`2026-03-26`
  9+
 10+## 背景
 11+
 12+当前 Firefox 插件已经能发现登录态、账户和 API 端点,但 `conductor` 侧更偏内存态浏览器桥接摘要。
 13+
 14+新的目标不是保存原始凭证,而是把“哪些机器上的哪个浏览器已经具备可用登录态”持久化下来,供后续调度、状态判断和浏览器请求代发使用。
 15+
 16+## 核心结论
 17+
 18+- `conductor` 允许持久化 `account`
 19+- `conductor` 只持久化“凭证指纹”和端点元数据
 20+- `conductor` 不持久化原始 `cookie`、`token`、`header` 值
 21+- 浏览器侧只保留一个空壳标签页,不承载真实对话 UI
 22+- 业务请求走已拦截和已验证过的 API 端点,由浏览器侧代发
 23+
 24+## 需求目标
 25+
 26+1. 让 `conductor` 长期知道:
 27+   - 哪台机器
 28+   - 哪个浏览器
 29+   - 哪个平台
 30+   - 哪个 `account`
 31+   - 当前是否存在可用登录态
 32+2. 让这些信息在 `conductor` 重启后仍然存在。
 33+3. 让浏览器桥接从“页面对话驱动”收口到“登录态和 API 代理驱动”。
 34+
 35+## 必须持久化的内容
 36+
 37+- 平台:如 `claude` / `chatgpt` / `gemini`
 38+- 机器标识:如 host、node、device identity
 39+- 浏览器标识:如 `firefox`
 40+- 浏览器 client 标识
 41+- `account`
 42+- 凭证指纹:
 43+  - 仅用于判断“是否变更”
 44+  - 不可逆
 45+- 观测时间:
 46+  - `captured_at`
 47+  - `last_seen_at`
 48+- 新鲜度和状态:
 49+  - `fresh`
 50+  - `stale`
 51+  - `lost`
 52+- 已发现且可用的 API 端点列表
 53+- 端点最近验证时间
 54+
 55+## 明确不持久化的内容
 56+
 57+- 原始 `cookie`
 58+- 原始 `token`
 59+- 原始请求头值
 60+- 原始请求体
 61+- 页面内对话历史
 62+- 页面 UI 状态
 63+- 标签页业务语义
 64+
 65+## 浏览器侧需求
 66+
 67+- 每个平台最多维持一个空壳标签页或等价页面壳,用于保持登录环境和请求来源环境
 68+- 不再依赖页面对话功能作为正式能力
 69+- 插件继续负责:
 70+  - 发现登录态
 71+  - 发现 `account`
 72+  - 发现 API 端点
 73+  - 用原始凭证在浏览器本地代发请求
 74+- 插件向 `conductor` 上报的是元数据、指纹和端点,不是原始凭证值
 75+
 76+## `conductor` 侧需求
 77+
 78+- 提供持久化的浏览器登录态记录
 79+- 允许按平台、机器、浏览器、`account` 查询当前可用桥接能力
 80+- 能判断某条登录态记录是否过期、失联或被替换
 81+- 能关联“哪个浏览器 client 可以为哪个平台/账户代发请求”
 82+
 83+## 运行边界
 84+
 85+- 真正的上游请求仍由浏览器侧发起
 86+- `conductor` 不应因为数据库泄露而直接泄露会话凭证
 87+- 如果浏览器 client 断开,`conductor` 仍保留最近一次持久化记录,但要把状态标成非新鲜或离线
 88+
 89+## 不在本轮范围内
 90+
 91+- 完整的页面自动化
 92+- 页面聊天 UI 编排
 93+- 多标签并行对话管理
 94+- 把原始凭证迁移到 `conductor` 端直接发请求
 95+
 96+## 当前优先级判断
 97+
 98+- 这是新的主方向,优先级高于:
 99+  - `4318` wrapper 删旧
100+  - `status-api` 共享模块提取
101+
102+## 后续建议
103+
104+1. 先补一张专门任务卡,定义登录态记录模型和持久化位置。
105+2. 再拆插件上报协议:
106+   - 指纹
107+   - `account`
108+   - 端点
109+   - freshness
110+3. 最后再收口 `conductor` 查询面和浏览器代发面。
M plans/STATUS_SUMMARY.md
+30, -0
 1@@ -11,6 +11,16 @@
 2 - 当前活动任务见 `tasks/TASK_OVERVIEW.md`
 3 - `T-S001` 到 `T-S016` 已经合入主线
 4 
 5+## 当前状态分类
 6+
 7+- `已完成`:`T-S001` 到 `T-S016`
 8+- `当前 TODO`:浏览器桥接登录态与 API 端点元数据持久化
 9+- `低优先级 TODO`:`4318/status-api` 兼容层删旧与解耦
10+
11+当前新的主需求文档:
12+
13+- [`./BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md`](./BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md)
14+
15 ## 当前状态
16 
17 - 部署目标:`mini` 单节点
18@@ -23,6 +33,7 @@
19 - `tests/control-api/` 当前只剩一份 legacy absence smoke 测试文件
20 - `status-api` 当前默认读 `BAA_CONDUCTOR_LOCAL_API` / `4317`,`BAA_CONTROL_API_BASE` 只保留为兼容覆盖入口
21 - `status-api` 当前结论是继续保留为显式 opt-in 的本地兼容包装层,不立即删除
22+- 浏览器桥接当前正在转向“登录态元数据持久化 + 浏览器本地代发请求”模型
23 
24 ## 当前在线面
25 
26@@ -43,6 +54,24 @@
27 - 单节点的 Nginx / DNS 计划脚本
28 - 迁移期兼容件:`apps/status-api`、`ops/cloudflare/**`、`tests/control-api/**`、`BAA_CONTROL_API_BASE`
29 
30+## 当前 TODO
31+
32+当前主 TODO:
33+
34+1. 按 [`./BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md`](./BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md) 定义并实现浏览器桥接持久化模型:
35+   - `conductor` 持久化 `account`
36+   - 只保存凭证指纹,不保存原始值
37+   - 持久化已发现 API 端点
38+   - 浏览器侧只保留空壳标签页,不把页面对话作为正式能力
39+
40+## 低优先级 TODO
41+
42+下面这些继续保留,但不再是当前最高优先级:
43+
44+- 清理仍依赖 `4318` / `status-api` wrapper 的旧脚本、书签和运维说明
45+- 把 `conductor-daemon` 对 `status-api` 构建产物的复用提成共享模块
46+- 只有在完成上面两项后,才重新评估是否删除 `apps/status-api`
47+
48 ## 最近完成
49 
50 - `T-S001`:`codexd` transport 现在会在关闭前冲刷尾部缓冲区,`BUG-010` 已修复,`BUG-008` 不再作为独立未解问题保留
51@@ -76,6 +105,7 @@
52 
53 - `status-api` 继续保留为显式 opt-in 兼容层
54 - 现在不删除 `apps/status-api`
55+- 这组工作已降为低优先级 backlog
56 - 只有在清完 `4318` 调用方,并把 `conductor-daemon` 对 `status-api` 构建产物的复用提成共享模块之后,才适合讨论删除
57 
58 ## 当前仍需关注
M tasks/TASK_OVERVIEW.md
+23, -1
 1@@ -11,6 +11,16 @@
 2 - 当前任务卡都放在本目录
 3 - 当前任务基线:`main@4796db4`
 4 
 5+## 状态分类
 6+
 7+- `已完成`:`T-S001` 到 `T-S016`
 8+- `当前 TODO`:浏览器桥接登录态与端点元数据持久化
 9+- `低优先级 TODO`:`4318/status-api` 兼容层删旧与解耦
10+
11+当前新的主需求文档:
12+
13+- [`../plans/BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md`](../plans/BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md)
14+
15 ## 最近完成任务
16 
17 当前已完成的主线任务:
18@@ -45,7 +55,19 @@
19 
20 当前没有进行中的任务卡。
21 
22-下一步建议优先处理两件事:
23+## 当前 TODO
24+
25+当前最高优先级 TODO 只有一件事:
26+
27+1. 按 [`../plans/BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md`](../plans/BROWSER_BRIDGE_PERSISTENCE_REQUIREMENTS.md) 收口新的浏览器桥接持久化需求:
28+   - `conductor` 持久化 `account`
29+   - 只持久化凭证指纹和端点元数据
30+   - 浏览器侧只保留空壳标签页
31+   - 正式请求通过已发现 API 端点由浏览器代发
32+
33+## 低优先级 TODO
34+
35+下面两件事先降级为低优先级 backlog,不作为当前主线:
36 
37 1. 盘点并清理仍依赖 `4318` wrapper 的旧脚本、书签和运维说明
38 2. 把 `conductor-daemon` 目前对 `status-api` 构建产物的复用提成共享模块,再评估是否删除 `apps/status-api`