baa-conductor

git clone 

commit
d6242b6
parent
1d0871e
author
im_wower
date
2026-03-28 02:56:17 +0800 CST
chore: archive completed phase1 browser target task
7 files changed,  +45, -119
M bugs/README.md
+1, -1
 1@@ -13,7 +13,6 @@ bugs/
 2 
 3 ## 待修复
 4 
 5-- `MISSING-003`:[`MISSING-003-browser-target-blocked-in-phase1.md`](./MISSING-003-browser-target-blocked-in-phase1.md)
 6 - `OPT-002`:[`OPT-002-executor-timeout.md`](./OPT-002-executor-timeout.md)
 7 - `OPT-003`:[`OPT-003-policy-configurable.md`](./OPT-003-policy-configurable.md)
 8 - `OPT-004`:[`OPT-004-final-message-claude-sse-fallback.md`](./OPT-004-final-message-claude-sse-fallback.md)
 9@@ -41,6 +40,7 @@ bugs/
10 | BUG-022 | FIXED | Claude final-message relay 已补齐 |
11 | MISSING-001 | FIXED | 执行结果已经接到 AI 对话 delivery 主链 |
12 | MISSING-002 | FIXED | 插件侧 delivery plan 执行器已落地 |
13+| MISSING-003 | FIXED | Phase 1 已补齐 browser.claude target |
14 | OPT-001 | — | action_result 命名风格等代码质量建议 |
15 
16 详细的代码核对结论和剩余风险说明见 `archive/` 下的 `BUG-*`、`FIX-BUG-*`、`MISSING-*` 和 `OPT-*` 文档。
R bugs/MISSING-003-browser-target-blocked-in-phase1.md => bugs/archive/MISSING-003-browser-target-blocked-in-phase1.md
+11, -0
 1@@ -1,5 +1,16 @@
 2 # MISSING-003: browser.* target 在 Phase 1 被完全拒绝
 3 
 4+## 状态
 5+
 6+- 已修复(2026-03-28,代码已合入主线)
 7+
 8+## 当前代码结论
 9+
10+- `browser.claude` 已加入 Phase 1 target 支持
11+- `send` / `current` 已加入 `browser.claude` 的工具白名单
12+- instruction route 已复用现有 `/v1/browser/claude/send` 与 `/v1/browser/claude/current` 合同
13+- 当前 `send` 的 JSON 形态刻意只支持最小 `{prompt}`,没有直接扩成更宽的 browser request 协议
14+
15 > 提交者:Claude(代码审查)
16 > 日期:2026-03-27
17 
M bugs/archive/README.md
+2, -1
 1@@ -3,7 +3,7 @@
 2 本目录保留 `已关闭` 或 `已修复` 的 `BUG-*`、`FIX-BUG-*`、`MISSING-*` 和 `OPT-*` 文档。
 3 
 4 - 归档时间:`2026-03-28`
 5-- 最近新增归档:`BUG-018`、`BUG-019`、`BUG-020`、`BUG-021`、`BUG-022`
 6+- 最近新增归档:`BUG-018`、`BUG-019`、`BUG-020`、`BUG-021`、`BUG-022`、`MISSING-003`
 7 
 8 最近归档的问题:
 9 
