baa-conductor


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

T-S034.md

  1# Task T-S034:打通 BAA delivery bridge、upload receipt barrier 与 inject/send
  2
  3## 直接给对话的提示词
  4
  5`/Users/george/code/baa-conductor/tasks/archive/T-S034.md` 任务文档,完成开发任务。
  6
  7如需补背景,再读:
  8
  9- `/Users/george/code/baa-conductor/plans/archive/BAA_DELIVERY_BRIDGE_REQUIREMENTS.md`
 10- `/Users/george/code/baa-conductor/plans/archive/BAA_ARTIFACT_CENTER_REQUIREMENTS.md`
 11- `/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/06-integration-with-current-baa-conductor.md`
 12- `/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/docs/09-artifact-delivery-thin-plugin.md`
 13
 14## 当前基线
 15
 16- 仓库:`/Users/george/code/baa-conductor`
 17- 分支:`main`
 18- 提交:`5cdeb5d`
 19- 开工要求:如需新分支,从当前 `main` 新切
 20
 21## 建议分支名
 22
 23- `feat/baa-delivery-bridge`
 24
 25## 目标
 26
 27把 service-side artifact core 真正接到 Firefox 插件 delivery bridge,补齐 upload_artifacts / upload_receipt barrier / inject_message / send_message 主链。
 28
 29## 背景
 30
 31`T-S032` 已经补上 artifact center core,但 live 路径还没有真正进入 artifact / upload / inject / send 闭环。
 32
 33这导致当前 artifact core 只能生成 plan,不能形成真实交付。
 34
 35## 涉及仓库
 36
 37- `/Users/george/code/baa-conductor`
 38
 39## 范围
 40
 41- conductor upload session / receipt barrier
 42- Firefox 插件 upload / inject / send 执行
 43- WS 消息合同与状态回写
 44- 自动化 smoke 与文档回写
 45
 46## 路径约束
 47
 48- 首版不要求做 artifact download
 49- 首版可先面向单客户端、单轮 delivery
 50- 不要把这张卡扩成 ChatGPT / Gemini 正式 `browser.*` target 路由
 51
 52## 推荐实现边界
 53
 54建议新增:
 55
 56- `apps/conductor-daemon/src/artifacts/upload-session.ts`
 57- `plugins/baa-firefox/` 下最小 delivery bridge 处理
 58
 59建议放到:
 60
 61- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/artifacts/`
 62- `/Users/george/code/baa-conductor/plugins/baa-firefox/`
 63
 64## 允许修改的目录
 65
 66- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/`
 67- `/Users/george/code/baa-conductor/plugins/baa-firefox/`
 68- `/Users/george/code/baa-conductor/tests/browser/`
 69- `/Users/george/code/baa-conductor/docs/firefox/`
 70- `/Users/george/code/baa-conductor/docs/api/`
 71- `/Users/george/code/baa-conductor/docs/baa-instruction-system-v5/`
 72- `/Users/george/code/baa-conductor/tasks/`
 73- `/Users/george/code/baa-conductor/plans/`
 74
 75## 尽量不要修改
 76
 77- `/Users/george/code/baa-conductor/packages/db/`
 78- `/Users/george/code/baa-conductor/apps/status-api/`
 79
 80## 必须完成
 81
 82### 1. 打通 upload / receipt barrier
 83
 84- conductor 能发出 `browser.upload_artifacts`
 85- 插件能回 `browser.upload_receipt`
 86- receipt 未完成前不能提前 inject / send
 87
 88### 2. 打通 inject / send
 89
 90- receipt 成功后插件能注入准备好的 index text
 91- 在允许时能执行 send
 92
 93### 3. 补失败与降级
 94
 95- 上传失败有明确重试或降级
 96- 不能出现“没有 receipt 但已被视为成功发送”
 97
 98## 需要特别注意
 99
100- 插件保持薄层,不做 artifact 打包或 parser
101- 不要把这张卡扩成 artifact download
102-`T-S033` 并行时,不要去改 dedupe/journal 持久化主逻辑
103
104## 验收标准
105
106- upload_artifacts / upload_receipt / inject_message / send_message 主链打通
107- receipt barrier 生效
108- 失败路径有明确结果,不会静默成功
109- `git diff --check` 通过
110
111## 评测要求
112
113### 1. 正向评测
114
115- artifact upload 成功后,index text 才被 inject
116- auto-send 允许时,send 在 inject 之后发生
117
118### 2. 反向评测
119
120- 没有 receipt 时不能提前 inject / send
121- 上传失败时不能被误标成已完成发送
122
123### 3. 边界评测
124
125- 多 artifact 上传时,全部确认后才放行
126- 单个 artifact 失败时,重试或降级行为稳定
127
128## 推荐验证命令
129
130- `pnpm -C /Users/george/code/baa-conductor -F @baa-conductor/conductor-daemon build`
131- `node --test /Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
132- `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
133- `git -C /Users/george/code/baa-conductor diff --check`
134
135## 交付要求
136
137完成后请说明:
138
139- 修改了哪些文件
140- upload session / receipt barrier 是怎么设计的
141- 插件 upload / inject / send 覆盖了哪些平台
142- 跑了哪些测试
143- 还有哪些剩余风险
144
145## 完成记录(2026-03-27)
146
147- 已新增 `apps/conductor-daemon/src/artifacts/upload-session.ts`,把 execution result -> artifact -> manifest -> delivery plan -> upload receipt barrier -> inject/send 串成一条 live session。
148- 已把 Firefox WS bridge 扩到:
149  - `browser.upload_artifacts`
150  - `browser.upload_receipt`
151  - `browser.inject_message`
152  - `browser.send_message`
153- 已新增本地 artifact payload 读取入口:
154  - `GET /v1/browser/delivery/artifacts/:plan_id/:artifact_id`
155- Firefox 插件已补最小 delivery 执行:
156  - 管理页负责按 `download_url` 拉取 artifact payload
157  - content script 负责单 artifact 上传、文本注入、点击发送
158  - 当前首版覆盖 `Claude` / `ChatGPT`
159- 已补 fail-closed 行为:
160  - receipt 未齐前不会 inject / send
161  - receipt 失败会直接把 session 标成 failed,不会误标 sent
162  - 单 artifact 失败会按插件侧重试后回失败 receipt
163- 已补自动化验证:
164  - `pnpm -C /Users/george/code/baa-conductor -F @baa-conductor/conductor-daemon build`
165  - `node --test /Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
166  - `node --test /Users/george/code/baa-conductor/tests/browser/browser-control-e2e-smoke.test.mjs`
167- 当前残余风险:
168  - 插件侧 upload / inject / send 仍是 DOM heuristic,当前只对 `Claude` / `ChatGPT` 做了首版选择器与流程
169  - artifact payload 当前通过本地 `download_url` 以 base64 JSON 形式提供,适合当前 text/json 类产物;大二进制和 download 闭环还没做
170  - 当前交付仍按任务边界停留在单客户端、单轮 delivery 首版
171  - 当前交付仍建立在单节点本地 artifact store 和本地 `download_url` 之上,不做跨节点分发
172  - execution journal 只保留最近窗口,不扩成无限历史审计
173  - live 执行路径当前仍只覆盖 Phase 1 精确 target `conductor` / `system`,不扩到跨节点或完整 task/run 编排