baa-conductor

git clone 

commit
7526ab5
parent
b1443f4
author
im_wower
date
2026-03-30 00:42:18 +0800 CST
docs: add conductor ui module requirements
1 files changed,  +489, -0
A plans/CONDUCTOR_UI_MODULE_REQUIREMENTS.md
+489, -0
  1@@ -0,0 +1,489 @@
  2+# Conductor UI 模块需求与流程调整
  3+
  4+日期:`2026-03-30`
  5+
  6+## 状态
  7+
  8+- `讨论后形成的正式规划文档`
  9+- 当前代码基线:`main@b1443f4`
 10+
 11+## 背景
 12+
 13+当前 `baa-conductor` 已经有比较完整的本地真相源和 HTTP 接口面,但缺少正式的人类操作 UI。
 14+
 15+现状存在两个结构性问题:
 16+
 17+1. **业务操作没有正式入口**
 18+   - 人需要在 ChatGPT / Claude / Gemini 页面和 conductor 之间来回切换
 19+   - 很多闭环仍然依赖人工复制、粘贴、观察页面状态
 20+   - “频道”没有成为正式主体,人和 AI 不能在同一个业务线程里长期协作
 21+
 22+2. **管理操作过度依赖插件页**
 23+   - 当前只有 Firefox 插件里的 `controller.html` 充当管理页
 24+   - 这会把“浏览器适配器职责”和“系统操作台职责”混在一起
 25+   - 导致很多本应走 `conductor` 正式接口的流程,退化成“开插件页、看日志、手动点动作”
 26+
 27+补充现状:
 28+
 29+- `conductor-daemon` 已有正式接口:`/describe`、`/v1/browser`、`/v1/browser/actions`、`/v1/browser/request`、`/v1/messages`、`/v1/executions`、`/v1/sessions`、`/v1/codex/*`
 30+- 当前只有一个很窄的 HTML 状态页:`GET /v1/status/ui`
 31+- 当前真正的管理 UI 仍是插件内的 [`plugins/baa-firefox/controller.html`](../plugins/baa-firefox/controller.html)
 32+
 33+## 问题定义
 34+
 35+如果继续沿用当前结构,后续会持续出现这些问题:
 36+
 37+- 新功能虽然有 API,但没有稳定的人类操作面
 38+- “业务流程”与“平台适配细节”混在一起,任务定义越来越难写清楚
 39+- 手动验收只能从插件和 AI 页面视角做,无法从正式产品流程视角验收
 40+- 文档、任务卡、handoff 会不断把插件页误写成主入口
 41+
 42+## 结论
 43+
 44+需要新增一个正式的 `UI 模块`,但**不需要新增一个独立常驻进程**。
 45+
 46+推荐方案:
 47+
 48+- 新建前端模块:`apps/conductor-ui/`
 49+- 构建结果由 `conductor-daemon` 同源托管
 50+- 正式访问路径建议:`/app`
 51+- 插件页 `controller.html` 降级为:
 52+  - 浏览器适配调试页
 53+  - 注入 / 诊断 / 本地 bridge 自检页
 54+  - 非正式主入口
 55+
 56+不推荐方案:
 57+
 58+- 再起一个独立的 UI daemon / server 作为长期进程
 59+
 60+原因:
 61+
 62+- `conductor-daemon` 已经是唯一真相源
 63+- UI 需要读取和写入的状态全部属于 `conductor`
 64+- 再拆一个常驻进程只会增加:
 65+  - 启动顺序
 66+  - 反向代理
 67+  - 鉴权
 68+  - 状态同步
 69+  - SSE / WS 转发
 70+  - 重启和部署复杂度
 71+
 72+所以,**代码目录独立,运行时附着在 conductor**,是当前阶段最稳妥的方案。
 73+
 74+## 目标
 75+
 76+新增 UI 模块后,要同时解决两类问题:
 77+
 78+### 1. 业务能力封装
 79+
 80+让“频道”成为正式主体。
 81+
 82+目标状态:
 83+
 84+- 人通过 UI 进入频道,而不是先进入 AI 网页
 85+- 频道里挂接 Claude / ChatGPT / Gemini / Codex 等成员
 86+- 人在频道里直接发消息
 87+- conductor 负责把消息投递到目标平台 / 会话
 88+- 回复、artifact、执行结果、诊断摘要回到同一频道线程
 89+
 90+### 2. 管理能力封装
 91+
 92+让系统操作通过 UI 完成,而不是依赖插件页。
 93+
 94+目标状态:
 95+
 96+- 查看浏览器 bridge / shell runtime / 登录态
 97+- 打开、聚焦、刷新、恢复 shell 页或业务页
 98+- 触发插件动作:reload、reconnect、request_credentials
 99+- 查看最近 action result、plugin log、ingest log、artifact 入口