10@@ -12,3 +12,4 @@
11 - `BUG-020`:in-memory deduper 已增加上限与淘汰
12 - `BUG-021`:buffered SSE `full_text` 现在只保留文本
13 - `BUG-022`:Claude final-message relay 已补齐 SSE 与 buffered 路径
14+- `MISSING-003`:Phase 1 已补齐 `browser.claude` target
D tasks/T-MISSING-003.md
+0, -114
  1@@ -1,114 +0,0 @@
  2-# Task T-MISSING-003:补齐 Phase 1 的 browser.claude target
  3-
  4-## 直接给对话的提示词
  5-
  6-读 `/Users/george/code/baa-conductor/tasks/T-MISSING-003.md` 任务文档,完成开发任务。
  7-
  8-如需补背景,再读:
  9-
 10-- `/Users/george/code/baa-conductor/bugs/MISSING-003-browser-target-blocked-in-phase1.md`
 11-- `/Users/george/code/baa-conductor/plans/BAA_INSTRUCTION_SYSTEM.md`
 12-- `/Users/george/code/baa-conductor/tasks/TASK_OVERVIEW.md`
 13-
 14-## 当前基线
 15-
 16-- 仓库:`/Users/george/code/baa-conductor`
 17-- 分支基线:`main`
 18-- 提交:`87c6087`
 19-- 开工要求:必须先从当前 `main` 新建任务分支,再开始开发;禁止直接在 `main` 上修改。功能任务分支名必须以 `feat/` 开头,缺陷任务分支名必须以 `bug/` 开头。
 20-
 21-## 必须创建的新分支名
 22-
 23-- `feat/phase1-browser-claude-target`
 24-
 25-## 目标
 26-
 27-让 Phase 1 指令系统正式接受 `@browser.claude`,并把 `send` / `current` 路由到现有本地浏览器接口。
 28-
 29-## 背景
 30-
 31-当前 `browser.final_message`、Claude final-message relay 和本地 `/v1/browser/claude/*` HTTP 面都已经存在,但 BAA instruction Phase 1 仍然在 policy 层直接拒绝 `browser.*` target。这导致浏览器目标虽然底层能力已经有了,上层指令系统却无法正式调用,主链路仍然缺一段。
 32-
 33-## 涉及仓库
 34-
 35-- `/Users/george/code/baa-conductor`
 36-
 37-## 范围
 38-
 39-- 放开 `browser.claude` 的 Phase 1 target 支持
 40-- 为 `send` / `current` 增加 instruction route
 41-- 补最小自动化回归测试
 42-
 43-## 路径约束
 44-
 45-优先只在 instruction policy / router / 现有测试入口里完成,不要顺手扩到 `browser.chatgpt`、`browser.gemini`、插件协议或新的 browser target 设计。
 46-
 47-## 推荐实现边界
 48-
 49-建议优先做:
 50-
 51-- `policy.ts` 放开 `browser.claude`
 52-- `policy.ts` 的工具白名单补 `send`、`current`
 53-- `router.ts` 明确把 `@browser.claude::send` 映射到 `POST /v1/browser/claude/send`
 54-- `router.ts` 明确把 `@browser.claude::current` 映射到 `GET /v1/browser/claude/current`
 55-- `send` 至少支持字符串 prompt;如支持 JSON object,也只做最小映射
 56-- 在 `apps/conductor-daemon/src/index.test.js` 补回归
 57-
 58-## 允许修改的目录
 59-
 60-- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/policy.ts`
 61-- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/router.ts`
 62-- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
 63-
 64-## 尽量不要修改
 65-
 66-- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/local-api.ts`
 67-- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/firefox-ws.ts`
 68-- `/Users/george/code/baa-conductor/plugins/baa-firefox/`
 69-- `/Users/george/code/baa-conductor/tests/browser/`
 70-
 71-## 必须完成
 72-
 73-### 1. 放开 Phase 1 target / tool
 74-
 75-- `browser.claude` 不再被 policy 直接拒绝
 76-- `send` / `current` 不再被 tool 白名单直接拒绝
 77-
 78-### 2. 接到现有本地浏览器接口
 79-
 80-- `@browser.claude::send::<prompt>` 能路由到现有 `POST /v1/browser/claude/send`
 81-- `@browser.claude::current` 能路由到现有 `GET /v1/browser/claude/current`
 82-- route 的参数校验要明确,不接受含糊的隐式格式
 83-
 84-### 3. 补自动化回归
 85-
 86-- 覆盖 `browser.claude::send` 的正向路由
 87-- 覆盖 `browser.claude::current` 的正向路由
 88-- 覆盖至少一个通过 `BaaInstructionCenter` 真正执行到 browser route 的场景
 89-
 90-## 需要特别注意
 91-
 92-- 不要顺手放开 `browser.chatgpt` 或其他 `browser.*` target
 93-- 不要把这张卡扩成完整多平台 browser target 设计
 94-- 保持现有 `conductor/system` 的 Phase 1 行为不回归
 95-- 如果 `send` 支持 JSON object,保持映射规则简单、可测试、可解释
 96-
 97-## 验收标准
 98-
 99-- `@browser.claude::send` 不再因为 `unsupported_target` / `unsupported_tool` 被拒绝
