- commit
- a2c76c2
- parent
- 83f43b7
- author
- im_wower
- date
- 2026-03-29 03:17:42 +0800 CST
docs: add requirements #10 (history sync) and #11 (completion push interception) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 files changed,
+91,
-14
+91,
-14
1@@ -175,26 +175,103 @@ conductor 的 `/code/{repo}/...` 路由直接 serve 磁盘上的代码文件,A
2 - 签名 URL 比纯 token 更安全(可过期、可绑定路径)
3 - 当前暂不实现,保持公开访问
4
5+## 10. 历史消息回补(P2)
6+
7+### 问题
8+
9+当前 conductor 只存储插件实时观察到的消息。如果插件重载、conductor 重启、或页面在插件未注入时收到回复,这些消息永久丢失,无法回补。
10+
11+旧版 baa-server 通过 sync-worker 定时拉取平台对话历史解决此问题。
12+
13+### 需求
14+
15+在 conductor 内部实现定时消息回补:
16+
17+- 通过浏览器代理(`/v1/browser/request`)调平台 API 拉取对话历史
18+- 与 artifact-db 中已有消息对比,补入缺失的消息
19+- 写入 messages 表 + 生成静态文件
20+
21+### 设计要点
22+
23+- **在 conductor 内部实现**,不做独立进程(已有浏览器代理、凭证、artifact-db 依赖)
24+- 参考旧版 `baa-old-files/baa/baa-server/lib/sync-worker.js`:
25+ - 两类定时任务:历史同步(60 分钟)+ 增量同步(6-10 分钟随机)
26+ - 活跃检测:proxy busy 时跳过,Extension 离线时跳过
27+ - 对话间延迟 1-3 秒,避免限流
28+ - 重试 2 次,间隔 5 秒
29+ - INSERT OR IGNORE 幂等写入
30+- 需要各平台的对话历史 API 端点:
31+ - Claude:`GET /api/organizations/{orgId}/chat_conversations/{convId}`
32+ - ChatGPT:`GET /backend-api/conversation/{convId}`
33+ - Gemini:待确认
34+
35+### 前置条件
36+
37+- 插件诊断日志(T-S053)完成后,能观察到各平台的 API 端点格式
38+- 各平台的浏览器代理请求路径已可用
39+
40+## 11. 拦截 AI 平台消息完成推送(P2)
41+
42+### 问题
43+
44+当前 final-message 捕获依赖解析 SSE 流,存在多个不稳定因素:
45+
46+- ChatGPT 思考模式下 SSE 流结构变化导致提取遗漏
47+- SSE 流解析需要处理分块、超时、中断等边界情况
48+- 不同平台的 SSE 格式各异,维护成本高
49+
50+如果能拦截 AI 平台在消息完成后发出的推送事件或回调请求,会比解析 SSE 流更可靠。
51+
52+### 需求
53+
54+调研并实现更可靠的消息完成检测机制:
55+
56+- **ChatGPT**:观察消息完成后是否有 REST 回调(如 `GET /backend-api/conversation/{id}` 获取完整对话状态)或 WebSocket 推送
57+- **Claude**:SSE 流的 `message_stop` 事件已经比较可靠,但观察是否有额外的完成信号
58+- **Gemini**:观察消息完成后的网络活动
59+
60+### 实现方向
61+
62+1. 先通过 T-S053 的诊断日志观察各平台在消息完成后的网络请求模式
63+2. 如果存在可靠的"消息完成"回调请求,在 page-interceptor 中拦截该请求,提取完整的 assistant 回复文本
64+3. 作为 final-message 的补充或替代信号源
65+4. 如果平台使用 WebSocket 推送,需要在 page-interceptor 中增加 WebSocket 拦截能力(当前只拦截 fetch/XHR)
66+
67+### 前置条件
68+
69+- T-S053(插件诊断日志)完成后才能有效观察
70+- 需要在各平台实际触发对话,观察 DevTools Network 面板确认推送机制
71+
72+### 优先级
73+
74+中。依赖 T-S053 的日志能力,且需要实际观察才能确定技术方案。先观察再设计。
75+
76 ## 优先级总览
77
78-| 优先级 | 需求 | 工作量 |
79-|---|---|---|
80-| P0 | #1 ChatGPT final-message 提取 bug | M |
81-| P1 | #2 请求/响应日志落盘 | S |
82-| P1 | #3 files/read kind bug | S(一行) |
83-| P2 | #4 跨会话接续入口 | S |
84-| P2 | #5 Gemini 投递适配器 | M |
85-| P2 | #6 开放 chatgpt/gemini target | S |
86-| P3 | #7 stagit | M |
87-| P3 | #8 代码文件直读 | S |
88-| P3 | #9 签名 URL | 暂不做 |
89+| 优先级 | 需求 | 工作量 | 状态 |
90+|---|---|---|---|
91+| P0 | #1 ChatGPT final-message 提取 bug | M | T-BUG-029(可能已不需要) |
92+| P1 | #2 请求/响应日志落盘 | S | ✅ T-S046 已完成 |
93+| P1 | #3 files/read kind bug | S | ✅ T-S046 已完成 |
94+| P2 | #4 跨会话接续入口 | S | T-S047 待开始 |
95+| P2 | #5 Gemini 投递适配器 | M | T-S048 待开始 |
96+| P2 | #6 开放 chatgpt/gemini target | S | T-S049 待开始 |
97+| P2 | #10 历史消息回补 | M | 未建任务 |
98+| P2 | #11 拦截消息完成推送 | M | 未建任务(依赖 T-S053) |
99+| P3 | #7 stagit | M | T-S050 待开始 |
100+| P3 | #8 代码文件直读 | S | T-S051 待开始 |
101+| P3 | #9 签名 URL | — | 暂不做 |
102
103 ## 建议执行顺序
104
105 ```
106-#2 日志落盘 → #1 ChatGPT bug(需要日志辅助排查) → #3 files/read bug
107+T-S053 (插件诊断日志)
108 ↓
109-#4 跨会话接续 → #5 Gemini 适配器 → #6 开放 target
110+T-BUG-029 (ChatGPT bug,确认是否需要) → #11 (拦截推送,需要日志观察)
111 ↓
112-#7 stagit → #8 代码直读
113+T-S047 (接续入口) T-S048 (Gemini 适配器) #10 (历史回补) ← 可并行
114+ ↓ ↓
115+ T-S049 (开放 target)
116+ ↓
117+ T-S050 / T-S051 (后续)
118 ```