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 编排