100-- `@browser.claude::current` 不再因为 `unsupported_target` / `unsupported_tool` 被拒绝
101-- 现有 `/v1/browser/claude/send` 与 `/v1/browser/claude/current` 合同被 instruction route 复用
102-
103-## 推荐验证命令
104-
105-- `node --test /Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
106-- `git diff --check`
107-
108-## 交付要求
109-
110-完成后请说明:
111-
112-- 修改了哪些文件
113-- 核心实现思路是什么
114-- 跑了哪些测试
115-- 还有哪些剩余风险
M tasks/TASK_OVERVIEW.md
+2, -2
 1@@ -17,7 +17,7 @@
 2 
 3 - `已完成`:见 [`./archive/README.md`](./archive/README.md)
 4 - `当前 TODO`:
 5-  - [`T-MISSING-003.md`](./T-MISSING-003.md):补齐 Phase 1 的 `browser.claude` target
 6+  - 下一张主线任务卡待新建
 7 - `待处理缺陷`:见 [`../bugs/README.md`](../bugs/README.md)
 8 - `低优先级 TODO`:`4318/status-api` 兼容层删旧与解耦
 9 
10@@ -52,7 +52,7 @@
11   - 默认超长策略改成前 `200` 行 + `超长截断`
12 - `2026-03-28`:`T-BUG-015`、`T-BUG-016`、`T-BUG-017` 已完成并归档到 [`./archive/README.md`](./archive/README.md)
13 - `2026-03-28`:`T-BUG-018` 已完成并归档到 [`./archive/README.md`](./archive/README.md)
14-- `2026-03-28`:当前活跃任务卡为 [`T-MISSING-003.md`](./T-MISSING-003.md),用于补齐 Phase 1 的 `browser.claude` target
15+- `2026-03-28`:`T-MISSING-003` 已完成并归档到 [`./archive/README.md`](./archive/README.md)
16 
17 ## 当前主线收口情况
18 
M tasks/archive/README.md
+1, -1
1@@ -10,7 +10,7 @@
2 - 基础收口:[`T-S001.md`](./T-S001.md)、[`T-S002.md`](./T-S002.md)、[`T-S003.md`](./T-S003.md)、[`T-S004.md`](./T-S004.md)、[`T-S005.md`](./T-S005.md)、[`T-S006.md`](./T-S006.md)、[`T-S007.md`](./T-S007.md)、[`T-S008.md`](./T-S008.md)、[`T-S009.md`](./T-S009.md)、[`T-S010.md`](./T-S010.md)、[`T-S011.md`](./T-S011.md)、[`T-S012.md`](./T-S012.md)、[`T-S013.md`](./T-S013.md)、[`T-S014.md`](./T-S014.md)、[`T-S015.md`](./T-S015.md)、[`T-S016.md`](./T-S016.md)
3 - 浏览器桥接主线:[`T-S017.md`](./T-S017.md)、[`T-S018.md`](./T-S018.md)、[`T-S019.md`](./T-S019.md)、[`T-S020.md`](./T-S020.md)、[`T-S021.md`](./T-S021.md)、[`T-S022.md`](./T-S022.md)、[`T-S023.md`](./T-S023.md)、[`T-S024.md`](./T-S024.md)、[`T-S025.md`](./T-S025.md)、[`T-S026.md`](./T-S026.md)、[`T-S027.md`](./T-S027.md)、[`T-S028.md`](./T-S028.md)
4 - BAA 主线:[`T-S029.md`](./T-S029.md)、[`T-S030.md`](./T-S030.md)、[`T-S031.md`](./T-S031.md)、[`T-S032.md`](./T-S032.md)、[`T-S033.md`](./T-S033.md)、[`T-S034.md`](./T-S034.md)、[`T-S035.md`](./T-S035.md)、[`T-S036.md`](./T-S036.md)
5-- 缺陷修复:[`T-BUG-011.md`](./T-BUG-011.md)、[`T-BUG-012.md`](./T-BUG-012.md)、[`T-BUG-014.md`](./T-BUG-014.md)、[`T-BUG-015.md`](./T-BUG-015.md)、[`T-BUG-016.md`](./T-BUG-016.md)、[`T-BUG-017.md`](./T-BUG-017.md)、[`T-BUG-018.md`](./T-BUG-018.md)
6+- 缺陷修复:[`T-BUG-011.md`](./T-BUG-011.md)、[`T-BUG-012.md`](./T-BUG-012.md)、[`T-BUG-014.md`](./T-BUG-014.md)、[`T-BUG-015.md`](./T-BUG-015.md)、[`T-BUG-016.md`](./T-BUG-016.md)、[`T-BUG-017.md`](./T-BUG-017.md)、[`T-BUG-018.md`](./T-BUG-018.md)、[`T-MISSING-003.md`](./T-MISSING-003.md)
7 
8 ## 当前仍在根目录的任务卡
9 
A tasks/archive/T-MISSING-003.md
+28, -0
 1@@ -0,0 +1,28 @@
 2+# Task T-MISSING-003:补齐 Phase 1 的 browser.claude target
 3+
 4+## 当前状态
 5+
 6+- 已完成(2026-03-28,代码已合入主线)
 7+
 8+## 完成结果
 9+
10+- Phase 1 指令系统已正式接受 `@browser.claude`
11+- `@browser.claude::send` 已接到现有 `POST /v1/browser/claude/send`
12+- `@browser.claude::current` 已接到现有 `GET /v1/browser/claude/current`
13+- `BaaInstructionCenter` 现在可以通过 Phase 1 route layer 真正执行 Claude browser route
14+
15+## 实际修改文件
16+
17+- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/policy.ts`
18+- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/router.ts`
19+- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
20+
21+## 实际验证
22+
23+- `node --test --test-name-pattern='routeBaaInstruction maps browser.claude send/current to the existing local browser routes|BaaInstructionCenter executes browser.claude send/current through the Phase 1 route layer|BaaInstructionCenter returns denied_only when every pending instruction is denied|BaaInstructionCenter keeps supported instructions running when one instruction is denied' /Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
24+- `git diff --check`
25+
26+## 剩余风险
27+
28+- 当前 `@browser.claude::send` 的 JSON 形态故意只支持最小 `{prompt}`
29+- 如果后续要支持 `responseMode`、`requestId` 等更宽字段,需要单独定义 Phase 1/Phase 2 契约