100+- 查看 codex / task / run 状态
101+
102+## 非目标
103+
104+这次 UI 模块规划不追求:
105+
106+- 替代浏览器侧 DOM 注入或 page-interceptor
107+- 移除 Firefox 插件
108+- 多用户权限系统
109+- 独立公网部署的前端站点
110+- 先做复杂的实时协同编辑
111+
112+需要明确:
113+
114+- UI 的职责是“正式人类操作面”
115+- 插件的职责仍是“浏览器适配层”
116+- ChatGPT / Claude / Gemini 的页面 DOM 注入能力仍然保留,因为平台投递和观察本来就依赖它
117+
118+## 架构分层
119+
120+新增 UI 后,系统职责应固定为三层:
121+
122+### 1. `conductor-daemon`
123+
124+职责:
125+
126+- 唯一真相源
127+- 业务编排
128+- 状态汇总
129+- artifact / logs / channel / codex / browser API
130+- UI 静态资源托管
131+
132+### 2. `conductor-ui`
133+
134+职责:
135+
136+- 正式人类入口
137+- 业务工作台
138+- 系统管理台
139+- 读写正式 HTTP API
140+
141+### 3. `baa-firefox`
142+
143+职责:
144+
145+- 平台登录态元数据维护
146+- shell 页与业务页收口
147+- page-context request / final-message / proxy delivery
148+- DOM fallback delivery
149+- 诊断日志
150+
151+## UI 模块落位
152+
153+建议目录:
154+
155+```text
156+apps/
157+  conductor-ui/
158+    src/
159+    public/
160+    package.json
161+```
162+
163+建议运行模式:
164+
165+- 开发态:`conductor-ui` 可跑独立 dev server,并代理到 `http://100.71.210.78:4317`
166+- 生产态:构建成静态资源,由 `conductor-daemon` 提供 `/app`
167+
168+建议正式入口:
169+
170+- `GET /app`
171+- 保留 `GET /v1/status/ui` 作为只读健康页,不与新 UI 混用
172+
173+## UI 信息架构
174+
175+首版建议只做两个一级工作区:
176+
177+### 1. `Channels`
178+
179+这是正式业务入口。
180+
181+需要承载:
182+
183+- 频道列表
184+- 频道详情
185+- 频道消息流
186+- 添加 / 移除成员
187+- 直接发消息
188+- 查看回复、artifact、执行结果
189+- 最近关联页面或 route 摘要
190+
191+### 2. `Control`
192+
193+这是正式管理入口。
194+
195+需要承载:
196+
197+- 浏览器 bridge 状态
198+- shell runtime
199+- 平台登录态
200+- 插件动作
201+- 打开 / 刷新 / 恢复标签页
202+- diagnostics / logs / recent action result
203+
204+首版不建议一开始就拆太多一级导航。`Artifacts`、`Codex`、`Diagnostics` 可以先作为二级页或抽屉,再决定是否升级为一级模块。
205+
206+## 领域模型调整
207+
208+做 UI 之后,必须把“频道”从概念提升为 `conductor` 正式领域模型。
209+
210+当前状态:
211+
212+- `baa-conductor` 里还没有旧版 `baa-server` 那种完整的 `/channels/*` 面
213+- 现在更多是 browser / artifact / task / codex 的能力集合
214+
215+目标状态:
216+
217+- 频道是人类和 AI 的正式协作单元
218+- platform conversation / browser route / artifact session 都是频道的从属或关联对象
219+- 人类主路径是“进入频道并操作”,不是“进入平台页面并操作”
220+
221+## 做了 UI 之后必须调整的流程
222+
223+### 1. 人类操作流程
224+
225+当前:
226+
227+- 插件页是事实上的操作台
228+- AI 页面承担部分业务入口
229+
230+调整后:
231+
232+- UI 是唯一正式人类入口
233+- 插件页只用于浏览器侧调试
234+- AI 页面是平台承载页,不再是系统操作台
235+
236+### 2. 业务流程
237+
238+当前:
239+
240+- 很多业务动作依赖人工在不同页面之间复制、粘贴、观察
241+
242+调整后:
243+
244+- 从频道发起消息
245+- conductor 选择目标成员与投递路径
246+- 平台回复回流到频道
247+- artifact 结果附着在频道上下文中
248+
249+### 3. 管理流程
250+
251+当前:
252+
253+- reload / reconnect / restore / 打开新页面等动作大多从插件页执行
254+
255+调整后:
256+
257+- 这些动作通过 UI 调用 `POST /v1/browser/actions`
258+- 插件只负责执行与回传结构化结果
259+
260+### 4. 手动验收流程
261+
262+当前:
263+
264+- 主要从插件和 AI 页面视角验收
265+
266+调整后需要拆成两层:
267+
268+1. 平台适配验收
269+   - 仍检查 DOM 注入、page-interceptor、final-message、plugin log
270+2. UI 业务流验收
271+   - 从频道视角发消息
272+   - 看消息是否进入频道
273+   - 看回复 / artifact / 执行结果是否回到频道
274+
275+### 5. 文档流程
276+
277+做了 UI 之后,需要统一修正文档口径:
278+
279+- `README.md`
280+  - 正式人类入口改为 `/app`
281+- `HANDOFF.md`
282+  - 插件页降级为 debug 页
283+- 浏览器相关任务卡模板
284+  - 增加“是否影响 UI 业务流”验收项
285+- 手动验收清单
286+  - 增加 UI 业务流验收步骤
287+
288+## 后端需要补的正式能力
289+
290+### 1. `UI bootstrap` 读面
291+
292+建议新增:
293+
294+- `GET /v1/ui/bootstrap`
295+
296+用途:
297+
298+- 一次返回首页需要的聚合数据
299+- 避免 UI 首屏发太多散请求
300+
301+建议包含:
302+
303+- system status
304+- browser summary
305+- recent action results
306+- recent tasks / runs
307+- recent artifacts
308+- feature flags / capability summary
309+
310+### 2. `UI event stream`
311+
312+建议新增:
313+
314+- `GET /v1/events/stream`
315+
316+用途:
317+
318+- 向 UI 统一推送:
319+  - browser status 变化
320+  - action result
321+  - task / run 更新
322+  - channel 新消息
323+  - ingest 完成事件
324+
325+### 3. `channels` 正式接口
326+
327+建议新增正式面:
328+
329+- `GET /v1/channels`
330+- `POST /v1/channels`
331+- `GET /v1/channels/:channel_id`
332+- `PATCH /v1/channels/:channel_id`
333+- `DELETE /v1/channels/:channel_id`
334+- `GET /v1/channels/:channel_id/messages`
335+- `POST /v1/channels/:channel_id/messages`
336+- `GET /v1/channels/:channel_id/messages/stream`
337+- `GET /v1/channels/:channel_id/members`
338+- `POST /v1/channels/:channel_id/members`
339+- `DELETE /v1/channels/:channel_id/members/:member_id`
340+
341+### 4. 结构化日志读面
342+
343+建议新增:
344+
345+- `GET /v1/logs/plugin`
346+- `GET /v1/logs/ingest`
347+
348+原因:
349+
350+- UI 不应直接读取 `logs/` 目录
351+- `baa-plugin` / `baa-ingest` 需要正式 HTTP 读面才能接入 UI
352+
353+### 5. 现有接口复用
354+
355+以下接口应直接复用,不另起炉灶:
356+
357+- `GET /v1/browser`
358+- `POST /v1/browser/actions`
359+- `POST /v1/browser/request`
360+- `GET /v1/messages`
361+- `GET /v1/executions`
362+- `GET /v1/sessions`
363+- `GET /v1/codex/*`
364+
365+## 旧入口职责收缩
366+
367+### `plugins/baa-firefox/controller.html`
368+
369+收缩后定位:
370+
371+- 插件内调试页
372+- bridge / 注入 / 日志 / 自检工具页
373+
374+不再作为:
375+
376+- 正式系统操作台
377+- 正式业务入口
378+
379+### `GET /v1/status/ui`
380+
381+保留定位:
382+
383+- 极简健康页
384+- 只读状态页
385+
386+不扩展为:
387+
388+- 完整业务与管理 UI
389+
390+## 分阶段落地建议
391+
392+### Phase 1:定边界
393+
394+- 新建 `CONDUCTOR_UI_MODULE_REQUIREMENTS.md`
395+- 固定“代码独立、运行附着 conductor”的架构结论
396+- 固定 `/app` 为正式入口
397+- 固定“频道是主体,插件页降级为 debug 页”的口径
398+
399+### Phase 2:补后端读写面
400+
401+- `GET /v1/ui/bootstrap`
402+- `GET /v1/events/stream`
403+- `/v1/channels/*`
404+- `/v1/logs/plugin`
405+- `/v1/logs/ingest`
406+
407+### Phase 3:首版 UI 壳
408+
409+- `Overview`
410+- `Channels`
411+- `Control`
412+
413+### Phase 4:把人工操作迁移到 UI
414+
415+- 浏览器动作从 UI 触发
416+- 状态读取从 UI 汇总
417+- diagnostics 在 UI 内可读
418+
419+### Phase 5:收缩插件页职责
420+
421+- 更新文档
422+- 更新任务模板
423+- 更新手动验收模板
424+
425+## 验收标准
426+
427+当 UI 模块正式落地时,至少要满足以下标准:
428+
429+### 业务面
430+
431+- 人可以从 UI 创建频道
432+- 人可以在 UI 中给频道发消息
433+- 频道成员可包含 Claude / ChatGPT / Gemini / Codex
434+- AI 回复与执行结果回到同一频道线程
435+
436+### 管理面
437+
438+- 人可以从 UI 查看浏览器 bridge 状态
439+- 人可以从 UI 执行 tab open / reload / restore / reconnect 等动作
440+- 人可以从 UI 看到最近 action result 和日志摘要
441+
442+### 流程面
443+
444+- 日常操作不再依赖插件 `controller.html`
445+- 手动验收文档不再只写“插件页步骤”
446+- `README` / `HANDOFF` / 任务卡模板的口径一致
447+
448+## 风险与注意事项
449+
450+### 1. 不要把 UI 做成另一个真相源
451+
452+UI 只能消费和调用 `conductor` 正式接口,不能在前端自己定义一套业务事实。
453+
454+### 2. 不要把插件页继续做大
455+
456+如果一边做 UI,一边继续给 `controller.html` 堆管理功能,最后只会有两个半成品入口。
457+
458+### 3. 不要误判 DOM 注入会消失
459+
460+UI 让人类操作解耦,但不意味着 ChatGPT / Claude / Gemini 的平台适配会消失。
461+
462+### 4. 频道模型不要直接照抄旧 `baa-server`
463+
464+旧版思路可参考,但当前 `baa-conductor` 的真相源、artifact、browser route、codex 能力面都不同,需要重新抽象。
465+
466+## 开放问题
467+
468+当前仍需后续明确的问题:
469+
470+1. 频道消息的存储是否直接复用现有 artifact / db 模块,还是新建独立表
471+2. UI 是否需要登录与 token 机制,还是先仅提供本地可信环境访问
472+3. channel member 的最小模型如何定义
473+4. browser route、conversation、artifact session 与 channel 的关联模型如何落表
474+5. `/v1/events/stream` 是统一 SSE 还是按模块拆分
475+
476+## 下一步
477+
478+这份文档确认后,下一步应做的不是直接写前端,而是先拆成两类落地任务:
479+
480+1. 后端模型与接口任务
481+2. UI 模块实现任务
482+
483+建议在开始编码前,先补一轮更细的任务分解文档,把:
484+
485+- API 合同
486+- channel 数据模型
487+- UI 首版页面结构
488+- 手动验收口径
489+
490+全部写清楚。