baa-conductor

git clone 

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

T-S035.md

  1# Task T-S035:加固插件侧 text-only delivery adapter 与页面交付流程
  2
  3## 直接给对话的提示词
  4
  5`/Users/george/code/baa-conductor/tasks/archive/T-S035.md` 任务文档,查看已完成任务记录。
  6
  7如需补背景,再读:
  8
  9- `/Users/george/code/baa-conductor/plans/archive/BAA_PLUGIN_DELIVERY_HARDENING_REQUIREMENTS.md`
 10- `/Users/george/code/baa-conductor/plans/archive/BAA_DELIVERY_BRIDGE_REQUIREMENTS.md`
 11- `/Users/george/code/baa-conductor/docs/firefox/README.md`
 12
 13## 当前基线
 14
 15- 仓库:`/Users/george/code/baa-conductor`
 16- 分支基线:`main`
 17- 提交:`309eab2`
 18- 开工要求:必须先从当前 `main` 新建任务分支,再开始开发;禁止直接在 `main` 上修改。本任务是功能任务,分支名必须以 `feat/` 开头。
 19
 20## 必须创建的新分支名
 21
 22- `feat/baa-plugin-delivery-hardening`
 23
 24## 目标
 25
 26把当前首版 `Claude` / `ChatGPT` 的 text-only `inject / send` 收口成更稳定的插件侧 delivery adapter,降低页面结构变化带来的脆弱性。
 27
 28## 背景
 29
 30当前 live delivery 已经切到 text-only 主链,但插件侧当前仍保留明显边界:
 31
 32- inject / send 仍是 DOM heuristic
 33- 只有 `Claude` / `ChatGPT` 做了首版选择器和流程
 34- 页面 readiness、失败恢复和结构化错误还不够稳定
 35
 36这张卡的重点不是扩平台,而是把已接通的平台做得更稳、更可诊断。
 37
 38## 涉及仓库
 39
 40- `/Users/george/code/baa-conductor`
 41
 42## 范围
 43
 44- `Claude` / `ChatGPT` delivery adapter 收口
 45- text-only `inject / send` readiness 探测
 46- 结构化失败原因与 fail-closed 路径
 47- browser smoke 与文档回写
 48
 49## 路径约束
 50
 51- 只加固 `Claude` / `ChatGPT`
 52- 不要在这张卡里扩到 `Gemini`
 53- 不要在这张卡里恢复 upload / download / binary delivery
 54- 保持 thin-plugin,不把 parser 或复杂编排塞回插件
 55
 56## 推荐实现边界
 57
 58建议新增:
 59
 60- `plugins/baa-firefox/` 下平台 delivery adapter 封装
 61- 页面 readiness / selector / retry 辅助模块
 62
 63建议放到:
 64
 65- `/Users/george/code/baa-conductor/plugins/baa-firefox/`
 66- `/Users/george/code/baa-conductor/tests/browser/`
 67
 68## 允许修改的目录
 69
 70- `/Users/george/code/baa-conductor/plugins/baa-firefox/`
 71- `/Users/george/code/baa-conductor/tests/browser/`
 72- `/Users/george/code/baa-conductor/docs/firefox/`
 73- `/Users/george/code/baa-conductor/docs/api/`
 74- `/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/`
 75- `/Users/george/code/baa-conductor/tasks/`
 76- `/Users/george/code/baa-conductor/plans/`
 77
 78## 尽量不要修改
 79
 80- `/Users/george/code/baa-conductor/packages/db/`
 81- `/Users/george/code/baa-conductor/apps/status-api/`
 82- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/`
 83
 84## 必须完成
 85
 86### 1. 收口平台 adapter
 87
 88- `Claude` / `ChatGPT` 的 text-only `inject / send` 流程要有清晰 adapter 边界
 89- 平台选择器、页面探测和前置条件不能继续散落成隐式逻辑
 90
 91### 2. 补 readiness 与 fail-closed
 92
 93- 页面未 ready、关键 selector 缺失、send 失败时要返回明确错误
 94- 不能出现“实际没发出,但 session 被误标成功”
 95
 96### 3. 补 smoke 与文档
 97
 98- 至少覆盖一条成功路径和一条失败路径
 99- 文档要明确当前仍是 DOM adapter,不是通用页面自动化框架
100- 文档要明确当前 delivery 不再支持 upload / download
101
102## 需要特别注意
103
104- 不要把这张卡扩成 artifact / binary / download 任务
105- 不要顺手扩到 `Gemini`
106- 如果后续还有 `T-S036`,这张卡优先收口 adapter 边界和失败恢复,不把服务端 delivery 逻辑塞回插件
107
108## 验收标准
109
110- `Claude` / `ChatGPT` text-only `inject / send` 的 adapter 边界清晰
111- 页面未 ready 或关键 selector 失效时会明确 fail-closed
112- browser smoke 覆盖成功与失败路径
113- `git diff --check` 通过
114
115## 评测要求
116
117### 1. 正向评测
118
119- `Claude` 路径能稳定完成 `inject / send`
120- `ChatGPT` 路径能稳定完成 `inject / send`
121
122### 2. 反向评测
123
124- 页面未 ready 时不能误判成功
125- 缺少关键 selector 时不能静默跳过 send
126
127### 3. 边界评测
128
129- 页面局部重渲染或短暂延迟时不会立刻把可恢复场景误判为失败
130- 同一步骤重试后仍失败时,错误结果稳定且可诊断
131
132## 推荐验证命令
133
134- `pnpm -C /Users/george/code/baa-conductor -F @baa-conductor/conductor-daemon build`
135- `node --test /Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
136- `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
137- `git -C /Users/george/code/baa-conductor diff --check`
138
139## 交付要求
140
141完成后请说明:
142
143- 修改了哪些文件
144- `Claude` / `ChatGPT` adapter 是怎么收口的
145- 哪些页面失败场景现在会明确 fail-closed
146- 跑了哪些测试
147- 还有哪些剩余风险
148
149## 完成回写(2026-03-28)
150
151- 已完成:
152  - `plugins/baa-firefox/delivery-adapters.js` 已接入 `manifest.json` / `content-script.js`,把 `Claude` / `ChatGPT` 的 text-only `inject_message` / `send_message` 收口到统一 adapter
153  - adapter 现在会先做 page readiness,再做关键 selector 解析和结果确认;send 点击后若没有确认状态变化,会明确 fail-closed
154  - 插件侧已彻底删除 `upload_artifact` 路径,不再接受 upload/download 型 delivery 命令
155  - browser smoke 已补成功路径,以及 `page_not_ready`、`send_not_confirmed` 失败路径
156- 当前剩余风险:
157  - 仍依赖平台 DOM 结构,后续页面改版仍可能要求更新 adapter selector
158  - 当前只覆盖 `Claude` / `ChatGPT`
159  - 当前仍是单客户端、单轮 delivery