codex@macbookpro
·
2026-03-31
T-S048.md
1# Task T-S048:Gemini 投递适配器
2
3## 状态
4
5- 当前状态:`已完成`
6- 规模预估:`M`
7- 依赖任务:无
8- 建议执行者:`Claude`(需要在 Gemini 页面观察 DOM 结构确认选择器)
9
10## 直接给对话的提示词
11
12读 `/Users/george/code/baa-conductor/tasks/T-S048.md` 任务文档,完成开发任务。
13
14## 当前基线
15
16- 仓库:`/Users/george/code/baa-conductor`
17- 分支基线:`main`
18- 提交:`4663817`
19
20## 分支与 worktree(强制)
21
22- 分支名:`feat/gemini-delivery-adapter`
23- worktree 路径:`/Users/george/code/baa-conductor-gemini-delivery-adapter`
24
25开工步骤:
26
271. `cd /Users/george/code/baa-conductor`
282. `git worktree add ../baa-conductor-gemini-delivery-adapter -b feat/gemini-delivery-adapter main`
293. `cd ../baa-conductor-gemini-delivery-adapter`
30
31完成后提交与推送(由执行者完成,不要合并):
32
331. 在 worktree 里提交所有变更(包括更新后的任务文档)
342. `git push -u origin feat/gemini-delivery-adapter`
35
36## 目标
37
38在 `delivery-adapters.js` 中补充 Gemini 平台的 DOM 投递适配器,使执行结果可以回送到 Gemini 对话。
39
40## 必须完成
41
42### 1. 添加 Gemini 适配器
43
44在 `plugins/baa-firefox/delivery-adapters.js` 的 `PLATFORM_ADAPTERS` 中新增 `gemini` 配置:
45
46- `readinessSelectors`:Gemini 页面就绪标识
47- `composerSelectors`:输入框选择器
48- `sendButtonSelectors`:发送按钮选择器
49- `sendingSelectors`:发送中状态选择器
50
51### 2. 确认选择器
52
53需要在 Firefox 中打开 `https://gemini.google.com/`,用 DevTools 观察:
54
55- 输入框的 DOM 结构(contentEditable div? textarea? rich-text-field?)
56- 发送按钮的定位方式
57- 发送中的状态变化
58
59### 3. 验证
60
61- 在 Gemini 对话中触发 baa 指令
62- 执行结果通过 DOM 注入回送到 Gemini 对话
63
64## 允许修改的目录
65
66- `/Users/george/code/baa-conductor/plugins/baa-firefox/delivery-adapters.js`
67
68## 尽量不要修改
69
70- `/Users/george/code/baa-conductor/apps/`
71- `/Users/george/code/baa-conductor/packages/`
72- `/Users/george/code/baa-conductor/plugins/baa-firefox/controller.js`(除非 Gemini 需要特殊处理)
73
74## 验收标准
75
76- Gemini 对话中发 baa 指令 → 执行结果通过 DOM 注入出现在对话中
77- Claude 和 ChatGPT 的投递不受影响
78
79## 执行记录
80
81> 以下内容由执行任务的 AI 填写,创建任务时留空。
82
83### 开始执行
84
85- 执行者:Claude
86- 开始时间:2026-03-29
87- 状态变更:`待开始` → `进行中`
88
89### 完成摘要
90
91- 完成时间:2026-03-29
92- 状态变更:`进行中` → `已完成`
93- 修改了哪些文件:`plugins/baa-firefox/delivery-adapters.js`
94- 核心实现思路:在 `PLATFORM_ADAPTERS` 中新增 `gemini` 条目,遵循与 claude/chatgpt 相同的适配器结构。Gemini 使用 Lit/Web Components 架构,输入框为 `rich-text-field` 内嵌 Quill 编辑器(`.ql-editor[contenteditable]`)。选择器按优先级从精确到宽泛排列,涵盖 `rich-text-field .ql-editor`、aria-label、role=textbox、textarea 等多种 fallback。发送按钮通过 `aria-label*='Send message'` 定位,发送中状态通过 Stop/Cancel 按钮和 mat-icon 检测。
95- 跑了哪些测试:无专门的 delivery-adapter 单元测试文件;确认 manifest.json 和 page-interceptor.js、controller.js 均已有 gemini 平台注册,无需额外修改。
96
97### 执行过程中遇到的问题
98
99无
100
101### 剩余风险
102
103- 选择器基于 Gemini 截至 2025 年初的已知 DOM 结构,Google 可能随时更新页面结构导致选择器失效,需在 Firefox 中实际验证并按需调整。
104- `mat-icon[data-mat-icon-name='stop_circle']` 选择器依赖 Angular Material 实现细节,若 Gemini 前端框架迁移可能失效。
105
106### 2026-03-31 补充维护
107
108- 执行者:Codex
109- 维护内容:基于最新 `main@e89ee69` 重新创建任务 worktree;为 Gemini adapter 补充 `rich-textarea` / `mattooltip` 选择器 fallback,并新增 `plugins/baa-firefox/delivery-adapters.test.cjs` 覆盖 Gemini 的 inject/send/host mismatch 回归。
110- 文档同步:更新 `plugins/baa-firefox/README.md`、`docs/firefox/README.md`、`tasks/TASK_OVERVIEW.md`、`plans/STATUS_SUMMARY.md`,纠正“Gemini adapter 未完成”与“browser target 仍只有 claude”的旧口径。
111- 额外验证:已运行 `node --test plugins/baa-firefox/delivery-adapters.test.cjs`;当前环境未做真实 Firefox + Gemini 页面手工复核。