baa-conductor

git clone 

baa-conductor / tasks
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
 99100
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 页面手工复核。