- 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
+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
+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
+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-- 还有哪些剩余风险
+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
+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
+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 契约